Nodes/IndexTTS-2 Nodes/IndexTTS2 Emotion (Text)
ComfyUI Node

IndexTTS2 Emotion (Text)

Tell it the mood in plain words — no emotion clips, no sliders

By kana112233·Created 8 months ago·Updated 8 months ago· 3
IndexTTS2 Emotion (Text)
  • model
  • spk_audio_prompt
  • audio
textEmotionally expressive speech.
use_emo_texttrue
emo_alpha0.6
temperature1.0
top_k0
top_p1.00
use_randomfalse
emo_text

Of all the emotion controls in this pack, this is the one I'd hand a beginner first. You get the same speaker-emotion disentanglement as the audio version, but instead of hunting for an angry-sounding clip, you just type "angry" - or "excited but trying to stay calm", which no audio clip in the world does cleanly. It's the friendliest face of IndexTTS-2, and it's the node that makes the model feel like magic instead of a research project.

The trick behind it is delightfully small: the model directory ships with a little local Qwen LLM whose only job is reading your emotion text and classifying it into the same 8-dimensional emotion vector the model's fancier sibling uses - happy, angry, sad, afraid, disgusted, melancholic, surprised, calm. No API call, no cloud dependency; it all runs on your GPU.

The inputs that matter

  • spk_audio_prompt - the voice to clone, from LoadAudio. Same rules as everywhere else in this pack: 5–15 seconds, clean, energetic.
  • text - the line the voice says.
  • use_emo_text - the sneaky default-on switch. When enabled, the node extracts emotion from the main text itself. "I'm so sorry, I ruined everything" gets read as sad even though you never set an emotion. When off, emotion only comes from the separate emo_text field.
  • emo_text (optional) - your explicit mood description, e.g. enthusiastic and proud. Takes priority when filled.
  • emo_alpha - emotion strength, 0.0–1.0, default 0.6. That default is the pack's own recommendation, and it's worth trusting: lower values sound more natural, and 0.6 was picked deliberately.

Output is one audio in standard ComfyUI AUDIO format, straight into SaveAudio.

How the mood becomes a voice

When use_emo_text is on, the text goes to the bundled Qwen model, which returns the 8 emotion intensities; that vector is then used to weigh a set of emotion prototypes inside the TTS model. Two quirks worth knowing. First, if Qwen detects no emotion at all, it defaults to a calm/neutral voice - so deadpan is the floor, not an error. Second, the classifier has a documented blind spot: it struggles to tell sad (悲伤) from melancholic (低落), so the pack maintains a small workaround word list (melancholy, depression, gloomy...) that forces the melancholic channel. If you type "melancholic" and hear plain sad, throw in one of those words - or just describe it as "low, somber" and move on.

Choosing it over the others

Compared to the audio-emotion node: this one needs one clip instead of two, and text descriptions beat hunting for the perfect feeling-clip. Compared to the vector node: it's far easier but less precise - the Qwen classifier is doing your slider-pushing for you, and you can't nudge surprised to exactly 0.45. When batch-generating and you need reproducible emotion, use the vector node; when you want results in the next five minutes, this one.

Install

Same pack, same dance: Manager search "IndexTTS-2" or git clone into custom_nodes, pip install -r requirements.txt, model in ComfyUI/models/IndexTTS-2/. Remember the first load also pulls w2v-BERT and MaskGCT from Hugging Face, so keep internet on until you've loaded once.

Categoryaudio/IndexTTS2

Inputs (10)

NameTypeDefaultDescription
modelINDEXTTS2_MODEL
textSTRINGEmotionally expressive speech.
spk_audio_promptAUDIO
use_emo_textBOOLEANtrue
emo_alphaFLOAT0.60–1
temperatureFLOAT1.00.1–2
top_kINT00–100
top_pFLOAT1.000–1
use_randomBOOLEANfalse
emo_textoptSTRING

Outputs (1)

NameTypeDescription
audioAUDIO