feat: auto-derive script name as SOURCE for Rehearser-cloned voices (v1.12.8)

Voices cloned from a Script Rehearsal now show the script title in the
SOURCE column without requiring manual entry. `_displaySource()` parses
the note field (`Rehearser · <title> · <character> — …`) and returns the
title segment as the source. Explicit `origin` values still take priority.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mARTin-B78 2026-06-27 20:36:34 +02:00
parent 0bc3acc2ee
commit 0c0bbb5ffd
3 changed files with 14 additions and 2 deletions

View File

@ -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 · <title> · <character> — …`). No manual entry needed; setting an explicit `origin` still takes priority.
---
## [1.12.7] — 2026-06-27 ## [1.12.7] — 2026-06-27
### Added ### Added

View File

@ -26,7 +26,7 @@
<!-- ── Core styles (local — no CDN dependency for first paint) ────────── --> <!-- ── Core styles (local — no CDN dependency for first paint) ────────── -->
<link rel="stylesheet" href="/static/vendor/mdi/materialdesignicons.min.css"> <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) ── --> <!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── -->
@ -336,7 +336,7 @@
<script src="/static/vendor/wavesurfer-regions.min.js"></script> <script src="/static/vendor/wavesurfer-regions.min.js"></script>
<!-- loader.js: fetches sections → loads JS modules → removes skeleton --> <!-- 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> </body>
</html> </html>

View File

@ -76,6 +76,11 @@ function initBenchmarkSampleControls() {
// Explicit origin field wins; fallback to any recognised tag value. // Explicit origin field wins; fallback to any recognised tag value.
function _displaySource(v) { function _displaySource(v) {
if (v.origin) return v.origin; 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) { if (v.tag) {
const tags = v.tag.split(',').map(t => t.trim().toLowerCase()); const tags = v.tag.split(',').map(t => t.trim().toLowerCase());
if (tags.includes('fish-audio') || tags.includes('fishaudio')) return 'fish-audio'; if (tags.includes('fish-audio') || tags.includes('fishaudio')) return 'fish-audio';