Commit graph

10 commits

Author SHA1 Message Date
c5247cd993
whisper_refs: normalize transcripts (sentence-case, strip quote artifacts)
normalize_text() handles three Whisper quirks that produced messy F5
ref_texts:

  1. Lowercase output with no terminal period — capitalize first letter,
     append "." if missing.
  2. Hallucinated "' clusters Whisper inserts when it interprets a
     fragment as quoted dialogue (cora, ivan, atlas, hope had these).
     Strip everywhere; never legitimate English punctuation.
  3. Trailing apostrophe-then-period (.'.) from earlier rounds where a
     closing-quoted line got an extra "." appended — collapse to single
     terminal. Function is now idempotent.

Adds --from-cache flag: skip ASR, re-apply normalize from cached
whisper_refs.json. No GPU needed, useful after tuning the normalizer.
Lazy-imports torch so --from-cache works on any host.

Affects 9 of 40 voices: clara, grace, hazel, iris, felix, hugo
(lowercase fix); cora, ivan, atlas, hope (quote-cluster fix).
2026-05-24 16:02:18 -04:00
f25731ca08
Add make whisper-refs — re-transcribe cloned-voices/*.wav with whisper-large-v3
F5-TTS cloning quality depends on ref_text matching the prosody of ref_audio
(commas, periods, casing). Previous ref_texts were LibriSpeech ground-truth
labels: ALL CAPS, no punctuation — wrong signal for a flow-matching TTS
conditioned on text. Whisper hears what F5 will hear.

- scripts/whisper_refs.py — transcribe all wavs, rewrite
  voice_to_speaker.default.yaml + cloned-voices/voices_metadata.json
  in place. Also writes cloned-voices/whisper_refs.json sidecar.
- Makefile: whisper-refs target. Idempotent, rerun whenever
  cloned-voices/ changes.

Run on a GPU host (4090/3090). ~30s for 40 short clips on a 4090.
2026-05-24 11:56:15 -04:00
c3ac2def48 Add idempotent voice registry system for permanent speaker-to-name assignments
- voice_registry.json: append-only registry with 50 name pools per gender,
  locked speaker assignments, and multi-corpus support
- Rewrite download script to be registry-driven: loads registry, assigns
  names deterministically (sorted by speaker ID), never changes existing
  assignments
- Update docs/VOICES.md with registry system documentation
- Support --registry and --corpora CLI flags for multi-corpus downloads
2026-01-27 13:59:39 -05:00
35b083ed34 Fetch speaker genders from upstream LibriSpeech SPEAKERS.TXT 2026-01-27 13:17:52 -05:00
b77af6d603 Fix voice gender assignments - verified against LibriSpeech SPEAKERS.TXT 2026-01-27 13:13:07 -05:00
cd60e31aa2 Use gendered voice names: 11 female + 10 male = 21 distinct voices 2026-01-27 12:07:31 -05:00
648281cdb6 Update diverse voices script with correct voice names 2026-01-27 11:53:33 -05:00
02b4e7aaf7 Add 20 diverse voice samples for Qwen3-TTS
Standard voices: alloy, echo, fable, onyx, nova, shimmer
Extended voices: amber, breeze, coral, dawn, ember, frost,
                 glow, haze, ivy, jade, kite, lark, mist, nectar

Source: LJ Speech Dataset (public domain)
2026-01-26 16:50:54 -05:00
6b4f66dcf5 Use LJ Speech sample for voice cloning (Alibaba Cloud URL blocked) 2026-01-26 16:28:39 -05:00
e8183b4585 Organize repository: create scripts/ and docs/ directories
- Move utility scripts to scripts/ directory:
  - add_voice.py (add custom voices)
  - say.py (CLI TTS client)
  - test_voices.sh (voice testing)
  - download_samples.sh (OpenAI samples)

- Remove Windows batch files (.bat) - Linux/Docker focus
  - startup.bat
  - download_samples.bat
  - download_voices_tts-1.bat
  - download_voices_tts-1-hd.bat

- Create docs/ directory with AUDIT.md:
  - Complete repository file audit
  - Document 10+ abandoned TTS models to integrate
  - Plan for binary mirror strategy
  - Outline future refactoring to src/ structure

Raccoon mission: Scripts are in scripts/, docs reference them.
No code belongs in docs/ - only documentation.

🦝 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 09:25:21 -05:00