IndexTTS Generate
Cloning voices with an emotion dial and a subtitle track
- indextts_model
- reference_audio
- reference_audios
- emotions
- audio
- seed
- subtitle
- subtitle_text
This is the star of the pack. IndexTTS Generate is where IndexTTS-2 actually turns text into a cloned voice - and unlike most TTS nodes, it can juggle multiple voices, scripted pauses, per-line emotions, and even a timed subtitle track in one pass. If you've ever wanted an ElevenLabs-style pipeline that runs entirely on your own GPU, this is the node you'll spend your time in. The community's shorthand for IndexTTS-2 is "great cloning, real emotion control, En/Cn only," and this node is the version of that you live in inside ComfyUI.
How it works
You feed it the indextts_model handle from IndexTTS Model Loader, some reference audio (the voice to clone), and a block of text. The node parses that text line by line into segments - voice markers, pauses, timed lines - then synthesizes each segment and concatenates the results into one audio file, building a subtitle track as it goes.
The reference input has a hard priority order, straight from the README: emotions > reference_audios > reference_audio. Wire in emotion objects from the Voice Emotion nodes and they win; fall back to a list of audios from Merge Voice Audios; plain single audio is the last resort.
The inputs that actually matter
The full node exposes the whole sampling dial rack (temperature, top_p, top_k, num_beams, repetition_penalty, max_mel_tokens...), and here's the honest take: leave almost all of it alone. The defaults are the author's tuning and they're fine. What you'll actually set:
- text - the script. This is where the magic lives. Support for three line formats:
-2s-or-0.5s-on its own line inserts a pause of that many seconds.[voice_name] textassigns the following text to a specific voice (matching avoice_nameyou set on an emotion node).(start, end) textgives a line a target time window - the node auto-adjusts speech speed to fit, which is gold for syncing to video or an SRT.
- reference_audio / reference_audios / emotions - the voice source(s). See the priority order above.
- speech_speed - 0.5 to 2.0, the one "creative" control you'll actually reach for.
- unload_model - tick it to free VRAM after synthesis, useful when TTS isn't the last step of your workflow.
The outputs
- audio - the concatenated waveform, ready for a Save Audio / PreviewAudio node.
- seed - the seed actually used, so you can reproduce a take.
- subtitle - the raw JSON of segment times (
{id, start, end, text}per segment). - subtitle_text - the same thing formatted for human reading / SRT-style use.
If you're building a dubbed video or a talking-head pipeline, wire audio into your lip-sync model and the subtitle outputs into your caption step - that's the workflow the community actually builds around this model (IndexTTS2 + Whisper + LatentSync is a known open-source dubbing stack).
Common gotchas
- It wants VRAM. Community measurements put IndexTTS-2 around 12GB, with generation roughly 3x slower than real time on a 4060 Ti. It runs, but it's not Kokoro.
- Watch apostrophes. The model famously stumbles on contractions - "don't" comes out mangled. Write "dont", "its", etc., or accept the occasional glitch.
- Reference quality is the ceiling. Loud, dynamic reference clips (podcast-style) clone dramatically better than quiet, flat ones. Garbage in, slightly robotic clone out.
- Repetition penalty defaults to 10.0 - which looks like a typo but is the author's setting. If your output sounds stilted, drop it toward 1–2 and see.
- No reference at all (no emotions, no audio) throws a clear error telling you to provide one - it won't silently babble.
One last tip: this is the "full" node. If the parameter rack is giving you anxiety, IndexTTS Generate Simple calls this exact node with the same defaults and just hides the dials.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| indextts_model | EASY_INDEXTTS_MODEL | — | |
| text | STRING | Text to synthesize. Supports pause format: -2s- (2 seconds pause), -0.5s- (0.5 seconds pause) | |
| unload_model | BOOLEAN | false | Unload model from VRAM after synthesis |
| do_sample | BOOLEAN | true | — |
| temperature | FLOAT | 0.800.1–2 | — |
| top_p | FLOAT | 0.900–1 | — |
| top_k | INT | 300–100 | — |
| num_beams | INT | 31–10 | — |
| repetition_penalty | FLOAT | 10.01–10 | — |
| length_penalty | FLOAT | 0.0-2–2 | — |
| max_mel_tokens | INT | 181550–1815 | — |
| max_tokens_per_sentence | INT | 1200–600 | — |
| speech_speed | FLOAT | 1.000.5–2 | Speech speed (0.5=slower, 1.0=normal, 2.0=faster) |
| seed | INT | 00–4294967295 | — |
| reference_audioopt | AUDIO | Reference audio for voice cloning (Only the one voice is supported) | |
| reference_audiosopt | AUDIOS | (Optional) Reference audios for voice cloning (Multiple voices are supported) | |
| emotionsopt | EASY_INDEXTTS_EMOTIONS | (Optional) voice emotions |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| subtitle | STRING | — |
| subtitle_text | STRING | — |