IndexTTS Loader
Loading IndexTTS2 without reloading it every run
- model
Every workflow in this pack starts here, because the thing you're loading is heavy. IndexTTS2 is bilibili's open TTS model - ~11.8GB of weights that take a while to breathe in - and IndexTTSLoader is the gatekeeper that makes you load it exactly once instead of once per generation. There are no sampling knobs here, no text box, no [pause:N] magic. It is a boring, correct node: point it at the model folder, get an INDEXTTS_MODEL handle out, and wire that handle into IndexTTSSingle or IndexTTSBatch.
What you actually set
Just three inputs, and you'll touch two of them:
model_dir- where the weights live. Defaults toComfyUI/models/index_tts(the pack resolves it against your models directory, so it survives moving between machines). The folder needs the files the official model ships:config.yaml,gpt.pth,s2mel.pth,bpe.model,glossary.yaml. The weights are not part of this repo - you download them from the official index-tts/index-tts release, then drop them in.fp16- off by default, and the pack loads FP32 unless you flip it. On a cramped card this is your first lever: half precision, meaningfully less VRAM, inaudible difference on most reference material.low_vram- the second lever, for 8GB-class cards. Slower, but it's the difference between running and OOMing. The community's experience with IndexTTS2 on an 8GB 4060 is that generation is already slow (~40s for a long sentence);low_vramtrades a bit more speed for the ability to fit at all.
That's the whole node. One output, model, type INDEXTTS_MODEL, which is this pack's private type - only these nodes consume it, so don't go looking to plug it into anything else.
How it works
Under the hood it's a lazy singleton. The first time the Loader runs it constructs an IndexTTS2 instance and caches it; reruns with the same (model_dir, fp16, low_vram) tuple are free. Change any of the three and it offloads the old instance before building the new one, so you can't end up with two copies of an 11.8GB model squatting in VRAM. That "load once, cache forever" pattern is the right call here - audio in ComfyUI is compute-cheap relative to the video it usually drives, so you want to pay the model-load tax once and then spend your GPU on the picture.
Installing it
The pack installs like any custom node. Easiest: ComfyUI Manager, search IndexTTS2-PauseControl. It's on the Comfy Registry, but it's new, and new nodes occasionally haven't made it into Manager's search index yet - if it doesn't show up, do it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/lynx-gt/IndexTTS2-PauseControl
cd IndexTTS2-PauseControl
python install.py # installs deps + checks the model dir
Then put the weights in ComfyUI/models/index_tts/ and restart. Two gotchas worth writing down before they bite you: keep the directory name exactly IndexTTS2-PauseControl (install.py probes upward for your ComfyUI root), and never pip install . - this project's package name collides with the official indextts package and pip would overwrite the official inference code. The descript-audiotools dependency is optional and has a nasty habit of downgrading your protobuf; install.py handles it with --no-deps, so prefer the script over manual pip here.
When it goes wrong
- "Missing descript-audiotools" - install via
install.py(which passes--no-deps), not raw pip. - Node doesn't appear after install - restart ComfyUI and check the startup log for an import error; the pack inserts its own directory into
sys.path, so a rename or a moved folder is the usual culprit. - It runs but VRAM is gone - that's the model, not the node. 11.8GB in FP32 is real memory. This pack ships an
IndexTTSUnloadnode precisely because you don't want IndexTTS2 parked in VRAM while a Wan or LTX render needs the card. Flipfp16, thenlow_vram, and finish the TTS stage with an Unload before the video stage starts.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_dir | STRING | /tmp/ComfyUI/models/index_tts | — |
| fp16 | BOOLEAN | false | — |
| low_vram | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | INDEXTTS_MODEL | — |