diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b5eee1..4758c66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,14 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- +## [1.12.9] — 2026-06-27 + +### Changed +- **Benchmark speed factor shows 2 decimal places** (`1.32×` instead of `1.3×`) in the SPEED column and live status line — more precise RTF comparison across voices. +- **Sorting by Speed now sorts by the RTF factor** (faster voices first) instead of by raw synthesis time — voices with a higher `×` multiplier rank higher regardless of how long the benchmark sentence was. + +--- + ## [1.12.8] — 2026-06-27 ### Changed diff --git a/static/index.html b/static/index.html index b49c7aa..23499ac 100644 --- a/static/index.html +++ b/static/index.html @@ -26,7 +26,7 @@ - + @@ -336,7 +336,7 @@ - + diff --git a/static/js/voice-library.js b/static/js/voice-library.js index 95d2e54..96a4943 100644 --- a/static/js/voice-library.js +++ b/static/js/voice-library.js @@ -97,7 +97,7 @@ function getSortValue(v, field) { case 'file_type': return voiceFileType(v); case 'duration': return v.duration || 0; case 'dbfs': return voiceDbfs(v) ?? -999; - case 'benchmark': return voiceBenchmarkElapsed(v) ?? 999999; + case 'benchmark': { const b = voiceBenchmark(v); return b && b.speed != null ? -Number(b.speed) : 999; } case 'transcript': return (v.transcript || '').toLowerCase(); case 'note': return (v.note || '').toLowerCase(); case 'source': return (_displaySource(v) || '').toLowerCase(); @@ -364,7 +364,7 @@ function fmtBenchmark(v) { if (!b.ok) return 'ERR'; const elapsed = voiceBenchmarkElapsed(v); if (elapsed == null) return '-'; - const speed = b.speed != null ? ` · ${Number(b.speed).toFixed(1)}x` : ''; + const speed = b.speed != null ? ` · ${Number(b.speed).toFixed(2)}x` : ''; return elapsed.toFixed(1) + 's' + speed; } @@ -819,7 +819,7 @@ async function runVoiceBenchmarkBatch() { if (b && b.ok) { stats.ok++; if (b.realtime_ok === false) stats.slow++; - stats.last = `${voice.id}: ${Number(b.elapsed_sec || 0).toFixed(1)}s${b.speed != null ? ` · ${Number(b.speed).toFixed(1)}x` : ''}${b.realtime_ok === false ? ' · slow' : ''}`; + stats.last = `${voice.id}: ${Number(b.elapsed_sec || 0).toFixed(1)}s${b.speed != null ? ` · ${Number(b.speed).toFixed(2)}x` : ''}${b.realtime_ok === false ? ' · slow' : ''}`; } else { stats.errors++; stats.last = `${voice.id}: failed${b && b.error ? ' · ' + b.error : ''}`;