FL VoxCPM TTS
Fast, accurate local TTS with voice cloning — the one people forget about
- prompt_audio
- Generated Audio
VoxCPM is the TTS model the hype forgot. Every launch day belongs to Chatterbox or Kokoro or Qwen, and meanwhile this thing just keeps quietly being accurate - people who actually run it say it skips fewer words on long text than the louder names. This node is the V1 engine from the filliptm/ComfyUI-FL-VoxCPM pack, built on OpenBMB's VoxCPM1.5 (800M params, 44.1kHz, English/Chinese). No API, no key, no cloud - the model downloads to your machine on first use and every voice lives there too.
Why you'd reach for it: you want a good generic voice for narration or dialogue, or you want to clone a specific voice from a short clip, and you'd rather not hand your audio to ElevenLabs. The pack's author (FL on GitHub, "Lividmusic1" on Reddit) is a working TTS tinkerer who also built the LoRA training side of this pack, so the node is wired to the ecosystem rather than bolted on.
How it works
Under the hood it's a diffusion TTS. The text gets normalized and tokenized, then the model denoises audio tokens over inference_timesteps steps, guided by cfg_value. The text box is chunked by line - each line becomes its own generation pass, which is how long paragraphs stay coherent instead of degrading into mumbling. There's also a babbling guard: retry_max_attempts and retry_threshold watch the audio/text length ratio and silently re-roll the generation when it comes out garbled. Set retry_max_attempts to 0 to disable it.
Voice cloning is the V1 party trick. Feed any AUDIO in via the optional prompt_audio socket - say a few seconds of a voice you want - and give it the exact transcript in prompt_text. That transcript isn't optional; the node raises an error if you supply audio without it. Short, clean reference clips clone better than long rambling ones, which is where the pack's Audio Crop and Transcribe nodes come in.
Inputs that matter
- text - what to say. One line per chunk.
- cfg_value (2.0) - guidance scale. Higher sticks closer to the prompt/reference but gets less natural. Above ~4 you'll hear it stiffen.
- inference_timesteps (10) - diffusion steps. More = slightly better, noticeably slower.
- prompt_audio + prompt_text - the cloning pair, both optional, required together.
- lora_name - pick a trained VoxCPM LoRA. Rank is auto-detected from the file, which saves you a classic failure mode.
- seed (-1) - set for reproducible takes; -1 rolls a fresh one.
The single Generated Audio output (AUDIO) drops into any audio preview, Save Audio node, or a video/lip-sync workflow downstream.
Installation
It's the same pack as the other FL VoxCPM nodes, so install once. ComfyUI Manager → search "FL VoxCPM", or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI-FL-VoxCPM.git
cd ComfyUI-FL-VoxCPM
pip install -r requirements.txt
The requirements list is real and heavy - torch, torchaudio, transformers, diffusers, bitsandbytes - so expect the audio-layer dependency dance. VoxCPM1.5 auto-downloads from HuggingFace to ComfyUI/models/tts/VoxCPM/ on first run; it's ~1.6GB in bf16, and it runs on CPU or Mac MPS if you're light on VRAM, though 12GB+ makes it comfortable.
Common issues
- "V2 model - use the V2 node" - VoxCPM2 is a different beast; this node refuses it on purpose. Use FL VoxCPM V2 TTS.
- Metallic tail on long sentences - a known V1.5 quirk the community has hit; it's an inference artifact, not a crash. Bump
inference_timesteps, or consider the V2 model which was built to fix exactly this. - First run feels frozen - that's the model download plus first-load setup. Watch the console, not the canvas.
- Audio dependency conflicts - if
transformersortorchversions fight other packs, that's the standard tax for this whole corner of ComfyUI; a clean venv per pack is the usual fix.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | VoxCPM1.5 | Select the VoxCPM model to use. |
| lora_name | COMBO | None | Select a LoRA to apply for style/fine-tuning. Rank is auto-detected. |
| text | STRING | VoxCPM is an innovative TTS model designed to generate highly expressive speech. | Text to synthesize. Each line is processed as a separate chunk. |
| cfg_value | FLOAT | 2.01–10 | Guidance scale. Higher values adhere more to the prompt but may sound less natural. |
| inference_timesteps | INT | 101–100 | Number of diffusion steps. Higher values may improve quality but are slower. |
| min_tokens | INT | 21–100 | Minimum length of generated audio tokens. |
| max_tokens | INT | 204864–8192 | Maximum length of generated audio tokens. |
| normalize_text | BOOLEAN | true | Enable text normalization (recommended for general text). |
| seed | INT | -1-1–18446744073709550000 | Seed for reproducibility. -1 for random. |
| force_offload | BOOLEAN | false | Force the model to be offloaded from VRAM after generation. |
| device | COMBO | cpu | Device to run inference on. Defaults to the best available. |
| retry_max_attempts | INT | 30–10 | Max retry attempts for bad cases (e.g., babbling). Set to 0 to disable retrying. |
| retry_threshold | FLOAT | 6.02–20 | Audio/text length ratio to trigger a retry. Increase for very slow speakers. |
| prompt_audioopt | AUDIO | Reference audio for voice cloning. | |
| prompt_textopt | STRING | The transcript of the reference audio. Required for voice cloning. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Generated Audio | AUDIO | — |