Nodes/ComfyUI-Easy-IndexTTS2/IndexTTS Model Loader
ComfyUI Node

IndexTTS Model Loader

The node that grabs a multi-gig TTS by the throat

By yolain·Created 11 months ago·Updated 8 months ago· 269
IndexTTS Model Loader
  • start
  • indextts_model
model
download_fromhuggingface

This is the node that makes the rest of the pack possible. IndexTTS Model Loader downloads every piece of the IndexTTS-2 model into ComfyUI/models/IndexTTS-2/ - with a Hugging Face or ModelScope mirror - loads it, and hands you a single indextts_model handle to feed the Generate nodes. No terminal gymnastics, no hunting through HF pages for six different files. That's the whole job, and it's a genuinely useful one: IndexTTS-2 isn't one checkpoint, it's a stack.

For context, IndexTTS-2 is a zero-shot text-to-speech model from IndexTeam that's become the open go-to when you want a cloned voice and control over emotion - better than F5-TTS for quality, roughly Chatterbox-comparable for English, with the bonus of per-line emotion control. The community runs it at around 12GB VRAM (fp16), and it's a purely En/Cn model. This pack by yolain - the maintainer of the big ComfyUI-Yolain-Workflows collection - is a fork of chenpipi0807's ComfyUI-Index-TTS that rebuilds the nodes on ComfyUI's newer v3 API and adds the one-click download.

How it works

The node reads a config.yaml that lists every component of the model: the IndexTTS-2 base (gpt.pth, s2mel.pth, bpe.model, feats, config), the MaskGCT semantic codec, the campplus speaker embed (campplus_cn_common.bin), facebook's w2v-bert-2.0, and the BigVGAN vocoder. For each piece it checks whether the files already exist in ComfyUI/models/IndexTTS-2/; whatever's missing it pulls down with snapshot_download from your chosen mirror, then it constructs the inference engine and returns it. It's smart about resuming - already-downloaded files are left alone, which you'll appreciate after the first multi-GB pull dies halfway.

Inputs and outputs

The only three inputs are the ones you'd expect:

  • model - a dropdown, currently just IndexTTS-2.
  • download_from - huggingface or modelscope. Pick ModelScope if HF is throttled or unreachable from your region; the download is the same model, different mirror.
  • start - a *-typed trigger input. Wire anything into it (or just run the workflow) to kick off the download-and-load. It exists so you can gate loading on something else in the graph.

The single output, indextts_model, is what you plug into IndexTTS Generate or IndexTTS Generate Simple. Nothing else in the pack works until this node has run at least once.

Installing the pack

The pack is a custom node like any other. Through ComfyUI Manager, search "Easy IndexTTS2" and install, or clone it by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-IndexTTS2
cd ComfyUI-Easy-IndexTTS2
..\..\..\python_embeded\python.exe -m pip install -r requirements.txt

Restart ComfyUI afterwards. One thing the README is upfront about: the nodes use the ComfyUI v3 extension paradigm, so if the pack fails to load, update ComfyUI before you touch anything else. The requirements.txt pulls in the usual audio suspects - librosa, soundfile, omegaconf, transformers>=4.50, torchaudio, modelscope - plus pynini and WeTextProcessing on non-Windows systems, which are the classic build-headache pair (they need a working C++ toolchain on Linux; on Windows they're skipped).

Where people get burned

  • First run downloads a lot. The full stack is several GB - budget for it. It's a one-time cost, and the loader resumes partial downloads.
  • Model location matters. Everything goes to ComfyUI/models/IndexTTS-2/. If you previously used the original chenpipi0807 pack or the official repo, point this pack at the same folder (or symlink it) and you'll skip the re-download entirely.
  • It's heavy, and it stays loaded. This node pins a chunk of VRAM while the engine lives. When you're done, tick unload_model on the Generate node (or run a fresh workflow) to free it - it's not a background process, it's a loaded model.
  • Missing-file errors after a partial/cancelled download: the loader validates required files before building the engine, so the fix is to just run it again and let it fetch what's missing.

The nice part: once it's run, it's run. Every workflow after that just reuses the cached files, and the download node becomes your regular "load the model" step.

CategoryEasyUse/IndexTTS2

Inputs (3)

NameTypeDefaultDescription
modelCOMBO1 options: IndexTTS-2
download_fromCOMBOhuggingface2 options: huggingface, modelscope
startopt*Start to load or download models

Outputs (1)

NameTypeDescription
indextts_modelEASY_INDEXTTS_MODEL