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

# SpliceAI

> [SpliceAI](https://github.com/Illumina/SpliceAI) is Illumina's deep residual neural network that predicts RNA splice donor and acceptor sites directly from pre-mRNA sequence, and quantifies how genetic variants alter splicing. This wrapper exposes two tools: variant delta-score annotation (the signature SpliceAI workflow) and raw per-position splice-site prediction. Inference runs locally through an isolated standalone venv on GPU or CPU.

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/spliceai/hero.png" alt="SpliceAI" />
</div>

<Note>
  **License:** SpliceAI uses Custom (PolyForm Strict License 1.0.0) for code and CC-BY-NC-4.0 for model weights and has restrictions around commercial use and may require explicit attribution when utilized. Please refer to the [code license](https://github.com/Illumina/SpliceAI/blob/master/LICENSE) and [model weights license](https://creativecommons.org/licenses/by-nc/4.0/) for full terms.
</Note>

<p class="entity-disclaimer">This toolkit is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

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

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

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

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

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

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

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

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="github-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" 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-spliceai" class="tool-tab tab-open badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label><label for="none-spliceai" class="tool-tab tab-close badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label></span>
</div>

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

    <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> Illumina/SpliceAI</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.1016/j.cell.2018.12.015" target="_blank" class="tab-panel paper-panel" data-tab="paper-spliceai">
  <div class="paper-info">
    <div class="paper-title">Predicting Splicing from Primary Sequence with Deep Learning</div>
    <div class="paper-meta">Kishore Jaganathan, Sofia Kyriazopoulou Panagiotopoulou, ... Kyle Kai-How Farh</div>
    <div class="paper-meta paper-venue">Cell (2019)</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-spliceai">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{jaganathan2019predicting,
      title = {Predicting Splicing from Primary Sequence with Deep Learning},
      author = {Jaganathan, Kishore and Kyriazopoulou Panagiotopoulou, Sofia and McRae, Jeremy F. and Darbandi, Siavash Fazel and Knowles, David and Li, Yang I. and Kosmicki, Jack A. and Arbelaez, Juan and Cui, Wenwu and Schwartz, Grace B. and Chow, Eric D. and Kanterakis, Efstathios and Gao, Hong and Kia, Amirali and Batzoglou, Serafim and Sanders, Stephan J. and Farh, Kyle Kai-How},
      journal = {Cell},
      volume = {176},
      number = {3},
      pages = {535--548.e24},
      year = {2019},
      publisher = {Elsevier},
      doi = {10.1016/j.cell.2018.12.015}
    }
    ```
  </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/rna_splicing/spliceai" target="_blank" class="tab-panel source-panel" data-tab="source-spliceai">
  <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/rna\_splicing/spliceai</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/rna_splicing/spliceai/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-spliceai">
  <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 run-local-panel" data-tab="proto-spliceai">
  <a href="https://github.com/evo-design/proto-tools" target="_blank" class="run-local-preview">
    <img noZoom src="https://opengraph.githubassets.com/1/evo-design/proto-tools" alt="proto-tools on GitHub" />
  </a>

  <div class="run-local-install">
    <span class="run-local-label">Run locally with proto-tools</span>

    <div class="run-local-code">
      ```bash theme={null}
      pip install git+https://github.com/evo-design/proto-tools.git
      ```
    </div>
  </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: 8 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: 2 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></span></div>

| Function                 | Description                                                                                         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------ | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_spliceai_predict()` | Predict per-position acceptor/donor splice-site probabilities from DNA sequence with SpliceAI (GPU) | <a href="#api-run-spliceai-predict" 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/rna_splicing/spliceai/spliceai_predict.py#L153" 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_spliceai_score()`   | Score variants for splice-altering effects (delta scores/positions) with SpliceAI (GPU)             | <a href="#api-run-spliceai-score" 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/rna_splicing/spliceai/spliceai_score.py#L357" 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

[RNA splicing](https://en.wikipedia.org/wiki/RNA_splicing) removes introns from pre-mRNA and joins exons, guided by sequence motifs at the donor (5') and acceptor (3') splice sites. Variants that create or disrupt these motifs can cause exon skipping, intron retention, or cryptic splicing, and are a major and frequently overlooked class of disease-causing mutations. SpliceAI ([Jaganathan et al., 2019](https://doi.org/10.1016/j.cell.2018.12.015)) is a deep dilated residual convolutional network that reads 10,000 bp of flanking context (5,000 bp per side) and outputs, for every position, the probability of being an acceptor, a donor, or neither.

For variant interpretation, SpliceAI compares predictions for the reference and alternate sequences and reports four **delta scores** in \[0, 1] — acceptor gain (DS\_AG), acceptor loss (DS\_AL), donor gain (DS\_DG), and donor loss (DS\_DL) — together with the **delta positions** (DP\_\*) of the affected sites relative to the variant. The maximum delta score is the headline number: the paper characterizes cutoffs of 0.2 (high recall), 0.5 (recommended), and 0.8 (high precision). The shipped model is an ensemble of five models whose per-position outputs are averaged. All variant coordinates follow the 1-based VCF convention.

### Learning Resources

* [SpliceAI repository](https://github.com/Illumina/SpliceAI) (Illumina) - the canonical CLI, the `Annotator`/`get_delta_scores` Python API, and the bundled GENCODE annotations and ensemble weights.
* [Jaganathan et al., 2019](https://doi.org/10.1016/j.cell.2018.12.015) (Cell) - the original paper describing the architecture, training data, and clinical validation of delta scores.

## Tools

<a name="api-run-spliceai-score" />

<div class="tool-section-card tool-section-card--score">
  ### SpliceAI Variant Scoring (`spliceai-score`)

  Scores genetic variants (chromosome / 1-based position / ref / alt) for splice-altering effects, returning per-gene delta scores and delta positions for acceptor and donor gain/loss. Requires a reference genome FASTA and a gene annotation (the bundled `grch37`/`grch38`, or a custom file).

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/rna_splicing/spliceai/spliceai_score.py#L78" 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: SpliceAIScoreInput">
      <ParamField path="variants" type="List[SpliceAIVariant]" required>
        Variants to score. A single variant is auto-wrapped into a list.

        <Expandable title="SpliceAIVariant">
          <ParamField path="chromosome" type="string" required>
            Chromosome identifier, matching the reference FASTA and annotation (e.g. `'chr1'` or `'1'` — be consistent across all three).
          </ParamField>

          <ParamField path="position" type="integer" required>
            Variant position, 1-based (VCF convention).
          </ParamField>

          <ParamField path="ref" type="string" required>
            Reference allele, e.g. `'A'` or `'AC'` (DNA bases A/C/G/T/N).
          </ParamField>

          <ParamField path="alt" type="string" required>
            Alternate allele, e.g. `'G'` or `'GTT'` (DNA bases A/C/G/T/N).
          </ParamField>
        </Expandable>
      </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/rna_splicing/spliceai/spliceai_score.py#L282" 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: SpliceAIScoreConfig">
      <ParamField path="reference_fasta" type="string">
        Path (or AssetRef) to the reference genome FASTA. Required at call time — SpliceAI extracts the wild-type sequence around each variant from this genome. `None` raises a `MissingAssetError` so un-provisioned hosts skip cleanly.
      </ParamField>

      <ParamField path="annotation" type="string" default="grch38">
        Gene annotation source: `'grch37'` or `'grch38'` (GENCODE files bundled with SpliceAI) or a path to a custom tab-separated annotation file.
      </ParamField>

      <ParamField path="max_distance" type="integer" default="50">
        Maximum distance (bp) between the variant and a gained/lost splice site to report (the SpliceAI `-D` flag).
      </ParamField>

      <ParamField path="mask" type="boolean" default="False">
        Mask scores for annotated acceptor/donor gain and unannotated acceptor/donor loss (the SpliceAI `-M` flag).
      </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 to run inference on. SpliceAI (TensorFlow) auto-falls-back to CPU when no GPU is visible.
      </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/rna_splicing/spliceai/spliceai_score.py#L192" 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: SpliceAIScoreOutput">
      <ResponseField name="results" type="List[SpliceAIVariantResult]" required>
        Per-variant scores, 1:1 with the input variants and in the same order.

        <Expandable title="SpliceAIVariantResult">
          <ResponseField name="chromosome" type="string" required>
            Variant chromosome.
          </ResponseField>

          <ResponseField name="position" type="integer" required>
            Variant position (1-based).
          </ResponseField>

          <ResponseField name="ref" type="string" required>
            Reference allele.
          </ResponseField>

          <ResponseField name="alt" type="string" required>
            Alternate allele.
          </ResponseField>

          <ResponseField name="scores" type="List[SpliceAIGeneScore]" required>
            One record per gene the variant overlaps (empty if it overlaps no annotated gene).
          </ResponseField>

          <ResponseField name="metrics" type="SpliceAIScoreMetrics" required>
            Per-variant scalar metric (max delta score).
          </ResponseField>
        </Expandable>
      </ResponseField>

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

      | Metric            | Type  | Range      | Availability                                              |
      | ----------------- | ----- | ---------- | --------------------------------------------------------- |
      | `max_delta_score` | float | 0.0 to 1.0 | present for scored variants overlapping an annotated gene |
    </Accordion>
  </div>

  #### Applications

  Use this to triage candidate variants from a sequencing study for splicing impact, to annotate a VCF with SpliceAI predictions, or to prioritize variants of uncertain significance where a coding effect is absent but a splicing effect is plausible. The `max_delta_score` metric supports threshold-based filtering at the recommended 0.2 / 0.5 / 0.8 cutoffs.

  #### Usage Tips

  * **`reference_fasta` is required and `position` is 1-based.** SpliceAI extracts the wild-type window around each variant from the genome you supply, so the FASTA, the annotation, and each variant's `chromosome` must use consistent identifiers. Note this is the opposite of `AlphaGenome`, whose coordinates are 0-based.
  * **`annotation` selects the gene model.** `grch37` and `grch38` load the GENCODE files bundled with SpliceAI; pass a path to score against a custom tab-separated annotation. Changing it restarts the worker.
  * **`max_distance` (default 50) and `mask` mirror the SpliceAI `-D`/`-M` flags.** Widen `max_distance` to report splice sites farther from the variant; enable `mask` to suppress scores for annotated-gain and unannotated-loss positions.

  <a name="api-run-spliceai-predict" />
</div>

<div class="tool-section-card tool-section-card--predict">
  ### SpliceAI Splice-Site Prediction (`spliceai-predict`)

  Predicts per-position `[neither, acceptor, donor]` probabilities directly from one or more DNA sequences. No reference genome is needed — the model runs on the sequence as given, padding 5,000 bp of context per side internally.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/47e34afa5ea240a3b406e323dc38aa5dc85f223e/proto_tools/tools/rna_splicing/spliceai/spliceai_predict.py#L26" 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: SpliceAIPredictInput">
      <ParamField path="sequences" type="List[string]" required>
        DNA sequence(s) to predict on. A single string is auto-wrapped into a list. Sequences may be any length; SpliceAI pads 5000 bp of context on each side internally, so predictions cover every input position.
      </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/rna_splicing/spliceai/spliceai_predict.py#L53" 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: SpliceAIPredictConfig">
      <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 to run inference on. SpliceAI (TensorFlow) auto-falls-back to CPU when no GPU is visible.
      </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/rna_splicing/spliceai/spliceai_predict.py#L83" 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: SpliceAIPredictOutput">
      <ResponseField name="results" type="List[SpliceAIPrediction]" required>
        One entry per input sequence, in input order.

        <Expandable title="SpliceAIPrediction">
          <ResponseField name="probabilities" type="List[array]" required>
            Per position, a `[neither, acceptor, donor]` probability triple. Length equals the input sequence's length.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to scan an engineered construct, a minigene, or a transcript for latent splice sites, to visualize the acceptor/donor probability landscape across a region of interest, or to compare splice-site usage between designed sequence variants without assembling a genome and annotation.

  #### Usage Tips

  * **Output channels are `[neither, acceptor, donor]`.** Index channel 1 for acceptor and channel 2 for donor probabilities; each per-sequence array has the same length as the corresponding input sequence.
  * **Sequences may differ in length.** They are scored independently (per-item caching applies), so batching ragged sequences is fine; very short sequences still receive the full 10,000 bp `N`-padded context.
</div>

## Toolkit Notes

These apply to both SpliceAI tools in this toolkit (`spliceai-score`, `spliceai-predict`).

* **Runs on GPU or CPU via TensorFlow.** SpliceAI is the only TensorFlow tool in the catalog; the standalone env pins TensorFlow 2.15 (Keras 2) so the bundled `.h5` models load, which constrains the runtime to Python 3.11. TensorFlow falls back to CPU automatically when no GPU is visible.
* **Weights and annotations ship with the package.** The five ensemble models and the GENCODE `grch37`/`grch38` annotations are bundled in `pip install spliceai`, so no weight download is needed. The reference genome FASTA for `spliceai-score` is user-supplied at call time.
* **Non-commercial license.** SpliceAI's code is PolyForm Strict and its bundled models are CC-BY-NC-4.0 — both noncommercial, so the toolkit is not hostable on Proto; commercial use requires a license from Illumina.

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