tts-voice-creator-clone-and.../core
mARTin-B78 5adba6b4c0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
feat: split-screen article review with numbered regions, per-page/whole-magazine "OCR again", and a real column-interleaving fix it found
Split-screen review: the rendered page (left) with a numbered box per
detected block, the extracted text (right) with matching numbers.
Clicking either side highlights the other. Checkboxes moved from a flat
list into this layout without changing their semantics (still gate
what gets narrated).

"OCR again": reocr_page() forces one page through the configured
vision engine again, replacing only that page's blocks -- deliberately
does NOT call build_articles(), so an already-approved article is not
silently re-grouped. A magazine-level option re-reads every page and
re-runs detection (with a confirmation, since that does reset article
status). extract_pages() gained force_vision_ocr to skip its quality
gate for this case.

Building the numbered-box review immediately did what it was built to
do -- surfaced a real bug on live production data (real magazine, real
scan, not a synthetic fixture): a photo caption at 49.9% of the page
width sat in the gutter between two genuinely separate columns and
merged them into one, so every block on the page came back column=0
and reading order fell back to pure top-to-bottom, interleaving the
two columns' sentences. Fixed two compounding causes: column boundary
detection now excludes blocks much wider than the page's median width,
and detect_columns' gutter threshold (3.5%) was itself narrower than
some real magazine gutters (~2.1% measured) -- lowered to 1.5%.

10 new/updated tests, including one built directly from the real
measured page-17 block coordinates that exposed the bug.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 14:00:34 +02:00
..
__init__.py Security audit, modular refactor, and container-name field 2026-05-29 12:13:07 +02:00
audio.py Fix Fish-Speech emotion tags, wire book context into portraits, add emotion controls app-wide (v1.20.5) 2026-08-11 18:02:41 +02:00
config.py feat: complete magazine P1 (images, play-all, karaoke, driving mode, sidebar exclusion) + OCR engines page + second OCR engine 2026-09-06 23:39:34 +02:00
constants.py feat: complete magazine P1 (images, play-all, karaoke, driving mode, sidebar exclusion) + OCR engines page + second OCR engine 2026-09-06 23:39:34 +02:00
database.py feat: persist background job result artifacts 2026-09-04 09:48:37 +02:00
docker_client.py security: isolate docker socket behind proxy 2026-09-04 07:55:00 +02:00
magazine.py feat: split-screen article review with numbered regions, per-page/whole-magazine "OCR again", and a real column-interleaving fix it found 2026-09-07 14:00:34 +02:00
presets.py Back user state with SQLite voice index 2026-06-30 15:06:43 +02:00
provider_health.py refactor: centralize provider health probes 2026-09-04 10:25:55 +02:00
registry.py Security audit, modular refactor, and container-name field 2026-05-29 12:13:07 +02:00
retry.py feat: unify transient provider retries 2026-09-04 09:36:48 +02:00
routing.py Release v1.22.2 2026-09-03 16:12:02 +02:00
tts_helpers.py Fix bundle-breaking TDZ throw, use English emotion instructs, forward Fish gen params (v1.20.6) 2026-08-11 22:00:56 +02:00
validation.py feat: validate canonical image asset digests 2026-09-04 09:53:50 +02:00
voice_index.py Add unified Studio casting workflow and fix voice/casting pipeline bugs 2026-07-26 02:03:56 +02:00
voice.py security: harden P0 boundaries and recovery 2026-09-04 07:33:41 +02:00