# Aletheia Russian TTS corpus tools

`audit_corpus.py` verifies that an audiobook and EPUB contain the same text before any training data is produced.
It extracts the EPUB spine in reading order and compares local Whisper transcripts from the beginning, middle,
and end of the audiobook with the normalized book text.

Generated audio, transcripts, downloaded ASR models, and future training checkpoints belong under
`.codex-temp/tts-*`; they are working artifacts and must not be committed.

Example on Windows PowerShell:

```powershell
$env:PYTHONPATH = 'C:\Repos\Aletheia\.codex-temp\tts-python'
python tools\tts\audit_corpus.py `
  --source-dir 'C:\path\to\audiobook' `
  --output-dir '.codex-temp\tts-audit' `
  --model base
```

The audit is not a copyright or voice-consent check. Training and distributing a voice model requires
separate confirmation that the recordings and narrator's voice may be used for that purpose.

After the audit passes, `transcribe_corpus.py` creates one resumable JSON sidecar per MP3 with segment and
word timestamps. Existing sidecars are skipped unless `--force` is supplied. These transcripts are alignment
anchors only; the final Piper labels must come from the exact EPUB text.

`build_piper_dataset.py` globally aligns all ASR tokens to the EPUB in monotonic reading order, rejects weak
matches, merges adjacent short segments, and writes 22.05 kHz mono PCM WAV files plus Piper's
`filename.wav|Exact book text` metadata. Use `--dry-run` first and inspect the reported exact-token match ratio
before producing WAV files.

`train_piper.sh` is the CUDA/Linux entry point for scratch training and ONNX export.
`train_piper_windows.ps1` provides the equivalent native Windows path and a `-SmokeTest` mode that executes one
training and validation batch on CUDA before a long run. See `GPU_TRAINING.md` for host prerequisites and the
acceptance gate.
