Nodes/ComfyUI_RH_VoxCPM/RunningHub VoxCPM Multi-Speaker
ComfyUI Node

RunningHub VoxCPM Multi-Speaker

VoxCPM dialogue generation

By RH-RunningHub·Created 4 months ago·Updated 2 months ago· 0
RunningHub VoxCPM Multi-Speaker
  • model
  • audio_1
  • audio_2
  • audio_3
  • audio_4
  • audio_5
  • audio
script[spk5]今日AI新闻速报 [spk1]T8那个瓜娃子,又更新什么了? [spk2]管他干啥呀,带派不就行了。 [spk1]天天只知道做视频,耳都不耳人一哈。 [spk2]别笑哈,你试你也过不了第二关。
cfg_value2.0
inference_steps10
seed0
control_1四川话
control_2成年女性,东北话
control_3
control_4
control_5旁白音,成熟男性
normalize_textfalse
denoise_referencefalse
max_len4096
retry_badcasetrue
reference_text_1
reference_text_2
reference_text_3
reference_text_4
reference_text_5

If you've ever wanted a full podcast or a back-and-forth argument rendered in distinct voices without stitching clips together afterward, this is the node. RunningHub VoxCPM Multi-Speaker takes one tagged script, up to five reference voices, and generates the whole dialogue as a single continuous audio track - no per-line generation, no manual concat, no awkward pauses at the seams.

The trick is the script format. Each line is prefixed with a speaker tag:

[spk1]Hey, did you see the update?
[spk2]Not yet, what broke this time?
[spk1]Nothing broke. That's the surprise.

Everything under the same tag gets that speaker's voice, and the model handles the conversational flow. VoxCPM's tokenizer-free design is why this works as one pass instead of five separate renders - the model reads the whole tagged transcript as context, so it knows who's talking when and keeps intonation consistent across turn changes.

What you set per speaker

Each speaker from 1 to 5 gets three optional inputs, and they work exactly like the single-speaker Generate node's modes:

  • audio_N - the reference clip for that speaker. Empty means "design the voice from text instead."
  • control_N - the voice description, just a plain string like "adult female, northeastern accent." Defaults even come preloaded (spk1 defaults to 四川话, spk5 to 旁白音, mature male), which tells you which community this pack was built for first - it's very much a Mandarin-first tool.
  • reference_text_N - the exact transcript of that speaker's reference clip. On VoxCPM2, if you leave it blank the node falls back to safe reference-only conditioning instead of auto-transcribing, so a blank is fine unless you want maximum clone fidelity.

Shared knobs mirror the Generate node: cfg_value (2.0), inference_steps (10), seed, plus normalize_text, denoise_reference (ZipEnhancer per reference clip), max_len (4096), and retry_badcase (on). The output is a single audio wire with the whole dialogue.

Installing and running

Same pack, same drill:

cd ComfyUI/custom_nodes
git clone https://github.com/RH-RunningHub/ComfyUI_RH_VoxCPM.git
cd ComfyUI_RH_VoxCPM && pip install -r requirements.txt
hf download openbmb/VoxCPM2 --local-dir ComfyUI/models/voxcpm/VoxCPM2

Restart, and load the examples/VoxCPM2 多人工作流.json workflow - the README calls it the fixed 5-speaker version, and it's the fastest way to see the tag format in action.

The honest catches

First, five speakers means five reference clips if you want five cloned voices, and if you leave several empty you get designed voices that may not sound distinct enough in a crowd. Plan your cast before you write the script. Second, this is the fixed five-slot node - if you only need a two-person chat, you'll leave three inputs dangling, which is fine but noisy. That's exactly why the pack also ships the Dynamic Audio variant, which grows inputs as you connect them. Third, the Mandarin-first defaults and the model's accent tendencies will leak into English output - clone from an English clip, per the community's experience, and English comes out fine with a trace of the source accent. If a voice drifts metallic at the end of long lines, that's the old 1.5 behavior; VoxCPM2 is where this node is meant to run.

CategoryRunningHub/VoxCPM

Inputs (24)

NameTypeDefaultDescription
modelVOXCPM_MODEL
scriptSTRING[spk5]今日AI新闻速报 [spk1]T8那个瓜娃子,又更新什么了? [spk2]管他干啥呀,带派不就行了。 [spk1]天天只知道做视频,耳都不耳人一哈。 [spk2]别笑哈,你试你也过不了第二关。
cfg_valueFLOAT2.00.1–5
inference_stepsINT101–50
seedINT00–18446744073709550000
audio_1optAUDIO
control_1optSTRING四川话
audio_2optAUDIO
control_2optSTRING成年女性,东北话
audio_3optAUDIO
control_3optSTRING
audio_4optAUDIO
control_4optSTRING
audio_5optAUDIO
control_5optSTRING旁白音,成熟男性
normalize_textoptBOOLEANfalse
denoise_referenceoptBOOLEANfalse
max_lenoptINT409664–8192
retry_badcaseoptBOOLEANtrue
reference_text_1optSTRING
reference_text_2optSTRING
reference_text_3optSTRING
reference_text_4optSTRING
reference_text_5optSTRING

Outputs (1)

NameTypeDescription
audioAUDIO