VoxCPM Batch TTS
Batch TTS — one voice, a whole script, no copy-pasting between runs
- model
- prompt_audio
- audio_list
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, orpipe. 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_audiowith 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | VOXCPM_MODEL | — | |
| texts | STRING | First sentence. Second sentence. Third sentence. | — |
| separator | COMBO | newline | 3 options: newline, semicolon, pipe |
| cfg_value | FLOAT | 2.01–3 | — |
| inference_timesteps | INT | 104–30 | — |
| normalize | BOOLEAN | false | — |
| prompt_audioopt | AUDIO | — | |
| prompt_textopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio_list | AUDIO_LIST | — |