Commit Graph

64 Commits

Author SHA1 Message Date
4f30ee5c0d fix: keep references to background asyncio tasks
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:57:20 +02:00
2a06d0a488 fix(export): ship untagged file when provenance tagging fails
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:38:42 +02:00
5a7c73ea42 feat(export): provenance tags and optional disclosure for exported audio
ID3 provenance tags (synthetic speech, generator, version, date, opt-in
voice name) on magazine MP3/ZIP/EPUB exports via a stream-copied temp copy;
verify endpoint and CLI; AudioSeal tier is a documented stub.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 17:02:41 +02:00
48af2b3ccb feat(magazine): detect continuation pages and suggest titles for untitled articles
"Page N" entries come from review stand-ins created after Approve saved only
the visible page's regions. New core/magazine_untitled.py classifies untitled
entries (continuation, article head, advert, picture page, contents, junk),
proposes merges into the previous article with confidence and evidence
(optional LLM check in the ambiguous band), and suggests titles
(deterministic, optional validated and cached LLM titles). Exposed through
derived GET /articles fields, GET /untitled, quality report, undoable
merge-into-previous / accept-title routes, POST /titles/suggest and
scripts/magazine_untitled.py (dry run by default, --apply backs up first).
Merges mark audio_stale; no audio is deleted; real titles are never
overwritten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 14:36:29 +02:00
9e5ea609ce feat(magazine): word-level timing via forced-aligner sidecar with player word highlight
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 00:37:40 +02:00
788f186b9c fix(magazine): use sentence timings of interview renders for player and EPUB
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 00:09:45 +02:00
63034b07eb fix(magazine): record where speech starts in each sentence so the highlight is not early
The TTS pads every sentence with 0.4-0.9 s of silence; boundaries are exact but the
highlight lit up that long before the words. Record per-sentence speech onsets at render
time, measure them from the decoded MP3 for older audio, and expose them as 'speech' in
/timings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 14:57:30 +02:00
270b8d56ca fix(magazine): driving-mode text and picture follow the recorded sentence times
Adds GET .../articles/{id}/timings (exact per-sentence times via plan_sentences); the player uses them, falls back to the length estimate, and gives captions no time slot.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 11:51:58 +02:00
80ec22b752 fix(magazine): deleting a picture removes both of its records; say clearly while a turn is being read
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 18:35:20 +02:00
884bbf33aa fix(magazine): a turned page shows at once (versioned picture URLs), turns are visible and undoable, one turn at a time
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 13:35:25 +02:00
130fd273c6 fix(magazine): read a turned page through a ladder (turned, original with carried boxes, tesseract)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 12:31:44 +02:00
6fdf9fbc38 feat(magazine): turn a page scanned sideways or upside down and read it again
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 12:13:13 +02:00
268ed391a3 feat(magazine): EPUB 3 Media Overlay export with measured sentence timings; tolerate missing mutagen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 10:33:08 +02:00
4a20a12f66 feat(magazine): show sidebars in the reading view as labelled, never-narrated asides
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 10:26:27 +02:00
0005ae0ebd feat(magazine): import a magazine from PNG/JPEG page images
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 10:19:14 +02:00
f0b5d5aa68 feat(magazine): run the whole-issue Auto-fix pass automatically after import
A fresh import used to stop once laid out, leaving missed text, unverified
OCR and provable misspellings for a separate manual click. _ingest_sync now
runs _quality_run_sync itself, under the same job, so the ingest progress
bar carries through it and the reviewer opens an already-worked magazine.
An Auto-fix failure is reported as an ingest failure without losing the
ingest's own result.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 09:37:28 +02:00
ac1153b782 fix(magazine): re-check for duplicate boxes after box-fitting/seam-mending grows them
The duplicate detector only ran once, before geometry fixes could merge or
grow a box into one that now duplicates another's text -- narrating it
twice. Now re-run after the geometry loop at ingest and after
recover_missing_text in the whole-issue quality run. Confirmed live: 13
such duplicates in a fresh import, 6 in the already-reviewed magazine.

