> ## 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 Nucleotide Mutation

> Random nucleotide mutations using IUPAC substitution schemes

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

<Note>
  **License:** Random Nucleotide 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-nucleotide" id="none-generator-random-nucleotide" class="tab-radio-input" />

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

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

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-generator-random-nucleotide" 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-nucleotide" 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-nucleotide" 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-nucleotide" 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-nucleotide" class="tab-panel tools-panel tools-panel-single" data-tab="tools-generator-random-nucleotide">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/random_nucleotide/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_nucleotide_generator.py#L76" target="_blank" class="tab-panel source-panel" data-tab="source-generator-random-nucleotide">
  <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\_nucleotide\_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/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>
Nucleotide sequence generator that introduces random mutations.

This generator creates sequence diversity by randomly mutating masked positions
in DNA or RNA sequences. Nucleotide selection is controlled by the IUPAC
substitution scheme, allowing targeted mutation strategies (e.g., transitions
only with `"R"`/`"Y"`, or any base with `"N"`).

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 `substitution_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">RandomNucleotideGeneratorConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/random_nucleotide_generator.py#L23" 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 RandomNucleotideGenerator.

  This class defines configuration parameters for the random nucleotide generator,
  which introduces random nucleotide mutations at masked positions using
  IUPAC ambiguity code-based sampling.

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

  <ParamField path="substitution_scheme" type="enum" default="N">
    IUPAC code defining the nucleotide substitution pool.

    Options: `N`, `R`, `Y`, `S`, `W`, `K`, `M`, `B`, `D`, `H`, `V`
  </ParamField>
</div>

## Usage

```python python icon="python" theme={null}
>>> from proto_language.generator import RandomNucleotideGenerator, RandomNucleotideGeneratorConfig
>>> from proto_language.core import Segment
>>> config = RandomNucleotideGeneratorConfig(
...     masking_strategy=MaskingStrategy(num_mutations=2),
... )
>>> gen = RandomNucleotideGenerator(config)
>>> segment = Segment(length=100, sequence_type="dna")
>>> gen.assign(segment)
>>> gen.sample()  # First call: random init (no starting sequence)
>>> gen.sample()  # Second call onward: 2 random nucleotide mutations
```

## Metadata

| Property                 | Value                       |
| ------------------------ | --------------------------- |
| Key                      | `random-nucleotide`         |
| Class                    | `RandomNucleotideGenerator` |
| Category                 | `mutation`                  |
| Input Type               | `starting_sequence`         |
| Uses GPU                 | `False`                     |
| Supported Sequence Types | `dna`, `rna`                |
| Allows Empty Start       | `True`                      |
