RFD4-Proteina protein design

Design proteins, binders, enzymes and antibodies from a short condition spec.

✓ NVIDIA CUDABSD-3-Clauseupstream ↗
$ moldesk install rfd4-proteina

New to MoleculeDesk? Get the CLI first: curl -fsSL https://moleculedesk.com/install.sh | sh

2.7 min
per run
NVIDIA RTX 6000 Ada Generation
$0.045
per run
RTX 6000 Ada Generation at $0.99/hour
2.3 GiB
peak GPU memory
RTX 6000 Ada Generation, test input
22
runs per GPU-hour
RTX 6000 Ada Generation
How we measured ↓

Overview

RFD4-Proteina is a flow-matching design model from the Institute for Protein Design (Baker Lab) and NVIDIA. From a short YAML or JSON condition spec it generates proteins, protein and DNA binders, enzymes around a catalytic site, pockets around a small molecule, and antibody loops, with sequence and all-atom structure produced together.

Status: available. It has been run end to end on Runpod (an RTX 6000 Ada and an L40S Pod, 2026-10-26): a 100-residue monomer took about 2.7 minutes and roughly $0.05, and a PD-L1 binder run with four designs about 4 minutes and $0.07, including install and download. Larger designs, a local Linux install and offline operation are not verified yet. See Verification status.

Requirements and license

Packagerfd4-proteina 0.0.3 (PyPI wheel, pinned with the full dependency closure)
PythonManaged 3.12
PlatformLinux x64 + NVIDIA; CUDA 12 build (torch 2.14.1+cu126). No CPU, macOS, AMD or Blackwell support
Weightsconfig.json and model.safetensors (about 1.7 GB), downloaded and hash-checked at install
Disk / VRAMAbout 17.5 GiB of disk growth and 2.3 GiB of GPU memory for a 100-residue monomer on Runpod (see the benchmarks below); RAM and larger designs are not measured yet
InputA .yaml, .yml or .json condition spec plus the CIF/BinaryCIF files it names
ResultsOne mmCIF per design and replicate, the resolved spec, and a summary

BSD-3-Clause for both the code and the weights. Upstream lists A100, H100/H200, L40S and RTX 6000 Ada among its tested GPUs; A40, RTX 3090/4090 and the A5000/A6000 are not on that list, so the Runpod profile only quotes the listed GPUs.

Run it on Runpod

moldesk run rfd4-proteina design.yaml --compute runpod --cache-policy ephemeral \
  --max-budget 3 --max-lifetime 3600 --accept-file-upload

The Pod downloads the runtime and the 1.7 GB weights each time, so there is nothing to install locally and nothing is kept afterwards. Structure files named in your spec are uploaded to the Pod, which is why the run needs --accept-file-upload. Read the Runpod guide for the other acknowledgments and limits.

A condition spec

binder:
  input: pdl1.cif            # a CIF in the same folder as this file
  contig: "50-120, /0, A17-131"   # a new 50-120 residue chain, then the target
  conditions:
    C_CRDGRP: {1: [{select: "sel('A/*/*/[N,CA,C,O]')"}]}
    C_SEQ: {true: [{select: "sel('A')"}]}
    C_HOT: {true: [{select: "sel('A/*/56/[CG,OH]')"}]}
moldesk run rfd4-proteina binder.yaml --param numReplicates=4 --param seed=42

Each top-level key is a design. global_args holds defaults shared by every design. The grammar for contig and conditions is upstream's: see its YAML/JSON reference.

MoleculeDesk checks the spec before anything runs and is stricter than upstream in a few places:

  • Structure files must be relative paths inside the spec's own folder (no .., no absolute paths), with a CIF or BinaryCIF suffix. They are copied into the run, checksummed, and handed to the model as staged copies. PDB files are not accepted.
  • Only the four documented fields are allowed, at most 8 designs and 16 distinct structure files per spec. Design names become file names (letters, digits, _, -).
  • The spec is read as YAML 1.2 and passed to the model as a resolved JSON file, so what was validated is exactly what runs. YAML aliases, merge keys, custom tags and duplicate keys are rejected.

