BindMPNN
BindMPNN provides LigandMPNN-compatible and ProteinMPNN-compatible checkpoints for amino-acid sequence design from protein structures. Use them with the official LigandMPNN implementation; the model options and examples for each architecture are given below.
LigandMPNN-compatible checkpoints
| Checkpoint | Backbone noise level | Protein neighbors | Atom context size |
|---|---|---|---|
BindMPNN_v_32_010_25.pt |
0.10 Å | 32 | 25 |
BindMPNN_v_32_020_25.pt |
0.20 Å | 32 | 25 |
The noise level identifies the checkpoint variant; it is not the sampling temperature and does not require adding noise to your input structure. Both files contain inference weights and the metadata required by LigandMPNN's checkpoint loader.
Installation and download
Use a Python 3.11 environment and install LigandMPNN according to its installation instructions. For example:
git clone https://github.com/dauparas/LigandMPNN.git
cd LigandMPNN
python -m pip install -r requirements.txt
python -m pip install huggingface_hub
Download the checkpoints into this checkout:
from huggingface_hub import hf_hub_download
for filename in ("BindMPNN_v_32_010_25.pt", "BindMPNN_v_32_020_25.pt"):
hf_hub_download(
repo_id="MurrellLab/SeqGivenStruct",
filename=filename,
local_dir="checkpoints",
)
Sequence design
This example redesigns chain B of a target–binder complex while keeping the amino-acid identities of the other chains fixed:
python run.py \
--model_type ligand_mpnn \
--checkpoint_ligand_mpnn checkpoints/BindMPNN_v_32_010_25.pt \
--pdb_path complex.pdb \
--chains_to_design B \
--ligand_mpnn_use_side_chain_context 1 \
--temperature 0.1 \
--seed 123 \
--batch_size 1 \
--number_of_batches 8 \
--out_folder outputs/bindmpnn
Replace B with the chain you want to redesign and complex.pdb with your input structure. To use the 0.20 Å variant, change the checkpoint filename to BindMPNN_v_32_020_25.pt.
--chains_to_designspecifies the mutable chains; other chains remain fixed.--ligand_mpnn_use_side_chain_context 1exposes sidechain atoms of fixed residues as context. Use0to omit that sidechain context.--temperaturecontrols sequence sampling diversity independently of the checkpoint's noise label. The example uses 0.1; adjust it for your application.--seedcontrols reproducibility. Sequence files are written under the output folder'sseqs/directory.
These are sequence-design checkpoints. Sidechain packing uses LigandMPNN's separate packing checkpoint and options; consult the upstream documentation for that workflow and for residue-level constraints, scoring, and batching.
Programmatic loading
The checkpoint files are PyTorch dictionaries with model_state_dict, num_edges, atom_context_num, and noise_level. A compatible loader can use:
import torch
checkpoint = torch.load(
"checkpoints/BindMPNN_v_32_010_25.pt",
map_location="cpu",
weights_only=True,
)
# Instantiate the upstream ProteinMPNN with model_type="ligand_mpnn",
# k_neighbors=checkpoint["num_edges"], and
# atom_context_num=checkpoint["atom_context_num"], then:
# model.load_state_dict(checkpoint["model_state_dict"], strict=True)
ProteinMPNN-compatible checkpoints
These additional BindMPNN checkpoints use the ProteinMPNN architecture and can be loaded through the soluble_mpnn or protein_mpnn model options in the official LigandMPNN repository.
| Checkpoint | Backbone noise level | Protein neighbors |
|---|---|---|
BindMPNN_soluble_v_48_010.pt |
0.10 Å | 48 |
BindMPNN_soluble_v_48_020.pt |
0.20 Å | 48 |
Download them with:
from huggingface_hub import hf_hub_download
for filename in ("BindMPNN_soluble_v_48_010.pt", "BindMPNN_soluble_v_48_020.pt"):
hf_hub_download(
repo_id="MurrellLab/SeqGivenStruct",
filename=filename,
local_dir="checkpoints",
)
Using the same installation described above, redesign chain B while keeping the other chains fixed:
python run.py \
--model_type soluble_mpnn \
--checkpoint_soluble_mpnn checkpoints/BindMPNN_soluble_v_48_010.pt \
--pdb_path complex.pdb \
--chains_to_design B \
--temperature 0.1 \
--seed 123 \
--batch_size 1 \
--number_of_batches 8 \
--out_folder outputs/bindmpnn_soluble
Replace the checkpoint filename with BindMPNN_soluble_v_48_020.pt for the 0.20 Å variant. Alternatively, use --model_type protein_mpnn with --checkpoint_protein_mpnn pointing to the same file.
These models use protein backbone coordinates and fixed-chain amino-acid identities. They do not accept target side-chain or nonprotein atom context; --ligand_mpnn_use_side_chain_context applies only to the LigandMPNN-compatible checkpoints above. Noise labels identify checkpoint variants and are independent of sampling temperature.
For programmatic loading, use torch.load(path, map_location="cpu", weights_only=True), instantiate the upstream ProteinMPNN with model_type="soluble_mpnn" and k_neighbors=checkpoint["num_edges"], then load checkpoint["model_state_dict"] strictly. The files contain only inference weights, num_edges, and noise_level.
Attribution
Please acknowledge the corresponding upstream implementations: LigandMPNN and ProteinMPNN.