Nodes/ComfyUI-VoxCPM/VoxCPM Dataset Maker
ComfyUI Node

VoxCPM Dataset Maker

Turn a folder of audio + transcripts into a training set

By wildminder·Created 11 months ago·Updated 4 months ago· 496
VoxCPM Dataset Maker
    • Dataset Path
    audio_directory
    output_filenametrain.jsonl

    This is step one of VoxCPM's LoRA training pipeline, and it's a small, unglamorous node: point it at a folder, get back a training manifest. You put a .wav file next to a matching .txt transcript for each clip in your dataset, run this node over the directory, and it packages the whole thing into a single train.jsonl file - the format the VoxCPM LoRA Trainer node actually consumes.

    If you've never trained a TTS voice before, this is the unglamorous-but-essential part: the model doesn't learn from raw audio alone, it needs each clip paired with what was actually said in it, and this node is what stitches those pairs together into something the trainer can iterate over.

    The inputs and outputs that matter

    Only two fields, both plain strings:

    • audio_directory - the path to a folder containing your .wav files and their matching .txt transcripts.
    • output_filename (default train.jsonl) - what to name the manifest it writes.

    The output is Dataset Path, a STRING - the path to the JSONL file it just built. Wire that straight into VoxCPM LoRA Trainer's dataset_path input.

    Why this matters more than it looks like

    Training your own VoxCPM voice via LoRA isn't a niche stunt - people in the community have used this exact audio-plus-transcript approach to retrain VoxCPM on new voices and, in at least one documented case, an entirely new language the base model had never seen, using nothing more exotic than a public speech corpus chunked into short clips with transcripts. The mechanics of that all start here: clean pairing between audio and text is the single biggest lever on how well the resulting LoRA turns out, more than any hyperparameter in the training config downstream. Garbage transcripts - mismatched, inaccurate, or missing punctuation - produce a garbage-in-garbage-out LoRA no matter how carefully you tune the trainer.

    Installing it

    Same pack, no separate install. 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 ComfyUI and find it under audio/tts/training, alongside VoxCPM Train Config and VoxCPM LoRA Trainer - the three of them are meant to be used together, in that order.

    Common issues & troubleshooting

    Some clips silently missing from the resulting dataset. The most likely cause is a filename mismatch - every .wav needs a .txt with the exact same stem sitting next to it (clip001.wav paired with clip001.txt, not clip_001.txt or anything close-but-not-exact). Double-check for typos and inconsistent naming conventions before assuming the node is broken.

    Path errors on audio_directory. This is a plain string field, so it's on you to get the path right - no browse dialog, no validation until it tries to read the folder. Use an absolute path if you're unsure whether ComfyUI's working directory matches what you expect.

    Training runs but the resulting LoRA sounds inconsistent or off. Before touching a single hyperparameter in Train Config, go back and spot-check a handful of your transcripts against the actual audio. This node just packages whatever you point it at - it doesn't validate that your transcripts are accurate, so bad pairs go straight through into training.

    Categoryaudio/tts/training

    Inputs (2)

    NameTypeDefaultDescription
    audio_directorySTRINGPath to directory containing .wav and .txt files.
    output_filenameSTRINGtrain.jsonlName of the output JSONL file.

    Outputs (1)

    NameTypeDescription
    Dataset PathSTRING