Parameters

--paramMeaning
numReplicatesDesigns per spec entry, integer 1-32 (default 1)
batchSizeDesigns generated at once, integer 1-8 (default 1)
seedInteger 0-4294967295; a random seed is chosen first and recorded in run.json when omitted
recyclethinking_low, thinking_medium (default) or thinking_high
compiletrue enables torch.compile length buckets; the default skips the warm-up

Other upstream settings are not exposed. A run needs a working CUDA GPU; there is no CPU fallback.

RFD4-Proteina benchmarks: speed, VRAM and cost per run

On an NVIDIA RTX 6000 Ada Generation, RFD4-Proteina takes about 2.7 min per run once warm (2.7 min on the first run), roughly 22 runs per GPU-hour, or about $0.045 per run.

RFD4-Proteina on NVIDIA RTX 6000 Ada Generation (48 GiB), measured with MoleculeDesk fc3282b (uncommitted working tree)
MetricNVIDIA RTX 6000 Ada Generation
Time per run, first (cold)2.7 min
Time per run, warm2.7 min
Runs per GPU-hour22
Cost per run, first (cold)$0.045
Cost per run, warm$0.045
Peak GPU memory2.3 GiB
Peak GPU utilization—
Peak GPU power—
Install time—
Disk per install18 GiB

Workload: One unconditioned 100-residue monomer (examples/rfd4-proteina/monomer.yaml), 1 design, recycle=thinking_low, seed 42, run with `--compute runpod --cache-policy ephemeral`. Median of 3 runs.

Machine: RunPod GPU pod started by `moldesk run --compute runpod` (ephemeral), Linux x64, US-WA-1; not recorded; driver 595.91.07.

Cost: at $0.99/GPU-hour (RunPod catalog price shown in the quote on 2026-10-26, compute only); excludes storage and idle time.

Cloud ephemeral runs rebuild the environment every time, so there is no true warm state: each time is the whole run from provisioning the Pod to results on your machine (162 s, 155 s, 171 s; the warm figure is the mean of runs 2 and 3). It covers installing the pinned PyTorch 2.14 CUDA 12.6 environment (167 packages), downloading the 1.74 GB weights, loading the model and generating; generation itself took 11-13 s for one design. Install time is not measured separately. Disk is the peak growth of the Pod's disk (17.7 GiB used at peak, 40 GiB provisioned). Four designs in one run (numReplicates=4) took 175 s on the same GPU type (US-IL-1), about 13 s more than one design, so the fixed setup dominates short jobs. Same seed gave identical coordinates in two runs. Peak GPU memory comes from the worker's probe; utilization and power are not recorded in cloud runs. Larger targets and longer designs need more time and memory than this smoke-test input.

On an NVIDIA L40S, RFD4-Proteina takes about 4.0 min per run once warm (5.1 min on the first run), roughly 14 runs per GPU-hour, or about $0.074 per run.

RFD4-Proteina on NVIDIA L40S (45 GiB), measured with MoleculeDesk fc3282b (uncommitted working tree)
MetricNVIDIA L40S
Time per run, first (cold)5.1 min
Time per run, warm4.0 min
Runs per GPU-hour14
Cost per run, first (cold)$0.093
Cost per run, warm$0.074
Peak GPU memory4.3 GiB
Peak GPU utilization—
Peak GPU power—
Install time—
Disk per install18 GiB

