APZmedia: Model Loader
Load Qwen3-TTS into your graph — the node that starts every workflow
- model
Every workflow in the APZmedia Qwen TTS pack starts with this node, and there's no way around it. The generation nodes don't take a model name - they take a QWEN_TTS_MODEL handle that only APZmedia: Model Loader produces. Think of it as the checkpoint loader of this pack: one node per model you want live at once, with the heavy lifting (downloading, dtype, device) handled for you.
The models are Alibaba's open-weights Qwen3-TTS-12Hz family. They're not tiny, but they're not Flux either - the 1.7B variants sit around 3.5GB as bf16 weights, and people genuinely run them on 6GB cards. The first load downloads the weights from Hugging Face automatically, so budget a few minutes and a stable connection the first time. Everything stays local after that; there's no API key and no cloud call anywhere in this pack.
Which model do you actually need?
The model_name dropdown lists five repos, and picking the wrong family is the most common way to bounce off a validation error. The pack's nodes check the model ID and refuse to run with the wrong one:
- VoiceDesign (
...-1.7B-VoiceDesign) - for APZmedia: Voice Design, Voice Design Generate, and Segmented Generate. This is the "describe a voice in words" brain. - CustomVoice (
...-1.7B-CustomVoiceor the0.6Bversion) - for Custom Voice Generate, the preset-speaker node. The 0.6B is the lightweight option here and is plenty for quick dialog. - Base (
...-1.7B-Baseor0.6B) - for Voice Clone Generate and for building/rebuilding speaker embeddings in Voice Design and Voice Library Loader. Anything touching a saved or cloned voice runs on the Base model.
The three widgets
- precision -
bf16by default, which is right on any RTX card.fp16if you're on older hardware that dislikes bf16.fp32is really only for CPU: the loader silently forces fp32 on CPU anyway, because half-precision math on CPU is both wrong and slow. - device -
autopicks CUDA when available and falls back to CPU. You usually never touch this. Set it tocpuexplicitly only if you want to keep VRAM for something else. - model_name - see above. This is the one you'll actually fiddle with.
Output is a single model socket of type QWEN_TTS_MODEL. One loader feeds one or more generation nodes. Because ComfyUI caches node results, the model loads once and stays in VRAM while you iterate on the text - the expensive part is the first run, not every run.
Install and gotchas
Install is the standard custom-node dance:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/APZmedia/ComfyUI-APZmedia-qwen-TTS
# restart ComfyUI
ComfyUI Manager will find it as APZmedia Qwen TTS Nodes once it's in the registry. Two things worth knowing before you blame your GPU. First, the pack pins numpy<2.0.0 in its requirements - if another node in your install needs numpy 2.x you'll get a tug of war, and the auto-install this pack runs on import isn't going to fix that politely. Second, the README's install command says cd comfyui-apzmedia-qwen-tts, but the folder git actually creates is ComfyUI-APZmedia-qwen-TTS - a harmless typo, just don't panic when the path doesn't exist. And whatever you do, don't pip-install a second torch into your ComfyUI venv to satisfy anything here; the pack needs the one you already have.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign | 5 options: Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign, Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice, Qwen/Qwen3-TTS-12Hz-1.7B-Base, Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice, Qwen/Qwen3-TTS-12Hz-0.6B-Base |
| precision | COMBO | bf16 | 3 options: bf16, fp16, fp32 |
| device | COMBO | auto | 3 options: auto, cuda, cpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | QWEN_TTS_MODEL | — |