Commit Graph

331 Commits

Author SHA1 Message Date
66c5dd6e0c refactor: scope audiobook core 2026-09-04 12:37:37 +02:00
c6db55e55b refactor: scope rehearser core 2026-09-04 12:33:55 +02:00
6c62a0f75e refactor: scope rehearser recording 2026-09-04 12:31:03 +02:00
3a7f0bf677 refactor: scope rehearser io 2026-09-04 12:30:13 +02:00
a202230654 refactor: scope rehearser playback 2026-09-04 12:29:19 +02:00
cc4fc4ae2e refactor: scope audiobook state modules 2026-09-04 12:26:21 +02:00
2aca152fe8 refactor: scope training ui module 2026-09-04 12:23:03 +02:00
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
2712843322 refactor: extract rehearser library persistence 2026-09-04 10:46:02 +02:00
c815b7941a feat: expand resource diagnostics 2026-09-04 10:42:08 +02:00
b1374c50a0 fix: synchronize frontend release cache version 2026-09-04 10:36:44 +02:00
5c8683821e fix: preserve lazy navigation intent 2026-09-04 10:34:50 +02:00
8d7511cdbf test: measure constrained character workloads 2026-09-04 10:34:27 +02:00
4b01a853fb perf: bound browser library image cache 2026-09-04 10:28:07 +02:00
c43a11da68 perf: lazy-load section feature modules 2026-09-04 10:23:20 +02:00
0f1d93c9df perf: bound rehearser audio cache 2026-09-04 10:11:44 +02:00
bf186387f9 perf: coalesce voice library fetches 2026-09-04 10:10:10 +02:00
55d0dd1012 refactor: add frontend namespace migration bridge 2026-09-04 10:07:46 +02:00
aa8a96c48f feat: add safe retries for background jobs 2026-09-04 09:58:45 +02:00
6ca044ef64 feat: validate canonical image asset digests 2026-09-04 09:53:50 +02:00
90e74149d9 feat: add constrained-device resource diagnostics 2026-09-04 09:51:49 +02:00
690673625d feat: persist background job result artifacts 2026-09-04 09:48:37 +02:00
b648bbdf0b feat: add safe background job history panel 2026-09-04 09:44:31 +02:00
0fd39d4acb test: cover profile completeness counting 2026-09-04 09:33:45 +02:00
a7a6bb1cdc feat: add visual pair review workflow 2026-09-04 09:20:27 +02:00
cc8fcdbd69 refactor: share frontend module manifest 2026-09-04 09:15:41 +02:00
13d5807777 test: stabilize startup navigation smoke suite 2026-09-04 09:04:38 +02:00
d03c9841e9 test: cover constrained browser concurrency 2026-09-04 08:59:09 +02:00
fbb5fc52dd fix: stabilize async library navigation 2026-09-04 08:58:01 +02:00
3456b5a3b0 feat: support character appearance forms 2026-09-04 08:51:33 +02:00
0b51a76c21 fix: flag inconsistent current image pairs 2026-09-04 08:39:01 +02:00
cb653d15d0 perf: reduce library pages on low memory devices 2026-09-04 08:35:18 +02:00
4ffe6e9012 feat: add consistent image job cancellation 2026-09-04 08:34:35 +02:00
47d6a5d247 fix: release local preview object URLs 2026-09-04 08:11:32 +02:00
98773a4e65 build: refresh frontend bundle 2026-09-04 08:05:54 +02:00
e52d462dac perf: paginate large voice libraries 2026-09-04 08:05:09 +02:00
b5d2e773d8 perf: paginate large character productions 2026-09-04 08:01:29 +02:00
9517cca00c feat: detect stale character image identity 2026-09-04 07:59:17 +02:00
94f09c110d feat: version character visual identity 2026-09-04 07:58:16 +02:00
c6ce3e4803 security: keep provider credentials server-side 2026-09-04 07:50:30 +02:00
c78d1683b6 feat: add voice recovery and schema migrations 2026-09-04 07:44:29 +02:00
a8f8779736 Release v1.22.3 2026-09-04 07:28:26 +02:00
fe807d1682 Release v1.22.2 2026-09-03 16:12:02 +02:00
c9d063d0c7 Fix character profile view missing fields (Race, Age, Languages, Nationality, Class) 2026-08-23 12:18:08 +02:00
882e1ede55 Fix audiobook export modal bindings and position for SPA routing 2026-08-23 11:58:36 +02:00
ee17ed97d1 Fix audiobook export modal visibility and eliminate 4-10s TTS delay for narrator blocks 2026-08-23 11:45:20 +02:00
1d8e0ff2a6 feat: Audiobook Export Modal, UI sync fixes, and initialization stability (v1.22.0) 2026-08-23 10:15:46 +02:00
f7264a8c07 chore: release 1.21.0 - Consistent ComfyUI Character Renders and Audiobook Export
- Deterministic hash-based character portraits and reference sheets
- Implemented strict early Renaissance aesthetic controls and role-specific headwear rules
- Added audiobook batch export scripts and progress tooling
- Verified book profiles with a new 'confirmed' state tracking mechanism
- Updated Pillow dependency for robust image handling
- Configured .gitignore for audiobook and audio cache exports
2026-08-23 09:12:57 +02:00
2bcbbafbcf Refresh production bundle for preview cleanup 2026-08-19 22:05:31 +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
b43034ee5d Refresh production bundle for lazy artwork 2026-08-19 17:12:45 +02:00
08a6544661 Lazy load character artwork 2026-08-19 17:12:45 +02:00
2bb01de94a Refresh production JavaScript bundle 2026-08-19 17:12:07 +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
b953ba1a83 Refactor table and audiobook helper modules 2026-08-19 16:39:17 +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
ca654608ac Never merge adjacent Unknown dialogue lines into one segment (v1.20.27)
Adjacent segments merge when they share a speaker, but an unattributed line
carries the speaker "Unknown", so two consecutive Unknown lines compared as
equal and were fused into a single block joined by a blank line. Confirmed
against the source text: Lysandra's line and Perdia's interruption — two
separate paragraphs in the book — became one segment, after which no
attribution pass could separate them and one voice would read both sides of
the exchange.

"Unknown" means the speaker is not known, never that two lines share one.
Narration and lines with a real speaker name merge exactly as before.

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