Qwen3-TTS Dataset Maker
The boring node that turns a folder of .wav + .txt pairs into trainable data
- jsonl_path
Qwen3-TTS Dataset Maker is the first node in the pack's fine-tuning pipeline, and it exists to solve one boring-but-critical problem: turning a folder of audio files into the exact JSONL format the rest of the training chain expects. It's not a training node and it doesn't touch a model or the GPU - it's a data prep utility, and it's the difference between a clean fine-tune and an afternoon of mysterious zero-sample failures.
The workflow it feeds is: Dataset Maker → Data Prep → Finetune. This node is step one. If you've trained LoRAs before, think of it as the "set up your image folder with captions" step, translated to audio - but the pack enforces the format for you instead of trusting you to get it right.
What it does
Point it at a folder and it scans for .wav files, pairs each with a same-named .txt transcript (case-insensitive matching, so line_01.wav and LINE_01.TXT still pair up), and writes one JSON entry per pair to dataset.jsonl. Each entry records the absolute path to the audio, its transcript, and the reference clip used for conditioning. Files without a matching transcript get skipped with a console warning - that's how you catch a folder where someone forgot the captions.
Three inputs, all required:
folder_path- the folder with your.wav+.txtpairs. Must exist and contain at least one wav, or it raises.output_filename- defaults todataset.jsonl, written inside that same folder.ref_audio_path- the reference sample that defines the voice. The README's convention is aref.wavin the folder; if you don't specify one and aref.wavexists, it's picked up automatically. If neither exists, it falls back to the first wav file and warns you - a fallback that means your reference might accidentally be in the training set, which you don't want. Set this explicitly.
The jsonl_path output is just the path string, meant to be handed to Qwen3-TTS Data Prep.
The part that actually matters
Good data is what makes or breaks a TTS fine-tune, and this node's honest requirement is: clean, single-speaker, consistently loud .wav files with accurate transcripts. Each clip should be a few seconds of one person talking, trimmed of silence and background noise. The same advice that applies to image training data applies here - garbage in, a voice that sounds like garbage out. A representative ref.wav is worth more than raw volume of data.
Installing & troubleshooting
Pack-level install: ComfyUI Manager (search "ComfyUI-Qwen3-TTS") or git clone https://github.com/DarioFT/ComfyUI-Qwen3-TTS into custom_nodes, then pip install -r requirements.txt by hand - ComfyUI won't. The qwen-tts dependency pins transformers==4.57.3, which can downgrade a shared environment.
Failure modes are limited and loud: "Folder not found" (path typo - strip quotes), "No .wav files found" (wrong folder), or a bunch of "Expected text file not found" warnings (transcripts are missing or named differently from the audio). When the dataset comes out with zero samples, it prints a warning rather than crashing, and the downstream nodes will fail on an empty file - so glance at the console count before moving on. There's no model involved, so there's no VRAM concern; it's instant.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| folder_path | STRING | — | |
| output_filename | STRING | dataset.jsonl | — |
| ref_audio_path | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| jsonl_path | STRING | — |