
RFD4-Proteina
Design binders, enzymes and ligand pockets with all-atom flow matching
RFD4-Proteina 0.0.3 is an all-atom flow-matching model from the Baker Lab and NVIDIA for designing proteins around a stated condition: a binder for a target protein, a scaffold around an enzyme motif, or a pocket around a small molecule. It samples backbone, sequence and side chains together, so every design arrives with its own sequence. ProteinIQ offers a task for each common design problem, writes the condition specification from a few fields, and returns each design as an annotated CIF file.
Three workflows are available. Generate designs builds new chains from noise, Partial diffusion re-noises a supplied structure part-way and refines it, and Inverse folding keeps a supplied backbone and resamples its sequence and side chains.
The tool is in beta and runs the design step only. Metrics, refolding with the source's AlphaFold2, AlphaFold 3 and OpenFold 3 oracles, reward-guided search, and the antibody and nanobody campaign configuration are not offered. Other design models on ProteinIQ include RFdiffusion3 and Proteina-Complexa.
Each residue is described by the position of its C-alpha atom and a vector of 32 latent channels that carries its identity and side-chain atoms. An autoencoder, trained first and then frozen, defines those latents and decodes them back into atoms, so the design model works on a compact description instead of every atom.
Generation is flow matching. Both the C-alpha positions and the latents start as Gaussian noise and move toward a design over 60 sampling steps. At each step a 178-million-parameter transformer reads the noisy state and the conditions, then predicts a velocity for the positions, a velocity for the latents and a sequence readout, and an integration step applies them.
The transformer's trunk can run several times on its own output within a step. The Recycling schedule sets the passes at each of the 60 steps, and the presets total 120 to 300 passes.
After the last step the decoder turns the final positions and latents into residue types, all-atom coordinates and the set of atoms present. Each run therefore returns a sequence and a full-atom structure together, with no separate sequence design step. The Temperature settings rescale the score during integration, Sampling noise chooses stochastic or deterministic sampling, and Guidance weight scales classifier-free guidance.
Conditions enter as annotations on the starting CIF. Where one is set, the model receives the value and keeps to it; elsewhere it designs the value. Fixing a side-chain coordinate also fixes the residue's identity, because the pattern of occupied atom slots reveals the amino acid, but fixing only the backbone atoms N, CA, C and O does not. That is how a backbone is held while its sequence is redesigned.
Only protein can be designed at present. Ligands, metals and modified residues in the input are context the model is given and never generates. Partial diffusion starts the loop part-way along the trajectory from the supplied structure with noise added back, so Sampling steps is unchanged, and Inverse folding holds the backbone and resamples only the latents.
Runs cost 22 credits per minute of measured runtime. Completed runs are charged in proportion to elapsed time, rounded up to a whole credit, and unused reserved credits are returned. Charged runtime is capped at 3,300 seconds, which is 1,210 credits. Set a spending limit before submission.
The quote shown before submission is an estimate of that charge, starting at 41 credits for one design at 60 sampling steps. It allows 60 seconds for startup and model loading plus 50 seconds per design at 60 steps, scaled in proportion to Sampling steps. These figures are provisional while runtimes are measured on production hardware.
| Designs per input | 60 steps | 100 steps | 200 steps |
|---|---|---|---|
| 1 | 41 | 53 | 84 |
| 2 | 59 | 84 | 145 |
| 5 | 114 | 175 | 328 |
| 10 | 206 | 328 | 634 |
| 20 | 389 | 634 | 1,210 |
The estimate is calculated from Designs per input and Sampling steps only. Target size, contig length, workflow and recycling schedule do not change it, although they change the measured runtime that is charged. Steps other than 60 need the No schedule recycling option. Twenty designs at 200 steps reach the runtime cap, so the quote stops at 1,210 credits.
Each task takes one CIF structure, writes the condition specification from the fields below it, and follows the model's own recipe for that task. The specification it wrote is returned as input/spec.yaml, so a run can be repeated or edited under Custom conditions. A structure is a plain .cif of at most 50 MiB, uploaded or fetched from RCSB. Compressed CIF and binary CIF (.cif.gz, .bcif, .cif.zst) are not accepted; decompress them first. Account upload limits may be lower.
| Task | Structure | Fields |
|---|---|---|
| Protein binder | The target protein | Target residues, Hotspot atoms, Binder length |
| Small-molecule binder | A structure that holds the ligand with its coordinates | Ligand residue, Binder length |
| Motif scaffolding | A structure that holds the motif | Motif residues, Keep motif side chains, Scaffold length |
| Enzyme design | A structure with the catalytic residues and any ligands | Motif residues, Ligand residues, Scaffold length |
| Existing structure | The structure to refine or redesign | Refinement, Structure is an RFD4-Proteina design |
| Custom conditions | Up to 20 structures and a specification you write | The specification |
Residue numbers follow the numbering the model reads: label_seq_id for protein residues and the author residue number for ligands. Some viewers show author numbering for protein residues, which can differ; in PyMOL, set cif_use_auth, off shows the label numbers. A range such as A17-131 needs every residue of it to be present in the structure. A task refuses a structure it cannot express and names the residue, atom or ligand at fault; Custom conditions covers those cases.
The task keeps the target residues, samples a binder chain of the length range you give, and conditions the target as the model's PD-L1 example does: the target backbone as one rigid coordinate group, the target sequence, and the hotspot atoms you list. Target residues takes one contiguous range per chain, such as A17-131; blank keeps every protein chain whole, which needs chains without gaps.
Hotspot atoms are written as chain and residue, a colon and atom names, such as A56:CG,OH A115:CG,SD A123:CD2,OH, separated by spaces. The model's example uses two side-chain atoms for each of three residues.
The task keeps one ligand with its coordinates and designs one protein chain around it, the layout of the model's SAM benchmark input. The structure must contain the ligand; a SMILES string is not enough. Ligand residue names it as a chain and the author residue number, such as B386, and is needed only when the structure holds more than one ligand. Some crystallization additives, such as formate, are dropped by the model's loader and cannot be kept.
The task keeps the motif residues from one chain and samples a designed segment of the given length range before, between and after them. With Keep motif side chains on, every motif atom and its residue type are fixed. Off fixes only the backbone atoms N, CA, C and O, so the model designs the motif sequence. Each motif range must be contiguous in the structure, because the model treats a kept range as consecutive residues.
The task follows the layout of the model's M-CSA benchmark inputs. The catalytic residues from one chain are kept with their side chains, each as its own unindexed group, so the model places them anywhere in a designed scaffold of the given length range. Ligand residues keeps ligands, cofactors and metals with their coordinates, each as a chain of its own, written as chain and author residue number such as C476 D477.
The task runs the chosen workflow on the whole structure. Partial diffusion re-noises it part-way, and the partial diffusion settings choose how far. Inverse folding keeps the backbone and resamples the sequence and side chains. Turn on Structure is an RFD4-Proteina design for a design from an earlier run, so that its condition annotations are kept.
Custom conditions passes the specification you write and up to 20 structures to the model unchanged. Use it for what the tasks do not cover, such as motifs from several chains, a gap inside a kept range, or conditions beyond those above. The specification a task wrote is a starting point.
A specification names each design problem and states what to keep, what to build and what to condition. Every top-level key except global_args is one design problem, and Designs per input applies to each of them. An unrecognized field under a design raises an error.
| Field | Type | Description |
|---|---|---|
input | string or list | Required. File name of the starting structure, or a list of names that are combined into one structure. Chain ids must not overlap across a list. |
input_as_annotated_cif | boolean | Optional, default false. true loads the input with its existing condition annotations. false treats it as a plain structure, adds heavy atoms and converts MSE to MET. |
contig | string | Optional, keeps everything. Selects residues to keep and inserts segments to design. Must contain at least one kept segment. |
conditions | mapping | Optional. Conditions applied after the contig has been resolved. |
A global_args key holds any of these fields as the default for every design in the file, and a value under a design's own key overrides it.
The contig is one comma-separated string.
| Token | Meaning |
|---|---|
A17-131, A52 | Keeps this residue or range from the input, by its chain and residue number. Ranges run low to high. |
50-120, 10R | Designs a segment of that length, sampled within the range. A trailing P, R or D names the chain type, but only protein segments can be designed at present. |
E1:2-20 | A named design segment. The name must be unique and can be selected in conditions. |
/0 | Chain break. The tokens between two breaks form one output chain, which takes the chain id of its kept segment. |
Atoms outside a kept segment are dropped, and output residues are numbered from 1 in each chain. Residue numbers in contig and conditions refer to the original label_seq_id of the input CIF, which can differ from the author numbering that viewers such as PyMOL show. Turn author numbering off in the viewer (set cif_use_auth, off in PyMOL) before reading residue numbers from it.
Atoms and residues are chosen with select: strings. Path syntax is sel('A/*/[10-20]'), written as chain, residue name, residue number and atom name with trailing fields defaulting to *. Query syntax is a Python boolean expression over annotations such as is_ligand or chain_id, and the two can be mixed.
| Annotation | Values | Selects | Purpose |
|---|---|---|---|
C_CRD | true, false | atoms | Fixes the real coordinates of the selected atoms. |
C_SEQ | true, false | residues | Fixes the real residue identity. |
C_HOT | true, false | atoms | Marks target atoms the designed chain should contact. |
C_RAS | BURIED, INTERMEDIATE, EXPOSED | atoms | Sets how buried or exposed an atom should be. |
C_HB | DONOR, ACCEPTOR, BOTH | atoms | Requests a hydrogen-bond role. |
C_PISTACK | true, false | atoms | Requests stacking with an aromatic ring; select the complete ring. |
C_PICATION | AROMATIC, CATION, BOTH | atoms | Requests the aromatic or cation side of a pi-cation contact. |
C_SEC | HELIX, SHEET, LOOP | residues | Requests a helix, sheet or loop at the selected residues. |
C_CATH | a label such as "2.60.40" | residues | Requests a CATH fold class, architecture and topology; x leaves a level open. |
C_CENTROID | "x,y,z" | chains | Sets a chain centroid; it must cover an entire chain and apply to every chain or none. |
C_SEQ_PROB_* | a number from 0 to 1 | residues | Sets the probability of one amino acid or base, as in C_SEQ_PROB_CYS; 0 excludes it. |
C_IDX | false, with a group: label | atoms | Places selections that share a label into one index group, keeping their relative offsets. |
C_CRDGRP | a positive integer | atoms | Keeps the selected atoms as a group with known relative geometry and a free global position. |
Each annotation maps a value to a list of selections. Overlapping entries for the same annotation resolve in declaration order, and the last one wins.
The Protein binder task writes the following specification for PD-L1, chain A residues 17 to 131 of PDB 5O45, with three hotspot residues.
pdl1_binder:
input: 5o45_cropped.cif
contig: "50-120, /0, A17-131"
conditions:
C_CRDGRP: {1: [{select: "sel('A/*/*/[N,CA,C,O]') and not has_nan_coord()"}]}
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]')"}]}The contig designs a chain of 50 to 120 residues, starts a second chain with a break, and keeps the target residues. The target backbone forms coordinate group 1, so its internal geometry is fixed while its position relative to the binder is open. C_SEQ keeps the target sequence, and C_HOT marks the side-chain atoms the binder should engage.
With the cropped structure uploaded as the target, Binder length 50 to 120, the three hotspots above, Designs per input 2 and Recycling schedule medium/front_loaded, the estimate is 59 credits.
Under Custom conditions, a CIF that already carries condition annotations, such as a design returned by an earlier run, can be submitted without a specification. Each file becomes one design problem named after the file, and the model reads its annotations as given.
Use this for monomer design and for other annotated inputs, such as the model's benchmark structures. A specification can load the same kind of file with input_as_annotated_cif: true.
| Parameter | Type | Default | Description |
|---|---|---|---|
Task (task) | enum | protein_binder | protein_binder, small_molecule_binder, motif_scaffold, enzyme_design, existing_structure or custom_conditions. |
Target residues (target_residues) | string | Optional | Protein binder. Chain and range such as A17-131, one contiguous range per chain. Blank keeps every protein chain whole. |
Hotspot atoms (hotspot_atoms) | string | Optional | Protein binder. Target atoms to contact, written A56:CG,OH, separated by spaces. |
Binder length, minimum and maximum (binder_length_min, binder_length_max) | integer | 50 and 120 | Protein binder and Small-molecule binder. Shortest and longest binder chain, in residues. The defaults are the range of the model's PD-L1 example. |
Ligand residue (ligand_residue) | string | Optional | Small-molecule binder. Chain and author residue number of the ligand, such as B386. Needed with more than one ligand. |
Motif residues (motif_residues) | string | Required | Motif scaffolding and Enzyme design. Ranges from one chain, such as A5-10 A22-26. For Enzyme design, the catalytic residues. |
Keep motif side chains (keep_motif_side_chains) | boolean | true | Motif scaffolding. On fixes every motif atom and its residue type. Off fixes only N, CA, C and O. |
Ligand residues (ligand_residues) | string | Optional | Enzyme design. Ligands, cofactors and metals to keep, such as C476 D477. |
Scaffold length, minimum and maximum (scaffold_length_min, scaffold_length_max) | integer | Required | Motif scaffolding and Enzyme design. Length range of each designed segment. Enzyme design applies it to the whole scaffold. |
Refinement (refinement) | enum | partial_diffusion | Existing structure. partial_diffusion or inverse_folding. |
Structure is an RFD4-Proteina design (input_is_annotated) | boolean | false | Existing structure. On keeps the condition annotations of a design from an earlier run. |
Workflow (workflow) | enum | generate | Custom conditions only. generate builds from noise, partial_diffusion refines the supplied structure, inverse_folding resamples sequence only. |
Designs per input (num_replicates) | integer | 1 | Designs generated for each design problem, from 1 to 20. |
Random seed (seed) | string | Optional | Integer text. Blank uses a new seed on every run. |
| Job name | string | Optional | A label for the run. |
| Parameter | Type | Default | Description |
|---|---|---|---|
Recycling schedule (recycle_strategy) | enum | thinking_medium | One of 12 schedules, or none. Every schedule runs 60 steps. |
Recycling depth (n_recycle) | integer | 0 | Fixed recycle depth at every step. Shown and allowed only with none. |
Sampling steps (nsteps) | integer | 60 | From 1 to 200. Values other than 60 require none. |
Guidance weight (guidance_w) | number | 1 | At least 0. 1 is no guidance and 0 excludes the main model. |
Sampling noise (sampling_noise) | enum | stochastic | ode injects no noise during the trajectory. |
Condition decoder on sequence prediction (condition_decoder_on_sequence_prediction) | boolean | true | Conditions the decoder on the model's own sequence readout. Exact sequence conditions are kept either way. |
The recycling schedule sets how many trunk recycling passes run across the 60 steps. Schedule names combine a level and a shape.
| Level | flat | midpeak | front_loaded |
|---|---|---|---|
low | 120 | 120 | 120 |
medium | 180 | 150 | 180 |
high | 300 | 180 | 300 |
thinking_low, thinking_medium and thinking_high are front loaded with 120, 180 and 300 passes. The interface suggests medium/front_loaded for protein binders, medium/midpeak for small-molecule binders and enzymes, and medium/flat for inverse folding. A schedule other than none cannot be combined with a different Sampling steps or a nonzero Recycling depth, and the form refuses the combination.
| Parameter | Type | Default | Description |
|---|---|---|---|
Backbone sharpening (tsr_k_backbone) | number | 16 | Temporal score rescaling strength for backbone C-alpha coordinates. Minimum 0. Higher values sharpen more. |
Backbone sharpening schedule (tsr_sigma_backbone) | number | 3 | Larger values apply backbone sharpening earlier in the trajectory. |
Backbone noise scale (sc_scale_noise_backbone) | number | 1 | Variance multiplier for injected backbone noise. |
Sequence and side-chain sharpening (tsr_k_latent) | number | 4 | Rescaling strength for the sequence and side-chain latents. |
Sequence and side-chain sharpening schedule (tsr_sigma_latent) | number | 12 | Larger values apply latent sharpening earlier in the trajectory. |
Sequence and side-chain noise scale (sc_scale_noise_latent) | number | 1 | Variance multiplier for injected sequence and side-chain noise. |
These settings appear only when Workflow is partial_diffusion. Set either the fraction or the corruption levels, not both.
| Parameter | Type | Default | Description |
|---|---|---|---|
Fraction of trajectory to run (partial_trajectory_fraction_steps) | number | Optional | Runs the final fraction of the sampling steps, above 0 and up to 1. Smaller values stay closer to the input. |
Backbone starting corruption (partial_t_backbone) | number | Optional | Above 0 and below 1. Near 1 stays close to the input and near 0 approaches full generation. |
Sequence and side-chain starting corruption (partial_t_latent) | number | Optional | Above 0 and below 1. |
Derive the other modality's corruption level (couple_partial_t) | boolean | false | Derives the unset corruption level from the default schedule coupling when only one is given. |
| Parameter | Type | Default | Description |
|---|---|---|---|
Save trajectory every N steps (save_trajectory_every) | integer | 0 | Saves a snapshot every N sampling steps. 0 disables trajectories. |
C-alpha only trajectories (bb_ca_only_trajectories) | boolean | true | Saves C-alpha XTC files. Turn off for all-atom multi-model CIF files. |
Save noisy intermediate states (dump_noisy_trajectories) | boolean | false | Also saves the noisy state at each saved step, next to the clean prediction. |
Turn C-alpha only trajectories off whenever Save trajectory every N steps is above 0. The model version in use fails while writing C-alpha trajectories, so a run that keeps the default writes no trajectory and ends in an error.
Viewer displays the designed structures. Files lists every download.
| Download | Contents |
|---|---|
<name>_<n>_generated.cif | One designed structure per replicate, as an annotated CIF. <n> is the replicate index. |
<name>_<n>_<trajectory>.cif or ..._bb_ca.xtc | Trajectory, when requested. All-atom multi-model CIF, or C-alpha XTC. |
per_example_metrics.csv | One row per design with the resolved generation settings, seed and paths. It holds no quality scores. |
config.yaml, hydra.yaml, overrides.yaml | The resolved configuration of the run. |
generate.log | The model's own log. |
records/run.log | The command, the model's log and the measured resource use of the run. |
records/provenance.json | Settings, command, input SHA-256 digests, resource measurements, source commit and model revision. |
records/RFD4-PROTEINA-LICENSE.txt | The BSD 3-Clause license of the source. |
input/ | The submitted structures, and the specification a task wrote or you submitted, including input/spec.yaml. |
A finished run returns structures with no verdict attached. For a PD-L1 binder job, the files hold the target chain and a new designed chain, and nothing in them says whether the binder folds on its own or sticks to PD-L1. The model returns no confidence scores, and per_example_metrics.csv records settings rather than quality. A design is a candidate, and the checks that rank candidates come afterwards.
Predict the designed sequence on its own with ESMFold2 or AlphaFold2 and compare it with the designed backbone using RMSD; a design that its own sequence does not fold back into is unlikely to hold. For a binder, predict the complex with Boltz-2 and read ipTM and ipSAE at the interface. pLDDT from those predictions says how much of the designed chain the predictor trusts.
Each designed CIF records where its atoms came from in ordinary _atom_site columns. annotation_src-component_1_atom gives the source contig label of each atom, such as A17-131, and . for atoms with no source. annotation_src-coordinate-conditioned-region_1_atom is . for atoms whose coordinates were not conditioned. annotation_src-index-group_1_atom and is_unindexed_insertion mark motifs that the model placed without a fixed position in the chain.
These columns locate a motif in a design, because output chains are renumbered from 1 and a kept motif no longer sits at its input number. For enzyme design, check that the coordinate-conditioned region matches the motif you specified before reading anything into the scaffold.
The replicate index in a file name is not a rank. Design 0 is not better than design 7, and sorting by name sorts by index only. Trajectory frames are intermediate states of the sampling process, not molecular dynamics, so they show how a design formed and say nothing about motion or binding.
For de novo protein design in general, generate several designs per target and filter them with an independent predictor, as above, before choosing candidates for the bench.
Scaffold enzyme active sites with atom-level control and ligand-aware protein design.
Design protein, peptide, and nanobody binders against protein or small-molecule targets.
Peptide binder design through binding interface mimicry with a latent diffusion model
Generate protein binder candidates with Proteina-Complexa binder design settings.
Design antibody and nanobody binders with an end-to-end RosettaCommons pipeline
Target sequence-conditioned peptide binder design using masked language modeling
Generate protein sequences de novo, scaffold fixed motifs, or inpaint selected regions.
All-atom SE(3)-equivariant diffusion for unconditional generation, motif scaffolding, and binder design.
Design all-atom protein binders with controlled target sites, lengths, and interaction parameters.
Generate novel drug-like molecules in protein binding pockets using AI-powered structure-based design.