Nodes/ComfyUI-Index-TTS/Index TTS Pro
ComfyUI Node

Index TTS Pro

Multi-character narration for the original IndexTTS models

By chenpipi0807·Created about a year ago·Updated about a month ago· 720
Index TTS Pro
  • narrator_audio
  • character1_audio
  • character2_audio
  • character3_audio
  • character4_audio
  • character5_audio
  • audio
  • seed
  • Subtitle
  • SimplifiedSubtitle
structured_text<Narrator>This is a sample narrative text.<Character1>Hello.<Narrator>He said.
model_versionIndex-TTS
languageauto
speed1.0
seed0
temperature1.0
top_p0.80
top_k30
repetition_penalty10.0
length_penalty0.0
num_beams3
max_mel_tokens600

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.

Categoryaudio

Inputs (18)

NameTypeDefaultDescription
structured_textSTRING<Narrator>This is a sample narrative text.<Character1>Hello.<Narrator>He said.
narrator_audioAUDIO
model_versionCOMBOIndex-TTS2 options: Index-TTS, IndexTTS-1.5
languageCOMBOauto3 options: auto, zh, en
speedFLOAT1.00.5–2
seedINT00–4294967295
character1_audiooptAUDIO
character2_audiooptAUDIO
character3_audiooptAUDIO
character4_audiooptAUDIO
character5_audiooptAUDIO
temperatureoptFLOAT1.00.1–1.5
top_poptFLOAT0.800–1
top_koptINT301–100
repetition_penaltyoptFLOAT10.01–15
length_penaltyoptFLOAT0.0-5–5
num_beamsoptINT31–10
max_mel_tokensoptINT600100–1500

Outputs (4)

NameTypeDescription
audioAUDIO
seedINT
SubtitleSTRING
SimplifiedSubtitleSTRING