Index TTS Pro
Multi-character narration for the original IndexTTS models
- narrator_audio
- character1_audio
- character2_audio
- character3_audio
- character4_audio
- character5_audio
- audio
- seed
- Subtitle
- SimplifiedSubtitle
The regular Index TTS node clones one voice for one block of text. Index TTS Pro is the version built for reading a whole scene: narrator plus up to five distinct characters, each with their own reference voice, generated as one continuous audio clip from a single structured script. It's the node behind this pack's "multi-character novel reading" workflows - feed it a chapter tagged by speaker and it comes back as a fully cast audio drama.
The catch is right there in the model dropdown: model_version only offers Index-TTS and IndexTTS-1.5. This node predates IndexTTS-2 and hasn't been carried over to it - for TTS2-era multi-character narration with emotion control, you want Index TTS 2 Pro instead. Pick this one if you're happy with the original model line's quality, or if you're specifically avoiding IndexTTS-2's much heavier model download.
Inputs and outputs that matter
Required: structured_text - your script, tagged with <Narrator> and <Character1> through <Character5> wrapping each line, e.g. <Narrator>She looked up.<Character1>"Are you coming?". Writing this by hand for a long chapter is tedious, so pair this node with Novel Text Structure, which parses plain prose into this tagged format automatically. narrator_audio is the reference voice for everything tagged <Narrator>; model_version, language (auto/zh/en), speed (0.5–2.0), and seed work exactly as they do on the base Index TTS node.
Optional: character1_audio through character5_audio - reference clips for each tagged character. Any character tag without a matching audio input just... won't have a distinct voice, so make sure your tags and your wired inputs line up before you queue a long run. The rest (temperature, top_p, top_k, repetition_penalty, length_penalty, num_beams, max_mel_tokens) are the same sampling knobs as the regular node, applied consistently across every speaker in the script.
Outputs: audio (the whole cast, stitched into one clip), seed, Subtitle (a structured caption track - the pack added subtitle output specifically to this Pro line so people could burn captions or build subtitle files from multi-character reads), and SimplifiedSubtitle (the plain-text version of the same transcript).
Install
ComfyUI Manager: search ComfyUI-Index-TTS, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/chenpipi0807/ComfyUI-Index-TTS.git
cd ComfyUI-Index-TTS
pip install -r requirements.txt
Model download depends on model_version: ComfyUI/models/Index-TTS/ or ComfyUI/models/IndexTTS-1.5/, both a handful of files from Hugging Face or ModelScope, the largest being bigvgan_discriminator.pth (1.6GB) and gpt.pth (696MB). No IndexTTS-2 stack needed for this particular node.
Where people get burned
The biggest gotcha isn't a bug, it's a workflow mismatch: a <Character3> tag with nothing wired into character3_audio will still generate, just without the voice distinction you expected - that line falls back rather than erroring loudly, so read through your output if a "cast" of five sounds like three. Second, if you're feeding it raw novel text through Novel Text Structure first, know that parser is explicitly imperfect on complex passages - the pack's own docs recommend hand-checking the tagged output (or having an LLM do the tagging) for anything you actually care about getting right, rather than trusting the auto-parse blind on a whole chapter.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| structured_text | STRING | <Narrator>This is a sample narrative text.<Character1>Hello.<Narrator>He said. | — |
| narrator_audio | AUDIO | — | |
| model_version | COMBO | Index-TTS | 2 options: Index-TTS, IndexTTS-1.5 |
| language | COMBO | auto | 3 options: auto, zh, en |
| speed | FLOAT | 1.00.5–2 | — |
| seed | INT | 00–4294967295 | — |
| character1_audioopt | AUDIO | — | |
| character2_audioopt | AUDIO | — | |
| character3_audioopt | AUDIO | — | |
| character4_audioopt | AUDIO | — | |
| character5_audioopt | AUDIO | — | |
| temperatureopt | FLOAT | 1.00.1–1.5 | — |
| top_popt | FLOAT | 0.800–1 | — |
| top_kopt | INT | 301–100 | — |
| repetition_penaltyopt | FLOAT | 10.01–15 | — |
| length_penaltyopt | FLOAT | 0.0-5–5 | — |
| num_beamsopt | INT | 31–10 | — |
| max_mel_tokensopt | INT | 600100–1500 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| Subtitle | STRING | — |
| SimplifiedSubtitle | STRING | — |