Workload: PD-L1 binder (examples/rfd4-proteina/pdl1-binder/binder.yaml, upstream's example: 5O45 chain A residues 17-131, three hotspots), 4 designs in one batch (numReplicates=4, batchSize=4), default recycling, seed 42, run with `--compute runpod --cache-policy ephemeral`. Median of 3 runs.

Machine: RunPod GPU pod started by `moldesk run --compute runpod` (ephemeral), Linux x64, EU-NL-1; not recorded; driver 595.91.07.

Cost: at $1.09/GPU-hour (RunPod catalog price shown in the quote on 2026-10-26, compute only); excludes storage and idle time.

One run makes four designs, so the cost per design is about a quarter of the cost per run: roughly $0.02 per design ($0.09 for the first run, $0.07 after). Runs took 308 s, 239 s and 248 s; the warm figure is the mean of runs 2 and 3, and every run installs the environment from scratch. Generating the four designs took about 1 minute of that. All three runs produced identical coordinates for all four designs. Eight designs in one batch (numReplicates=8, batchSize=8, the setting in upstream's cookbook) took 302 s on an L40S in EUR-IS-2 (about $0.09, or $0.012 per design), with generation taking 118 s and peak GPU memory 7.1 GiB; that was a single run. Peak GPU memory is from the worker's probe; this target (115 residues plus a 50-120 residue binder) is still small, so larger complexes need more.

Example: design a binder to PD-L1

Result in short: RFD4-Proteina designed four new PD-L1-binding protein candidates in about 4 minutes for roughly $0.07 on a rented NVIDIA L40S ($1.09/hour), including installing the model and downloading the results. Eight designs (upstream's cookbook setting) took about 5 minutes and $0.09. In all four, the new chain reaches the three requested hotspot residues of PD-L1 (every hotspot atom is within about 5 Å) with no atomic clashes. Nothing here has been tested in a lab.

This is the example from upstream's Design a binder in 10 lines: the target is PD-L1 chain A (residues 17-131 of PDB 5O45), the binder is a new chain of 50-120 residues, and three target residues are marked as hotspots. The files are in examples/rfd4-proteina/pdl1-binder.

binder:
  input: 5o45_cropped.cif.zst
  contig: "50-120, /0, A17-131"
  conditions:
    C_CRDGRP: {1: [{select: "sel('A/*/*/[N,CA,C,O]')"}]}
    C_SEQ: {true: [{select: "sel('A')"}]}
    C_HOT:
      true:
        - {select: "sel('A/*/56/[CG,OH]')"}
        - {select: "sel('A/*/115/[CG,SD]')"}
        - {select: "sel('A/*/123/[CD2,OH]')"}
moldesk run rfd4-proteina binder.yaml --compute runpod --cache-policy ephemeral \
  --max-budget 3 --max-lifetime 3600 --accept-file-upload \
  --param numReplicates=4 --param batchSize=4 --param seed=42

A shorter walkthrough with an interactive 3D view of the results is in the guide Design a PD-L1 binder with RFD4-Proteina on a cloud GPU.

How long did it take and what did it cost?

First runRuns 2 and 3
Wall time (Pod start to results on your machine)308 s239 s and 248 s
Cost at $1.09/hour (GPU compute only)$0.093about $0.07
Peak GPU memory4.3 GiB4.3 GiB
Pod disk used17.5 GiB of 40 GiB17.5 GiB of 40 GiB

Generating the four designs took about a minute; the rest is installing the pinned environment and downloading the 1.7 GB weights, which an ephemeral run repeats every time. That fixed setup is why four designs cost only a little more than one (a single design took 155-171 s on an RTX 6000 Ada at $0.99/hour, about $0.045).

What did it produce?

Four complexes (binder_0 to binder_3), each with the unchanged PD-L1 chain A plus a new chain B. The numbers below were measured on the returned structures; target residues are renumbered 1-115 in the output, so the hotspots 56, 115 and 123 appear as 40, 99 and 107.

DesignBinder lengthBinder residues within 4.5 Å of PD-L1PD-L1 residues within 4.5 Å of the binderClosest binder atom to each hotspot atom
binder_010314152.8 to 4.5 Å
binder_1999132.3 to 4.6 Å
binder_27320222.4 to 5.1 Å
binder_39920243.1 to 5.3 Å
binder_0  QLTQPSSVSGSVGDRVTITCRASQSVSSYLAWYQQKPGKAPKLLIYDASSLESGVPSRFSGFGYGTDFTLTISSLQPEDVAVYYCQQYRHSPWTFGQGTKLEI
binder_1  PTVDVPSSLSVKEGETATLPCTVTASETAIYQVTWYKDGSKLLKKFDPTLLLSGESKTFPLNLNSVTLADSGVYTCKVEDLTSSNPPVEKNTTLTVLPP
binder_2  SSMYQVSLFVESPSSSSAHVKEVEASSPAEAIEKVAAEEKIHAPLNYITDTSDFAHAKAKQGDTHYHLFADLL
binder_3  SISITSISASSTSVSLTLHNSSSTSKTLLIKIEKIKSEGSELVYEKSVTLSAHSTETYTIPFSDFTSPPEPDTLYRVSIFEVDGTTETEVAAGLFTVPS

All three runs produced identical coordinates for all four designs, so a seed reproduces a result. No atoms of the binder come closer than 2.2 Å to the target. The sequences differ a lot in character: binder_0 resembles an antibody light-chain variable domain, while binder_3 is rich in serine and threonine, which is a reason to filter designs before ordering any.

What happens with 8 designs, as in upstream's cookbook?

Upstream's cookbook recipe asks for 8 designs per input. Running the same spec with --param numReplicates=8 --param batchSize=8 took 302 s and cost about $0.09 on an L40S (a single run): generation took 118 s, twice the 58 s for four, so each extra design costs about 15 seconds of GPU time while the roughly three-minute setup stays the same. That is about $0.012 per design. Peak GPU memory rose from 4.3 to 7.1 GiB because the designs are generated together; disk use stayed at 17.5 GiB. The eight designs are a different sample from the four above (the batch size changes the random draws), so binder_0 here is not the same structure as binder_0 there.

DesignBinder lengthBinder residues within 4.5 Å of PD-L1PD-L1 residues within 4.5 Å of the binderClosest binder atom to each hotspot atomClosest binder-target atom pair
binder_010313153.0 to 4.5 Å2.2 Å or more
binder_19918172.4 to 4.5 Å1.86 Å
binder_27315182.7 to 4.6 Å2.2 Å or more
binder_39915162.5 to 5.0 Å2.2 Å or more
binder_410416152.9 to 4.5 Å2.2 Å or more
binder_511911172.8 to 4.9 Å2.2 Å or more
binder_68414193.3 to 5.0 Å2.2 Å or more
binder_78718173.4 to 4.7 Å2.19 Å

Six of the eight have no atom pair closer than 2.2 Å. binder_1 has a PD-L1 glutamate oxygen 1.86 Å from a tyrosine hydroxyl of the binder, which is too close for a relaxed structure, and binder_7 has a PD-L1 arginine nitrogen 2.19 Å from a backbone oxygen of a binder lysine. Every design still reaches all six hotspot atoms (within 5.0 Å). A real selection step would drop or relax designs like these before refolding.

binder_0  QLTQPSSVSGSVGDRVTITCRASQSISSYLAWYQQKPGKAPKLLIYDASSLESGVPSRFSGFGYGTDFTLTISSLQPEDVAVYYCQQYYSLRTFGQGTKVEIK
binder_1  SMTPMITYITTFPETLSVKEGENATITCAWEVNPYSSALKYTVEWYKDGKLLKSYSDVSSRTSSLTLTSVTLADSGMYTCKVTLGNDAKTSAPTTLTVL
binder_2  SMFDQILEQFNSSAQPFLERVLTQYKEGKVEDAVSNVLTLASYFPDTFSSLGEQATKILTADQFINALTSLVS
binder_3  TTLPSVGETVTLTVYDSDRDETHEITGTVESVSVDGDTVYVDVKVPASDSVLLKPGTTVTVSASSGVTIENATVTDFSSVDSTHITVHLSASLSDVSMS
binder_4  SALTQPSSVSGSVGDRVTISCSGSSSNIGSNYVQWYQQKPGQAPTLLIAFNNKRESGVPDRFSGSKSGTSASLTISGLQPEDEADYYCHTLSSSFGGGTKLTVL
binder_5  SVSSVDLGDHIGFQTYFEALLPHLKALEPGDTLKVTATIILTNADLTSLNTLLEEGSLTYTFEDGSVLSLTLDSRDGSTLHTSGTLDLPNGMSFSVESTLNYDSEKETVDVDATYTRQP
binder_6  SSMLTIKINGSEKLFSSTEVGESVTFTAHVDGKEVTAHWKVYLGDELVFEDEAPTITFTPKSSGLYRVKVSHGSLETYALLHVT
binder_7  VTATVGQTVTLTCPFSKPDGSTTEPTVTWEKDGSPVSGSRFTITTHSDNTSTLTITSVQLADTGTYTCSSTYGTDTTKMNFTLTVNS

Upstream's recipe also sets recycle_strategy=medium/front_loaded and scores the designs with refolding. MoleculeDesk uses its default recycling preset (thinking_medium) and runs no scoring, so these eight are an unfiltered batch rather than a ranked shortlist.

What does this not tell you?

This run generated structures only: there was no metrics step, so no refolding with AlphaFold or OpenFold3, no binding-energy estimate and no experimental test. Closeness to the hotspots and the absence of clashes are geometric checks, not evidence that a design binds PD-L1. Upstream's own workflow refolds and scores many more designs (its cookbook uses 8 per input) before picking candidates.

Which GPU should I use?

The profile quotes only the GPUs upstream lists as tested. In this test an RTX 6000 Ada ($0.99/hour) and an L40S ($1.09/hour) both ran successfully; A100, H100 and H200 are allowed but were not run. Designs of this size use under 5 GiB of GPU memory, so a 48 GB card is more than enough.

Results

Each design and replicate produces inference_samples/<design>_<i>/<design>_<i>_generated.cif. A run succeeds only if every design has exactly the requested number of structures and each file has a data block and an _atom_site loop of finite coordinates. moldesk-spec.json records the resolved spec and moldesk-summary.json the parameters and atom counts. Generated structures open in an automatic 3D report. These are computational candidates; binding and function need experimental validation.

Not included

Reward-guided search, refolding and other metrics need an AlphaFold2 or OpenFold3 oracle environment (container images of 6-16 GB) and are not part of this integration. Annotated-CIF-only input, partial diffusion as a separate option, and CUDA 13 are also not supported yet.

Dual use

This model can design binders to arbitrary targets, and MoleculeDesk performs no biosecurity screening of what it generates. The upstream Hugging Face Spaces screen designs with SecureDNA; the command-line tool does not. Screening generated sequences before ordering or sharing them is your responsibility.

Verification status

Verified on 2026-10-26 with moldesk run rfd4-proteina examples/rfd4-proteina/monomer.yaml --compute runpod:

  • Install and generation on Runpod: a clean install of the pinned environment (torch 2.14.1+cu126), the two weights files and a generation succeeded on an RTX 6000 Ada Pod (four runs, US-WA-1 and US-IL-1). The output was a valid mmCIF (793 atoms) with the expected inference_samples/<design>_<i>/ layout, and a 4-design run returned four structures. Pods and volumes were gone after every run.
  • Binder design: the upstream PD-L1 example (three hotspots, a target uploaded as .cif.zst) ran on an L40S Pod three times and returned four complexes each time, with identical coordinates in every run; the hotspot and clash checks are in the example above.
  • Reproducibility: runs with the same seed produced identical coordinates.
  • Pinned hashes: the first install attempt on an L40S Pod was rejected because triton 3.8.0 is published on both PyPI and the PyTorch index with different files; the manifest now carries the index's hashes.

Not verified yet: a local moldesk install on a Linux machine, generation with the network disabled (the runtime sets the offline variables, but the Pod had network access), cancelling a run, enzyme, antibody and other conditioned specs, designs against targets much larger than PD-L1, A100/H100/H200 GPUs, and Blackwell GPUs. The repository's models/rfd4-proteina/README.md lists each open gate and the pinned versions and hashes.