IndexTTS 2.5 Sampling Config
The knobs behind a repeatable IndexTTS 2.5 render
- Sampling Config
- Sampling Info
Here's a workflow truth: the Generate node works fine with zero configuration, and most people should leave it that way. But the moment you need the same line read the same way twice, or a long script split into clean chunks, or a script to stop reading "1,024" as "one point zero two four," you've found the reason this node exists. IndexTTS 2.5 Sampling Config centralizes every generation knob that isn't the text or the voice, so you can stop fiddling with per-run settings and bake in a repeatable render.
Wire its Sampling Config output into the Generate node's sampling input and it overrides the stable defaults Generate uses when left unconnected. It also emits a second output, Sampling Info, a plain string summarizing what you've configured - handy for logging a render or double-checking you didn't leave something at a weird value.
The inputs, grouped by what they do
Determinism. do_sample is the master switch. Off (the default) means greedy beam search: with a fixed seed, the same text and reference give you the same take, every time. That's your reproducibility mode - for dubbing where a line needs to be consistent across a cut, this is the setting that saves you. Flip it on and temperature, top_p, and top_k start to matter, trading repeatability for variety. If a take sounds robotic, a touch of temperature (0.8 is the default, try 0.9–1.0) and top_p loosen it up.
Search shape. num_beams (default 3) controls beam search width - more beams mean "smarter" but slower generation. repetition_penalty is the one to remember when the model starts chewing on a phrase and won't let go; the pack ships it set high as part of its stable defaults, so you usually only move it down if a line sounds flattened. length_penalty biases toward longer or shorter utterances.
Long text. max_text_tokens_per_segment (default 120) sets how much text goes into each chunk before the model splits it, and segment_silence_ms (default 200) inserts a pause between chunks. This is the hidden superpower: feed it a long paragraph and it comes out as cleanly segmented speech instead of one breathless run-on. If you're synthesizing a whole narration, this is where you live.
Text normalization. text_normalization (default on) routes the text through the front-end that expands numbers, units, and dates into their spoken forms. This is the difference between "1,024" being read as a number and as gibberish. Leave it on unless you're hitting a weird edge case. And max_mel_tokens (default 1500, range 256–4096) caps how long each generated audio chunk can be - a ceiling, not something you tune for quality.
When to actually reach for it
Three situations. One: you need repeatability - set a fixed seed on Generate, leave do_sample off, done. Two: long-form audio - raise max_text_tokens_per_segment a bit and set segment_silence_ms to the pause length you want between sentences. Three: you're troubleshooting a read - the Sampling Info string tells you exactly what got applied, which beats guessing which stale setting is haunting a render.
It's part of the Comfyui-indextts25-xzg pack, so installation is the same as the rest of the family: install the pack (Manager or git clone), pip install the requirements into your ComfyUI Python, drop the ~5GB model into models/TTS/IndexTTS-2.5/, restart. One honest warning for the eager: everything here defaults to the pack's stable settings on purpose, and the transformers<5.0 pin in requirements.txt is load-bearing - if you go upgrading things willy-nilly and hit an OffloadedCache import error, that pin is your culprit and your fix. Resist the urge to touch all eleven knobs on day one. The defaults are good; the knobs are for when they're not.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| do_sample | BOOLEAN | false | Results are more stable when off; temperature/top_p/top_k take effect when on. |
| temperature | FLOAT | 0.800.1–2 | — |
| top_p | FLOAT | 0.800.05–1 | — |
| top_k | INT | 300–200 | — |
| num_beams | INT | 31–10 | — |
| repetition_penalty | FLOAT | 10.00.1–20 | — |
| length_penalty | FLOAT | 0.00-2–2 | — |
| max_mel_tokens | INT | 1500256–4096 | — |
| max_text_tokens_per_segment | INT | 12020–300 | — |
| segment_silence_ms | INT | 2000–3000 | — |
| text_normalization | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Sampling Config | XZG_INDEXTTS25_SAMPLING | — |
| Sampling Info | STRING | — |