Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
03ebd9ba35
commit
a60a5a92ca
@ -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
|
||||
|
||||
@ -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/<id>.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
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="theme-color" content="#2563EB">
|
||||
<meta name="app-version" content="1.57.0">
|
||||
<meta name="app-version" content="1.58.0">
|
||||
<link rel="manifest" href="/manifest.webmanifest">
|
||||
<link rel="icon" href="/static/icon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="/static/icon.svg">
|
||||
@ -27,12 +27,12 @@
|
||||
|
||||
<!-- ── Core styles (local — no CDN dependency for first paint) ────────── -->
|
||||
<link rel="stylesheet" href="/static/vendor/mdi/materialdesignicons.min.css">
|
||||
<link rel="stylesheet" href="/static/style.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/css/resource-diagnostics.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/css/background-jobs.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/css/voice-design.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/css/rehearser.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/css/audiobook.css?v=1.57.0">
|
||||
<link rel="stylesheet" href="/static/style.css?v=1.58.0">
|
||||
<link rel="stylesheet" href="/static/css/resource-diagnostics.css?v=1.58.0">
|
||||
<link rel="stylesheet" href="/static/css/background-jobs.css?v=1.58.0">
|
||||
<link rel="stylesheet" href="/static/css/voice-design.css?v=1.58.0">
|
||||
<link rel="stylesheet" href="/static/css/rehearser.css?v=1.58.0">
|
||||
<link rel="stylesheet" href="/static/css/audiobook.css?v=1.58.0">
|
||||
|
||||
|
||||
<!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── -->
|
||||
@ -403,7 +403,7 @@ window.toggleNavTree = function(treeId, chevronId) {
|
||||
</script>
|
||||
|
||||
<!-- loader.js: fetches sections → loads JS modules → removes skeleton -->
|
||||
<script src="/static/loader.js?v=1.57.0"></script>
|
||||
<script src="/static/loader.js?v=1.58.0"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user