Commit Graph

174 Commits

Author SHA1 Message Date
302dbe1279 refactor: scope pure frontend leaves 2026-09-04 12:20:33 +02:00
d32985256d docs: close incremental p1 audit 2026-09-04 12:14:47 +02:00
cefd4bd494 refactor: extract rehearser training mode 2026-09-04 12:12:11 +02:00
0c7cc04643 refactor: extract rehearser recording 2026-09-04 12:10:00 +02:00
ba7b3115b9 refactor: extract audiobook preview export 2026-09-04 12:05:50 +02:00
76421dfe88 refactor: extract audiobook casting pipeline 2026-09-04 12:04:05 +02:00
eaf2f29d62 refactor: extract rehearser io 2026-09-04 12:01:38 +02:00
f97fd60e43 refactor: extract rehearser playback 2026-09-04 11:59:09 +02:00
e096b3e529 refactor: wire audiobook namespace APIs 2026-09-04 11:54:56 +02:00
6f2c0b7b3d refactor: extract audiobook cast view 2026-09-04 11:53:04 +02:00
262e37fffd refactor: extract rehearser voice matching 2026-09-04 11:47:51 +02:00
4c8022e8aa refactor: extract audiobook stylesheet 2026-09-04 11:44:55 +02:00
065445a20a refactor: extract rehearser stylesheet 2026-09-04 11:42:43 +02:00
eb008475ed refactor: extract rehearser cast renderer 2026-09-04 11:39:45 +02:00
ae9df4f7f0 feat: distinguish provider configuration and health 2026-09-04 11:35:52 +02:00
7c14f41cb9 refactor: extract audiobook speaker normalization 2026-09-04 11:32:20 +02:00
0d1299b19c refactor: extract audiobook cast cleanup 2026-09-04 11:30:12 +02:00
1951ce0646 refactor: extract audiobook dialogue merging 2026-09-04 11:27:49 +02:00
41349867a1 refactor: extract audiobook cast normalization 2026-09-04 11:25:52 +02:00
0876527554 refactor: extract audiobook quote segmentation 2026-09-04 11:22:15 +02:00
2fde0a176d refactor: extract rehearser voice design 2026-09-04 11:19:01 +02:00
d43959728d refactor: split voice design styles 2026-09-04 11:16:05 +02:00
de099d30c5 refactor: split background job styles 2026-09-04 11:13:36 +02:00
8d9a172993 refactor: split resource diagnostics styles 2026-09-04 11:10:43 +02:00
c0ac5dd775 refactor: extract audiobook cast serialization 2026-09-04 11:08:49 +02:00
d3bc806f33 refactor: extract rehearser training comparison 2026-09-04 11:06:23 +02:00
d613591526 refactor: extract rehearser cast controls 2026-09-04 11:04:13 +02:00
ed3b2d42cd refactor: publish feature APIs through TTVC 2026-09-04 11:00:22 +02:00
e2e20fa89f feat: add request correlation diagnostics 2026-09-04 10:58:46 +02:00
66ebd1a8b8 refactor: extract audiobook parsing primitives 2026-09-04 10:56:31 +02:00
0bfb6d694b refactor: extract rehearser voice picker 2026-09-04 10:54:21 +02:00
e98c5ffe33 refactor: extract rehearser stage controls 2026-09-04 10:52:05 +02:00
b1374c50a0 fix: synchronize frontend release cache version 2026-09-04 10:36:44 +02:00
fe807d1682 Release v1.22.2 2026-09-03 16:12:02 +02:00
2d5ecea53a Release completed voice preview blob URLs 2026-08-19 22:05:31 +02:00
25264517a9 Clean up converted upload sources 2026-08-19 18:41:31 +02:00
e452b0f000 Write voice metadata atomically 2026-08-19 18:39:11 +02:00
d3fc2d44ae Add configurable web container memory limits 2026-08-19 18:35:34 +02:00
fd8f545d16 Optimize offscreen character table rendering 2026-08-19 18:35:10 +02:00
08a6544661 Lazy load character artwork 2026-08-19 17:12:45 +02:00
aa15265021 Show generated voice file and preview in character profiles 2026-08-19 17:12:02 +02:00
8cc92ca02b Add low-memory client concurrency guard 2026-08-19 17:01:06 +02:00
388fd601ab Release v1.20.38 2026-08-19 16:36:26 +02:00
189ca51e47 Release v1.20.37 2026-08-19 16:04:30 +02:00
62274a17fc Improve Studio casting and character voice design (v1.20.36) 2026-08-15 13:20:38 +02:00
35cb21ad70 Reject phantom speakers invented from German noun phrases (v1.20.35)
The caster emits fragments of noun phrases as characters — "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 a large
part 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. Applied to a real cast:
5 phantoms removed, 73 -> 68 speakers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 16:52:27 +02:00
4d3e4f8e7c Consolidate speaker labels after recast passes too, not only after casting (v1.20.34)
Consolidation ran only at cast completion, but recast/repair passes assign
speakers of their own and can re-introduce the variants just removed —
confirmed live: a freshly cast book gained "Alrik" alongside "Alrik von
Blautann" during auto-repair, splitting one character across two voices again.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 14:57:56 +02:00
cd5c325265 Consolidate speaker label variants after casting (v1.20.33)
One character is referred to by several labels across a book — bare vs full
name, a title on its own, a stray fragment — and each variant became its own
cast entry with its own voice, so the character audibly changed voice
mid-scene. Measured against a hand-corrected book this accounted for more of
the disagreements than genuine misattributions.

Variants are folded together only when one label's words are a strict subset
of another's after stripping articles and titles, so "Weber" and "Alter Weber"
stay separate and unrelated names never merge. Applied to a real cast:
Sharraz -> Sharraz Garthai, Baronin -> Baronin Ira von Seewiesen,
Von -> Oberst Alrik von Blautann (40 lines, 58 -> 54 speakers).

Also moves the quotation-mark toggle into the A- / A+ toolbar row.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 13:34:40 +02:00
f837ba1a4f Toggle quotation marks with CSS instead of rewriting text (v1.20.31)
CSS cannot target a character inside a text node, so the marks are now wrapped
in their own .ab-q element at render time and hidden with a single class on
body. Toggling is instant regardless of segment count, and the stored text is
never modified.

Also fixes the toggle looking inert on a freshly cast book: it previously only
added missing marks and never hid the ones the book already carried. Button
moved bottom-right as a larger labelled pill, clear of the search controls.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 13:14:35 +02:00
55f634e626 Show quotation marks in the casting script, with a toggle (v1.20.29)
German prose never quotes narration, so displaying the guillemets makes a
mislabeled line obvious at a glance. Extraction strips them from ~80% of
segments, so they are rendered rather than stored: dialogue rows display
wrapped in » «, lines that kept their own marks are left as-is, and the saved
text is untouched so synthesis and exports are unaffected. A toolbar button
toggles visibility and the choice persists.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 10:51:46 +02:00