Index TTS 2 Pro (小说多角色)
Multi-character novel narration with emotion control
- narrator_audio
- character1_audio
- character2_audio
- character3_audio
- character4_audio
- character5_audio
- emotion_audio
- cache_control
- audio
- seed
- Subtitle
- SimplifiedSubtitle
This is the flagship node in the whole pack: multi-character novel narration - narrator plus up to five distinct character voices - running on IndexTTS-2, with the emotion controls that model line is built around layered on top. It's what you get when you combine Index TTS Pro's cast-of-voices approach with Index TTS 2 - Emotion Audio's ability to steer delivery from a reference clip, in one node. Added in the December 2025 update specifically in response to users asking for TTS2-quality multi-character reading (it wasn't there before - the original Pro node is stuck on the older Index-TTS/1.5 models).
If you're building an audiobook-style read of a chapter with real cast and real emotional range, this is the node. If IndexTTS-2's heavier model download or slower generation isn't worth it for your use case, the older Index TTS Pro does the same multi-character job on the lighter model line, just without emotion control.
Inputs and outputs that matter
Required: structured_text (your script, tagged <Narrator> / <Character1>–<Character5> - pair this node with Novel Text Structure to generate that tagging from plain prose automatically), narrator_audio (the reference voice for narration), and mode (Auto/Duration/Tokens, same length-pacing control as the rest of the TTS2 family - leave on Auto unless you need tight timing control).
Optional: character1_audio through character5_audio for each tagged character's voice - any tag without a wired audio input just won't get a distinct voice in the output, so double-check your tags match your connections before a long render. emotion_audio and emotion_weight (0–1.4, a slightly wider range than the standalone Emotion Audio node) work the same way as on that node: feed a clip of the delivery you want, and it colors the whole reading. The rest - do_sample_mode, temperature, top_p, top_k, num_beams, repetition_penalty, length_penalty, max_mel_tokens, max_tokens_per_sentence, seed, and cache_control (wire in an Index TTS 2 - Cache Control node) - are the shared TTS2 sampling and VRAM-management controls.
Outputs: audio (the full cast reading, one clip), seed, Subtitle (structured captions across the whole multi-character script), and SimplifiedSubtitle (plain-text 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
This node needs the complete IndexTTS-2 stack under ComfyUI/models/IndexTTS-2/ - base weights, the qwen0.6bemo4-merge emotion classifier, MaskGCT's semantic codec, CampPlus speaker embeddings, facebook/w2v-bert-2.0, and a BigVGAN vocoder checkpoint. Run the bundled TTS2_download.py (needs huggingface_hub, supports resuming and a China mirror via HF_ENDPOINT) rather than piecing it together by hand - it's genuinely a lot of files across several source repos.
Where people get burned
This is a new node (added in the same update that fixed several longstanding bugs), so treat it as a bit less battle-tested than the rest of the pack - the changelog itself flags it as something that "will have some bugs, feedback welcome." The multi-character mismatch trap from the original Pro node applies here too: a character tag with no matching characterN_audio input silently falls through rather than erroring. And the usual TTS2 dependency issues apply on top - a 401 on w2v-bert-2.0 means downloading it locally instead of live, and transformers needs pinning to 4.52.1 or 4.54.1. If a long multi-character render is your goal, generate a short test pass first to confirm every character tag is actually wired to a voice before committing GPU time to the full chapter.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| structured_text | STRING | <Narrator>这是一段旁白文本。<Character1>你好,我是角色1。<Narrator>他说道。 | — |
| narrator_audio | AUDIO | — | |
| mode | COMBO | Auto | 3 options: Auto, Duration, Tokens |
| character1_audioopt | AUDIO | — | |
| character2_audioopt | AUDIO | — | |
| character3_audioopt | AUDIO | — | |
| character4_audioopt | AUDIO | — | |
| character5_audioopt | AUDIO | — | |
| emotion_audioopt | AUDIO | — | |
| emotion_weightopt | FLOAT | 0.800–1.4 | — |
| do_sample_modeopt | COMBO | on | 2 options: off, on |
| temperatureopt | FLOAT | 0.800.1–2 | — |
| top_popt | FLOAT | 0.900–1 | — |
| top_kopt | INT | 300–100 | — |
| num_beamsopt | INT | 31–10 | — |
| repetition_penaltyopt | FLOAT | 10.01–10 | — |
| length_penaltyopt | FLOAT | 0.0-2–2 | — |
| max_mel_tokensopt | INT | 181550–1815 | — |
| max_tokens_per_sentenceopt | INT | 1200–600 | — |
| seedopt | INT | 00–4294967295 | — |
| cache_controlopt | DICT | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| Subtitle | STRING | — |
| SimplifiedSubtitle | STRING | — |