> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# RFdiffusion3

> Released in 2025 by the [Baker Lab at the Institute for Protein Design](https://www.ipd.uw.edu/), RFdiffusion3 is an all-atom denoising-diffusion generative model for de novo protein design. Given constraints such as a target binding site, a structural motif, a small-molecule pocket, or a symmetry group, it generates novel protein structures together with compatible amino-acid sequences. It is the all-atom successor to RFdiffusion and addresses protein binders, nucleic-acid and small-molecule binders, enzymes, and symmetric assemblies within a single model.

<div class="page-hero"><img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/rfdiffusion3/hero.png" alt="RFdiffusion3" /><div class="tool-org-badges page-hero-badges"><a href="/docs/tools/organizations/institute-for-protein-design" class="tool-org-badge" style={{background: "#4b2e83"}} title="Institute for Protein Design"><img src="https://mintcdn.com/bio-pro/_UGa2jUMKeVPCbLk/assets/images/cached/6c4da2f317fc.png?fit=max&auto=format&n=_UGa2jUMKeVPCbLk&q=85&s=e0eec78648cb6cc4938f40ab18608b31" alt="" class="tool-org-badge-logo" width="200" height="200" data-path="assets/images/cached/6c4da2f317fc.png" /> IPD</a></div></div>

<Note>
  **License:** RFdiffusion3 is open source and free for academic and commercial use under a BSD-3-Clause license. Please refer to [the license](https://github.com/RosettaCommons/foundry/blob/production/LICENSE.md) for full terms.
</Note>

<p class="entity-disclaimer">Proto is not affiliated with Institute for Protein Design. This toolkit is open source and builds on the implementation produced by this organization. Product names, logos, and trademarks are the property of their respective owners.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-rfdiffusion3" id="none-rfdiffusion3" class="tab-radio-input" />

<input type="radio" name="tab-rfdiffusion3" id="github-rfdiffusion3" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-rfdiffusion3" id="preprint-rfdiffusion3" class="tab-radio-input" />

<input type="radio" name="tab-rfdiffusion3" id="cite-rfdiffusion3" class="tab-radio-input" />

<input type="radio" name="tab-rfdiffusion3" id="source-rfdiffusion3" class="tab-radio-input" />

<input type="radio" name="tab-rfdiffusion3" id="notebook-rfdiffusion3" class="tab-radio-input" />

<input type="radio" name="tab-rfdiffusion3" id="proto-rfdiffusion3" class="tab-radio-input" />

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-rfdiffusion3" class="tool-tab tab-open badge-github"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> GitHub</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-github"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> GitHub</label></span> <span class="tool-tab-wrap"><label for="preprint-rfdiffusion3" class="tool-tab tab-open badge-preprint"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Preprint</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-preprint"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Preprint</label></span> <span class="tool-tab-wrap"><label for="cite-rfdiffusion3" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span> <span class="tool-tab-wrap"><label for="source-rfdiffusion3" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Tool Source</label></span> <span class="tool-tab-wrap"><label for="notebook-rfdiffusion3" class="tool-tab tab-open badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-notebook"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label></span> <span class="tool-tab-wrap"><label for="proto-rfdiffusion3" class="tool-tab tab-open badge-proto"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label><label for="none-rfdiffusion3" class="tool-tab tab-close badge-proto"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /></svg> Open on Proto</label></span>
</div>

<a href="https://github.com/RosettaCommons/foundry" target="_blank" class="tab-panel github-panel" data-tab="github-rfdiffusion3">
  <div class="gh-card-wrap">
    <img src="https://opengraph.githubassets.com/1/RosettaCommons/foundry" class="gh-card-img img-fallback" alt="RosettaCommons/foundry" />

    <div class="gh-card-fallback">
      <div class="gh-fallback-org"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> RosettaCommons/foundry</div>
    </div>
  </div>

  <span class="panel-goto-btn gh-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View repo</span></span>
</a>

<a href="https://doi.org/10.1101/2025.09.18.676967" target="_blank" class="tab-panel preprint-panel" data-tab="preprint-rfdiffusion3">
  <div class="paper-info">
    <div class="paper-title">De novo Design of All-atom Biomolecular Interactions with RFdiffusion3</div>
    <div class="paper-meta">Jasper Butcher, Rohith Krishna, ... David Baker</div>
    <div class="paper-meta paper-venue">bioRxiv (2025)</div>
  </div>

  <span class="panel-goto-btn preprint-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" /><polyline points="14 2 14 8 20 8" /><line x1="16" y1="13" x2="8" y2="13" /><line x1="16" y1="17" x2="8" y2="17" /><polyline points="10 9 9 9 8 9" /></svg> Read preprint</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-rfdiffusion3">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{butcher2025rfdiffusion3,
      title={De novo Design of All-atom Biomolecular Interactions with RFdiffusion3},
      author={Butcher, Jasper and Krishna, Rohith and Mitra, Raktim and Brent, Rafael Isaac and Li, Yanjing and Corley, Nathaniel and Kim, Paul T and Funk, Jonathan and Mathis, Simon Valentin and Salike, Saman and Muraishi, Aiko and Eisenach, Helen and Thompson, Tuscan Rock and Chen, Jie and Politanska, Yuliya and Sehgal, Enisha and Coventry, Brian and Zhang, Odin and Qiang, Bo and Didi, Kieran and Kazman, Maxwell and DiMaio, Frank and Baker, David},
      journal={bioRxiv},
      year={2025},
      doi={10.1101/2025.09.18.676967},
      url={https://www.biorxiv.org/content/10.1101/2025.09.18.676967},
      publisher={Cold Spring Harbor Laboratory}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<a href="https://github.com/evo-design/proto-tools/tree/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3" target="_blank" class="tab-panel source-panel" data-tab="source-rfdiffusion3">
  <div class="source-info">
    <img src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-tools<span class="source-subpath">/proto\_tools/tools/structure\_design/rfdiffusion3</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-rfdiffusion3">
  <div class="notebook-info">
    <span class="notebook-icon">
      <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
        <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />

        <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
      </svg>
    </span>

    <span class="notebook-label">Open Notebook</span>
  </div>

  <span class="panel-goto-btn notebook-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open notebook</span></span>
</a>

<div class="tab-panel proto-panel" data-tab="proto-rfdiffusion3">
  <div class="proto-info">
    <div class="proto-cloud">
      <svg class="proto-cloud-bg" viewBox="0 0 640 512" xmlns="http://www.w3.org/2000/svg">
        <path d="M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z" />
      </svg>

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-light.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=0cb66034ba45618505501aee6ea5f5c1" class="proto-panel-logo block dark:hidden" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-light.svg" />

      <img noZoom src="https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-dark.svg?fit=max&auto=format&n=KVh0EKV-IKblvXR8&q=85&s=2c9e23a14635e60384a434e220788f54" class="proto-panel-logo hidden dark:block" alt="Proto" width="198" height="151" data-path="assets/logo/evo-logo-dark.svg" />
    </div>
  </div>

  <div class="proto-actions">
    <a href="https://proto.evodesign.org/tools/rfdiffusion3-design" target="_blank" class="proto-action-btn"><span>RFdiffusion3 Structure Design</span><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="7" y1="17" x2="17" y2="7" /><polyline points="7 7 17 7 17 17" /></svg></a>
  </div>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Toolkit contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 34 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 28 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/21143637?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">bviggiano</span></a><a class="entity-contributor" href="https://github.com/leba01" target="_blank" rel="noopener" title="leba01: 4 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/124846286?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">leba01</span></a></span></div>

| Function             | Description                                               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| -------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_rfdiffusion3()` | De novo protein structure design using RFdiffusion3 (GPU) | <a href="#api-run-rfdiffusion3" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/rfdiffusion3_sample.py#L965" target="_blank" class="func-table-btn func-source-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a> |

## Background

RFdiffusion3 ([Butcher et al., 2025](https://doi.org/10.1101/2025.09.18.676967)) is a denoising-diffusion generative model trained to design protein structures at all-atom resolution under arbitrary spatial constraints. Starting from random noise, it iteratively denoises atomic coordinates toward a plausible protein while jointly refining the underlying amino-acid sequence. Training combines structures from the [Protein Data Bank](https://www.rcsb.org/) with multi-task conditioning, in which each training example is presented with a randomly generated design problem that constrains a sampled combination of motif tokens, atom subsets, residue identities, or sequence-index labels. The model is therefore trained jointly on binder design, motif scaffolding, inverse folding, sidechain placement, and prediction-style tasks under a single objective, and a single trained checkpoint supports every conditioning style at inference.

RFdiffusion3 is the successor to [RFdiffusion](https://doi.org/10.1038/s41586-023-06415-8) (Watson et al., 2023), which diffused only over the backbone N, Cα, C, and O atoms and required [ProteinMPNN](https://doi.org/10.1126/science.add2187) as a separate sequence-design step. By denoising every atom and co-designing the sequence, RFdiffusion3 incorporates small-molecule pockets, hydrogen-bond donor and acceptor patterning, and explicit nucleotide and ligand context directly into the generative process. It is the structure-design model within the [Foundry](https://github.com/RosettaCommons/foundry) framework, which distributes it alongside [RoseTTAFold3](https://doi.org/10.1101/2025.08.14.670328) for structure prediction and [ProteinMPNN](https://bio-pro.mintlify.app/tools/inverse-folding/proteinmpnn) for inverse folding.

## Tools

<a name="api-run-rfdiffusion3" />

<div class="tool-section-card tool-section-card--design">
  ### RFdiffusion3 Structure Design (`rfdiffusion3-design`)

  Generates new protein structures and sequences subject to specified constraints. Each design task is described by an `RFdiffusion3DesignSpec` containing an optional input structure, a contig string, and per-residue selectors that fix atomic coordinates, constrain sequence positions, or designate hotspot residues. The diffusion sampler returns N candidate structures per specification, each accompanied by its designed amino-acid sequence and the sampled contig.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/rfdiffusion3_sample.py#L427" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Input: RFdiffusion3Input">
      <ParamField path="design_specs" type="List[RFdiffusion3DesignSpec]">
        List of design specifications. Each spec represents an independent design task with its own constraints. Multiple specs will be processed in a single run.

        <Expandable title="RFdiffusion3DesignSpec">
          <ParamField path="input_structure" type="Structure">
            Input structure (`Structure` or PDB/CIF file path) for motif/binder design; written to a file before rfd3 (reads a path). Omit for de novo.
          </ParamField>

          <ParamField path="contig" type="string">
            Contig string specifying the design topology.
          </ParamField>

          <ParamField path="length" type="string">
            Per-asymmetric-unit length (int or `"min-max"`); per-protomer under `symmetry`.
          </ParamField>

          <ParamField path="ligand" type="string">
            Ligand selection by residue name from input structure. Comma-separated list of 3-letter codes (e.g., `"HAX,OAA"`).
          </ParamField>

          <ParamField path="unindex" type="string | Dict[string, string]">
            Unindexed motif components whose sequence position is unknown to the model. Useful for active site scaffolding where catalytic residues should be placed but their position in the final sequence is flexible. Components must not overlap with `contig`.
          </ParamField>

          <ParamField path="select_fixed_atoms" type="boolean | string | Dict[string, string]">
            Atoms to fix in 3D space during diffusion. Accepts InputSelection format: - `True`: Fix all atoms from input - `False`: Unfix all atoms - Contig string: Specify residues to fix (e.g., `"A1-10,B1-3"`) - Dict: Map chain/residue to atom selection using `"BKBN"` (backbone), `"TIP"` (tip atom), `"ALL"` (all atoms), or explicit atom names (e.g., `{"A1": "N,CA,C,O,CB", "A2-10": "BKBN"}`)
          </ParamField>

          <ParamField path="select_unfixed_sequence" type="boolean | string | Dict[string, string]">
            Residues whose sequence can change during design. Accepts InputSelection format: - `True`: All input regions have fixed sequences (upstream default) - `False`: All atoms have unfixed/diffused sequences - Contig string: Components to unfix sequence for (e.g., `"A5-10,B1-3"`)
          </ParamField>

          <ParamField path="select_hotspots" type="boolean | string | Dict[string, string]">
            Atom or residue hotspots for binder/PPI design (typically \<=4.5 Angstroms to any heavy atom in the designed structure).
          </ParamField>

          <ParamField path="symmetry" type="string | Dict[string, any]">
            Symmetry for homo-oligomer design. A group-id string (e.g. `"C3"`) is wrapped as `{"id": "C3"}`; a full `SymmetryConfig` dict is passed through. Pair with `RFdiffusion3Config.sampler_kind="symmetry"`.
          </ParamField>

          <ParamField path="select_buried" type="boolean | string | Dict[string, string]">
            RASA selector for buried residues.
          </ParamField>

          <ParamField path="select_partially_buried" type="boolean | string | Dict[string, string]">
            RASA selector for partially buried residues.
          </ParamField>

          <ParamField path="select_exposed" type="boolean | string | Dict[string, string]">
            RASA selector for solvent-exposed residues.
          </ParamField>

          <ParamField path="select_hbond_donor" type="Dict[string, List[string]]">
            Atom-wise H-bond donor flags, e.g. `{"A40": ["NE2"]}`.
          </ParamField>

          <ParamField path="select_hbond_acceptor" type="Dict[string, List[string]]">
            Atom-wise H-bond acceptor flags, e.g. `{"A45": ["OD1"]}`.
          </ParamField>

          <ParamField path="redesign_motif_sidechains" type="boolean">
            Keep motif backbone fixed, redesign side-chains.
          </ParamField>

          <ParamField path="plddt_enhanced" type="boolean">
            Enable pLDDT-based denoising enhancement (upstream default `True`; `None` keeps it).
          </ParamField>

          <ParamField path="infer_ori_strategy" type="string">
            Origin placement — `com` (center of mass) or `hotspots`.
          </ParamField>

          <ParamField path="ori_token" type="array">
            `[x, y, z]` origin override (Angstroms).
          </ParamField>

          <ParamField path="partial_t" type="number">
            Noise level (in Angstroms) for partial diffusion. Lower values preserve more of the input structure. Recommended values are 5.0-15.0 Angstroms. Useful for refinement or local redesign tasks.
          </ParamField>

          <ParamField path="is_non_loopy" type="boolean">
            If `True`/`False`, produces output structures with fewer/more loops. `None` uses the model's native default.
          </ParamField>
        </Expandable>
      </ParamField>

      <ParamField path="raw_json" type="string">
        Raw JSON string for advanced users who need full RFdiffusion3 flexibility. If provided, `design_specs` will be ignored and this JSON will be passed directly to RFdiffusion3.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/rfdiffusion3_sample.py#L590" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Config: RFdiffusion3Config">
      <ParamField path="n_batches" type="integer" default="1">
        Independent batches per spec (total designs = `n_batches * diffusion_batch_size * num_specs`).
      </ParamField>

      <ParamField path="diffusion_batch_size" type="integer" default="8">
        Designs sampled in parallel per batch.
      </ParamField>

      <ParamField path="num_timesteps" type="integer" default="200">
        Diffusion timesteps; more = slower, generally higher quality.
      </ParamField>

      <ParamField path="step_scale" type="number" default="1.5">
        Step size scale; higher = less diverse, more designable.
      </ParamField>

      <ParamField path="sampler_kind" type="enum" default="default">
        Sampler kind; `'symmetry'` for homo-oligomer design (paired with `DesignSpec.symmetry`).

        Available options: `default`, `symmetry`
      </ParamField>

      <ParamField path="center_option" type="enum" default="all">
        Coordinate-frame centering — `all` (whole structure), `motif` (input motif), `diffuse` (diffused region only).

        Available options: `all`, `motif`, `diffuse`
      </ParamField>

      <ParamField path="use_classifier_free_guidance" type="boolean" default="False">
        Enable CFG sampling.
      </ParamField>

      <ParamField path="cfg_scale" type="number" default="1.5">
        CFG scale factor (typical 1.0-3.0); no-op when CFG is off.
      </ParamField>

      <ParamField path="gamma_0" type="number" default="0.6">
        Sampler stochasticity; lower = more designable, less diverse; `0.0` = deterministic ODE. Must be `> 0.5` when `sampler_kind="symmetry"`.
      </ParamField>

      <ParamField path="sampler_tuning" type="RFdiffusion3SamplerTuning">
        Finer `inference_sampler` settings (noise schedule, motif noise); see that class for the fields.

        <Expandable title="RFdiffusion3SamplerTuning">
          <ParamField path="noise_scale" type="number">
            Diffusion noise scale (upstream default 1.003).
          </ParamField>

          <ParamField path="p" type="integer">
            Noise-schedule exponent (upstream default 7).
          </ParamField>

          <ParamField path="gamma_min" type="number">
            Lower stochasticity bound, paired with `gamma_0` (upstream default 1.0).
          </ParamField>

          <ParamField path="s_trans" type="number">
            Translational noise scale for inference augmentation (upstream default 1.0).
          </ParamField>

          <ParamField path="allow_realignment" type="boolean">
            Allow motif realignment during sampling (upstream default False).
          </ParamField>

          <ParamField path="s_jitter_origin" type="number">
            Gaussian sigma jittering the motif offset (upstream default 0.0).
          </ParamField>
        </Expandable>
      </ParamField>

      <ParamField path="low_memory_mode" type="boolean" default="False">
        Memory-efficient tokenization (slower); enable only if GPU RAM is tight.
      </ParamField>

      <ParamField path="dump_trajectories" type="boolean" default="False">
        Save diffusion trajectory frames (debugging).
      </ParamField>

      <ParamField path="align_trajectory_structures" type="boolean" default="False">
        Align trajectory frames across timesteps (only when `dump_trajectories=True`).
      </ParamField>

      <ParamField path="prevalidate_inputs" type="boolean" default="False">
        Fail-fast input JSON validation.
      </ParamField>

      <ParamField path="ckpt_path" type="string" default="rfd3">
        Checkpoint path or alias (`"rfd3"` = production preset).
      </ParamField>

      <ParamField path="input_dir" type="string">
        Local-execution input directory; `None` uses a tempdir.
      </ParamField>

      <ParamField path="output_dir" type="string">
        Local-execution output directory; `None` uses a tempdir.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cuda">
        `"cuda"` or `"cpu"`.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/rfdiffusion3_sample.py#L852" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a>

    <Accordion title="Output: RFdiffusion3Output">
      <ResponseField name="designed_structures" type="List[RFdiffusion3Designs]">
        One bundle per input spec. Total design count is `len(design_specs) * n_batches * diffusion_batch_size`.

        <Expandable title="RFdiffusion3Designs">
          <ResponseField name="spec_key" type="string" required>
            Identifier of the input specification that produced these designs (e.g. `"spec-0"`). For `raw_json` callers this is the user-supplied key; otherwise it is positional (`f"spec-{i}"` from `RFdiffusion3Input.to_json_spec`).
          </ResponseField>

          <ResponseField name="structures" type="List[RFdiffusion3Structure]">
            The designs generated for this spec, in the order RFdiffusion3 emitted them. List length equals `n_batches * diffusion_batch_size`.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  This tool is appropriate for any task in which the output is a novel protein backbone together with a designed amino-acid sequence subject to spatial constraints. Representative applications include protein-binder design against a target hotspot, motif scaffolding around catalytic or epitope residues, enzyme design around a small-molecule active site, symmetric homo-oligomer assembly, and partial-diffusion refinement of an existing backbone. RFdiffusion3 additionally supports nucleic-acid and small-molecule binder design within the same model and the same inference run, capabilities that the original RFdiffusion addressed only through separate model variants or task-specific extensions.

  #### Usage Tips

  * **One `RFdiffusion3DesignSpec` describes a single design task. Multiple specifications passed in one call are processed independently.** Each specification produces `n_batches * diffusion_batch_size` designs, and the resulting design sets are returned in input order. `length` is the only field that may be specified without an `input_structure`. The `contig`, `unindex`, and `select_*` fields are resolved against the input atomic coordinates and are rejected by validation when no input structure is provided.
  * **The `contig` string specifies the design topology.** Comma-separated segments select chain-indexed residues from the input (`A40-60`), insert designed regions of variable length (`70-80`), or introduce a chain break (`/0`). The full grammar is documented in the [RFdiffusion3 input specification](https://github.com/RosettaCommons/foundry/blob/production/models/rfd3/docs/input.md).
  * **`num_timesteps` and `step_scale` are the principal parameters controlling design quality and diversity.** Increasing `num_timesteps` (default `200`) extends the number of denoising steps and generally improves designability at a linear cost in runtime. `step_scale` (default `1.5`) scales the per-step denoising magnitude. Lower values yield more diverse but less designable outputs. Higher values produce structures closer to the training distribution.
  * **`sampler_kind="symmetry"` is required for homo-oligomer design and must be paired with a `symmetry` group on the specification.** Setting `symmetry="C3"` on the specification is converted internally to the `{"id": "C3"}` `SymmetryConfig` required by the RFdiffusion3 sampler. The symmetric sampler also imposes a `gamma_0 > 0.5` constraint, which is enforced during configuration validation. Under symmetry, `length` is per-protomer (`length="100"` + `symmetry="C3"` → 300-residue trimer).
  * **Classifier-free guidance is disabled by default and enabled by setting `use_classifier_free_guidance=True`.** When disabled, `cfg_scale`, `cfg_features`, and `cfg_t_max` have no effect. When enabled, increasing `cfg_scale` (typical range 1.0 to 3.0) more strongly weights the conditioning features (active-site hydrogen-bond donors and acceptors, per-atom relative accessible surface area) during sampling.
  * **`partial_t` enables partial diffusion, in which the sampler refines an input structure rather than starting from random noise.** The input is perturbed with Gaussian noise at the specified amplitude in angstroms and then denoised back, supporting local redesign and topology-preserving diversification of an existing backbone. The RFdiffusion3 `InputSpecification` reference lists 5.0 to 15.0 angstroms as a recommended range, but the [partial-diffusion documentation](https://github.com/RosettaCommons/foundry/blob/production/models/rfd3/docs/input.md#partial-diffusion) notes that `partial_t` is nonlinear and recommends beginning near 2 angstroms and increasing gradually.
  * **`is_non_loopy` is the only secondary-structure conditioning parameter available.** Setting it on `RFdiffusion3DesignSpec` to `True` biases the sampler toward fewer loops and substantially more helical content, with reduced sheet content. Setting it to `False` biases toward more loops and correspondingly fewer helices. Leaving it `None` (the default) applies no topology preference. The parameter is a single boolean flag and offers no per-residue or fractional control.
  * **Finer sampler tuning is grouped under the `sampler_tuning` field, a typed `RFdiffusion3SamplerTuning` whose settings map to the upstream `inference_sampler` block:** the noise schedule (`noise_scale`, `p`, `s_trans`), the stochasticity threshold `gamma_min` (paired with `gamma_0`), and the motif-noise settings `allow_realignment` / `s_jitter_origin` (effective only for motif-conditioned designs). Each defaults to `None` and is forwarded to the sampler only when set, otherwise inheriting the checkpoint's upstream default. Pass them as a dict, e.g. `RFdiffusion3Config(sampler_tuning={"noise_scale": 1.003})`; any other valid `inference_sampler` setting (e.g. `cfg_t_max`) may be included and is forwarded verbatim.
</div>

## Toolkit Notes

These apply to every RFdiffusion3 tool in this toolkit (`rfdiffusion3-design`).

* **A GPU is required for any practical use.** CPU execution is supported via `device="cpu"` but is prohibitively slow for typical workloads. The default execution environment uses CUDA.
* **GPU memory consumption scales with `diffusion_batch_size` and the length of the designs.** When GPU memory is exhausted, first reduce `diffusion_batch_size`. If memory exhaustion persists, set `low_memory_mode=True` to enable memory-efficient tokenization at the cost of throughput.
* **Designs are returned as a structure together with a sequence and carry no built-in confidence score.** A standard validation procedure is to score the designed sequence against the designed structure with [ProteinMPNN](https://bio-pro.mintlify.app/tools/inverse-folding/proteinmpnn), then predict the structure of the designed sequence with [ESMFold](https://bio-pro.mintlify.app/tools/structure-prediction/esmfold) or [Boltz2](https://bio-pro.mintlify.app/tools/structure-prediction/boltz2) and compare the predicted backbone to the designed backbone.
* **Each design exposes `structure` (coordinates) and a predictor-ready `complex` (`Complex`).** `complex` carries the per-chain sequences and entity types; feed `design.complex` straight to a structure predictor. A chain's sequence is `design.complex.chains[i].sequence`.
* **Output chains are returned with positional IDs (`A`, `B`, ...) in emission order.** Symmetric designs are emitted with transformation-suffixed chain IDs (e.g. `A1, A2, A3` for a C3 trimer); these are normalized to `A, B, C` so a chain's ID is its position. Identify a chain by position or sequence rather than assuming a fixed semantic role.
* **`seed` does not guarantee bit-exact reproducibility.** The diffusion sampler relies on non-deterministic CUDA operations, so repeated runs with the same seed will produce different designs. Generate and rank a batch of designs rather than relying on a single seeded sample.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_design/rfdiffusion3/examples/example.ipynb) for a copy-paste-ready walkthrough.
</Tip>

## Infrastructure Guides

The following guides cover how to run tools efficiently and at scale.

<CardGroup cols={2}>
  <Card title="Tool Persistence" icon="repeat" href="/docs/tools/guides/tool-persistence">Keep a tool's model warm across calls instead of reloading it every invocation.</Card>
  <Card title="Device Management" icon="cpu" href="/docs/tools/guides/device-management">How GPUs are allocated to tools and how to target specific devices.</Card>
  <Card title="Parallel Execution" icon="layers" href="/docs/tools/guides/parallel-execution">Fan a batch of inputs out across multiple GPUs.</Card>
</CardGroup>
