Nodes/ComfyUI-VoxCPM/VoxCPM Multilingual TTS
ComfyUI Node

VoxCPM Multilingual TTS

Multilingual TTS in 28+ languages, fully local, no reference clip required

By starsFriday·Created 5 months ago·Updated 5 months ago· 8
VoxCPM Multilingual TTS
  • model
  • audio
textHello. 你好。Bonjour.
cfg_value2.0
inference_timesteps10
max_len4096
normalizefalse
denoisefalse

This is the node you reach for when you need a voice and you don't need a specific person's. It's plain text-to-speech on OpenBMB's VoxCPM2 model: type text, get a 48kHz spoken rendition, all on your own GPU. No API, no key, no reference clip - and that language list is the reason it exists.

Most open TTS is English-first, and the famous lightweight options (Kokoro, Piper) are even narrower. VoxCPM2's whole angle is the language table: 28 languages including Arabic, Burmese, Khmer, Swahili, Vietnamese, plus eight Chinese dialects (Cantonese, Wu, Sichuan, Hokkien, and friends). If your workflow needs a narrator in Thai or a character speaking 粤语, this pack is one of the few local paths that gets you there. It occupies the "multilingual quality corner" of the TTS landscape the audio community charts - not as fast or light as Kokoro, not as famous as Chatterbox, but arguably the best language coverage of the open crowd.

How it works

Text goes through VoxCPM2's pipeline: a language model turns your words into speech latents, a diffusion transformer renders them, and an audio VAE decodes the final waveform at 48kHz. No reference audio means nothing to clone, so the denoise input is effectively dead here - the README says as much. What actually does work:

  • text - what gets spoken. Multiline, so you can drop in a paragraph.
  • cfg_value (0–10, default 2) - how closely the output follows the prompt style. Higher clings harder; it costs naturalness before it costs anything else.
  • inference_timesteps (1–100, default 10) - the diffusion step count. More is cleaner, slower.
  • max_len (64–65536, default 4096) - the token budget. If the audio cuts off mid-sentence, raise this before touching anything else.
  • normalize - off by default. Turns on text normalization, which helps with numbers, dates, and abbreviations ("42" → "forty-two").

Output is a single audio socket - standard ComfyUI AUDIO - which you wire into a preview or save node (the pack's own example workflow uses LoadAudio and PreviewAudio).

The dialect trick

The official guidance is blunt: for Chinese dialects, write the actual dialect text rather than standard Mandarin and hope the model converts. Want Cantonese? Type something like 伙计,唔该来一个 A 餐,冻奶茶少甜。, not the Mandarin equivalent. The model handles it far better when you meet it halfway. Same principle applies to any language - if the pronunciation is off, the fix is usually in your text, not your settings.

Setup and gotchas

Install is the shared pack story: ComfyUI Manager (search "ComfyUI-VoxCPM") or git clone into custom_nodes, then pip install -r requirements.txt and download openbmb/VoxCPM2 into models/VoxCPM2. Heavy requirements (torch, transformers, funasr, librosa…), Python 3.10–3.13, CUDA ≥ 12 - the standard tax for audio nodes.

Two failure modes you'll actually hit: audio getting cut short (raise max_len), and garbled dialect pronunciation (rewrite the text in that dialect). If you loaded the model without the denoiser and your normalize throws, you're missing the wetext/inflect optional deps. None of it is mysterious - this is one of the more honest TTS nodes in ComfyUI: type, adjust two knobs, listen.

Categoryaudio/VoxCPM

Inputs (7)

NameTypeDefaultDescription
modelVOXCPM_MODEL
textSTRINGHello. 你好。Bonjour.
cfg_valueFLOAT2.00–10
inference_timestepsINT101–100
max_lenINT409664–65536
normalizeBOOLEANfalse
denoiseBOOLEANfalse

Outputs (1)

NameTypeDescription
audioAUDIO