Nodes/ComfyUI-FL-VoxCPM/FL VoxCPM TTS
ComfyUI Node

FL VoxCPM TTS

Fast, accurate local TTS with voice cloning — the one people forget about

By filliptm·Created 7 months ago·Updated 4 months ago· 32
FL VoxCPM TTS
  • prompt_audio
  • Generated Audio
model_nameVoxCPM1.5
lora_nameNone
textVoxCPM is an innovative TTS model designed to generate highly expressive speech.
cfg_value2.0
inference_timesteps10
min_tokens2
max_tokens2048
normalize_texttrue
seed-1
force_offloadfalse
devicecpu
retry_max_attempts3
retry_threshold6.0
prompt_text

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 transformers or torch versions fight other packs, that's the standard tax for this whole corner of ComfyUI; a clean venv per pack is the usual fix.
CategoryFL/VoxCPM

Inputs (15)

NameTypeDefaultDescription
model_nameCOMBOVoxCPM1.5Select the VoxCPM model to use.
lora_nameCOMBONoneSelect a LoRA to apply for style/fine-tuning. Rank is auto-detected.
textSTRINGVoxCPM is an innovative TTS model designed to generate highly expressive speech.Text to synthesize. Each line is processed as a separate chunk.
cfg_valueFLOAT2.01–10Guidance scale. Higher values adhere more to the prompt but may sound less natural.
inference_timestepsINT101–100Number of diffusion steps. Higher values may improve quality but are slower.
min_tokensINT21–100Minimum length of generated audio tokens.
max_tokensINT204864–8192Maximum length of generated audio tokens.
normalize_textBOOLEANtrueEnable text normalization (recommended for general text).
seedINT-1-1–18446744073709550000Seed for reproducibility. -1 for random.
force_offloadBOOLEANfalseForce the model to be offloaded from VRAM after generation.
deviceCOMBOcpuDevice to run inference on. Defaults to the best available.
retry_max_attemptsINT30–10Max retry attempts for bad cases (e.g., babbling). Set to 0 to disable retrying.
retry_thresholdFLOAT6.02–20Audio/text length ratio to trigger a retry. Increase for very slow speakers.
prompt_audiooptAUDIOReference audio for voice cloning.
prompt_textoptSTRINGThe transcript of the reference audio. Required for voice cloning.

Outputs (1)

NameTypeDescription
Generated AudioAUDIO