From b90c9ce51a651f44abd6d1e2a505d85adde80881 Mon Sep 17 00:00:00 2001 From: mARTin-B78 Date: Sun, 4 Oct 2026 00:41:57 +0200 Subject: [PATCH] chore(release): v1.59.0 Co-Authored-By: Claude Sonnet 5.5 --- CHANGELOG.md | 7 ++++++- PROJECT_MAP.md | 17 ++++++++++------- VERSION | 2 +- static/index.html | 16 ++++++++-------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1622361..24fb7ae 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.59.0] — 2026-10-04 ### Changed - **Characters: global cast view in the sidebar, per-book characters inside Studio.** *Library > Characters / Cast* is now titled "All characters (all books)": one collapsible band per book (heading, per-book count, `aria-expanded`), first book open and the rest closed and not rendered until opened (DOM budget), and a *Search all books* field. Studio > Voices lists only the book picked in *Source*, under a "Book: " chip with **Show characters of all books**; the Characters step shows the same chip; with no book picked Voices shows a prompt (Pick a book / show all books). Per-book actions stay in the band headers. Tests: `tests/characters-scope.spec.js`. @@ -4704,7 +4708,8 @@ Initial feature-complete release. --- -[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.58.0...HEAD +[Unreleased]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.59.0...HEAD +[1.59.0]: https://github.com/mARTin-B78/tts-voice-creator-clone-and-design-2/compare/v1.58.0...v1.59.0 [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 diff --git a/PROJECT_MAP.md b/PROJECT_MAP.md index a287ee6..11be4df 100644 --- a/PROJECT_MAP.md +++ b/PROJECT_MAP.md @@ -6,10 +6,11 @@ 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.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`. +features are mature and in daily use. Latest release v1.59.0: global "All characters" view in the sidebar and per-book +characters inside Studio, untitled-page cleanup with an exclude option, duplicate/clean tools. v1.58.0 added the +driving-mode menu, auto-advance, article index with page labels, merge suggestions, distinct face profiles, English +prompt translation, vision-response cache and the review Approve fix. v1.57.0 added driving mode with sentence/word-level +sync via `tts-aligner`. ## Deployment @@ -33,7 +34,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.57.0`; on the NUC re-rsync that tree), then +- **Rollback** (either host): check out the previous tag (`git checkout v1.58.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. @@ -97,8 +98,10 @@ 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. +- Live data changes made on the DGX only (not on the NUC, which has its own DB/config): book KONTROLLE removed, 5 duplicate + characters resolved, untitled-page cleanup applied (backups under `config/backups/`). +- 18 re-rendered/stale audio articles are pending the owner's voice choice. +- `scripts/clean_character_records.py` was applied for 5 pairs; the 17 remaining duplicate-sheet 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 79f82f6..bb120e8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.58.0 +1.59.0 diff --git a/static/index.html b/static/index.html index 52cbe04..987d1cc 100644 --- a/static/index.html +++ b/static/index.html @@ -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.58.0"> +<meta name="app-version" content="1.59.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.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"> +<link rel="stylesheet" href="/static/style.css?v=1.59.0"> +<link rel="stylesheet" href="/static/css/resource-diagnostics.css?v=1.59.0"> +<link rel="stylesheet" href="/static/css/background-jobs.css?v=1.59.0"> +<link rel="stylesheet" href="/static/css/voice-design.css?v=1.59.0"> +<link rel="stylesheet" href="/static/css/rehearser.css?v=1.59.0"> +<link rel="stylesheet" href="/static/css/audiobook.css?v=1.59.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.58.0"></script> +<script src="/static/loader.js?v=1.59.0"></script> </body> </html>