v1.4 — Dataset Builder, Built-in Presets & Codebase Polish
What's New
Dataset Builder Tab
An interactive workflow for creating LoRA training datasets with per-sample audio preview.
- Create projects with voice description and optional global seed
- Define samples with emotion/style + text pairs in a table
- Generate and preview individual samples or batch-generate all at once
- Cancel running batches without losing completed samples
- Save as dataset — exports to
lora_datasets/ready for training - Project persistence — projects save to server and survive browser restarts
- Per-sample seed overrides for reproducible generation
Built-in LoRA Voice Presets
Pre-trained LoRA adapters ship with the app — no training required to start using LoRA voices.
- Appear alongside user-trained adapters in the Voices tab
- Male and female presets available out of the box
- Cannot be deleted (protected built-in adapters)
Enriched Instruct Guidance
Rewrote the LLM prompt instruct guidance to produce more expressive voice directions, especially for LoRA voices:
- 3-layer vocal dimensions — emotional tone + delivery style + vocal quality (~8-15 words per instruct)
- Narrator tonal variation — narrator can now shift tone at scene boundaries ("Tense, clipped narration." instead of always "Neutral, even narration.")
- Expanded voice descriptor vocabulary — breathy, hushed, booming, strained, raw, etc.
- Short vocalizations supported — "Oh!", "Ah!", "Haha!" now work as standalone entries (LoRA voices trained with short utterance data)
- Removed overly restrictive "Quietly [emotion]" as default pattern
Optimized Batch Generation
- Smart batch ordering — chunks sorted by text length within sub-batches to minimize padding waste
- Configurable max chars (
sub_batch_max_chars) — control sub-batch size for VRAM-limited setups - Chunking fix — corrected sub-batch boundary calculation
Automated API Test Suite
New app/test_api.py script for verifying all major endpoints after changes.
- 49 tests covering config, upload, scripts CRUD, voices, chunks, status polling, voice design, LoRA models/datasets, dataset builder lifecycle, merge/export, and error cases
- Two tiers — quick mode (no TTS/LLM needed, 37 tests) and full mode (all 49 tests)
- Run with
python test_api.pyorpython test_api.py --full
Bug Fixes
- Fix config save dropping settings — Setup tab was silently losing generation parameters (temperature, top_p, chunk_size, etc.) and TTS language on save due to missing Pydantic model fields
- Fix builtin LoRA adapter path — Builtin adapters selected from the LoRA Voice dropdown resolved to
lora_models/instead ofbuiltin_lora/, causing batch failures - Fix dataset builder voice lines lost on tab close/reopen
- Fix LoRA manifest keys and ref text mismatch
- Add missing pip dependencies — peft, transformers, librosa, numpy, pydantic were only available as transitive deps, causing install failures for some users
Codebase Cleanup
- Removed dead code — deleted orphaned files, stale bytecode, temp WAVs, editor swap files
- Consolidated 9 duplicate name sanitization patterns into
_sanitize_name()helper (fixed 5 missing.lower()calls) - Consolidated manifest load/save — generic
_load_manifest()/_save_manifest()replacing 4 type-specific functions - Consolidated audio helpers —
_concat_audio()and_clear_gpu_cache()extracted from inline copies - Removed unused imports and dead methods
- Fixed bare except clauses to catch specific exceptions
Documentation
- README updated with Dataset Builder tab, built-in LoRA presets, API reference for 10 new endpoints
- Wiki updated across 7 pages: enriched instruct writing guidance, Dataset Builder page, corrected stale references