IndexTTS 2.5 Model Loader
The boring node that makes IndexTTS 2.5 actually work
- IndexTTS 2.5 Model
Every IndexTTS 2.5 workflow starts here, and it's the node you'll spend the least time thinking about once it's set up - which is exactly the point. XZG_IndexTTS25_ModelLoader is the pack's front door: it looks at ComfyUI/models/TTS/IndexTTS-2.5/, shows you what it found there, validates it, and hands a model handle to the Generate node. The ~5GB of weights don't actually load when you drop the loader into a graph. Loading is lazy, so the model only comes off disk at your first generation. An empty loader sitting there isn't a sign you broke something - it's the intended design.
That laziness is also why this node exists at all. TTS models like IndexTTS 2.5 are small enough to hold in memory but chunky enough that loading them on every node-add would make ComfyUI feel like molasses. So you wire the loader, generate once, and the heavy lifting happens exactly when it needs to.
The inputs that matter
The dropdown labeled IndexTTS 2.5 Model auto-fills from anything in models/TTS/IndexTTS-2.5/. If it shows the [未找到] placeholder (Chinese for "not found - put the model in models/TTS/IndexTTS-2.5"), that's your clue the model isn't downloaded or ComfyUI hasn't been restarted since you dropped it in. Refresh, restart, try again.
Three inputs sit right on top and you'll set them once:
- Device -
autois the right answer for 99% of people. It picks CUDA if available, otherwise falls back to CPU. - Precision -
autouses bfloat16 on GPUs that support it, float32 otherwise. On an 8GB card this is the difference between fitting and OOMing. - Enable Text Emotion Analysis (
use_qwen_emo) - loads an extra Qwen emotion model that costs more VRAM and is only needed if you want the Emotion Control node's text description mode. Keep it off unless you're actually using text emotion.
Then there's the advanced drawer, and you can ignore most of it. The one worth knowing: Release Model After Run unloads the weights after every generation - handy if you're VRAM-starved and sharing the card with a video model, but it makes consecutive generations slower, so it's a trade, not a free win. Full SHA-256 Verification reads through ~5GB on its first pass to check integrity (after that, only file sizes are checked) - use it once if you suspect a corrupt download. BigVGAN CUDA Fused Kernel may compile a custom extension on first use, which is exactly as fiddly as it sounds; leave it off until you have a reason. custom_model_path lets you point at a complete IndexTTS 2.5 directory living somewhere else, for people who already have the official repo's model around.
The output
One output, IndexTTS 2.5 Model (type XZG_INDEXTTS25_MODEL), which plugs into the model input on the IndexTTS 2.5 Speech Generation node. That's the whole graph shape: loader → generate.
Getting the model in the first place
Install the pack the usual way, then install the weights:
cd ComfyUI/custom_nodes
git clone https://github.com/xiaozhuguang/Comfyui-indextts25-xzg.git
The pack vendors the official IndexTTS codebase, so there's nothing else to clone. Dependencies go into your ComfyUI Python, not a fresh venv:
# Windows (ComfyUI portable)
python_embeded/python.exe -m pip install -r ComfyUI/custom_nodes/Comfyui-indextts25-xzg/requirements.txt
# Linux / macOS
python -m pip install -r custom_nodes/Comfyui-indextts25-xzg/requirements.txt
Then the model itself (~5GB+, license accepted on the command line):
python scripts/download_models.py --source huggingface --accept-license
# or: --source modelscope if you're in a region where HF is slow
Restart ComfyUI after it lands. Two gotchas worth remembering. First, the pack pins transformers>=4.40,<5.0 on purpose - IndexTTS bundles private copies of transformers internals that break under 5.x, so if another plugin upgraded you and you see ImportError: cannot import name 'OffloadedCache', that pin is the fix. Second, models/TTS/IndexTTS-2.5/hf_cache/ holds ~2.8GB of auxiliary models (w2v-bert, campplus, BigVGAN, the MaskGCT codec) that aren't part of the official package but the pipeline can't run without - don't "clean it up" to save space. Delete it and the node just redownloads it, offline.
Once the dropdown lists your model and Generate produces audio, you're done here. The loader did its job; now the fun part starts.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | [未找到] 请将模型放入 models/TTS/IndexTTS-2.5 | Standard location: ComfyUI/models/TTS/IndexTTS-2.5. Refresh/restart ComfyUI after installing a model. |
| device | COMBO | auto | 2 options: auto, cpu |
| precision | COMBO | auto | auto uses bfloat16 on supported GPUs, otherwise float32. |
| use_qwen_emo | BOOLEAN | false | Loads the Qwen emotion model (extra VRAM) to enable the emotion control node's text description mode. Keep off if you don't use it. |
| use_cuda_kernel | BOOLEAN | false | May compile an extension on first use; keep off if unsure. |
| release_after_run | BOOLEAN | false | Suitable for low-VRAM environments; lowers speed for consecutive generations. |
| verify_hashes | BOOLEAN | false | First verification reads ~5GB of files; otherwise only file sizes are checked. |
| custom_model_pathopt | STRING | Leave empty to use the list above; only for existing complete IndexTTS 2.5 directories. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IndexTTS 2.5 Model | XZG_INDEXTTS25_MODEL | — |