Nodes/ComfyUI-Index-TTS/Index TTS 2 - Emotion Audio
ComfyUI Node

Index TTS 2 - Emotion Audio

Steer the delivery with a second reference clip

By chenpipi0807·Created about a year ago·Updated about a month ago· 720
Index TTS 2 - Emotion Audio
  • reference_audio
  • cache_control
  • emo_ref_audio
  • audio
  • seed
  • subtitle
textHello, this is IndexTTS2.
modeAuto
do_sample_modeon
temperature0.80
top_p0.80
top_k30
num_beams3
repetition_penalty10.0
length_penalty0.0
max_mel_tokens1500
max_tokens_per_sentence120
seed0
emotion_weight0.80

Same node as Index TTS 2 - Base, plus one addition: a second audio input, purely for emotional tone. Feed it a clip of someone sounding furious, terrified, or giddy, and IndexTTS-2 borrows that emotional delivery while still cloning the voice identity from your main reference_audio. Two separate audio inputs doing two separate jobs - one is "who," the other is "how they feel."

That split is actually the point of the whole IndexTTS-2 emotion system: this pack, and the underlying IndexTTS-2 model, treat voice identity and emotional expression as two things you dial in independently rather than one blended reference. Of the three emotion-control approaches in this pack - audio reference, an 8-value emotion vector, or a text description - feeding a real emotion clip is generally the one people report getting the most natural results from, since you're handing the model an actual example of the delivery instead of asking it to interpret a slider or a sentence. If you want type-in emotion control instead, look at Emotion Text; for numeric sliders, Emotion Vector.

Inputs and outputs that matter

Required, same as Base: text, reference_audio (the voice), mode (Auto/Duration/Tokens - leave on Auto unless you're deliberately controlling output length via max_mel_tokens/max_tokens_per_sentence).

The two that make this node what it is, both optional: emo_ref_audio (the clip whose emotional tone gets borrowed - doesn't need to be the same speaker, doesn't need to say the same words, just needs to sound the way you want the output delivered) and emotion_weight (0–1, default 0.8 - how strongly that emotional coloring gets applied). Push it too high and delivery can start to warp; if the output sounds strained or off, that's your first dial to back off before touching anything else.

Everything else is the standard sampling toolkit shared across the TTS2 nodes: 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 an Index TTS 2 - Cache Control node here to manage whether the model stays loaded between runs).

Outputs: audio, seed, and subtitle - a plain-text transcript of what was spoken.

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

You need the full IndexTTS-2 model stack under ComfyUI/models/IndexTTS-2/ - base weights, the qwen0.6bemo4-merge emotion classifier, MaskGCT's semantic codec, CampPlus speaker embeddings, and Facebook's w2v-bert-2.0 extractor, plus a BigVGAN vocoder checkpoint. Don't fetch it piece by piece: run the pack's bundled TTS2_download.py (needs huggingface_hub; supports resuming and a China mirror via HF_ENDPOINT).

Where people get burned

The classic first-run error is a 401 on facebook/w2v-bert-2.0 - that repo is gated, so grab it manually into ComfyUI/models/IndexTTS-2/w2v-bert-2.0/ rather than expecting a live download. transformers version matters: pin to 4.52.1 or 4.54.1, since 4.57.1+ breaks TTS2 outright. If emo_ref_audio isn't obviously changing the delivery, try turning emotion_weight up before assuming the node is broken - it's genuinely subtle at low values by design. And if you're chaining several generations back to back and each one feels slow to start, that's the model loading and unloading from VRAM each run - an Index TTS 2 - Cache Control node wired in with caching on will fix it, at the cost of holding VRAM between generations.

Categoryaudio

Inputs (16)

NameTypeDefaultDescription
textSTRINGHello, this is IndexTTS2.
reference_audioAUDIO
modeCOMBOAuto3 options: Auto, Duration, Tokens
do_sample_modeoptCOMBOon2 options: off, on
temperatureoptFLOAT0.800.1–2
top_poptFLOAT0.800–1
top_koptINT300–100
num_beamsoptINT31–10
repetition_penaltyoptFLOAT10.01–10
length_penaltyoptFLOAT0.0-2–2
max_mel_tokensoptINT150050–1815
max_tokens_per_sentenceoptINT1200–600
seedoptINT00–4294967295
cache_controloptDICT
emo_ref_audiooptAUDIO
emotion_weightoptFLOAT0.800–1

Outputs (3)

NameTypeDescription
audioAUDIO
seedINT
subtitleSTRING