736aeaaeac
feat: add magazine projects with layout-aware article extraction
...
Magazines break the audiobook pipeline's assumptions: several unrelated
articles share a page, columns run in parallel, adverts and sidebars
interrupt body copy, and a feature routinely jumps twenty pages to its
tail. Narrating page-by-page walks out of an article mid-sentence and
into an advert, so the canonical object is the article, not the page.
core/magazine.py reconstructs articles from a flat PDF: PyMuPDF extracts
blocks with bboxes and font metrics, tesseract supplies a TSV fallback so
scanned pages join the same column grouping, blocks are classified and
ordered column-major, and articles are anchored by the parsed table of
contents with "continued on page N" tails linked back.
routes/magazine.py adds 13 endpoints. Ingestion is a restart-safe
background job. Nothing is narrated until a human approves the
boundaries; podcast generation refuses unapproved articles.
Podcast mode renders an approved article as a 2-3 host discussion using
the configured LLM and voices the user picks, alongside narration rather
than instead of it.
Verified end-to-end over HTTP on a synthetic 8-page issue: the feature
came back as pages [3, 8] with its jump tail absorbed and the advert page
excluded, and an image-only rendering recovered all 47 blocks via OCR.
44 new tests; full suite 90 passing.
The Studio UI is not built — this is reachable only via the API.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 12:46:54 +02:00
2caa417401
fix: preserve audiobook dialogue boundaries
2026-09-04 15:36:26 +02:00
29f5243f6b
test: preserve dialogue-only recast merges
2026-09-04 15:31:45 +02:00
b6f4a9518b
test: lock visual identity prompts
2026-09-04 15:30:39 +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
302dbe1279
refactor: scope pure frontend leaves
2026-09-04 12:20:33 +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
262e37fffd
refactor: extract rehearser voice matching
2026-09-04 11:47:51 +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
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
c815b7941a
feat: expand resource diagnostics
2026-09-04 10:42:08 +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
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
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
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
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
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
3964690444
feat: add optional background transcription jobs
2026-09-04 09:07:14 +02:00
13d5807777
test: stabilize startup navigation smoke suite
2026-09-04 09:04:38 +02:00
707892251b
test: stabilize rehearser phase fixture
2026-09-04 09:00:16 +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
1c0c985d34
fix: prevent caching of API key handoff
2026-09-04 08:52:46 +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
4ffe6e9012
feat: add consistent image job cancellation
2026-09-04 08:34:35 +02:00
2cda7df636
test: stabilize browser smoke fixtures
2026-09-04 08:30:46 +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
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
8235b36afd
security: validate upload filenames and archive paths
2026-09-04 08:04:26 +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
c6ce3e4803
security: keep provider credentials server-side
2026-09-04 07:50:30 +02:00
686ba03ded
test: cover P0 security boundaries
2026-09-04 07:34:30 +02:00
25264517a9
Clean up converted upload sources
2026-08-19 18:41:31 +02:00
496518f190
Stabilize browser smoke tests for current UI
2026-08-19 16:59:39 +02:00
40e42590cc
Release v1.6.0: a11y (WCAG AA), i18n (DE), PWA, perf, tests, Cast UX
...
Cast: card/list views, sort & filter, online voice picker, "Hear a line"
sample button, AI character notes, import auto-save.
Platform: WCAG 2.1 AA accessibility pass; German UI translation + language
picker; installable PWA with offline shell; GZip + content-visibility
virtualization + lazy images + Rehearser PCM memory cap (mobile stability);
Playwright suite (desktop + iPhone); opt-in minified bundle build.
Fixes: screenplay parser false characters; Fish-Speech inline-tag tones;
narrator/voice pickers list full library; clone GUI rework; fish.audio
import dedup; voice-ID rename; bulk-delete modal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 14:23:35 +02:00