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

Index TTS 2 - Emotion Text

Describe the emotion in words instead of a clip

By chenpipi0807·Created about a year ago·Updated about a month ago· 720
Index TTS 2 - Emotion Text
  • reference_audio
  • cache_control
  • 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_description

The lightest-weight of the three IndexTTS-2 emotion nodes. Instead of hunting down an emotion reference clip (Emotion Audio) or hand-tuning an eight-value slider bank (Emotion Vector), you just type what you want: "furious and shouting," "quiet and exhausted," "warm and reassuring." Under the hood this is what the bundled Qwen emotion-classifier model in the pack (qwen0.6bemo4-merge) actually exists for - it reads your description and translates it into the emotion signal IndexTTS-2 conditions on, the same signal the vector node lets you set by hand and the audio node infers from a clip.

It's the one to reach for when you're prototyping fast and don't want to build an emotion sample library, or when what you want is genuinely easier to say in a sentence than to dial in numerically ("sarcastic" is a lot more direct than guessing at Happy/Angry/Surprise sliders).

Inputs and outputs that matter

Required, shared with the rest of the TTS2 family: text, reference_audio (the voice being cloned), mode (Auto/Duration/Tokens - leave on Auto unless you're deliberately controlling pacing via max_mel_tokens).

The one that makes this node itself: emotion_description, a free-text field where you write the emotional delivery you want in plain language. Keep it short and direct - a phrase, not a paragraph - since it's feeding a classifier, not a general-purpose instruction-follower.

Everything else is the standard TTS2 sampling kit: 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 (feed it the output of an Index TTS 2 - Cache Control node if you want the model to stay resident between runs instead of unloading after each one).

Outputs: audio, seed (the value actually used, worth capturing if seed=0 randomized), and subtitle - a plain-text transcript string.

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 specifically depends on the Qwen emotion-classifier model, so make sure qwen0.6bemo4-merge is downloaded into ComfyUI/models/IndexTTS-2/qwen0.6bemo4-merge/ along with the rest of the IndexTTS-2 stack (base weights, MaskGCT semantic codec, CampPlus speaker embeddings, facebook/w2v-bert-2.0, BigVGAN vocoder). Run the bundled TTS2_download.py script rather than grabbing files by hand - it handles all of the above with resume support and a mirror option for users behind the Great Firewall (HF_ENDPOINT=https://hf-mirror.com).

Where people get burned

If this node loads fine but the output ignores your description entirely, check that qwen0.6bemo4-merge actually finished downloading - it's a full model folder (config, tokenizer, and safetensors weights), not a single file, and a partial download tends to fail quietly into a fallback rather than throwing an obvious error. The rest of the pack's usual TTS2 friction applies here too: a 401 on facebook/w2v-bert-2.0 means you need to fetch that gated repo locally instead of letting it try to auto-download, and transformers needs to be pinned to 4.52.1 or 4.54.1 - versions 4.57.1 and up are known to break TTS2. If descriptions with strong or unusual emotions ("manic," "deadpan") come out muted, that's consistent with what people report about IndexTTS-2's emotion control generally - it responds, but it's tuned conservative, so don't expect telenovela-level swings from a two-word prompt.

Categoryaudio

Inputs (15)

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
emotion_descriptionoptSTRING

Outputs (3)

NameTypeDescription
audioAUDIO
seedINT
subtitleSTRING