Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    Tools · Computational Biology

    RoseTTAFold3

    Predict the structure of a complex of proteins, DNA, RNA and ligands with RoseTTAFold3, with a ranking score, pTM, ipTM, pLDDT and predicted aligned error for every sample.

    Updated October 21, 2026

    On this page

    Prices, workflows, and method papersOpen in the app

    RoseTTAFold3 (RF3) predicts the three-dimensional structure of a complex from the chains you describe: proteins, DNA and RNA, plus small-molecule ligands, covalent bonds and cyclic peptides. It is an open all-atom predictor next to Boltz-2 and ESMFold2, which makes it a useful independent check, for example on sequences designed with MPNN Sequence Design for a backbone from RFdiffusion3.

    How it works

    RF3 is a diffusion-based structure predictor from the RosettaCommons Foundry, released with its weights under a BSD license. A trunk network recycles the chains' representation, and a diffusion module then draws structures from it, so every sample is an independent prediction from the same trunk pass. A confidence head scores each sample. Here it runs the reference attention path with the checkpoint trained on data to January 2024.

    Inputs

    • Chains: protein, DNA and RNA by sequence, with a modified residue written as its CCD code in parentheses, such as (MSE). Ligands by CCD code or SMILES. Identical copies of a chain share one entry with several chain IDs. A job holds at most 1,000 polymer residues in total, copies counted, until the tool has been benchmarked.
    • Alignments: RF3 reads one multiple sequence alignment per protein chain. Upload an A3M file for a chain, or ask for one to be built for chains that have none; it is searched against UniProt Swiss-Prot with MMseqs2. Without either, a chain is folded from its sequence alone, which is the right choice for de novo proteins that have no homologs. The built alignments are far shallower than the databases RF3 was trained with, so a natural protein will probably do better with an uploaded alignment.
    • Covalent bonds between named atoms, for example a glycan on an asparagine, and cyclic chains for cyclic peptides.
    • Sampling: the number of samples (up to 10), trunk recycles (up to 10) and diffusion steps (20 to 400; samples × steps is at most 1,600), and a seed. An optional early-stop threshold ends a job whose mean pLDDT after the first recycle is below it, which saves compute on hopeless inputs but returns only a score, no structure.

    Outputs

    • samples/: each sample as an mmCIF file, with the per-atom pLDDT and the predicted aligned error as a compressed JSON file.
    • scores.csv: one row per sample with the ranking score, pTM, ipTM, whether chains clash, overall pLDDT, PAE and PDE.
    • summary.json: the settings, how each protein chain's alignment came about, the best sample and any warnings.

    The ranking score is 0.8 × ipTM + 0.2 × pTM, minus 100 when chains clash, so a sample with a clash scores far below zero; for a single chain it is the pTM. In a workflow the complexes port carries it as confidence and the overall pLDDT, on a 0 to 100 scale, as plddt. The score is not the same formula as Boltz-2's confidence, so a filter threshold for one does not carry over to the other. The optional sequence input takes one protein sequence from an upstream tool such as MPNN Sequence Design and writes it as chain A; scatter over the sequence set to predict each design.

    Limits

    • Confidence is not accuracy. A high ranking score means the model is confident, not that the structure or an interface is right. Compare against another predictor before trusting a design.
    • Templates, fixed ligand conformers and structure files as input are not offered. Sequences use the 20 standard amino acids and the standard RNA and DNA bases, plus modified residues as CCD codes.
    • The reference attention path uses more memory than RF3's optimized kernels, so large complexes are capped at 1,000 residues for now.
    • More samples and more diffusion steps cost proportionally more, and so do longer complexes and built alignments.

    Boltz-2 and ESMFold2 predict complexes with other models, MPNN Sequence Design designs the sequences to check, and RFdiffusion3 and RFdiffusion3NA design the backbones. RFOptimization cycles a design through RF3 or Boltz-2 and LigandMPNN.

    Run it from the API

    Submit with Submit a job and the job_type below. Price it first with Estimate job reservation cost: submitting reserves that amount from your wallet, and the charge settles at the actual runtime.

    RoseTTAFold3 rf3-predict

    Job type
    rf3-predict
    Hardware
    t4l4a10l40s (default)a100-40gba100-80gbh100h200b200
    Typical runtime
    30 min on Nvidia L40S

    Payload

    Payload fields
    FieldTypeDescription
    chains[]requiredobject[]

    Limits: min items 1, max items 50

    chains.idrequiredstring | string[]
    chains.typerequiredany

    One of: "protein", "dna", "rna", "ligand"

    chains.sequencestring

    Limits: pattern ^(?:[A-Za-z]|\([A-Za-z0-9]{1,5}\))+$

    chains.ccdstring

    Limits: pattern ^[A-Za-z0-9]{1,5}$

    chains.smilesstring

    Limits: min length 1, max length 300

    chains.msaobject
    chains.msa.a3mrequiredfile_object
    bonds[]string[][]

    Limits: min items 1, max items 50

    cyclic_chains[]string[]

    Limits: min items 1

    use_msaboolean

    Default: false

    num_samplesinteger

    Default: 5Limits: ≥ 1, ≤ 10

    n_recyclesinteger

    Default: 10Limits: ≥ 1, ≤ 10

    num_stepsinteger

    Default: 200Limits: ≥ 20, ≤ 400

    seedinteger

    Limits: ≥ 0, ≤ 2147483647

    early_stopping_plddt_thresholdnumber

    Default: 0Limits: ≥ 0, ≤ 1

    record_idstring

    Limits: pattern ^[A-Za-z0-9][A-Za-z0-9._:|+-]{0,99}$

    File fields take {"name": "x.pdb", "content_b64": "…"} or a stored artifact, {"$artifact": {"id": "art-…", "port": "…"}}. Files are up to 25 MiB each.

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "chains": [
            {
                "id": "A",
                "type": "protein",
                "sequence": "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ",
            },
            {"id": "B", "type": "dna", "sequence": "ACGTACGTAC"},
            {"id": "C", "type": "ligand", "ccd": "MG"},
        ],
        "num_samples": 2,
        "num_steps": 200,
        "seed": 7,
    }
    
    estimate = client.jobs.estimate(job_type="rf3-predict", payload=payload, resource="l40s")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-rf3-predict-run",
        job_type="rf3-predict",
        payload=payload,
        resource="l40s",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.

    Workflow inputs

    • Protein sequences · optionalFASTA, RAW

    Workflow outputs

    • ArchiveZIP
    • StructuresCIF
    • TableCSV