Nodes/ComfyUI-VoxCPM/VoxCPM Voice Design
ComfyUI Node

VoxCPM Voice Design

Design a brand-new voice from a sentence — no reference audio at all

By starsFriday·Created 5 months ago·Updated 5 months ago· 8
VoxCPM Voice Design
  • model
  • audio
text你好,欢迎使用 VoxCPM2。
voice_description年轻女性,声音温柔甜美,语速适中
cfg_value2.0
inference_timesteps10
max_len4096
normalizefalse
denoisefalse

Type "young woman, gentle and sweet voice, medium speaking pace" and get a voice that isn't anyone's in particular. That's VoxCPM Voice Design - the node that turns a natural-language description into a synthetic speaker, with no sample audio required. For character work, demo narration, or just testing how a sentence sounds in a different "person," it's the most immediate node in this pack: one model, one description, done.

It's the closest thing this ecosystem has to prompting a voice the way you'd prompt an image. And it's the honest trade - you get total freedom and zero control over a real person's timbre. If the goal is "make it sound like this person," you want Controllable Cloning instead. Voice Design is for inventing speakers, not impersonating them.

How it works

Under the hood, voice_description isn't a separate conditioning signal - the pack wraps it into the prompt text as a parenthetical control instruction: (young woman, gentle and sweet voice, medium speaking pace)Hello.. The VoxCPM2 model is trained to read that bracket-prefix as the speaker spec, then the same LM + diffusion + audio-VAE pipeline renders the speech at 48kHz.

That's why the description quality is everything. The README's guidance: cover gender, age impression, tone, pace, emotion, style cues, and a dialect cue if needed. Good ones:

  • young woman, gentle and sweet voice, medium speaking pace
  • middle aged male, calm documentary narration, low voice
  • 粤语,中年男性,语气平淡 - yes, it accepts Chinese dialect cues too

Bad ones are the vague filler: good voice, normal person, random style. The model needs adjectives, not vibes. If the output comes back generic, the fix is more specific description, not more timesteps.

The inputs

Everything else is the pack's shared generation set: text (what's spoken), cfg_value (0–10, default 2 - how strictly the delivery matches the description), inference_timesteps (1–100, default 10 - quality vs. speed), max_len (token budget; raise if audio cuts off), normalize (numbers/dates cleanup), denoise (irrelevant here - no reference audio to clean). Output is a single audio socket for your preview or save node.

One thing worth knowing: this is a diffusion pipeline, so synthesis is stochastic. Rerun the same description and you'll get a subtly different take - which is a feature for auditioning, and a mild annoyance if you wanted byte-identical takes. There's no seed input on this node, so "re-run until I like it" is the workflow.

Setup and pitfalls

Same shared install as the rest of the pack: ComfyUI Manager (search "ComfyUI-VoxCPM") or git clone https://github.com/starsFriday/ComfyUI-VoxCPM.git into custom_nodes, pip install -r requirements.txt, and download openbmb/VoxCPM2 into models/VoxCPM2. Heavy deps, Python 3.10–3.13, CUDA ≥ 12 - the audio-node standard.

The trap most people hit is describing the voice and the content in the same breath. Keep them separate: voice_description is who speaks, text is what they say. And if your "designed" voice drifts toward generic, that's almost always a too-thin description - add age, add pace, add a dialect cue, and rerun.

Categoryaudio/VoxCPM

Inputs (8)

NameTypeDefaultDescription
modelVOXCPM_MODEL
textSTRING你好,欢迎使用 VoxCPM2。
voice_descriptionSTRING年轻女性,声音温柔甜美,语速适中
cfg_valueFLOAT2.00–10
inference_timestepsINT101–100
max_lenINT409664–65536
normalizeBOOLEANfalse
denoiseBOOLEANfalse

Outputs (1)

NameTypeDescription
audioAUDIO