Nodes/ComfyUI-VoxCPMTTS/VoxCPM TTS (Advanced)
ComfyUI Node

VoxCPM TTS (Advanced)

When 'Good Enough' Isn't the Point

By 1038lab·Created 11 months ago·Updated 9 months ago· 42
VoxCPM TTS (Advanced)
  • reference_audio
  • AUDIO
  • STRING
modelVoxCPM 1.5
textHello, this is VoxCPM TTS.
cfg_value2.0
inference_steps10
max_length4096
normalizetrue
reference_text
fade_in_ms20
auto_transcribe_referencefalse
show_transcription_logtrue
unload_modelfalse
retry_attempts2
retry_threshold8.0
deviceauto
seed-1

The plain VoxCPM TTS node works out of the box, and that's the problem - you can't fix what you can't touch. VoxCPM TTS (Advanced) (AILab_VoxCPMTTS_Advanced) is the same OpenBMB VoxCPM 1.5 diffusion-TTS engine from the same pack, but with every dial dragged out into the open. Same voice, same model, same auto-download to ComfyUI/models/TTS/VoxCPM1.5/. What you get here is control: quality-versus-speed, guidance, retry logic, fade-in, and text normalization.

Reach for it when the basic node gives you something close but not right - a voice that sounds off, a render that takes too long, or a reference clip the auto-transcriber mangled.

The knobs that actually matter

The required inputs beyond text and model are where the fun lives:

  • cfg_value (1–10, default 2.0) - guidance scale. Higher clings to your text; lower sounds more natural. Community experience says stay around 2–3; push past 4 and speech gets robotic.
  • inference_steps (1–100, default 10) - diffusion steps. 5 is fast-but-rough, 20 is cleaner. Diminishing returns past ~20, so don't crank it just because you can.
  • max_length (256–8192, default 4096) - the token ceiling. Long scripts need more; the flip side is that a high ceiling costs VRAM even when your text is short.
  • normalize (default on) - expands numbers, punctuation, and symbols into spoken form via wetext. Turn it off if you're doing something unusual and the node starts reading "1,000" in ways you hate.

The rest are quality-of-life. fade_in_ms (default 20) applies a fade to kill the click at the start of a clip - a real VoxCPM artifact. retry_attempts (default 2) and retry_threshold (default 8.0) run a clever self-check: it transcribes what it generated, compares the audio-to-text ratio, and regenerates if something came out garbled. That's why this node sometimes takes three times as long - it's fixing bad takes for you.

Voice cloning works like the basic node: connect reference_audio, and either type reference_text or enable auto_transcribe_reference to let faster-whisper do it. show_transcription_log prints the ASR result to your console - leave it on, it's the fastest way to see if the transcript came out wrong. unload_model frees VRAM after each generation, device picks cuda/mps/cpu, and seed at -1 is random.

Outputs

You get AUDIO (the standard ComfyUI {waveform, sample_rate} dict, 44.1kHz for VoxCPM 1.5) and a STRING output holding the reference text that was used. The pack doesn't ship a save node, so route the AUDIO output into a Save Audio node from VideoHelperSuite (VHS) to actually write the file.

Installing it

Same pack as the basic node, so if you already have that, this one's already installed. Otherwise: ComfyUI Manager, search "VoxCPMTTS", or:

cd ComfyUI/custom_nodes/
git clone https://github.com/1038lab/ComfyUI-VoxCPMTTS.git
cd ComfyUI-VoxCPMTTS
pip install -r requirements.txt

Restart after. Heavy deps to expect: faster-whisper, wetext, plus the ~1.2GB model download on first run and a separate Whisper model if you auto-transcribe.

Troubleshooting

  • "Reference text is required" error - you plugged in reference_audio but left reference_text empty and auto_transcribe_reference off. One or the other, always.
  • Slow generation - check retry_attempts; a bad reference is silently triggering re-runs. Fix the reference, not the retries.
  • Metallic sound at the end of long sentences - known VoxCPM 1.5 quirk. Lower cfg_value a bit, or split the text.
  • OOM - cut max_length, drop inference_steps, or flip unload_model on.

Start from the basic node's defaults (they're good), then change one knob at a time and listen. For local TTS in ComfyUI, this is the version you graduate to - and you'll likely stay.

Category🧪AILab/🔊TTS/VoxCPMTTS

Inputs (16)

NameTypeDefaultDescription
modelCOMBOVoxCPM 1.5Select VoxCPM model version
textSTRINGHello, this is VoxCPM TTS.Text to synthesize into speech
cfg_valueFLOAT2.01–10Guidance scale: higher = more adherence to prompt, lower = more natural
inference_stepsINT101–100Number of diffusion steps: higher = better quality, lower = faster
max_lengthINT4096256–8192Maximum token length during generation
normalizeBOOLEANtrueEnable text normalization for numbers, punctuation, etc.
reference_audiooptAUDIOReference audio for voice cloning
reference_textoptSTRINGText transcript of reference audio (leave empty for auto-transcription)
fade_in_msoptINT200–1000Fade-in duration to reduce initial artifacts (0-1000ms)
auto_transcribe_referenceoptBOOLEANfalseAutomatically transcribe reference audio when no text is provided
show_transcription_logoptBOOLEANtrueShow ASR transcription logs in console
unload_modeloptBOOLEANfalseUnload model after generation to free VRAM
retry_attemptsoptINT20–10Number of retry attempts for bad cases
retry_thresholdoptFLOAT8.02–20Audio-to-text ratio threshold for retry detection
deviceoptCOMBOautoDevice to run the model on
seedoptINT-1-1–18446744073709550000Random seed (-1 for random)

Outputs (2)

NameTypeDescription
AUDIOAUDIO
STRINGSTRING