TODO: F decided unnecessary per user; G updated with both universal fixes
from this pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 08:50:13 +02:00
d06f990379 feat(magazine): fast LLM calls for spelling agent, run-together word repair, magazine comparison tool
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 20:09:42 +02:00
29b1f63e60 feat(magazine): click a flagged word to type your own correction
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 18:35:13 +02:00
3b5e20a4c8 feat(magazine): undo and redo buttons (20-step history) in the sticky review bar
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 18:07:23 +02:00
25eea74096 feat(magazine): mend column seams; docs: TODO for verify/re-import/compare and Voice Studio evaluation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 17:44:28 +02:00
3d5da78a98 feat(magazine): blue unreviewed articles, auto-resolve overlapping boxes, ignore unboxed ink near graphics/ads, fewer false clipped edges
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 15:20:25 +02:00
c62cc6953d feat(magazine): auto-add figures for unboxed pictures, junk filter for linking, keep quality report in step
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:33:11 +02:00
4c1c97400b fix(magazine): apply column reading order automatically; article-end detection by signed end or following headline; link-next-page chip
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:00:14 +02:00
05bdecd58a feat(magazine): auto-link continuation pages, manual page linking, flow arrows by reading order, compact report, names/brands in spellcheck
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 11:46:32 +02:00
d0fba6a16f feat(magazine): text flow indicator (arrows, chips, reading-view seams); Auto-fix all pages with backup
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:46:55 +02:00
b85f40e263 feat(magazine): live per-page issue markers and panel, one-click page auto-fix, run fixes boxes too
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:41:39 +02:00
efaab0590e feat(magazine): cut a paragraph's box where its text wraps around an inset pull quote
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 09:50:26 +02:00
e00b215bc6 feat(magazine): detect inset pull quotes as their own region
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 09:27:04 +02:00
d1c15b0e2b fix(magazine): boxes grow over cut-off lines without entering neighbours; re-read grown boxes
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:35:35 +02:00
3ec7f89009 fix(magazine): snap boxes also for vision-labelled paragraphs, per-side growth, run after page re-OCR
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:28:23 +02:00
f4892dbde4 feat(magazine): fit text boxes to their ink in Clean up boxes
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:12:12 +02:00
91caa6cf90 feat(magazine): fuse paragraphs across columns/pages, article-aware acronyms, German/English spellcheck
- fuse_paragraph_blocks joins a paragraph split by a column or page break into one
  narration block (reader, podcast source and MP3), keeping source regions for highlighting
- language decided once per article; per-article acronym glossary (LLM classifies unknown
  acronyms from context), letter-spelled acronym lists, extended DE/EN database
- core/spelling: dictionary findings (compounds, inflections, line-break hyphens, other-language
  words), marked in review and listed per page/article; guarded LLM agent fixes; quality run
  now includes the spelling pass
- keep suspended compound hyphens (Programmier- und) when merging regions / building layouts

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 08:09:30 +02:00
48c546fbc8 fix(magazine): region-type picker and page-quality buttons work; stronger quality audit
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
- Export the region-type picker handlers and magRunPageQuality to the page (they threw
  "not defined", so the picker never opened and Find missed text / Verify OCR did nothing)
- Add a unit test that fails when an inline mag* handler is not exported
- Quality audit: pixel-level clipping check on all four box edges, duplicate-article
  detection, detected full-page advertisements skipped and shown green (no manual button)
- Driving mode text is karaoke-style (whole article, current sentence and word highlighted)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 23:07:19 +02:00
9904459913 feat(magazine): whole-magazine quality check, page stages, ad pages, driving-mode player
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
- Quality run: per-page missed-text recovery, guarded OCR re-read and a pixel audit
  (uncovered ink, overlapping boxes, clipped box edges); report saved as quality_report.json
- Thumbnail grid: quality-stage colours, flag badge, live per-page indicator for every
  batch step (OCR, detection, figure fixing, quality run, audio)
- Pages can be approved as advertisements (not narrated, skipped by quality run)
- Driving mode: +/-15 s, seek bar, playback speed, text and image toggles
- Plus the previously uncommitted 1.53.5 magazine/OCR work in the same tree

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 19:29:43 +02:00
b1c0197652 Release v1.53.2
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
2026-09-24 07:44:16 +02:00
c453295ab0 Release v1.51.0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
2026-09-22 23:23:46 +02:00
bc3f82d975 Release v1.46.0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
2026-09-22 21:16:42 +02:00
94331320c0 feat(magazine): one-click draw tool, table regions, batch approve, MP3 export, remove-all-boxes
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Bundles this session's magazine review work: a single "Draw region" tool
replacing six preset-kind buttons; "Table" as a real, non-narrated region
type; uniform auto-OCR for every text-like drawn/re-read region with a
Tesseract fallback when the vision OCR backend is unreachable; a thumbnail
grid view and inline title editing for the article list; batch
approve/reject; standalone MP3 export with embedded title/author/album,
lyrics and cover art (adds mutagen); "Remove all boxes" for starting a
tangled page from scratch; Approve advancing straight to the next article;
a merged, sticky review toolbar; and a fix for stale image previews after
resizing a region's box.

