VoxCPM Loader
The 0.5B TTS model that fits on a normal GPU (and the Windows trap to avoid)
- VOXCPM_MODEL
Every TTS pipeline in this pack starts here. The Loader pulls in VoxCPM-0.5B from OpenBMB - a ~0.5 billion parameter speech model that's fast and accurate enough that people in the ComfyUI community keep praising it over flashier names. Small enough to fit on a mid-range GPU, good enough that you stop noticing it's there. That's the pitch, and it holds up.
What you actually set
The node has three inputs, and you'll touch two of them:
model_name- a dropdown. The default isopenbmb/VoxCPM-0.5B (Auto-Download), which grabs the model from Hugging Face on first load and caches it intoComfyUI/models/TTS. If you've downloaded the model manually into a subfolder there (e.g.models/TTS/VoxCPM-0.5B), that folder shows up in the list too, letting you skip the download. If a local folder is missing, the code falls back to auto-download rather than failing - nice touch.optimize- leave it onnone. This istorch.compile(optionsnone/no_fullgraph/fullgraph), and the author is upfront that it's broken on Windows. It's retained in case the community fixes it, but on a normal Windows box it's a crash waiting to happen. On Linux you can experiment; the payoff is modest.load_denoiser- boolean, default on. VoxCPM uses a diffusion denoiser stage at inference; this controls whether it's loaded. Keep it on for real synthesis.
One output: VOXCPM_MODEL, which feeds the Cache Builder, SRT Processor and Dubber.
How it works
On import, the pack registers a tts folder path inside ComfyUI's models directory, so model discovery is automatic. When you hit run, the Loader calls voxcpm.VoxCPM.from_pretrained with that cache dir - if it's the auto-download option, huggingface_hub fetches and caches it. First run is the slow one; expect a download in the low single-digit gigabytes and maybe a minute or two of loading. Subsequent runs are quick.
One behavioral note: the synth nodes each move the model to the GPU when they run and (unless keep_model_loaded is set) offload it back to CPU afterward. That offload is deliberate - it keeps a TTS model from squatting on VRAM between generations - but it's also why running several synth steps in one queue can feel start-stop. If you're doing a batch, you'll feel it. That's the trade, and it's a reasonable one.
Installing it
Install the whole pack - the Loader can't exist without its siblings:
cd ComfyUI/custom_nodes
git clone https://github.com/judian17/ComfyUI-SRT-subtitles-VoxCPM
Restart ComfyUI, or use ComfyUI Manager (search "SRT subtitles VoxCPM"). The pack's requirements.txt pins torch>=2.5 / torchaudio>=2.5, plus transformers, diffusers, librosa, pydub, soundfile, inflect and wetext among others. Since custom nodes all share one Python environment, those deps can collide with other packs' versions - if a previously-working node starts erroring after install, that's the usual suspect. On the first load, make sure you can reach Hugging Face; offline installs need the manual model download into models/TTS.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | openbmb/VoxCPM-0.5B (Auto-Download) | 1 options: openbmb/VoxCPM-0.5B (Auto-Download) |
| optimize | COMBO | none | 3 options: none, no_fullgraph, fullgraph |
| load_denoiser | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VOXCPM_MODEL | VOXCPM_MODEL | — |