Nodes/ComfyUI-FL-VoxCPM/FL VoxCPM Dataset Maker
ComfyUI Node

FL VoxCPM Dataset Maker

The two-minute dataset builder for VoxCPM voice LoRAs

By filliptm·Created 7 months ago·Updated 4 months ago· 32
FL VoxCPM Dataset Maker
    • Dataset Path
    audio_directory
    output_filenametrain.jsonl

    Training a voice LoRA with this pack comes down to one folder: audio files with matching .txt transcripts. This node turns that folder into the train.jsonl manifest the trainer actually eats. It's the boring-but-critical step, and it exists so you never hand-write a JSONL file by hand.

    It's part of filliptm/ComfyUI-FL-VoxCPM, sitting in the training chain between "your recordings" and the LoRA Trainer: Dataset Maker → Train Config (V1 or V2) → LoRA Trainer.

    How it works

    Point it at a directory, give it an output filename, done. Two inputs:

    • audio_directory - a folder of .wav, .mp3, or .flac files, each with a matching .txt file of the same base name. sample1.wav needs sample1.txt.
    • output_filename - default train.jsonl. The file is written into the audio directory.

    The node scans for supported audio files, pairs each with its transcript, skips anything without one, and writes one JSON line per sample - {"audio": "path", "text": "transcript"}. If it finds no audio at all, or no sample with a valid transcript, it raises instead of quietly producing an empty set, which is the right failure mode for a training pipeline.

    The single output, Dataset Path, is the VOXCPM_DATASET type that plugs straight into the dataset_path socket on the LoRA Trainer. Nothing else reads it; it's a path under a friendly type name.

    Inputs that matter

    Only audio_directory, really. output_filename only matters if you want to keep multiple datasets in one folder. The real work is the folder itself - and since dataset quality beats every training knob (that rule survived the trip from image LoRAs to voice), a few minutes of cleanup here pays off more than any hyperparameter:

    • Each clip should be one clean utterance. Tight, no dead air, no background music.
    • Transcripts must be exact. If you're generating them, the pack's Transcribe node (or Whisper on small chunks) is faster and more accurate than one big transcription - Whisper struggles to split sentences cleanly on long audio.
    • 10–30 minutes of good material is a reasonable first training set; quality over quantity, same as always.

    Installation

    Same pack as everything else - Manager search "FL VoxCPM", or:

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

    No model download here - it's pure file scanning.

    Common issues

    • "No valid samples found" - a transcript is missing, empty, or named differently from its audio file. Check the exact base names.
    • The dataset path looks like a plain folder - right, because it is. The node only creates the JSONL; the audio files themselves are the training material.
    • Long recordings as single samples - this is the classic mistake. One 5-minute clip becomes one training sample; break it into sentence-sized chunks or your LoRA learns nothing but the pattern of that one clip.
    CategoryFL/VoxCPM/Training

    Inputs (2)

    NameTypeDefaultDescription
    audio_directorySTRINGPath to directory containing .wav, .mp3, or .flac files with matching .txt files.
    output_filenameSTRINGtrain.jsonlName of the output JSONL file.

    Outputs (1)

    NameTypeDescription
    Dataset PathVOXCPM_DATASET