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

Index TTS 2.5 - Emotion Audio

Index TTS 2.5 Emotion Audio

By chenpipi0807·Created about a year ago·Updated 6 days ago· 751
Index TTS 2.5 - Emotion Audio
  • reference_audio
  • cache_control
  • emo_ref_audio
  • audio
  • seed
  • subtitle
text大家好,这是 IndexTTS 2.5 的语音合成演示。
langZH
duration_factor1.00
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
interval_silence_ms200
text_normalizationtrue
seed0
emotion_weight1.00

Voice cloning tools have a classic failure mode: your reference clip sounds flat, so every clone sounds flat, no matter what the text says. Index TTS 2.5 - Emotion Audio is the pack's answer. It separates timbre from emotion, so the voice comes from one reference clip and the feeling from a second one - and the second one doesn't even have to be the same person.

That's the headline feature: decoupled emotion. You can take a clean, neutral recording of your voice as the identity, then point the emotion input at some random actor's angry scene and get your voice saying the line angrily. Same person isn't required.

How it works

This is a full synthesis node built on the same engine as Base. Your reference_audio becomes the speaker embedding (via Campplus). A second clip, emo_ref_audio, is analyzed for its emotion and turned into an emotion vector that conditions generation alongside the voice. The emotion_weight float (0–1, default 1.0) blends that emotion in - dial it down to 0.5 for a hint of feeling, up for full commitment.

Every other required input is inherited from the Base node: text, reference_audio, lang (ZH/EN/JA/ES/AR or ZH/EN mix), duration_factor (speed, where above 1 is slower). The optional section carries the same sampling stack (temperature, top_p, top_k, num_beams, seed) plus cache_control for the Cache Control node, and then the two emotion inputs. Outputs are audio, seed, and subtitle - wire audio into SaveAudio or PreviewAudio like any other TTS node here.

Using it well

  • The emotion clip should be emotionally loud. Whispering, monotone, or low-volume reference audio clones poorly - this is the most common complaint about IndexTTS in the wild. A dynamic, expressive clip transfers way more feeling.
  • emotion_weight is your safety knob. If the emotion overpowers the text or the voice drifts, back it off to 0.4–0.6 before touching anything else.
  • Keep the identity clip clean (3–15s, no reverb, no background music). The emotion clip can be messier - you're after its mood, not its quality.
  • emo_ref_audio is optional in the schema, but if you leave it unplugged you're basically running the Base node with a weight attached. If you just want the voice, use Base.

Install and requirements

It lives in the same pack as the rest of the 2.5 family - 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

Models go into ComfyUI/models/IndexTTS-2.5/ via the pack's TTS2_5_download.py script; nothing extra beyond the standard 2.5 set (gpt.pth, codec, s2mel.pth, Campplus, w2v-bert-2.0/, bigvgan/). The usual pack gotchas apply: pin transformers==4.52.1 or 4.54.1 if generation starts erroring after an update, and if facebook/w2v-bert-2.0 throws a 401, download it locally into the models folder so the node runs fully offline.

The one real trap here is expectations: "emotion from another voice" is impressive when it works and subtly off when it doesn't. IndexTTS is genuinely good at this - it's one of the reasons people switched to the 2.x line - but treat emotion_weight as the thing you tune first, not the reference clip.

Categoryaudio

Inputs (19)

NameTypeDefaultDescription
textSTRING大家好,这是 IndexTTS 2.5 的语音合成演示。
reference_audioAUDIO
langCOMBOZH6 options: ZH, EN, JA, ES, AR, ZH/EN
duration_factorFLOAT1.000.5–2
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
interval_silence_msoptINT2000–2000
text_normalizationoptBOOLEANtrue
seedoptINT00–4294967295
cache_controloptDICT
emo_ref_audiooptAUDIO
emotion_weightoptFLOAT1.000–1

Outputs (3)

NameTypeDescription
audioAUDIO
seedINT
subtitleSTRING