Nodes/ComfyUI-IndexTTS2/IndexTTS2 Simple
ComfyUI Node

IndexTTS2 Simple

Drop a voice clip, type text, get speech

By snicolast·Created 12 months ago·Updated 11 months ago· 212
IndexTTS2 Simple
  • audio
  • emotion_audio
  • emotion_vector
  • AUDIO
  • STRING
text
emotion_control_weight1.00
use_fp16false
output_gain1.00

IndexTTS2 Simple is the reason this whole pack exists. You hand it a few seconds of somebody speaking, type a line of text, and it hands back speech in that voice - plus, if you want, an emotion layered on top. It's the node you'll wire up first and probably never replace, because everything else in the pack either feeds this node or saves what it produces. If you've used any of the other voice-cloning tools in Comfy, this is the same idea with fewer moving parts: no API, no key, no ElevenLabs bill. It all runs locally.

How it works

The node is a thin wrapper around the upstream IndexTTS2 inference code, vendored straight into the pack so behavior stays matched with the original repo. When you hit run, it dumps your reference clip to a temp WAV, loads the model (a GPT-style autoregressive codec plus the BigVGAN vocoder and a CAMPPlus speaker embedding - the usual voice-cloning stack), synthesizes, and returns 22.05kHz mono audio. First run is slow because the model loads; after that it's cached in memory and stays put.

The inputs that matter

The three required inputs are the whole job:

  • audio - your speaker reference. A few seconds of clear, loud, dynamic speech (a podcast clip, a YouTube take) beats a quiet mumble every time.
  • text - the line to speak, multiline. Watch the apostrophes: the model chokes on them, so write "dont" and "its" rather than "don't" and "it's".
  • emotion_control_weight - 0 to 1, how hard any emotion input pushes on the result. Default 1.

The optional inputs are where it gets interesting. emotion_audio takes a second clip and clones its emotion onto your speaker's voice; emotion_vector does the same thing with an 8-value vector from the pack's Emotion Vector or Emotion From Text nodes (feed both and the vector wins). use_fp16 is off by default and honestly should stay off - the community's testing found FP16 adds audible artifacts. output_gain (0–4) is your volume knob; anything past 1.0 gets clipped back into range so it can't explode.

Outputs

You get two: an AUDIO tensor and a status STRING. The AUDIO feeds straight into the pack's Save Audio node (or Comfy's own PreviewAudio); the STRING tells you what precision ran, where the emotion came from, and what gain was applied - handy when something sounds off and you want to know which path it took.

Install

The standard two ways. Via ComfyUI Manager, search "IndexTTS2" and install. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/snicolast/ComfyUI-IndexTTS2

Then, inside your ComfyUI Python environment:

pip install wetext
pip install -r requirements.txt

That requirements list is a doozy - librosa, numba, opencv, pandas, even keras - so give it a minute. The actual model is a separate step: make a checkpoints/ folder in the pack's directory and copy the IndexTTS-2 release from HuggingFace, or just let it auto-cache from HF on first run. The author tested on Windows only, so treat Linux/macOS as experimental.

Common issues

  • "Config file not found" - you forgot the checkpoints/config.yaml step above. That error literally means the model isn't where the node expects it.
  • "Module wetext missing" - the README calls this out explicitly; run the pip install above.
  • Quiet, warbly output - leave FP16 off and raise output_gain a bit; that was the exact fix the early testers landed on.
  • Bad cloning - look at your reference clip before blaming the node. Loud, dynamic input gives good results; slow, quiet samples come out flat.
CategoryAudio/IndexTTS

Inputs (7)

NameTypeDefaultDescription
audioAUDIO
textSTRING
emotion_control_weightFLOAT1.000–1
emotion_audiooptAUDIO
emotion_vectoroptEMOTION_VECTOR
use_fp16optBOOLEANfalse
output_gainoptFLOAT1.000–4

Outputs (2)

NameTypeDescription
AUDIOAUDIO
STRINGSTRING