FL VoxCPM Dataset Maker
The two-minute dataset builder for VoxCPM voice LoRAs
- Dataset Path
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.flacfiles, each with a matching.txtfile of the same base name.sample1.wavneedssample1.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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_directory | STRING | Path to directory containing .wav, .mp3, or .flac files with matching .txt files. | |
| output_filename | STRING | train.jsonl | Name of the output JSONL file. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Dataset Path | VOXCPM_DATASET | — |