Index TTS 2.5 - Emotion Text
Tell Index TTS 2.5 how to feel in words (or let it read the room itself)
- reference_audio
- cache_control
- audio
- seed
- subtitle
Of the pack's three emotion options, this is the one that does your thinking for you. Index TTS 2.5 - Emotion Text takes a plain-language emotion description - "低沉的、略带疲惫的平静" or "excited, almost breathless" - and turns it into the emotion vector the model needs. And if you leave the description empty, it analyzes your actual text and infers the emotion from the words. Type a furious line, get furious speech.
That convenience comes with a price tag that the other emotion nodes don't have: it needs a separate Qwen emotion-classification model, roughly 1.2GB of VRAM on first load. If you didn't download it, this node will fail where Emotion Vector and Emotion Audio wouldn't. It's the one 2.5 node where "I didn't read the model list" actually bites.
How it works
The engine expects an 8-dimensional emotion vector. This node gets there via a small Qwen classifier: your emotion_description (STRING, multiline, defaults to empty) is run through the Qwen model, which outputs the emotion vector used to condition generation. Empty description means the classifier reads the main text instead and classifies its emotion. emotion_weight (default 0.6, 0–1) scales how strongly that inferred emotion is applied - the README suggests ~0.6 as a sane starting point.
The rest of the inputs are the shared Base set: text, reference_audio, lang (ZH/EN/JA/ES/AR or ZH/EN), duration_factor (speed, >1 is slower), plus the usual sampling stack and cache_control. Outputs are audio (→ SaveAudio/PreviewAudio), seed, and subtitle.
The model you must remember
The Qwen classifier lives at IndexTTS-2.5/qwen0.6bemo4-merge on Hugging Face, and needs to be in:
ComfyUI/models/IndexTTS-2.5/qwen0.6bemo4-merge/
The pack's TTS2_5_download.py script can fetch it, but the README is explicit that it's optional unless you use this node. First run loads it lazily and takes a bit; the extra ~1.2GB of VRAM stays occupied while the node is active. If you never plan to use Emotion Text, skip it and save yourself the download.
Install and gotchas
Same pack as everything else: ComfyUI Manager (search "ComfyUI-Index-TTS") or:
cd ComfyUI/custom_nodes
git clone https://github.com/chenpipi0807/ComfyUI-Index-TTS
cd ComfyUI-Index-TTS && pip install -r requirements.txt
Then all models including the Qwen folder into ComfyUI/models/IndexTTS-2.5/. The pack's usual failure modes apply - pin transformers==4.52.1/4.54.1 when things break after an upgrade, keep w2v-bert-2.0/ local to dodge the 401 error - plus one of its own: if the node errors on first use with a "can't load Qwen"-type message, you forgot the qwen0.6bemo4-merge directory.
Honest take: auto-emotion is neat but it's a heuristic. It nails obvious cases (rage, grief, celebration) and whiffs on dry sarcasm and deadpan lines. When it misfires, the fix isn't fighting it - it's typing a more specific description, or switching to the Emotion Vector node and dialing the sliders yourself. Treat this as the "lazy good enough" option, and it'll treat you right.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | 大家好,这是 IndexTTS 2.5 的语音合成演示。 | — |
| reference_audio | AUDIO | — | |
| lang | COMBO | ZH | 6 options: ZH, EN, JA, ES, AR, ZH/EN |
| duration_factor | FLOAT | 1.000.5–2 | — |
| 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 | — |
| interval_silence_msopt | INT | 2000–2000 | — |
| text_normalizationopt | BOOLEAN | true | — |
| seedopt | INT | 00–4294967295 | — |
| cache_controlopt | DICT | — | |
| emotion_descriptionopt | STRING | — | |
| emotion_weightopt | FLOAT | 0.600–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| seed | INT | — |
| subtitle | STRING | — |