3fffae9015
refactor: scope combined library
2026-09-04 13:04:46 +02:00
260c5c22a7
refactor: scope engine support
2026-09-04 13:02:29 +02:00
b747553bf6
refactor: scope routing module
2026-09-04 13:00:10 +02:00
28c72c76dd
refactor: scope voice sources
2026-09-04 12:57:53 +02:00
d219aec676
refactor: scope voice clone
2026-09-04 12:55:50 +02:00
998a65f2ba
refactor: scope tts preview
2026-09-04 12:53:44 +02:00
656d0473d4
refactor: scope settings module
2026-09-04 12:51:29 +02:00
8002ca1d75
refactor: scope character library
2026-09-04 12:49:22 +02:00
0e615d52de
refactor: scope studio module
2026-09-04 12:47:30 +02:00
ac55cd88a3
refactor: scope rehearser cast
2026-09-04 12:44:58 +02:00
df95ada578
refactor: scope rehearser voice design
2026-09-04 12:44:08 +02:00
0f3d410260
refactor: scope rehearser voice picker
2026-09-04 12:43:11 +02:00
dea1de5c57
refactor: scope rehearser stage
2026-09-04 12:42:22 +02:00
da3957347c
refactor: scope audiobook network
2026-09-04 12:41:35 +02:00
7ee5f65e00
refactor: scope rehearser library
2026-09-04 12:40:56 +02:00
0ee43421b7
refactor: scope reader module
2026-09-04 12:40:09 +02:00
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
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
8f95978486
test: validate current image under 4g memory limit
2026-09-04 10:38:36 +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
e515554446
refactor: centralize provider health probes
2026-09-04 10:25:55 +02:00
c43a11da68
perf: lazy-load section feature modules
2026-09-04 10:23:20 +02:00
06763a4602
docs: record P1 status for 1.24.15
2026-09-04 10:15:56 +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
c4a5689a1d
fix: prevent narrator phantom speakers in book2
2026-09-04 10:04:20 +02:00
a11fe8177c
test: cover background retry controls
2026-09-04 10:00:10 +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
9b15dae205
fix: preserve live image job results
2026-09-04 09:52:40 +02:00
90e74149d9
feat: add constrained-device resource diagnostics
2026-09-04 09:51:49 +02:00
e18bc6a8cc
test: validate throttled desktop navigation
2026-09-04 09:49:57 +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
f67930aefb
feat: expose sanitized background job history
2026-09-04 09:39:13 +02:00
b0f475d850
test: cover constrained character dom
2026-09-04 09:37:56 +02:00
5219bc4588
feat: unify transient provider retries
2026-09-04 09:36:48 +02:00
2608c953ee
test: cover attribution and timeout safety
2026-09-04 09:34:46 +02:00
0fd39d4acb
test: cover profile completeness counting
2026-09-04 09:33:45 +02:00
97c0958ef0
test: validate current image under four gigabytes
2026-09-04 09:32:28 +02:00
748351b71f
test: cover casting constraints
2026-09-04 09:28:26 +02:00
c6c9c53489
test: cover stt and comfyui boundaries
2026-09-04 09:27:45 +02:00
a714ea0273
test: add frontend quality gate
2026-09-04 09:26:01 +02:00
c79a2efaab
fix: bound durable background job retention
2026-09-04 09:24:14 +02:00
e234a6e9a3
feat: persist background job metadata
2026-09-04 09:23:17 +02:00
a7a6bb1cdc
feat: add visual pair review workflow
2026-09-04 09:20:27 +02:00
8ed1f122a3
test: add book two attribution fixture
2026-09-04 09:18:41 +02:00
4300d22cd9
feat: add background casting jobs
2026-09-04 09:17:56 +02:00
cc8fcdbd69
refactor: share frontend module manifest
2026-09-04 09:15:41 +02:00
dcd6bc9aea
feat: add visual pair audit
2026-09-04 09:13:51 +02:00
a53f65aa05
feat: add background voice design jobs
2026-09-04 09:12:27 +02:00
f14e1d2e92
docs: close provider credential boundary review
2026-09-04 09:08:31 +02:00
87acd20811
fix: make transcription cancellation slot-safe
2026-09-04 09:07:52 +02:00
3964690444
feat: add optional background transcription jobs
2026-09-04 09:07:14 +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
9637784833
docs: record API key cache policy
2026-09-04 08:53:12 +02:00
3456b5a3b0
feat: support character appearance forms
2026-09-04 08:51:33 +02:00
5cd0d0cc3f
docs: record visual pair validation
2026-09-04 08:39:29 +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
3c6245a5f8
fix: repair split guillemet dialogue
2026-09-04 08:26:27 +02:00
95cadcc463
test: cover character library interactions
2026-09-04 08:22:47 +02:00
47d6a5d247
fix: release local preview object URLs
2026-09-04 08:11:32 +02:00
fc0361bc71
feat: deduplicate casting requests
2026-09-04 08:10:55 +02:00
2b99dc8ccc
feat: deduplicate voice design requests
2026-09-04 08:10:27 +02:00
116e234c20
perf: bound persisted line audio cache
2026-09-04 08:09:36 +02:00
d21a6f28e8
feat: record protected generation history
2026-09-04 08:07:42 +02:00
e52d462dac
perf: paginate large voice libraries
2026-09-04 08:05:09 +02:00
8235b36afd
security: validate upload filenames and archive paths
2026-09-04 08:04:26 +02:00
b5d2e773d8
perf: paginate large character productions
2026-09-04 08:01:29 +02:00
760a3640ba
perf: bound speech proxy synthesis
2026-09-04 08:00:41 +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
6c75acbf72
perf: bound stt concurrency
2026-09-04 07:57:04 +02:00
c1ad0cdc46
perf: bound preview tts concurrency
2026-09-04 07:56:30 +02:00
742b43d860
security: isolate docker socket behind proxy
2026-09-04 07:55:00 +02:00
4a0101f4a4
perf: bound fish audio response cache
2026-09-04 07:53:17 +02:00
885fa9b065
perf: bound concurrent image generation
2026-09-04 07:52:17 +02:00
ebf7b8baa1
feat: deduplicate image generation jobs
2026-09-04 07:51:31 +02:00
c6ce3e4803
security: keep provider credentials server-side
2026-09-04 07:50:30 +02:00
d19e52fe28
security: harden web container runtime
2026-09-04 07:45:31 +02:00
c78d1683b6
feat: add voice recovery and schema migrations
2026-09-04 07:44:29 +02:00
686ba03ded
test: cover P0 security boundaries
2026-09-04 07:34:30 +02:00
440413fcb7
security: harden P0 boundaries and recovery
2026-09-04 07:33:41 +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
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
f04c8d5e2b
chore: release 1.21.1 - Testing and scratch scripts
2026-08-23 09:27:34 +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
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
2013157bda
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>
2026-08-12 19:44:47 +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