Also fixes several character-portrait rendering biases confirmed live
across this session's DSA audiobook cast (routes/conversation.py): modern
or bald/receding hair regardless of established coverage, armored women
rendering masculinized, duplicated/malformed weapons, a ranged weapon
rendering as a firearm due to a German compound-word regex miss, an
established dwarf rendered with human proportions, and occasional extra
hands or lost non-human species in scene panels.

See CHANGELOG.md [1.43.0] for the full list.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 20:14:11 +02:00
f24a83eb75 fix(magazine): screen invented picture/chart/table regions against page ink
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 05:03:57 +02:00
4417363531 fix(magazine): snap and crop pictures per page during import, not only at the end
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 04:37:36 +02:00
197696e653 fix(magazine): show pictures, charts and tables clearly in the import preview
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 02:30:51 +02:00
1edc941dbf feat(magazine): live region boxes in the import preview; interrupted imports no longer spin for ever
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
The preview carries each page's regions (percent of the page, type, reading
order) for the reading pass and the labelling pass, drawn over the page image
with a legend. A server restart that killed the import left it "running" for
ever; the status route now reports it as failed. v1.42.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 01:09:12 +02:00
703052d1d2 fix(magazine): adding a region crashed after a byline split; undo could roll back later changes
original_text is now a Block field, so paths that rebuild blocks keep it
instead of crashing. Undo snapshots are sealed with a digest of the saved
state and refused once anything else changed; actions without their own undo
point clear the Undo button. v1.41.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 00:50:33 +02:00
f155839300 feat(magazine): select many boxes and act once, undo instead of confirm, fold labels into new pictures
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Bulk delete/type for a click- or rectangle-selected set; every destructive
region change returns an undo token (one level, refused once something newer
happened); text inside a region that becomes a picture is folded into it.
TODO: model-based layout detection (PP-DocLayout, LayoutReader) with licence
notes. v1.39.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 16:33:01 +02:00
5009f388e7 fix(magazine): approve failed with unknown block ids after deleting or converting a region
The review selection now follows deletes, merges, splits and text-to-image
changes; approve sends only existing ids and no longer overwrites the image
list with a stale one; deleting a region removes it from articles. v1.38.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 12:22:20 +02:00
99f2f2260e feat(magazine): edit, split, merge and re-OCR a region from its row, with keyboard control
Split at the cursor and merge-with-next keep article membership right; typed
letters in the editor never fire shortcuts; focus returns to the same row
after a redraw. v1.38.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 12:11:14 +02:00
b7aa823455 feat(magazine): clean up boxes - text in pictures, OCR noise, duplicates, run-on author lines
Rules sized on a real 204-page issue before writing them; each re-types
(not read aloud, reversible), none deletes. A run-on author line's sentence
becomes its own paragraph instead of being glued to "the next paragraph",
which was right in only 1 of 5 real cases. Runs on import and re-OCR, and on
demand with a layout backup. v1.37.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 12:06:33 +02:00
baab49dbdf feat(magazine): set a page's reading order by hand (type a position or click in order)
A hand-ordered page is locked: Fix reading order, type changes and newly drawn
boxes leave it alone until Automatic order. v1.36.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 11:58:37 +02:00
fd1de80f83 feat(magazine): column reading order, region type picker and delete per row, fix reading order
Columns are found from where column-width text starts, not from the whitespace
between them (loose OCR boxes shrank one gutter to 4-6 pt and a pull-quote
bridged it, collapsing page 38 into one interleaved column). Headlines get
their own band, pull-quotes are read at the end of the page. Measured over a
204-page issue: 89 sentence continuations kept vs 85.

Each review row gets a type picker (text kinds, page number, source, ad,
image) and its own delete button; text<->image conversions keep the region
in its article. Fix reading order re-reads existing issues without OCR and
leaves hand-ordered pages alone. The shared confirm dialog is now an
alertdialog for screen readers. v1.35.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 11:38:33 +02:00