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

# Germinal

> Germinal is a complete pipeline for de novo, epitope-targeted antibody design (single-domain VHHs and scFvs), from [Mille-Fragoso et al., 2026](https://www.nature.com/articles/s41587-026-03187-0). This toolkit wraps it as one tool, `germinal-design`, that runs a full design campaign against one target per call: AF2-Multimer hallucination, AbMPNN sequence redesign, and structure validation with PyRosetta interface filtering.

<div class="page-hero"><img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/germinal/hero.png" alt="Germinal" /><div class="tool-org-badges page-hero-badges"><a href="/docs/tools/organizations/arc-institute" class="tool-org-badge tool-org-badge-light" style={{background: "#e0e0e0"}} title="Arc Institute"><img src="https://mintcdn.com/bio-pro/_UGa2jUMKeVPCbLk/assets/images/cached/2f286ca379a2.png?fit=max&auto=format&n=_UGa2jUMKeVPCbLk&q=85&s=8dfa2f559c96e84c86ef4d3df3cb39d7" alt="" class="tool-org-badge-logo" width="200" height="200" data-path="assets/images/cached/2f286ca379a2.png" /> Arc Institute</a></div></div>

<p class="entity-disclaimer">Proto is not affiliated with Arc Institute. 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-germinal" id="none-germinal" class="tab-radio-input" />

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

<input type="radio" name="tab-germinal" id="paper-germinal" class="tab-radio-input" />

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

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

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

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

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-germinal" 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-germinal" 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="paper-germinal" class="tool-tab tab-open badge-paper"><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> Publication</label><label for="none-germinal" class="tool-tab tab-close badge-paper"><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> Publication</label></span> <span class="tool-tab-wrap"><label for="cite-germinal" 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-germinal" 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-germinal" 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-germinal" 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-germinal" 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-germinal" 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-germinal" 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-germinal" 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/SantiagoMille/germinal" target="_blank" class="tab-panel github-panel" data-tab="github-germinal">
  <div class="gh-card-wrap">
    <img src="https://opengraph.githubassets.com/1/SantiagoMille/germinal" class="gh-card-img img-fallback" alt="SantiagoMille/germinal" />

    <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> SantiagoMille/germinal</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.1038/s41587-026-03187-0" target="_blank" class="tab-panel paper-panel" data-tab="paper-germinal">
  <div class="paper-info">
    <div class="paper-title">Efficient generation of epitope-targeted antibodies with Germinal</div>
    <div class="paper-meta">Luis S. Mille-Fragoso, Claudia L. Driscoll, ... Xiaojing J. Gao</div>
    <div class="paper-meta paper-venue">Nature Biotechnology (2026)</div>
  </div>

  <span class="panel-goto-btn pub-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 paper</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-germinal">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{mille_fragoso_2026_germinal,
      title={Efficient generation of epitope-targeted antibodies with Germinal},
      author={Mille-Fragoso, Luis S. and Driscoll, Claudia L. and Wang, John N. and Dai, Haoyu and Widatalla, Talal and Zhang, Jim L. and Zhang, Xiaowei and Rao, Bing and Feng, Liang and Hie, Brian L. and Gao, Xiaojing J.},
      journal={Nature Biotechnology},
      pages={1--10},
      year={2026},
      month={Jun},
      publisher={Springer Science and Business Media LLC},
      doi={10.1038/s41587-026-03187-0},
      url={https://www.nature.com/articles/s41587-026-03187-0}
    }
    ```
  </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/binder_design/germinal" target="_blank" class="tab-panel source-panel" data-tab="source-germinal">
  <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/binder\_design/germinal</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/binder_design/germinal/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-germinal">
  <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-germinal">
  <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/germinal-design" target="_blank" class="proto-action-btn"><span>Germinal Antibody 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/bviggiano" target="_blank" rel="noopener" title="bviggiano: 29 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: 10 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: 2 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_germinal_design()` | De novo epitope-targeted antibody design (VHH or scFv) using the Germinal pipeline (GPU) | <a href="#api-run-germinal-design" 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/binder_design/germinal/germinal_design.py#L820" 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> |

<Note>
  **License:** Germinal's own code is licensed under Apache-2.0, but it runs as a pipeline that depends on bundled components and model weights under separate license terms, including non-commercial or restricted-use terms. The bundled model weights are licensed under CC-BY-4.0. As a whole the pipeline has restrictions around commercial use and may require explicit attribution when utilized.

  Bundled dependencies, each under its own license:

  * [PyRosetta](https://bio-pro.mintlify.app/tools/structure-scoring/pyrosetta): Custom (PyRosetta Software License)
  * [IgLM](https://github.com/Graylab/IgLM): Custom (IgLM License)

  Review the [code license](https://github.com/SantiagoMille/germinal/blob/main/LICENSE) and the [model weights license](https://github.com/google-deepmind/alphafold#model-parameters-license) before any commercial use or redistribution.
</Note>

## Background

Germinal produces epitope-targeted antibody binders computationally from a target structure and an epitope definition, an alternative to animal- or library-based discovery such as immunization, phage display, and hybridoma screening. The Germinal publication reports experimental binding success rates of 4 to 22 percent across the benchmarks it evaluates.

Germinal combines [ColabDesign](https://github.com/sokrypton/ColabDesign) with AlphaFold2-Multimer hallucination, antibody language-model gradients ([IgLM](https://github.com/Graylab/IgLM), [AbLang2](https://github.com/oxpig/AbLang2)), AbMPNN sequence redesign ([Dreyer et al., 2023](https://arxiv.org/abs/2310.19513)), and structure validation against [Chai-1](https://github.com/chaidiscovery/chai-lab), [AlphaFold3](https://github.com/google-deepmind/alphafold3), or [Protenix](https://github.com/bytedance/Protenix), followed by [PyRosetta](https://www.pyrosetta.org/) interface scoring and a multi-stage filter cascade. Relative to earlier antibody hallucination methods, Germinal additionally applies epitope-hotspot conditioning (the optimization is constrained so the binder contacts the user-specified residues), antibody language-model guidance (biasing designs toward sequences resembling natural antibodies), an early filtering stage that discards weak candidate designs before the computationally expensive structure-prediction step, and a structure-validation model that is independent of the model used during hallucination.

## Tools

<a name="api-run-germinal-design" />

<div class="tool-section-card tool-section-card--design">
  ### Germinal Antibody Design (`germinal-design`)

  Runs one complete Germinal antibody-design campaign against a single target. Given a target PDB, a target chain, and the epitope hotspot residues, it runs a fixed (version-pinned) copy of the upstream `run_germinal.py` script, repeating hallucination, then AbMPNN redesign, then structure validation and filtering until either `max_trajectories` or `max_passing_designs` is reached, and returns ranked designs with predicted complex structures and per-design metrics (interface pTM, pAE, pDockQ2, pLDDT, and others). Upstream configuration defaults are preserved exactly; the only change is setting the structure-validation model (`structure_model`) to Chai-1, because Chai-1 installs automatically.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/binder_design/germinal/germinal_design.py#L357" 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: GerminalInput">
      <ParamField path="target_pdb" type="Structure" required>
        Target structure. Accepts a file path, raw PDB/CIF content string, `Structure` object, or a dict in the shape produced by `Structure.model_dump(mode='json')`. Must include a chain matching `target_chain`.

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

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

          <ParamField path="b_factor_type" type="BFactorType" default="unspecified">
            What the B-factor column represents.
          </ParamField>

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

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

      <ParamField path="target_chain" type="string" default="A">
        Chain ID(s) of the target. Single letter (e.g. `"A"`) or comma-separated for multi-chain targets (e.g. `"A,B"`).
      </ParamField>

      <ParamField path="binder_chain" type="string" default="B">
        Chain ID assigned to the designed binder. Default `"B"` (matches Germinal's source convention in `configs/target/pdl1.yaml`).
      </ParamField>

      <ParamField path="hotspots" type="List[string]">
        Hotspot residues on the target in `"<chain_letter><resnum>"` format (e.g. `["A37", "A39", "A41"]`). These are the residues the designed binder is forced to contact.
      </ParamField>

      <ParamField path="target_name" type="string">
        Short identifier for this target. Used as the Hydra `target=<name>` selector and as a prefix in output filenames. If `None`, the inference layer derives one from a hash of the PDB content.
      </ParamField>

      <ParamField path="hotspot_residue" type="string">
        Optional single residue (e.g. `"W40"`) used as the Chai-1 contact-restraint anchor. Mirrors Germinal's `hotspot_residue` field in `configs/target/*.yaml`.
      </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/binder_design/germinal/germinal_design.py#L446" 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: GerminalConfig">
      <ParamField path="design_type" type="enum" default="vhh">
        Run preset selector.

        Available options: `vhh`, `scfv`
      </ParamField>

      <ParamField path="max_trajectories" type="integer" default="10000">
        Hard cap on total trajectories before stopping.
      </ParamField>

      <ParamField path="max_hallucinated_trajectories" type="integer" default="1000">
        Cap on trajectories that complete the hallucination stage (before MPNN refinement).
      </ParamField>

      <ParamField path="max_passing_designs" type="integer" default="100">
        Stop early once this many designs pass all final filters.
      </ParamField>

      <ParamField path="structure_model" type="enum" default="chai">
        Cofolding backend for structure validation. Default `"chai"` (auto-installed); `"af3"` and `"protenix"` require user-provisioned weights/env (see README → Backend Configuration).

        Available options: `chai`, `af3`, `protenix`
      </ParamField>

      <ParamField path="plddt_threshold" type="number">
        Override final `external_plddt` (VHH: `> 0.87`, scFv: `> 0.85`). Distinct from upstream's in-loop `plddt_threshold` save filter — use `germinal_overrides`.
      </ParamField>

      <ParamField path="iptm_threshold" type="number">
        Override final `external_iptm` (preset: `> 0.74`).
      </ParamField>

      <ParamField path="ipae_threshold" type="number">
        Override final `external_pae` in Å (VHH: `< 7.5`, scFv: `< 8`).
      </ParamField>

      <ParamField path="ptm_threshold" type="number">
        Override final `external_ptm` (preset: `> 0.84`).
      </ParamField>

      <ParamField path="pdockq2_threshold" type="number">
        Override final `pdockq2` (preset: `> 0.23`).
      </ParamField>

      <ParamField path="germinal_overrides" type="Dict[string, any]">
        Arbitrary Hydra overrides for `run_germinal.py` (e.g. `{"logits_steps": 100, "weights_iptm": 1.0}`). Applied verbatim as `<key>=<value>` CLI args.
      </ParamField>

      <ParamField path="filter_overrides" type="Dict[string, Dict[string, Dict[string, any]]]">
        Override filter YAML values. Schema: `{"initial" | "final": {<filter_name>: {"value": <v>, "operator": <op>}}}`. Merged on top of the design\_type preset.
      </ParamField>

      <ParamField path="output_dir" type="string">
        Optional persistent output directory. If unset, a temp dir is used and discarded after the call.
      </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">
        Device for the Germinal subprocess. Requires `"cuda"` (CPU is unsupported).
      </ParamField>

      <ParamField path="timeout" type="integer">
        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/binder_design/germinal/germinal_design.py#L686" 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: GerminalOutput">
      <ResponseField name="designs" type="List[GerminalDesign]">
        All produced designs across the `accepted`, `redesign_candidate`, and `trajectory` stages.

        <Expandable title="GerminalDesign">
          <ResponseField name="sequence_heavy" type="string" required>
            Heavy chain (or VHH) amino-acid sequence.
          </ResponseField>

          <ResponseField name="sequence_light" type="string">
            Light chain sequence (scFv only).
          </ResponseField>

          <ResponseField name="structure" type="Structure" required>
            Predicted binder + target complex.
          </ResponseField>

          <ResponseField name="metrics" type="GerminalDesignMetrics" required>
            Per-design quality metrics.
          </ResponseField>

          <ResponseField name="stage_passed" type="enum" required>
            Highest pipeline stage this design reached.
          </ResponseField>

          <ResponseField name="design_id" type="string" required>
            Germinal's internal design identifier (`"<target>_<type>_s<seed>"` for trajectory-only designs, `"<target>_<type>_s<seed>_abmpnn_<j>"` after AbMPNN redesign).
          </ResponseField>

          <ResponseField name="trajectory_index" type="integer" required>
            Trajectory seed (parsed from `_s<seed>`). Germinal uses the seed as its unique trajectory identifier.
          </ResponseField>

          <ResponseField name="mpnn_index" type="integer" required>
            AbMPNN sample index (1-based; 0 for trajectory-only designs that never reached the redesign stage).
          </ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="pipeline_stats" type="Dict[string, integer]">
        Per-stage counts from Germinal's `failure_counts.csv` (trajectories attempted, designs accepted, and per-filter failure counts).
      </ResponseField>

      **Metrics**

      | Metric                                    | Type  | Range      | Availability     |
      | ----------------------------------------- | ----- | ---------- | ---------------- |
      | `plddt`                                   | float | 0.0 to 1.0 | always           |
      | `ptm`                                     | float | 0.0 to 1.0 | always           |
      | `i_ptm`                                   | float | 0.0 to 1.0 | always           |
      | `i_pae`                                   | float | ≥ 0.0      | always           |
      | `pae`                                     | float | ≥ 0.0      | always           |
      | `loss`                                    | float | unbounded  | always           |
      | `lm_ll`                                   | float | unbounded  | always           |
      | `helix`                                   | float | unbounded  | always           |
      | `beta_strand`                             | float | unbounded  | always           |
      | `clashes`                                 | int   | ≥ 0.0      | after filtering  |
      | `sc_rmsd`                                 | float | ≥ 0.0      | after filtering  |
      | `binder_near_hotspot`                     | bool  | unbounded  | after filtering  |
      | `cdr3_hotspot_contacts`                   | int   | ≥ 0.0      | after filtering  |
      | `percent_interface_cdr`                   | float | 0.0 to 1.0 | after filtering  |
      | `interface_shape_comp`                    | float | 0.0 to 1.0 | after filtering  |
      | `interface_hbonds`                        | int   | ≥ 0.0      | after filtering  |
      | `surface_hydrophobicity`                  | float | 0.0 to 1.0 | after filtering  |
      | `interface_hydrophobicity`                | float | ≥ 0.0      | after filtering  |
      | `pdockq2`                                 | float | 0.0 to 1.0 | after filtering  |
      | `external_plddt`                          | float | 0.0 to 1.0 | after validation |
      | `external_iptm`                           | float | 0.0 to 1.0 | after validation |
      | `external_ptm`                            | float | 0.0 to 1.0 | after validation |
      | `external_pae`                            | float | ≥ 0.0      | after validation |
      | `external_i_pae`                          | float | ≥ 0.0      | after validation |
      | `external_i_plddt`                        | float | 0.0 to 1.0 | after validation |
      | `external_plddt_binder`                   | float | 0.0 to 1.0 | after validation |
      | `external_chain_ptm`                      | float | 0.0 to 1.0 | after validation |
      | `external_binder_pae`                     | float | ≥ 0.0      | after validation |
      | `external_aggregate_score`                | float | unbounded  | after validation |
      | `ipsae`                                   | float | 0.0 to 1.0 | after validation |
      | `ipsae_pdockq2`                           | float | 0.0 to 1.0 | after validation |
      | `lis_lis`                                 | float | unbounded  | after validation |
      | `lis_lia`                                 | float | unbounded  | after validation |
      | `binder_score`                            | float | unbounded  | after filtering  |
      | `interface_packstat`                      | float | 0.0 to 1.0 | after filtering  |
      | `interface_dG`                            | float | unbounded  | after filtering  |
      | `interface_dSASA`                         | float | ≥ 0.0      | after filtering  |
      | `interface_dG_SASA_ratio`                 | float | unbounded  | after filtering  |
      | `interface_fraction`                      | float | 0.0 to 1.0 | after filtering  |
      | `interface_nres`                          | int   | ≥ 0.0      | after filtering  |
      | `interface_hbond_percentage`              | float | 0.0 to 1.0 | after filtering  |
      | `interface_delta_unsat_hbonds`            | int   | ≥ 0.0      | after filtering  |
      | `interface_delta_unsat_hbonds_percentage` | float | 0.0 to 1.0 | after filtering  |
      | `clashes_unrelaxed`                       | int   | ≥ 0.0      | after filtering  |
      | `hydrophobic_patches_binder`              | int   | ≥ 0.0      | after filtering  |
      | `hydrophobic_patches_struct`              | int   | ≥ 0.0      | after filtering  |
      | `sap_score`                               | float | unbounded  | after filtering  |
      | `cdr_sap`                                 | float | unbounded  | after filtering  |
      | `cdr_hotspot_contacts`                    | int   | ≥ 0.0      | after filtering  |
      | `percent_interface_cdr3`                  | float | 0.0 to 1.0 | after filtering  |
      | `alpha_interface`                         | float | 0.0 to 1.0 | after filtering  |
      | `beta_interface`                          | float | 0.0 to 1.0 | after filtering  |
      | `loops_interface`                         | float | 0.0 to 1.0 | after filtering  |
      | `alpha_all`                               | float | 0.0 to 1.0 | after filtering  |
      | `beta_all`                                | float | 0.0 to 1.0 | after filtering  |
      | `loops_all`                               | float | 0.0 to 1.0 | after filtering  |
      | `n_framework_mutations`                   | int   | ≥ 0.0      | after filtering  |
    </Accordion>
  </div>

  #### Applications

  This tool performs de novo therapeutic antibody discovery: generating epitope-targeted VHH or scFv binders against a chosen target. It requires only a target structure and an epitope definition, and produces a ranked set of designs with predicted complex structures and per-design quality metrics, ready for selection and experimental testing.

  #### Usage Tips

  * **`design_type` selects the run preset.** `"vhh"` (single-domain nanobody, the default) or `"scfv"`; each loads the upstream preset with different filter thresholds, so leave the `*_threshold` fields set to `None` to let the correct preset apply.
  * **Reduce `max_trajectories` when testing.** The upstream default of `10000` corresponds to a run that takes hours to days; use a small value while testing, and set `max_passing_designs` below `max_trajectories` to stop early once enough designs pass the filters.
  * **`structure_model` selects the structure-validation model.** Validation uses a model independent of the hallucination step. The published filter thresholds were calibrated against AlphaFold3, so acceptance rates may differ under the `"chai"` default and the `*_threshold` fields may need adjusting to match the reported rates.
  * **`germinal_overrides` passes additional settings to the underlying pipeline.** Any upstream configuration option that is not exposed as a dedicated field can be supplied here as a `<key>=<value>` pair.
</div>

## Toolkit Notes

These apply to every Germinal tool in this toolkit (`germinal-design`).

* **Requires a GPU and can run for a long time.** An NVIDIA GPU with at least 40 GB of GPU memory is required (at least 80 GB for scFv mode or targets longer than 250 residues); running on CPU is not supported. A full run with default settings takes hours to days, so reduce `max_trajectories` when testing.
* **Structure-validation model setup varies.** `structure_model="chai"` needs no manual setup. `"af3"` requires AlphaFold3 weights that you must request and install yourself (access is restricted; request it through DeepMind's form) along with a container image. `"protenix"` requires a separate Protenix environment.
* **Bundled dependencies carry their own licenses.** The pipeline requires PyRosetta (academic, non-profit, and government use is governed by the University of Washington CoMotion license; commercial use requires a separate license; redistribution is not permitted; consult the current [PyRosetta licensing page](https://www.pyrosetta.org/home/licensing-pyrosetta) for terms and availability) and IgLM (academic, non-commercial use only); Chai-1 is Apache-2.0 and AbLang2 is BSD-3-Clause. See the License note above and the linked terms.
* **One campaign per call.** Each call is a single complete run against one target. To screen several targets, call the tool once per target (for example, in a loop) rather than expecting one call to process multiple targets at once.

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