> ## 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.

# Boltz-2

> Boltz-2 is an openly licensed biomolecular structure prediction model from the [MIT Jameel Clinic](https://jclinic.mit.edu/) and [Recursion](https://www.recursion.com/), built in the AlphaFold3 family: a diffusion model that predicts the joint 3D structure of complexes mixing proteins, DNA, RNA, and small-molecule ligands, together with the binding affinity of a small molecule against a protein target. This toolkit runs Boltz-2 structure and affinity prediction on a local GPU, with optional ColabFold multiple-sequence alignments.

<div class="page-hero"><img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/boltz2/hero.png" alt="Boltz-2" /><div class="tool-org-badges page-hero-badges"><a href="/docs/tools/organizations/boltz" class="tool-org-badge" style={{background: "#1a1a2e"}} title="Boltz"><img src="https://mintcdn.com/bio-pro/UeudeF7pW-Dj-pIN/assets/images/cached/36a76d515bf7.png?fit=max&auto=format&n=UeudeF7pW-Dj-pIN&q=85&s=d73a2cce4e60e021d75b3b2caf2e92d9" alt="" class="tool-org-badge-logo" width="512" height="512" data-path="assets/images/cached/36a76d515bf7.png" /> Boltz</a> <a href="/docs/tools/organizations/mit-jameel-clinic" class="tool-org-badge" style={{background: "#A31F34"}} title="MIT Jameel Clinic"><img src="https://mintcdn.com/bio-pro/UeudeF7pW-Dj-pIN/assets/images/cached/1b19a19f88c7.png?fit=max&auto=format&n=UeudeF7pW-Dj-pIN&q=85&s=10230467db9fb147674aea6cebc5968a" alt="" class="tool-org-badge-logo" width="32" height="32" data-path="assets/images/cached/1b19a19f88c7.png" /> MIT Jameel Clinic</a> <a href="/docs/tools/organizations/recursion" class="tool-org-badge" style={{background: "#0B0B45"}} title="Recursion"><img src="https://mintcdn.com/bio-pro/UeudeF7pW-Dj-pIN/assets/images/cached/732f1fb1b8c3.png?fit=max&auto=format&n=UeudeF7pW-Dj-pIN&q=85&s=180aa78503d58078e12516e00f3c629a" alt="" class="tool-org-badge-logo" width="132" height="132" data-path="assets/images/cached/732f1fb1b8c3.png" /> Recursion</a></div></div>

<Note>
  **License:** Boltz-2 is open source and free for academic and commercial use under an MIT license. Please refer to [the license](https://github.com/jwohlwend/boltz/blob/main/LICENSE) for full terms.
</Note>

<p class="entity-disclaimer">Proto is not affiliated with Boltz, MIT Jameel Clinic, and Recursion. This toolkit is open source and builds on the implementations produced by these organizations. Product names, logos, and trademarks are the property of their respective owners.</p>

<hr class="entity-rule" />

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

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

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

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

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

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

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

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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-boltz2" 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/jwohlwend/boltz" target="_blank" class="tab-panel github-panel" data-tab="github-boltz2">
  <div class="gh-card-wrap">
    <img src="https://opengraph.githubassets.com/1/jwohlwend/boltz" class="gh-card-img img-fallback" alt="jwohlwend/boltz" />

    <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> jwohlwend/boltz</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.06.14.659707" target="_blank" class="tab-panel preprint-panel" data-tab="preprint-boltz2">
  <div class="paper-info">
    <div class="paper-title">Boltz-2: Towards Accurate and Efficient Binding Affinity Prediction</div>
    <div class="paper-meta">Saro Passaro, Gabriele Corso, ... Regina Barzilay</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-boltz2">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{passaro2025boltz2,
      title={Boltz-2: Towards Accurate and Efficient Binding Affinity Prediction},
      author={Passaro, Saro and Corso, Gabriele and Wohlwend, Jeremy and Reveiz, Mateo and Thaler, Stephan and Somnath, Vignesh Ram and Getz, Noah and Portnoi, Tally and Roy, Julien and St{\"a}rk, Hannes and Kwabi-Addo, David and Beaini, Dominique and Jaakkola, Tommi and Barzilay, Regina},
      journal={bioRxiv},
      year={2025},
      doi={10.1101/2025.06.14.659707},
      publisher={Cold Spring Harbor Laboratory}
    }

    @article{wohlwend2024boltz1,
      title={Boltz-1: Democratizing Biomolecular Interaction Modeling},
      author={Wohlwend, Jeremy and Corso, Gabriele and Passaro, Saro and Reveiz, Mateo and Leidal, Ken and Swanson, Wojtek and Turnbull, Robert and Shuaibi, Muhammed and Ahdritz, Gustaf and Getz, Gad and Jaakkola, Tommi and Barzilay, Regina},
      journal={bioRxiv},
      year={2024},
      doi={10.1101/2024.11.19.624167},
      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_prediction/boltz2" target="_blank" class="tab-panel source-panel" data-tab="source-boltz2">
  <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\_prediction/boltz2</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_prediction/boltz2/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-boltz2">
  <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-boltz2">
  <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/boltz2-affinity" target="_blank" class="proto-action-btn"><span>Boltz-2 Affinity</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>
    <a href="https://proto.evodesign.org/tools/boltz2-prediction" target="_blank" class="proto-action-btn"><span>Boltz2 Structure Prediction</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/bviggiano" target="_blank" rel="noopener" title="bviggiano: 40 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/dguo8412" target="_blank" rel="noopener" title="dguo8412: 29 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/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><a class="entity-contributor" href="https://github.com/brianhie" target="_blank" rel="noopener" title="brianhie: 1 commit"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/6365340?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">brianhie</span></a></span></div>

| Function                | Description                                                                                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_boltz2_affinity()` | Predicted binding affinity (log10 IC50 μM) and binder probability for a small molecule against a ... (GPU) | <a href="#api-run-boltz2-affinity" 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_prediction/boltz2/boltz2_affinity.py#L247" 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> |
| `run_boltz2()`          | Multi-modal structure prediction using Boltz2 (GPU)                                                        | <a href="#api-run-boltz2" 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_prediction/boltz2/boltz2.py#L312" 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

Boltz-2 ([Passaro et al., 2025](https://doi.org/10.1101/2025.06.14.659707)) predicts the joint 3D structure of a biomolecular assembly from the sequences and chemical components it contains. It builds on Boltz-1, one of the most widely used open-source alternatives to AlphaFold3, extending that co-folding model with a binding-affinity module, improved controllability, and additional training data. Like AlphaFold3, a single model folds complexes that mix proteins, DNA, RNA, and small-molecule ligands and predicts how those components are arranged relative to one another. Each protein chain can be paired with a multiple-sequence alignment (MSA) of evolutionarily related sequences, whose covariation patterns supply the evolutionary signal the model uses to place residues.

Architecturally, Boltz-2 reproduces AlphaFold3: it carries a single representation of the input tokens and a pairwise representation over token pairs, refines them through an AlphaFold3-style trunk, and generates all-atom coordinates with a diffusion module that starts from noise and iteratively denoises into a structure. Several structures can be sampled per complex and ranked by a confidence score, reported as a complex predicted local distance difference test (pLDDT) for local reliability, a predicted aligned error (PAE) for the relative placement of any two tokens, and predicted template-modeling (pTM) and interface predicted template-modeling (ipTM) scores that summarize overall and interface accuracy. Beyond structure, Boltz-2 adds a binding-affinity module that approaches the accuracy of physics-based free-energy perturbation while running more than 1000 times faster.

The reference implementation is open-sourced at [jwohlwend/boltz](https://github.com/jwohlwend/boltz) under the MIT license, covering the code, weights, and training pipeline for both academic and commercial use, with the released weights distributed as `boltz-community/boltz-2`. It was developed by the Boltz team at the [MIT Jameel Clinic](https://jclinic.mit.edu/) together with [Recursion](https://www.recursion.com/).

### Learning Resources

* [Boltz-2: democratizing biomolecular interaction modeling](https://boltz.bio/boltz2) (MIT Jameel Clinic and Recursion) - an accessible overview of Boltz-2, including how it extends on the work of Boltz-1 and its binding-affinity capability.

## Tools

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

<div class="tool-section-card tool-section-card--predict">
  ### Boltz-2 Structure Prediction (`boltz2-prediction`)

  Predicts the 3D structure of a biomolecular complex. Each input complex can combine protein, DNA, RNA, and ligand chains; the assembly is folded by Boltz-2 and returned as a predicted `Structure` per complex with confidence metrics: a complex pLDDT, pTM, interface pTM, per-chain and pairwise-chain pTM/ipTM, and predicted aligned error.

  #### 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_prediction/boltz2/boltz2.py#L40" 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: Boltz2Input">
      <ParamField path="complexes" type="List[Complex]" required>
        List of complexes to predict structures for. Inherited from `StructurePredictionInput`. Each complex can contain multiple chains of proteins, DNA, RNA, and/or ligands.

        <Expandable title="Complex">
          <ParamField path="chains" type="List[Chain | Fragment]" required>
            Chains in the complex, in input order.
          </ParamField>
        </Expandable>
      </ParamField>

      <ParamField path="msas" type="array">
        Pre-computed MSAs, one entry per complex. Each entry is a `ComplexMSAs` (per-chain MSAs keyed by chain index); `paired=True` marks rows taxonomy-aligned across chains. Populated by preprocess() or supplied directly.
      </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_prediction/boltz2/boltz2.py#L176" 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: Boltz2Config">
      <ParamField path="recycling_steps" type="integer" default="3">
        Iterative refinement passes through the model. Higher = more accurate but slower. Default 3 (matches upstream).
      </ParamField>

      <ParamField path="sampling_steps" type="integer" default="200">
        Denoising steps in the diffusion process. Higher = more refined but slower. Default 200 (matches upstream).
      </ParamField>

      <ParamField path="diffusion_samples" type="integer" default="1">
        Independent structure samples per complex; the best by confidence is returned. Default 1 (matches upstream).
      </ParamField>

      <ParamField path="step_scale" type="number" default="1.5">
        Diffusion step size (typical range 1.0-2.0). Lower = more sample diversity. Default 1.5 (matches upstream).
      </ParamField>

      <ParamField path="max_msa_seqs" type="integer" default="8192">
        Maximum number of MSA sequences fed into the model. Lower to reduce GPU memory on deep MSAs. Default 8192.
      </ParamField>

      <ParamField path="subsample_msa" type="boolean" default="False">
        Randomly subsample the MSA on each run for sample diversity (loses determinism). Default False.
      </ParamField>

      <ParamField path="num_workers" type="integer" default="2">
        Number of dataloader workers for prediction. Automatically set to the minimum of available CPU cores or 4. Must be at least 1. Default: `min(cpu_count, 4)`.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Whether to print status messages during execution including MSA generation, model loading, and prediction progress. Inherited from `StructurePredictionConfig`. Default: `False`.
      </ParamField>

      <ParamField path="device" type="string" default="cuda">
        Device to run the model on. Options include `"cuda"` (NVIDIA GPU), `"cpu"` (CPU execution), or specific GPU devices like `"cuda:0"`. Structure prediction is computationally intensive and strongly benefits from GPU acceleration. Default: `"cuda"`.
      </ParamField>

      <ParamField path="timeout" type="integer" default="1200">
        Maximum execution time in seconds. `None` waits indefinitely. Default: 1200.
      </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>

      <ParamField path="include_pae_matrix" type="boolean" default="False">
        Attach `pae` (`avg_pae` always emitted). Default: `False`.
      </ParamField>

      <ParamField path="use_msa" type="boolean" default="True">
        Whether to generate and use Multiple Sequence Alignments (MSAs) for protein chains using MMseqs2 homology search. Supplied MSAs are always used and override `use_msa=False`. Inherited from `MSAStructurePredictionConfig`. Default: `True`.
      </ParamField>

      <ParamField path="msa_search_config" type="Mmseqs2HomologySearchConfig">
        Configuration for MMseqs2 homology search (MSA generation). Only used when `use_msa=True`. Inherited from `MSAStructurePredictionConfig`. Default: `None`.
      </ParamField>

      <ParamField path="pair_heterocomplex_msas" type="boolean" default="True">
        Whether heterocomplex protein chains should use taxonomy-paired MSA generation. Inherited from `MSAStructurePredictionConfig`. Default: `True`.
      </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_prediction/boltz2/boltz2.py#L166" 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: Boltz2Output">
      <ResponseField name="structures" type="List[Structure]" required>
        Predicted structures, each carrying a :class:`Boltz2Metrics` instance on `.metrics`.

        <Expandable title="Structure">
          <ResponseField name="structure" type="string" required>
            Raw structure content in PDB or CIF format.
          </ResponseField>

          <ResponseField name="structure_format" type="string">
            Format of the content string (auto-detected if omitted).
          </ResponseField>

          <ResponseField name="b_factor_type" type="BFactorType">
            What the B-factor column represents.
          </ResponseField>

          <ResponseField name="source" type="string">
            Optional source identifier (filepath or tool name).
          </ResponseField>

          <ResponseField name="metrics" type="Metrics">
            Associated metrics (e.g., pLDDT, pTM scores, per-chain lists, pairwise matrices). None values are stripped at construction.
          </ResponseField>
        </Expandable>
      </ResponseField>

      **Metrics** (one set per `structures` item)

      | Metric             | Type                | Range       | Availability                   |
      | ------------------ | ------------------- | ----------- | ------------------------------ |
      | `confidence_score` | float               | 0.0 to 1.0  | always                         |
      | `ptm`              | float               | 0.0 to 1.0  | always                         |
      | `iptm`             | float               | 0.0 to 1.0  | always                         |
      | `chains_ptm`       | list\[float]        | 0.0 to 1.0  | always                         |
      | `pair_chains_iptm` | list\[list\[float]] | 0.0 to 1.0  | always                         |
      | `avg_pae`          | float               | 0.0 to 32.0 | always                         |
      | `pae`              | list\[list\[float]] | 0.0 to 32.0 | when include\_pae\_matrix=True |
      | `ligand_iptm`      | float               | 0.0 to 1.0  | depends on complex composition |
      | `protein_iptm`     | float               | 0.0 to 1.0  | depends on complex composition |
      | `complex_plddt`    | float               | 0.0 to 1.0  | depends on complex composition |
      | `complex_iplddt`   | float               | 0.0 to 1.0  | depends on complex composition |
      | `complex_pde`      | float               | ≥ 0.0       | depends on complex composition |
      | `complex_ipde`     | float               | ≥ 0.0       | depends on complex composition |
    </Accordion>
  </div>

  #### Applications

  This tool predicts the structure of multi-component assemblies such as protein-DNA and protein-RNA complexes or protein-ligand binding poses. Running it on a multi-chain complex also estimates how confidently the components are placed relative to each other through interface pTM and PAE, which is informative for assessing predicted interfaces.

  #### Usage Tips

  * **`use_msa` defaults to `True`.** A ColabFold search generates an MSA for each protein chain; set it `False` for single-sequence prediction, or attach precomputed MSAs to the input. Protein chains with no detectable homologs fall back to an empty MSA.
  * **Structures come from a diffusion process.** `diffusion_samples` (default `1`) independent samples are drawn per complex and the best is kept by `confidence_score`; `sampling_steps` (default `200`) sets the number of denoising steps and `step_scale` (default `1.5`) trades accuracy for sample diversity, where lower values are more diverse.
  * **`recycling_steps` (default `3`) trades accuracy for time.** More recycling iterations refine the prediction but increase runtime.
  * **Confidence is reported as a complex pLDDT, pTM, ipTM, and PAE.** `confidence_score`, the primary metric, is `iptm` for multi-chain complexes and `ptm` for a single chain; `complex_plddt` is on a 0 to 1 scale and PAE is in angstroms (0 to about 32). Set `include_pae_matrix` to attach the full per-token PAE matrix.
  * **Multi-modal inputs.** Protein, DNA, RNA, and ligand entities are supported; chain modifications are not.

  <a name="api-run-boltz2-affinity" />
</div>

<div class="tool-section-card">
  ### Boltz-2 Affinity (`boltz2-affinity`)

  Predicts the binding affinity of a single small-molecule ligand against a protein target. Each input complex must contain at least one protein chain and at least one ligand chain; the binder is the complex's sole ligand (auto-detected) or the chain named by `binder_chain`. Each complex returns a predicted `Structure` with the binding pose in the CIF and the affinity scores on `structure.metrics`: `affinity_pred_value` (log10 IC50 in μM; lower is stronger binding) and `affinity_probability_binary` (binder probability in \[0, 1]).

  #### 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_prediction/boltz2/boltz2_affinity.py#L70" 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: Boltz2AffinityInput">
      <ParamField path="binder_chain" type="array">
        Ligand to score per complex; one value broadcasts to all complexes, None auto-detects each complex's sole ligand.
      </ParamField>

      <ParamField path="complexes" type="List[Complex]" required>
        Each needs >=1 protein target and >=1 ligand chain.

        <Expandable title="Complex">
          <ParamField path="chains" type="List[Chain | Fragment]" required>
            Chains in the complex, in input order.
          </ParamField>
        </Expandable>
      </ParamField>

      <ParamField path="msas" type="array">
        Inherited per-complex MSAs; each entry is a `ComplexMSAs` (`paired=True` for taxonomy-paired heterocomplexes).
      </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_prediction/boltz2/boltz2_affinity.py#L170" 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: Boltz2AffinityConfig">
      <ParamField path="affinity_mw_correction" type="boolean" default="False">
        Apply molecular-weight correction to the affinity value head. Default: `False`.
      </ParamField>

      <ParamField path="sampling_steps_affinity" type="integer" default="200">
        Denoising steps for the affinity pass. Default: `200`.
      </ParamField>

      <ParamField path="diffusion_samples_affinity" type="integer" default="5">
        Diffusion samples per complex for the affinity pass. Default: `5`.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Whether to print status messages during execution including MSA generation, model loading, and prediction progress. Inherited from `StructurePredictionConfig`. Default: `False`.
      </ParamField>

      <ParamField path="device" type="string" default="cuda">
        Device to run the model on. Options include `"cuda"` (NVIDIA GPU), `"cpu"` (CPU execution), or specific GPU devices like `"cuda:0"`. Structure prediction is computationally intensive and strongly benefits from GPU acceleration. Default: `"cuda"`.
      </ParamField>

      <ParamField path="timeout" type="integer" default="1200">
        Maximum execution time in seconds. `None` waits indefinitely. Default: 1200.
      </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>

      <ParamField path="include_pae_matrix" type="boolean" default="False">
        No-op for affinity; excluded from the cache key. Default: `False`.
      </ParamField>

      <ParamField path="use_msa" type="boolean" default="True">
        Inherited. Use MMseqs2 MSAs for protein chains. Supplied MSAs are always used and override `use_msa=False`. Default: `True`.
      </ParamField>

      <ParamField path="msa_search_config" type="Mmseqs2HomologySearchConfig">
        Inherited. MMseqs2 homology-search config. Default: `None`.
      </ParamField>

      <ParamField path="pair_heterocomplex_msas" type="boolean" default="True">
        Inherited. Use taxonomy-paired MSA generation for heterocomplex protein chains. Default: `True`.
      </ParamField>

      <ParamField path="recycling_steps" type="integer" default="3">
        Inherited. Refinement passes for the structure pass. Default: `3`.
      </ParamField>

      <ParamField path="sampling_steps" type="integer" default="200">
        Inherited. Denoising steps for the structure pass. Default: `200`.
      </ParamField>

      <ParamField path="diffusion_samples" type="integer" default="1">
        Inherited. Structure samples per complex. Default: `1`.
      </ParamField>

      <ParamField path="step_scale" type="number" default="1.5">
        Inherited. Diffusion step size for the structure pass. Default: `1.5`.
      </ParamField>

      <ParamField path="max_msa_seqs" type="integer" default="8192">
        Inherited. Cap on MSA depth fed into the model. Default: `8192`.
      </ParamField>

      <ParamField path="subsample_msa" type="boolean" default="False">
        Inherited. Randomly subsample the MSA each run. Default: `False`.
      </ParamField>

      <ParamField path="num_workers" type="integer" default="2">
        Inherited. Dataloader workers for prediction. Default: `min(cpu_count, 4)`.
      </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_prediction/boltz2/boltz2_affinity.py#L166" 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: Boltz2AffinityOutput">
      <ResponseField name="structures" type="List[Structure]" required>
        List of predicted structures, one per input complex. Each structure contains the 3D coordinates in CIF format along with model-specific confidence metrics. The order matches the input complexes order.

        <Expandable title="Structure">
          <ResponseField name="structure" type="string" required>
            Raw structure content in PDB or CIF format.
          </ResponseField>

          <ResponseField name="structure_format" type="string">
            Format of the content string (auto-detected if omitted).
          </ResponseField>

          <ResponseField name="b_factor_type" type="BFactorType">
            What the B-factor column represents.
          </ResponseField>

          <ResponseField name="source" type="string">
            Optional source identifier (filepath or tool name).
          </ResponseField>

          <ResponseField name="metrics" type="Metrics">
            Associated metrics (e.g., pLDDT, pTM scores, per-chain lists, pairwise matrices). None values are stripped at construction.
          </ResponseField>
        </Expandable>
      </ResponseField>

      **Metrics** (one set per `structures` item)

      | Metric                         | Type  | Range      | Availability                         |
      | ------------------------------ | ----- | ---------- | ------------------------------------ |
      | `affinity_pred_value`          | float | unbounded  | always                               |
      | `affinity_probability_binary`  | float | 0.0 to 1.0 | always                               |
      | `affinity_pred_value1`         | float | unbounded  | when ensemble emits per-model values |
      | `affinity_probability_binary1` | float | 0.0 to 1.0 | when ensemble emits per-model values |
      | `affinity_pred_value2`         | float | unbounded  | when ensemble emits per-model values |
      | `affinity_probability_binary2` | float | 0.0 to 1.0 | when ensemble emits per-model values |
    </Accordion>
  </div>

  #### Applications

  This tool ranks candidate ligands against a chosen protein target, pairing a predicted affinity with a predicted binding pose — supporting hit discovery, structure-activity studies, and library-screening loops over a list of SMILES.

  #### Usage Tips

  * **`affinity_pred_value` is on a log10-IC50 (μM) scale.** Values below `0` (sub-μM IC50) indicate strong binders; positive values indicate weaker binding. `affinity_probability_binary` is an independent binder probability and can stay high even when the IC50 estimate is uncertain.
  * **One binder ligand per complex.** The binder is auto-detected when a complex has exactly one ligand; set `binder_chain` to name it when a complex has several. `binder_chain` is per-complex: pass one value (e.g. `["B"]`) to apply it to every complex, or one per complex (e.g. `["B", None]`, where `None` auto-detects). The binder must be a ligand chain with at most 128 heavy atoms.
  * **Structure-side and affinity-side settings are independent.** `recycling_steps`, `sampling_steps`, `diffusion_samples`, and MSA settings control the structure pass that runs first; `sampling_steps_affinity` (default `200`) and `diffusion_samples_affinity` (default `5`) control the affinity pass. Set `affinity_mw_correction` to apply Boltz-2's molecular-weight correction to the affinity value head.
  * **Stochastic predictions.** The diffusion-based affinity head is stochastic; set `seed` for reproducibility.
</div>

## Toolkit Notes

These apply to every Boltz-2 tool in this toolkit (`boltz2-prediction`, `boltz2-affinity`).

* **Requires a GPU.** Boltz-2 runs through a PyTorch backend and needs an NVIDIA GPU; CPU execution is not practical.
* **MSA-based and AlphaFold3-style.** Boltz-2 uses optional MSAs and a diffusion process. `subsample_msa` and unseeded runs are intentionally non-deterministic.
* **Shared model weights.** Both tools run the same bundled Boltz-2 checkpoint; the affinity head ships with it, so `boltz2-affinity` needs no extra download or environment.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/structure_prediction/boltz2/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>
