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

# Random Protein Mutation

> Random amino acid mutations using codon scheme-biased sampling

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/generator/random-protein/hero.png" alt="Random Protein Mutation" />
</div>

<Note>
  **License:** Random Protein Sampling is open source and free for academic and commercial use under an MIT license. Please refer to [the license](https://github.com/evo-design/proto-tools) for full terms.
</Note>

<p class="entity-disclaimer">This generator 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-generator-random-protein" id="none-generator-random-protein" class="tab-radio-input" />

<input type="radio" name="tab-generator-random-protein" id="tools-generator-random-protein" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-generator-random-protein" id="source-generator-random-protein" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-generator-random-protein" class="tool-tab tab-open badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label><label for="none-generator-random-protein" class="tool-tab tab-close badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label></span> <span class="tool-tab-wrap"><label for="source-generator-random-protein" 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> Source</label><label for="none-generator-random-protein" 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> Source</label></span></div>

<a href="/docs/tools/mutagenesis/random-protein" class="tab-panel tools-panel tools-panel-single" data-tab="tools-generator-random-protein">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/random_protein/social.png" alt="" loading="lazy" />
  </div>

  <span class="panel-goto-btn tools-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="M5 12h14" /><path d="m12 5 7 7-7 7" /></svg> Go to Tool Page</span></span>
</a>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/random_protein_generator.py#L108" target="_blank" class="tab-panel source-panel" data-tab="source-generator-random-protein">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/generator/random\_protein\_generator.py</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>

<div class="entity-contributors"><span class="entity-contributors-label">Generator contributors</span><span class="entity-contributors-people"><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><a class="entity-contributor" href="https://github.com/bviggiano" target="_blank" rel="noopener" title="bviggiano: 1 commit"><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: 1 commit"><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>
Protein sequence generator that introduces random amino acid mutations.

This generator creates sequence diversity by randomly mutating masked positions
in protein sequences. Amino acid selection is biased by the configured codon
scheme, allowing simulation of library diversity achievable through degenerate
codon synthesis. Optional amino-acid exclusions remove unwanted residues
from the sampled mutation alphabet.

The generator category is `"mutation"`. When the assigned segment has a
starting sequence (or an upstream optimizer stage has populated proposals),
`masking_strategy` controls which positions are mutated on each call. When
the segment has no starting sequence, the first `sample()` call fills each
proposal with a fully random sequence of the segment's length using the
configured `codon_scheme`; subsequent calls then apply `masking_strategy`
normally.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">RandomProteinGeneratorConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/random_protein_generator.py#L25" 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></div>

  Configuration object for RandomProteinGenerator.

  This class defines configuration parameters for the random protein generator,
  which introduces random amino acid mutations at masked positions using
  codon scheme-biased sampling.

  <ParamField path="masking_strategy" type="MaskingStrategy">
    Controls which positions to mask for sampling. Default: random 30%.
  </ParamField>

  <ParamField path="codon_scheme" type="enum" default="UNIFORM">
    Codon scheme for amino acid sampling probabilities.

    Options: `UNIFORM`, `NNN`, `NNK`, `NNS`, `NDT`, `DBK`, `NRT`
  </ParamField>

  <ParamField path="excluded_amino_acids" type="array">
    Residues to remove after codon-scheme handling (e.g. \['C'] to forbid cysteine).
  </ParamField>
</div>

## Usage

```python python icon="python" theme={null}
>>> from proto_language.generator import RandomProteinGenerator, RandomProteinGeneratorConfig
>>> from proto_language.core import Segment
>>> from proto_tools.transforms.masking import MaskingStrategy
>>> config = RandomProteinGeneratorConfig(
...     masking_strategy=MaskingStrategy(num_mutations=2),
...     excluded_amino_acids=["C"],
... )
>>> gen = RandomProteinGenerator(config)
>>> segment = Segment(length=100, sequence_type="protein")
>>> gen.assign(segment)
>>> gen.sample()  # First call: random init (no starting sequence)
>>> gen.sample()  # Second call onward: 2 non-cysteine mutations
```

## Metadata

| Property                 | Value                    |
| ------------------------ | ------------------------ |
| Key                      | `random-protein`         |
| Class                    | `RandomProteinGenerator` |
| Category                 | `mutation`               |
| Input Type               | `starting_sequence`      |
| Uses GPU                 | `False`                  |
| Supported Sequence Types | `protein`                |
| Allows Empty Start       | `True`                   |
