Bioinformatics tools running on modal.
pip install modal
python3 -m modal setupOr alternatively, use uv, e.g.:
uv run --with modal modal run modal_minimap2.pySorted alphabetically.
- AF2Rank — structure ranking via AF2 prediction
- AFDesign — peptide/binder design via AlphaFold2
- AlphaFold-Multimer — multimer structure prediction
- ANARCI — antibody sequence annotation
- BindCraft — protein binder design
- Boltz — AF3-like open structure prediction
- BoltzGen — generative structure model
- Chai-1 — AF3-like open structure prediction
- DiffDock — small molecule docking
- ESM2 — masked amino acid prediction
- ESMFold2 — single-sequence / complex structure prediction
- ESMFold2 binder design — gradient-guided sequence-only binder design
- FASPR — side-chain packing
- Germinal — binder design
- IgGM — antibody design
- LigandMPNN — protein sequence design conditioned on ligands
- mBER — VHH nanobody design
- minimap2 — short-read alignment
- nextflow — nextflow hello-world image
- pdb2png — PDB → PNG rendering via pymol
- Protenix — AF3 reproduction
- RSO — Rejection Sampling Optimization binder design
- SASA — solvent-accessible surface area
- tmol — GPU Rosetta energy scoring
- USalign — TM-score / RMSD structural alignment
wget https://files.rcsb.org/download/1YWI.pdb
uv run --with modal modal run modal_af2rank.py --input-pdb 1YWI.pdb --run-name 1YWICreate a cyclic peptide against a pdb file (using pdb-redo data by default)
uv run --with modal modal run modal_afdesign.py --pdb 4MZK --target-chain ASet the first and last amino acid of the (cyclic) peptide to cysteine.
Here using a small number of iterations for speed reasons...
Use --soft-iters 30 --hard-iters 6 or more for better results.
uv run --with modal modal run modal_afdesign.py --pdb 1A00 --target-chain A --soft-iters 2 --hard-iters 2 --binder-len 6 --set-fixed-aas C....CCreate a linear peptide against a local PDB file that has been manually edited. This is unfortunately sometimes necessary when e.g. a chain is too long or there are too many chains.
uv run --with modal modal run modal_afdesign.py --pdb in/afdesign/1igy_cropped.fixed.pdb --target-chain BA very basic implementation.
wget https://www.rcsb.org/fasta/entry/3NIT -O 3NIT.faa
uv run --with modal modal run modal_alphafold.py --input-faa 3NIT.faaA tool for annotating antibody sequences https://github.com/oxpig/ANARCI
printf '>test_anarci\nDIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLESGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRT\n' > test_anarci.faa
uv run --with modal modal run modal_anarci.py --input-faa test_anarci.faaBasic PDL1 binder (example from https://github.com/martinpacesa/BindCraft)
wget https://raw.githubusercontent.com/martinpacesa/BindCraft/refs/heads/main/example/PDL1.pdb
GPU=A100 uv run --with modal modal run modal_bindcraft.py --input-pdb PDL1.pdb --number-of-final-designs 1Boltz, an open source AlphaFold 3-like model.
printf 'sequences:\n - protein:\n id: A\n sequence: TDKLIFGKGTRVTVEP\n' > test_boltz.yaml
uv run --with modal modal run modal_boltz.py --input-yaml test_boltz.yaml --params-str "--seed 42"BoltzGen, generative model for biomolecular structures.
wget https://raw.githubusercontent.com/HannesStark/boltzgen/refs/heads/main/example/vanilla_protein/1g13.cif
wget https://raw.githubusercontent.com/HannesStark/boltzgen/refs/heads/main/example/vanilla_protein/1g13prot.yaml
uv run --with modal modal run modal_boltzgen.py --input-yaml 1g13prot.yaml --num-designs 1Chai-1, another open source AlphaFold 3-like model.
printf '>protein|name=insulin\nMAWTPLLLLLLSHCTGSLSQPVLTQPTSLSASPGASARFTCTLRSGINVGTYRIYWYQQKPGSLPRYLLRYKSDSDKQGSGVPSRFSGSKDASTNAGLLLISGLQSEDEADYYCAIWYSSTS\n>RNA|name=rna\nACUGACUGGAAGUCCCCCGUAGUACCCGACG\n>ligand|name=caffeine\nN[C@@H](Cc1ccc(O)cc1)C(=O)O\n' > test_chai1.faa
uv run --with modal modal run modal_chai1.py --input-faa test_chai1.faaWARNING: DiffDock's image build is very slow (downloads ~3GB of ESM2 + DiffDock models).
Dock a .mol2 file against a local pdb file. DiffDock may require an 80GB A100 to run for larger proteins.
wget https://files.rcsb.org/download/1IGY.pdb
wget https://gist.github.com/hgbrian/393ec799893cbf518f3084847c17cb2d/raw/1IGY_example.mol2
uv run --with modal modal run modal_diffdock.py --pdb-file 1IGY.pdb --mol2-file 1IGY_example.mol2Predict the amino acid at a masked position in a sequence.
printf '>1\nMA<mask>GMT\n' > test_esm2.faa
uv run --with modal modal run modal_esm2_predict_masked.py --input-faa test_esm2.faaESMFold2 (Biohub) — single-sequence / complex
structure prediction. No MSA required (PLM-only). Multi-entity FASTA: header
type tags protein|, dna|, rna|, ligand| (SMILES for ligand) are honored.
printf '>protein|name=insulin\nGIVEQCCTSICSLYQLENYCN\n' > test_esmfold2.faa
uv run --with modal modal run modal_esmfold2.py --input-faa test_esmfold2.faaGradient-guided binder sequence design using ESMFold2 (folding/distogram) +
ESMC (LM regularization), adapted from Biohub's cookbook
binder_design.py.
Sequence-only — no target PDB or hotspots required. Built-in preset targets
(cd45, ctla4, egfr, pd-l1, pdgfr) and binder scaffolds (minibinder,
trastuzumab_framework_vhvl, atezolizumab_framework_vhvl, ocankitug_framework_vhvl).
# Minibinder against PD-L1 (preset target + preset scaffold)
uv run --with modal modal run modal_esmfold2_binder_design.py --target-name pd-l1 --binder-name minibinder
# Trastuzumab-framework antibody against CTLA-4
uv run --with modal modal run modal_esmfold2_binder_design.py \
--target-name ctla4 --binder-name trastuzumab_framework_vhvl --is-antibody
# Custom target + custom template ('#' = designable position)
uv run --with modal modal run modal_esmfold2_binder_design.py \
--target-sequence AFTVTVPKDLYVVEYGSNMTIECKFPVEKQLDLAALIVYWEMEDKNIIQFVHGEEDLKVQHSSYRQRARLLKDQLSLGNAALQITDVKLQDAGVYRCMISYGGADYKRITVKVNA \
--binder-sequence "############################################################"FASPR — fast and accurate side-chain packing. Repacks side chains of a PDB (requires complete main-chain atoms) and can introduce mutations via a sequence file.
wget https://files.rcsb.org/download/1CRN.pdb
uv run --with modal modal run modal_faspr.py --input-pdb 1CRN.pdbGerminal took some serious hacking to get working. It seems to work ok but buyer beware. I recommend using BoltzGen instead. Unlike some other apps here, it creates a Volume to store params instead of storing them in the image.
# Get the PD-L1 structure from RCSB PDB
wget https://files.rcsb.org/download/5O45.pdb
# Extract chain A only
grep "^ATOM.*\ A\ " 5O45.pdb > 5O45_chainA.pdb
# Create target configuration file
cat > target_example.yaml << 'EOF'
target_name: "5O45"
target_pdb_path: "5O45_chainA.pdb"
target_chain: "A"
binder_chain: "B"
target_hotspots: "A19,A20,A21,A22"
length: 129
EOF
# Run minimal test (1 trajectory, 1 passing design)
uv run --with modal --with PyYAML modal run modal_germinal.py --target-yaml target_example.yaml --max-trajectories 1 --max-passing-designs 1IgGM, antibody design model.
wget https://files.rcsb.org/download/5O45.pdb
printf '>H\nEVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVSAISSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDRLSITIRPRYYGLDVWGQGTTVTVSS\n>L\nDIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRT\n>A\n' > test_iggm.faa
uv run --with modal modal run modal_iggm.py --input-faa test_iggm.faa --antigen 5O45.pdb --epitope 19,20,21wget https://files.rcsb.org/download/1IVO.pdb
uv run --with modal modal run modal_ligandmpnn.py --input-pdb 1IVO.pdb --extract-chains AC --params-str '--seed 1 --checkpoint_protein_mpnn "/LigandMPNN/model_params/proteinmpnn_v_48_020.pt" --chains_to_design "C" --save_stats 1'Design VHH nanobody binders against a target protein using mBER.
wget https://files.rcsb.org/download/7STF.pdb
uv run --with modal modal run modal_mber.py --target-pdb 7STF.pdb --target-name PDL1With custom masked sequence (* = positions to design):
uv run --with modal modal run modal_mber.py --target-pdb target.pdb --target-name MyTarget \
--masked-binder-seq "EVQLVESGGGLVQPGGSLRLSCAASG*********WFRQAPGKEREF***********NADSVKGRFTISRDNAKNTLYLQMNSLRAEDTAVYYC************WGQGTLVTVSS"Runs minimap2 -ax sr <fasta> <reads>
Just a simple example of running a binary on a powerful box.
wget https://gist.githubusercontent.com/hgbrian/56787d9b3ce2e68f698ac94d537340d8/raw/mito.fasta
wget https://gist.githubusercontent.com/hgbrian/802d8094bb4fed435bbb93a8c9092ee2/raw/mito_reads.fastq
uv run --with modal modal run modal_minimap2.py --input-ref-fasta mito.fasta --input-reads-fastq mito_reads.fastqMinimal hello world app, with conda and nextflow installed (not trivial!)
uv run --with modal modal run modal_nextflow_example.pyA simple pymol-based script to convert PDBs to PNGs for easy output viewing.
wget https://files.rcsb.org/download/1YWI.pdb
uv run --with modal modal run modal_pdb2png.py --input-pdb 1YWI.pdb --protein-zoom 0.8 --protein-color 240,200,190Protenix, an open-source PyTorch reproduction of AlphaFold 3.
printf '>protein|A\nMAWTPLLLLLLSHCTGSLSQPVLTQPTSLSASPGASARFTCTLRSGINVGTYRIYWYQQKPGSLPRYLLRYKSDSDKQQGSGVPSRFSGSKDASTNAGLLLISGLQSEDEADYYCAIWYSSTS\n' > test_protenix.faa
uv run --with modal modal run modal_protenix.py --input-faa test_protenix.faa --seeds 42 --no-use-msaDesign binders using RSO (Rejection Sampling Optimization).
wget https://files.rcsb.org/download/5O45.pdb
grep "^ATOM.*\ A\ " 5O45.pdb > 5O45_chainA.pdb
uv run --with modal modal run modal_rso.py --input-pdb 5O45_chainA.pdb --num-designs 1 --traj-iters 10 --binder-len 30dr_sasa — annotates a PDB (or CIF, auto-converted via openbabel) with per-atom SASA in the B-factor column.
wget https://files.rcsb.org/download/1CRN.pdb
uv run --with modal modal run modal_sasa.py --input-pdb 1CRN.pdb
# pymol out/sasa/<run>/1CRN.asa.pdbtmol — GPU-accelerated Rosetta beta_nov2016
energy scoring. Runs an L-BFGS Cartesian relax and (optionally) a FASPR repack
before scoring. Pass --input-dir to score every PDB in a directory in parallel.
Note: tmol requires a clean PDB (no chain breaks, no missing residues, no extra hydrogens). PDBs straight from the RCSB often need preprocessing.
modal deploy modal_faspr.py # only needed if using --faspr (default)
wget https://files.rcsb.org/download/1CRN.pdb
uv run --with modal modal run modal_tmol.py --input-pdb 1CRN.pdbUS-align — universal structural alignment (successor to TM-align). Reports TM-score and RMSD between two or more structures (PDB or CIF, proteins/RNA/DNA, monomer or complex).
wget https://files.rcsb.org/download/5O45.pdb
grep "^ATOM.*\ A\ " 5O45.pdb > 5O45_chainA.pdb
uv run --with modal modal run modal_usalign.py --pdb 5O45.pdb --vs-pdbs 5O45_chainA.pdbScore a single chain inside aligned complexes (two-step alignment):
uv run --with modal modal run modal_usalign.py --pdb 5O45.pdb --vs-pdbs 5O45_chainA.pdb --chain ABuild all images (no GPU, but slow):
uv run --with modal --with pytest pytest tests/test_build_images.py -v
uv run --with modal --with pytest pytest tests/test_build_images.py -v -k alphafold # single appRun all apps with minimal inputs (uses GPU, costs money):
uv run --with modal --with pytest pytest tests/test_quick_runs.py -v
uv run --with modal --with pytest pytest tests/test_quick_runs.py -v -k sasa # single app- RNA Seq Pipeline by @tdsone