Nodes/ComfyUI-DN-VoxCPM/VoxCPM Batch TTS
ComfyUI Node

VoxCPM Batch TTS

Batch TTS — one voice, a whole script, no copy-pasting between runs

By DekaNear·Created 9 months ago·Updated 9 months ago· 1
VoxCPM Batch TTS
  • model
  • prompt_audio
  • audio_list
textsFirst sentence. Second sentence. Third sentence.
separatornewline
cfg_value2.0
inference_timesteps10
normalizefalse
prompt_text

If you've ever narrated more than one line, you know the pain this node removes: the single-text TTS nodes force you to run once per line, and every run is a full diffusion pass. VoxCPM Batch TTS takes a whole block of text, splits it into lines, and generates audio for all of them in one queue run with the same settings and - if you wire in a reference - the same voice. It's the audiobook, podcast, and dialogue-batch node.

The output is an audio_list (AUDIO_LIST), which isn't a single file you can play directly. That's intentional: you feed it to one of two sinks. VoxCPM Batch Save Audio writes each line to its own numbered WAV (great for per-line editing or feeding a lip-sync stage), or VoxCPM Concatenate Audio stitches the whole batch into one continuous track.

The inputs that matter

  • model - from the pack's VoxCPM Model Loader.
  • texts - multiline box, or whatever script you have. This is where VoxCPM Text From File slots in if your script lives in a file.
  • separator - how the node decides where one line ends and the next begins: newline, semicolon, or pipe. Newline is the default and the obvious choice for anything pasted from a text editor.
  • cfg_value and inference_timesteps - the same diffusion dials as the single-shot nodes; they apply to every line in the batch.
  • prompt_audio and prompt_text (optional) - wire both in to run the whole batch in a cloned voice. Same rule as everywhere in this pack: they work as a pair, and a bare prompt_audio with no text just doesn't clone.

The honest fine print

Batching here means one queue run, not parallel generation. The node loops over your lines and runs model.generate on each one sequentially, so N lines means N diffusion passes - a 40-line script is 40 waits. It's still way less fiddly than babysitting 40 separate runs, and each generated clip carries its source text along in the audio dict (visible in the console log as it goes). Long lists also eat VRAM sequentially, not at once, which is friendlier than you might expect.

Installing it

cd ComfyUI/custom_nodes/
git clone https://github.com/DekaNear/ComfyUI-DN-VoxCPM.git
cd ComfyUI-DN-VoxCPM
pip install -r requirements.txt

Restart ComfyUI, or search "DN VoxCPM" in ComfyUI Manager. First run downloads the VoxCPM model via the Model Loader.

Where people get burned

The classic mistake is treating the batch as a speed hack and then being surprised it's sequential - it's a convenience hack, not a parallel one. The other gotcha is separators: if your script has semicolons in the prose (or pipes in dialogue), the semicolon/pipe options will silently split mid-sentence. When in doubt, newline.

CategoryDN-VoxCPM/Advanced

Inputs (8)

NameTypeDefaultDescription
modelVOXCPM_MODEL
textsSTRINGFirst sentence. Second sentence. Third sentence.
separatorCOMBOnewline3 options: newline, semicolon, pipe
cfg_valueFLOAT2.01–3
inference_timestepsINT104–30
normalizeBOOLEANfalse
prompt_audiooptAUDIO
prompt_textoptSTRING

Outputs (1)

NameTypeDescription
audio_listAUDIO_LIST