diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ecedde..c48a039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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). - **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 81–82%; 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 ### Fixed