Multi-purpose dataset maker for various TTS models:
The primary script is gradio_interface.py. It starts the Gradio UI that orchestrates
project creation, audio uploads, transcription, and dataset export.
uv installed.git clone https://github.com/JarodMica/dataset-maker.git
cd dataset-maker
uv sync
uv run .\gradio_interface.py
datasets_folder/<project>).wavs/.Below are examples based on the export code in gradio_interface.py.
Base (Tortoise/XTTS) exports a train.txt with file_id | transcript and a wavs/ folder:
train.txt
seg000001.wav|Hello world.
seg000002.wav|Another line.
StyleTTS format (from the Adjust train.txt tab) adds a speaker tag:
train.txt
seg000001.wav|Hello world.|speaker_01
GPTSoVITS format (from the Adjust train.txt tab) adds slicer_opt + language:
train.txt
seg000001.wav|slicer_opt|en|Hello world.
Higgs Audio export writes per-sample files and metadata.json:
speaker_01_000000.wav
speaker_01_000000.txt
metadata.json
metadata.json entries include speaker and quality fields (e.g. speaker_id, gender, duration, quality_score).
VibeVoice export writes a JSONL manifest with a "Speaker 0: " prefix:
{"text":"Speaker 0: Hello world.","audio":"<dataset_folder>/vibevoice_000000.wav"}
Qwen 3 TTS export writes a JSONL manifest with audio + ref_audio paths (relative to the export folder). Audio files are copied from the transcribe outputs into data/ (prefixed if collisions), and the reference clip is copied as data/ref_audio.<ext>:
{"audio":"./data/seg_00000001.wav","text":"Hello world.","ref_audio":"./data/ref_audio.wav"}
In the UI, the Qwen 3 TTS reference audio picker lists files from the project's transcribe/ folder.
Selecting the Qwen 3 TTS export format refreshes the reference list and resets to the first available item.
Emilia pipe (Originally intended for IndexTTS 2, not exclusive) writes a project-scoped JSONL and audio folder:
{"id":"<clip_id>","text":"Hello world.","audio":"<project>_emilia_dataset/audio/<clip_id>.mp3","speaker":"<base>_SPEAKER_X","language":"en","duration":1.23,"source":"original.wav"}
The Emilia path in the UI expects Emilia/config.json. Copy
Emilia/config_example.json to Emilia/config.json and update:
huggingface_tokenentrypoint.input_folder_path (optional override from UI)separate.step1.model_path and mos_model.primary_model_pathCUDAExecution provider may not be found even when using uv. The fix is to remove
and then add optimum[onnxruntime-gpu] in the terminal.
uv run python
>>> import onnxruntime as ort
>>> print("Available providers:", ort.get_available_providers())
Available providers: ['AzureExecutionProvider', 'CPUExecutionProvider']
uv run python
>>> import onnxruntime as ort
>>> print("Available providers:", ort.get_available_providers())
Available providers: ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']
See docs/CONFIG.md, docs/ARCHITECTURE.md, docs/OPERATIONS.md, and
docs/TROUBLESHOOTING.md for details.
21 commits
Python
74.1%
Tcl
25.9%
Multi-purpose dataset maker for various TTS models:
The primary script is gradio_interface.py. It starts the Gradio UI that orchestrates
project creation, audio uploads, transcription, and dataset export.
uv installed.git clone https://github.com/JarodMica/dataset-maker.git
cd dataset-maker
uv sync
uv run .\gradio_interface.py
datasets_folder/<project>).wavs/.Below are examples based on the export code in gradio_interface.py.
Base (Tortoise/XTTS) exports a train.txt with file_id | transcript and a wavs/ folder:
train.txt
seg000001.wav|Hello world.
seg000002.wav|Another line.
StyleTTS format (from the Adjust train.txt tab) adds a speaker tag:
train.txt
seg000001.wav|Hello world.|speaker_01
GPTSoVITS format (from the Adjust train.txt tab) adds slicer_opt + language:
train.txt
seg000001.wav|slicer_opt|en|Hello world.
Higgs Audio export writes per-sample files and metadata.json:
speaker_01_000000.wav
speaker_01_000000.txt
metadata.json
metadata.json entries include speaker and quality fields (e.g. speaker_id, gender, duration, quality_score).
VibeVoice export writes a JSONL manifest with a "Speaker 0: " prefix:
{"text":"Speaker 0: Hello world.","audio":"<dataset_folder>/vibevoice_000000.wav"}
Qwen 3 TTS export writes a JSONL manifest with audio + ref_audio paths (relative to the export folder). Audio files are copied from the transcribe outputs into data/ (prefixed if collisions), and the reference clip is copied as data/ref_audio.<ext>:
{"audio":"./data/seg_00000001.wav","text":"Hello world.","ref_audio":"./data/ref_audio.wav"}
In the UI, the Qwen 3 TTS reference audio picker lists files from the project's transcribe/ folder.
Selecting the Qwen 3 TTS export format refreshes the reference list and resets to the first available item.
Emilia pipe (Originally intended for IndexTTS 2, not exclusive) writes a project-scoped JSONL and audio folder:
{"id":"<clip_id>","text":"Hello world.","audio":"<project>_emilia_dataset/audio/<clip_id>.mp3","speaker":"<base>_SPEAKER_X","language":"en","duration":1.23,"source":"original.wav"}
The Emilia path in the UI expects Emilia/config.json. Copy
Emilia/config_example.json to Emilia/config.json and update:
huggingface_tokenentrypoint.input_folder_path (optional override from UI)separate.step1.model_path and mos_model.primary_model_pathCUDAExecution provider may not be found even when using uv. The fix is to remove
and then add optimum[onnxruntime-gpu] in the terminal.
uv run python
>>> import onnxruntime as ort
>>> print("Available providers:", ort.get_available_providers())
Available providers: ['AzureExecutionProvider', 'CPUExecutionProvider']
uv run python
>>> import onnxruntime as ort
>>> print("Available providers:", ort.get_available_providers())
Available providers: ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']
See docs/CONFIG.md, docs/ARCHITECTURE.md, docs/OPERATIONS.md, and
docs/TROUBLESHOOTING.md for details.
21 commits
Python
74.1%
Tcl
25.9%