IndexTTS 单条生成
The node that finally makes IndexTTS2 pause where you tell it to
- model
- audio
- wav_path
- used_seed
- log
This is the node this whole pack exists for. IndexTTS2 is a genuinely good open TTS model - bilibili's clone, Chinese and English, at or near the top of the local pile - but its pauses are a dice roll: the same comma can be 200ms on one run and 500ms on the next, and you can't do a thing about it. That matters the moment your audio has to land on a beat or line up with captions. IndexTTSSingle is the single-line generation node with the fix bolted in: write [pause:800ms] in your text, and the pause lands at 800ms, measured average deviation around 13ms.
The input that changes everything
The one you came for is pause_mode, a boolean, off by default. Flip it on and [pause:N] markers become real. The syntax is forgiving:
他停下脚步[pause:800ms]深吸一口气[pause:200ms]然后推开了那扇门。
[pause:600ms], [pause:600], [pause:1.5s] all work, and [wait:]/[stop:] prefixes are accepted too. Stick to the recommended 150ms–5s range and you're fine. The marker is stripped and replaced with a comma before the model sees it, so the audio never reads "pause" out loud - with one exception, and it's the classic trap: if pause_mode is off, the marker is not handled at all and the model will literally speak "pause 800ms". Off is the old behavior, kept for compatibility. If you hear a pause being read as a word, that's your diagnosis.
The mechanism, briefly
This is the clever part. Rather than re-running the model per marker, the node generates once and then edits the waveform directly: it detects where the actual silences are using an energy analysis of the signal (no recognition model involved), globally aligns your markers to those pauses, and then only extends, shortens, or inserts the silent core of each pause. Speech is never touched, nothing is re-decoded. It's precise because it's surgery on the silence, not on the voice. (There's a legacy whisper-based post-processing path in the batch node; on this node, pause_mode handles everything in one pass.)
The other inputs that matter
spk_ref- path to your voice reference audio. This is how IndexTTS2 clones a voice: a short clip of who should be speaking. Relative paths resolve againstComfyUI/input/references, absolute paths work as-is. This is the first thing you'll change on a downloaded workflow.text- the line to speak. Multi-line.seed- set it and the run is reproducible; leave at -1 and the actual seed is written out in theused_seedoutput so you can pin a good take afterward.interval_silence- default 400ms, and the author changed it from the official 200ms on purpose: at 200ms, periods paused less than comma pauses (an inverted rhythm that sounds wrong). 400ms reads as natural. Prefer it for the default beat, then override individual periods with markers.
The rest - temperature, top_p, top_k, num_beams, do_sample, repetition_penalty, emo_alpha, speaking_speed, emo_ref - are IndexTTS2's sampling controls with sane defaults (0.6 / 0.8 / 20 / 4 beams). detect_cfm_steps is a deprecated no-op kept for old workflows; ignore it. There's also out_name for naming the saved wav.
Outputs
You get four: audio (a standard ComfyUI AUDIO tensor - wire it into PreviewAudio to listen), wav_path (where it was saved, under ComfyUI/output/indextts/), used_seed (the actual seed used), and log.
Installing
Same as every node in this pack: Manager search IndexTTS2-PauseControl, or git clone https://github.com/lynx-gt/IndexTTS2-PauseControl into custom_nodes/, run python install.py, download the ~11.8GB IndexTTS2 weights to ComfyUI/models/index_tts/, restart. Don't pip install . - the package name collides with the official indextts inference package and would overwrite it.
When it misbehaves
- A marker never fires - first check
pause_modeis on, then consider the mechanics: insertion needs an actual silence to work with. If the model produced no pause and there's no silent gap, the node refuses rather than cutting through speech. Rewrite or change the seed. - Long single sentences (>40 chars) with several markers - some markers may miss their target because positions are estimated by character proportion. Change the seed, or generate rounds and pick.
- A breath after a long pause - that's the model's natural prosody; this tool edits silence, not breathing. Denoise the segment if it bothers you.
- English accent when cloning - a known IndexTTS2 base-model quirk people hit in the community, not something this pack causes or fixes.
If one line isn't enough - you have a whole script, a book, anything long-form - that's what IndexTTSBatch is for.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | INDEXTTS_MODEL | — | |
| text | STRING | 测试一下。 | — |
| spk_ref | STRING | — | |
| emo_ref | STRING | — | |
| seed | INT | -1-1–9223372036854776000 | — |
| temperature | FLOAT | 0.600.01–2 | — |
| top_p | FLOAT | 0.800.01–1 | — |
| top_k | INT | 200–200 | — |
| num_beams | INT | 41–8 | — |
| do_sample | BOOLEAN | true | — |
| repetition_penalty | FLOAT | 10.01–30 | — |
| emo_alpha | FLOAT | 0.750–1 | — |
| speaking_speed | FLOAT | 1.00.5–2 | — |
| interval_silence | INT | 4000–2000 | 段间插入静音(ms):每段结束到下一段开始的固定停顿 |
| pause_mode | BOOLEAN | false | 开启 [pause:N] 精确停顿控制(全波形:生成后检测停顿,静音核心延长/缩短/插入,免重解码) |
| detect_cfm_steps | INT | 2510–50 | 已弃用(全波形版生成只跑一次 diffusion_steps,此参数无作用),保留兼容旧工作流 |
| out_name | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| wav_path | STRING | — |
| used_seed | INT | — |
| log | STRING | — |