GLM-TTS Loader
The loader that quietly downloads ~9 GB for you
- model
GLM-TTS is not one model, it's a stack. Z.ai (the lab behind GLM and CogVideoX, and very much the real deal) shipped it open-source in December 2025, and it's a two-stage TTS system: a Llama-architecture LLM that writes speech tokens, then a flow-matching model that turns those tokens into a mel spectrogram, then vocoders that make the final waveform. On top of that sit a speech tokenizer and a CosyVoice-style frontend. That's six or seven moving parts you do not want to load by hand in a graph.
GLM-TTS Loader is the node that bundles all of them into a single model handle. You wire that handle into the Sampler, and never think about the machinery again. The pack vendors the entire inference source, so the loader only needs the weights - and if you haven't downloaded them, it does that for you too.
How it works
The loader takes one path string and resolves it in a sensible order: first ComfyUI/models/<model_path>, then an absolute path if you gave one, and if neither exists it falls back to the models directory and auto-downloads zai-org/GLM-TTS from HuggingFace. That download is the headline. It's about 9 GB, dominated by a ~6.2 GB LLM shard plus a 1.6 GB speech tokenizer. First run looks frozen for a while; it's not, it's downloading.
The node sanity-checks for llm/config.json, flow/config.yaml, and speech_tokenizer/model*.safetensors before it loads, so a partial or failed download just re-fetches the missing pieces on the next run rather than crashing obscurely.
The inputs that matter
Only three, and you'll touch maybe two:
model_path(STRING, default"GLM-TTS") - point it atComfyUI/models/GLM-TTSby default, or drop the weights anywhere and pass an absolute path. If the folder's empty it downloads into place.sample_rate(24000or32000, default24000) - the output audio's rate. 32 kHz comes out a touch sharper; pick it if your downstream audio chain doesn't mind.use_phoneme(BOOLEAN, default off) - this toggles GLM-TTS's "phoneme-in" mode, the hybrid phoneme+text input that fixes polyphone pronunciation (think "行" read as xíng vs háng). Leave it off unless you need that precision - audiobooks, language education, that kind of thing. It trades a bit of simplicity for control.
The single output is model (GLM_TTS_MODEL), which feeds the Sampler's model input. That's the whole wiring.
Install
Install via ComfyUI Manager (search "GLM-TTS" or "comfyui_GLM_TTS"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/karas17/comfyui_GLM_TTS
Restart ComfyUI. The pack's requirements.txt pulls the Chinese text-frontend stack - zhon, zhconv, jieba, pypinyin, HyperPyYAML, soundfile, scipy, huggingface_hub - and expects Python 3.10–3.12. onnxruntime-gpu is listed as optional because ComfyUI often ships it; the speaker-embedding step wants onnxruntime, so if the loader dies at the frontend stage, that's your first suspect.
Common issues
- "Failed to download models" - usually network or a flaky HF connection mid-9GB. Rerun; the node resumes the missing files.
- Loads but errors in the frontend/embedding stage - check
onnxruntimeis installed (pip install onnxruntime-gpu). - It's a VRAM hog - this is a real 6 GB+ LLM plus tokenizer plus flow model, all resident. It's not a "run it on anything" TTS; give it a proper GPU.
- Wrong Python - the vendored source assumes 3.10–3.12. ComfyUI portable ships a compatible interpreter, so this mostly bites people who hand-rolled their own environment.
One loader, one big download, one model wire, and the heavy lifting is done. The Sampler is where the actual fun starts.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | STRING | GLM-TTS | — |
| sample_rate | COMBO | 24000 | 2 options: 24000, 32000 |
| use_phoneme | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | GLM_TTS_MODEL | — |