Index TTS 2 - Emotion Text
Describe the emotion in words instead of a clip
- reference_audio
- cache_control
- audio
- seed
- subtitle
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.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello, this is IndexTTS2. | — |
| reference_audio | AUDIO | — | |
| mode | COMBO | Auto | 3 options: Auto, Duration, Tokens |
| do_sample_modeopt | COMBO | on | 2 options: off, on |
| temperatureopt | FLOAT | 0.800.1–2 | — |
| top_popt | FLOAT | 0.800–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 | 150050–1815 | — |
| max_tokens_per_sentenceopt | INT | 1200–600 | — |
| seedopt | INT | 00–4294967295 | — |
| cache_controlopt | DICT | — | |
| emotion_descriptionopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| subtitle | STRING | — |