diff --git a/CHANGELOG.md b/CHANGELOG.md index a02f914..f88a3a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- ## [Unreleased] + +--- + +## [1.58.0] — 2026-10-03 ### Added - **Magazine UI shows page labels, display titles and merge suggestions.** The article index (list, playlist, driving-mode Index sheet and driving header) shows `display_title` (falls back to `title`) with the `page_label` ("Seite 33") in smaller muted text, plus small kind badges (advert, photo, contents, imprint, continuation) and an "Audio is out of date: re-render" badge when `audio_stale` is set. Review shows a suggestion box: the proposed merge target with confidence and a collapsible plain-language "Why do we think so?" list, **Merge into previous article** (`POST .../merge-into-previous {into}`; a 409 "proposal changed" refreshes the suggestion; undoable) and **Use suggested title** (`POST .../accept-title`; undoable). Controls are labelled, keyboard operable and 44 px high. Tests: `tests/magazine.spec.js` ("untitled entries", driving index). - **Untitled magazine entries ("Page 33") are explained, merged on request and given readable titles** (`core/magazine_untitled.py`, `scripts/magazine_untitled.py`). Root cause: the review screen creates a `Page N` stand-in for any page no article covers, and *Approve* without a toggled box saved only the visible page's regions, which cut multi-page features down to one page. On *c't KI Wissen 2026* this left 59 stand-ins, most of them continuation pages. A continuation detector scores each untitled entry against the article before it (lower-case/mid-sentence start, hyphenated break, the narration fusion rule, open ending, adjacent page, column width; a signed-off previous article or the page's own headline counts against). An optional local-LLM check runs only for ambiguous scores. Each proposal comes with a confidence and the evidence. Records whose title repeats the headline of the article they continue are proposed as well. Titles: a deterministic fallback (*Anzeige*, *Bildseite*, *Inhalt*, *Impressum*, *Editorial*, *Textfragment*, the page headline, or the first sentence cut to 8 words), plus optional validated and cached LLM titles in the magazine's language (`magazine_llm_titles`, `--no-llm`). Nothing changes silently. `GET /articles` gains derived `display_title`, `title_source`, `suggested_title`, `page_label`, `untitled_kind`, `merge_suggestion` and `audio_stale`, and `GET /untitled` plus `quality/report → untitled_articles` list everything. Changes happen only through the undoable `POST /articles/{id}/merge-into-previous` and `POST /articles/{id}/accept-title` (never over a real title), `POST /titles/suggest` (suggestion cache only), and the CLI's `--apply` (backup first). A merge keeps reading order, marks the article `audio_stale` (a fresh render clears it) and deletes no audio. See architecture/magazine-ingestion.md, "Untitled entries". @@ -4698,7 +4702,8 @@ Initial feature-complete release. --- -[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.57.0...HEAD +[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.58.0...HEAD +[1.58.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.57.0...v1.58.0 [1.57.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.56.3...v1.57.0 [1.56.3]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.56.2...v1.56.3 [1.56.2]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.56.1...v1.56.2 diff --git a/PROJECT_MAP.md b/PROJECT_MAP.md index 6430e29..a287ee6 100644 --- a/PROJECT_MAP.md +++ b/PROJECT_MAP.md @@ -6,8 +6,10 @@ Update in the same commit as the change it describes. ## Current phase Magazine projects, **P0 and P1 complete** (frontend reachable at Studio → Magazines). Audiobook/Rehearser/voice-library -features are mature and in daily use. Latest release v1.57.0: magazine driving mode (views, index, night theme, share -deep link) with exact sentence- and word-level text/audio sync via the `tts-aligner` sidecar. +features are mature and in daily use. Latest release v1.58.0: driving-mode menu with switches and theme selector, auto-advance, text fit and text +amount, article index with page labels/display titles, continuation and untitled-page detection with title and merge +suggestions, distinct face profiles and English prompt translation for characters, vision-response cache, character +record hygiene fixes and the review Approve fix. v1.57.0 added driving mode with sentence/word-level sync via `tts-aligner`. ## Deployment @@ -31,7 +33,7 @@ Two self-hosted Docker instances, both port 7890: - **`tts-aligner`** (forced-aligner sidecar, `aligner/`) exists only in the DGX `docker-compose.yml`. The NUC compose file deliberately omits it: with `ALIGNER_URL` unset the app quietly falls back to estimated word timing, so the NUC works unchanged. Known limitation: no measured word times on the NUC. -- **Rollback** (either host): check out the previous tag (`git checkout v1.56.3`; on the NUC re-rsync that tree), then +- **Rollback** (either host): check out the previous tag (`git checkout v1.57.0`; on the NUC re-rsync that tree), then `docker compose up -d --force-recreate` (rebuild only if `Dockerfile`/`requirements.txt` changed). Stop the aligner with `docker compose stop tts-aligner`; `audio/.timings.json` version 2 files stay readable by v1 readers. @@ -95,6 +97,8 @@ which is the writable volume. **unresolved** — the compose files currently point at ghcr. ## Known limitations +- Live untitled-page cleanup is not yet applied: `scripts/magazine_untitled.py` needs the owner's `--apply`. +- `scripts/clean_character_records.py` has only been run as a dry run; 33 duplicate character pairs need owner decisions. - Audiobook attribution (span mode) is measured, not perfect: on three hand-corrected novels about 90-92 % of all words end up with the right voice and ~75-80 % of spoken words with the right speaker. The references themselves contain label noise (1-2 points is not meaningful). Open, real diff --git a/VERSION b/VERSION index 373aea9..79f82f6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.57.0 +1.58.0 diff --git a/static/index.html b/static/index.html index 4b88c96..52cbe04 100644 --- a/static/index.html +++ b/static/index.html @@ -10,7 +10,7 @@ - + @@ -27,12 +27,12 @@ - - - - - - + + + + + + @@ -403,7 +403,7 @@ window.toggleNavTree = function(treeId, chevronId) { - +