Document the three-book casting validation (v1.20.35)

Re-cast all three volumes end to end and compared each against its existing
cast. Book 03 finished at 9 unknown, below the 25-line cast it replaced, and
its fused multi-turn segments — one voice reading both sides of an exchange —
fell from 60 to 6. Speaker counts stayed level with the hand-corrected books
instead of inflating, confirming the phantom-speaker filter and the label
consolidation both hold.

Agreement with the hand-corrected books is 81-82%. The largest remaining
error is systematic ping-pong inversion, where a whole exchange alternates
onto the wrong speaker, followed by epithets that share no tokens with the
canonical name.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mARTin-B78 2026-08-12 19:44:47 +02:00
parent 35cb21ad70
commit 2013157bda

View File

@ -22,6 +22,22 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi
- **Emotion instructions are now always written in English**, even for non-English voices (the spoken text and the native-accent clause stay in the book's own language). Confirmed by controlled A/B testing — same line, same voice, only the instruct language varying — that Qwen3-TTS follows English emotion instructions far more reliably: German instructs produced barely-differentiated output, while English instructs yield a clean, correctly-ordered prosodic gradient (whisper 128 Hz → sad 142 → neutral 179 → scared 203 → happy 225 → angry 269 Hz), with sensible duration changes too (sad slowest, scared fastest). - **Emotion instructions are now always written in English**, even for non-English voices (the spoken text and the native-accent clause stay in the book's own language). Confirmed by controlled A/B testing — same line, same voice, only the instruct language varying — that Qwen3-TTS follows English emotion instructions far more reliably: German instructs produced barely-differentiated output, while English instructs yield a clean, correctly-ordered prosodic gradient (whisper 128 Hz → sad 142 → neutral 179 → scared 203 → happy 225 → angry 269 Hz), with sensible duration changes too (sad slowest, scared fastest).
- **Fish-Speech generation parameters (`temperature` / `top_p` / `repetition_penalty`) were never forwarded.** Every Fish-Speech line synthesized at the server's fixed defaults, ignoring the app's per-backend stability settings — the only backend not routed through the shared `_apply_tts_extra_params` helper. - **Fish-Speech generation parameters (`temperature` / `top_p` / `repetition_penalty`) were never forwarded.** Every Fish-Speech line synthesized at the server's fixed defaults, ignoring the app's per-backend stability settings — the only backend not routed through the shared `_apply_tts_extra_params` helper.
## [1.20.35] — 2026-08-12
### Fixed
- **Phantom characters invented from German noun phrases.** The caster emitted fragments of noun phrases as speakers — "in seinem Inneren" → `Inneren`, "die Hand" → `Hand`, "mein Geliebter" → `Geliebten`, "der Wind" → `Wind`. Each became a cast entry with its own voice while the real speaker's line was lost to a phantom; measured against a hand-corrected book this was much of why a fresh cast produced 73 speakers where the human had 62. Such lines are now reset to Unknown — visibly unresolved and still recoverable by the repair passes — rather than silently wrong.
### Validation
Whole-book re-casts of all three volumes, compared against their existing casts with `scripts/compare_casts.py`:
| Book | Fresh cast | After auto-repair | Existing cast | Phantoms |
|------|-----------|-------------------|---------------|----------|
| 01 | 286 unknown | 34 | 11 (hand-corrected) | none |
| 02 | 126 unknown | 7 | 0 (hand-corrected) | 5, then fixed |
| 03 | 265 unknown | **9** | 25 | none |
Book 03 finished below the cast it replaced, and its fused multi-turn segments — one voice reading both sides of an exchange — dropped from 60 to 6. Speaker counts stayed level with the manual casts rather than inflating, confirming the phantom filter and the label consolidation. Agreement with the hand-corrected books is 8182%; the largest remaining error is systematic ping-pong inversion, where a whole exchange alternates onto the wrong speaker, plus epithets ("Amazone" → Lysandra) that share no tokens with the canonical name.
## [1.20.34] — 2026-08-12 ## [1.20.34] — 2026-08-12
### Fixed ### Fixed