VoxCPM LoRA Trainer
Train a custom voice LoRA without leaving ComfyUI
- train_config
- LoRA Output Path
This is the node that actually trains, and the pack's own description leads with a warning you should take seriously: this process takes time and blocks the UI. Hit run on this and ComfyUI is unusable until it's done - not "sluggish," genuinely locked up. Kick it off before you walk away, not in the middle of a session you need to keep working in.
What you get for that wait is something most TTS node packs don't offer at all: native LoRA fine-tuning of a voice model, entirely inside ComfyUI, no separate training repo or environment to fight with. Feed it a dataset and a config, and it produces a LoRA .safetensors you can drop straight into the lora_name dropdown on the main VoxCPM TTS node afterward.
The inputs and outputs that matter
base_model_name(default VoxCPM2) - which base model you're fine-tuning. Both VoxCPM1.5 and VoxCPM2 are supported; whichever you pick here needs to match thesample_rateyou set in the paired VoxCPM Train Config node.train_config- required, and it's not a set of fields on this node at all; it's a whole config bundle piped in from VoxCPM Train Config. This node doesn't work standalone.dataset_path- thetrain.jsonlpath, normally the output of VoxCPM Dataset Maker, though you can point it at a manually-built JSONL too.output_name(defaultmy_lora_v1) - the subfolder name it creates undermodels/lorasfor the results.max_steps(default 1000, up to 100000) - total training steps.save_every_steps(default 200) - checkpoint frequency, so you're not betting the whole run on making it tomax_stepswithout an interruption.num_workers(default 0) - dataloader worker processes. 0 means everything runs on the main thread, which is the safest default if you're not sure your setup handles multiprocessing cleanly.
The output is LoRA Output Path, a STRING pointing at wherever the trained LoRA landed.
What LoRA training here can and can't do
Community reports on training VoxCPM LoRAs are genuinely enthusiastic when it comes to voice style and timbre - people describe getting near-faithful voice recreations from a chunked audio-plus-transcript dataset, and a few report pushing lora_rank toward the top of its range in the paired Train Config for noticeably better results when the default wasn't cutting it. Where it gets more mixed is teaching the model something it fundamentally doesn't know yet - at least one person training VoxCPM1.5 into a new language found LoRA alone wasn't enough and ended up doing a full finetune outside this pipeline instead. Read that as: LoRA is the right tool for "sounds like this specific person," and a less certain bet for "speaks a language the base model has never heard."
Installing it
Same pack, same install as everything else here. ComfyUI Manager: search ComfyUI-VoxCPM. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/wildminder/ComfyUI-VoxCPM.git
cd ComfyUI-VoxCPM
pip install -r requirements.txt
Restart, and it's under audio/tts/training next to Dataset Maker and Train Config.
Common issues & troubleshooting
ComfyUI looks frozen after you hit run. That's expected, not a crash - this node blocks the interface for its entire duration. Watch the console/terminal for progress instead of the graph UI.
Training completes but results are inconsistent or nowhere near the source voice. Before touching max_steps or the Train Config hyperparameters, go back to your dataset - a LoRA trained on mismatched or inaccurate transcripts (see VoxCPM Dataset Maker) will faithfully learn the wrong thing, no amount of extra steps fixes bad pairs.
Trained LoRA doesn't show up in the TTS node's lora_name dropdown. Per the pack's own instructions for using LoRAs at inference time, the file needs to land in ComfyUI/models/loras/ and the node list needs a refresh - if output_name pointed somewhere unexpected, check there before assuming training failed.
Considering a new language rather than a new voice. Manage expectations going in: this is a LoRA trainer, and LoRA fine-tuning has a real ceiling when the base model has no exposure to the target language at all - per real reports above, that's when people reach for a full finetune instead of this node.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| base_model_name | COMBO | VoxCPM2 | Base VoxCPM model to fine-tune. Supports both VoxCPM1.5 and VoxCPM2. |
| train_config | * | Configuration dictionary from VoxCPM Train Config node. | |
| dataset_path | STRING | Path to the train.jsonl file. | |
| output_name | STRING | my_lora_v1 | Name of the subfolder in 'models/loras' to save results. |
| max_steps | INT | 1000100–100000 | Total number of training steps. |
| save_every_steps | INT | 20050–5000 | Save checkpoint every N steps. |
| num_workers | INT | 00–8 | Number of dataloader workers (0 for main thread). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LoRA Output Path | STRING | — |