diff --git a/CHANGELOG.md b/CHANGELOG.md index 28e1024..5b5eee1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,13 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- +## [1.12.8] — 2026-06-27 + +### Changed +- **SOURCE column auto-derives script name for Rehearser clones**: voices cloned from a Script Rehearsal now automatically display the script title (e.g. `Script`, `her`) in the SOURCE column, extracted from the note field (`Rehearser · · <character> — …`). No manual entry needed; setting an explicit `origin` still takes priority. + +--- + ## [1.12.7] — 2026-06-27 ### Added diff --git a/static/index.html b/static/index.html index da15dfc..b49c7aa 100644 --- a/static/index.html +++ b/static/index.html @@ -26,7 +26,7 @@ <!-- ── 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.12.7"> + <link rel="stylesheet" href="/static/style.css?v=1.12.8"> <!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── --> @@ -336,7 +336,7 @@ <script src="/static/vendor/wavesurfer-regions.min.js"></script> <!-- loader.js: fetches sections → loads JS modules → removes skeleton --> -<script src="/static/loader.js?v=1.12.7"></script> +<script src="/static/loader.js?v=1.12.8"></script> </body> </html> diff --git a/static/js/voice-library.js b/static/js/voice-library.js index 537e79e..95d2e54 100644 --- a/static/js/voice-library.js +++ b/static/js/voice-library.js @@ -76,6 +76,11 @@ function initBenchmarkSampleControls() { // Explicit origin field wins; fallback to any recognised tag value. function _displaySource(v) { if (v.origin) return v.origin; + if (v.note) { + // Notes from Rehearser clones follow: "Rehearser · <script title> · <character> — …" + const m = v.note.match(/^Rehearser\s*·\s*(.+?)\s*·/); + if (m) return m[1].trim(); + } if (v.tag) { const tags = v.tag.split(',').map(t => t.trim().toLowerCase()); if (tags.includes('fish-audio') || tags.includes('fishaudio')) return 'fish-audio';