feat: benchmark sorts by RTF factor, shows 2 decimal places (v1.12.9)
Speed column now displays 1.32× instead of 1.3× for better precision. Sorting by Speed ranks by the RTF multiplier (faster = higher ×) rather than raw elapsed time, so the sentence length no longer skews the ranking. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
0c0bbb5ffd
commit
73d991c2f8
@ -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
|
## [1.12.8] — 2026-06-27
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@ -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.8">
|
<link rel="stylesheet" href="/static/style.css?v=1.12.9">
|
||||||
|
|
||||||
|
|
||||||
<!-- ── 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.8"></script>
|
<script src="/static/loader.js?v=1.12.9"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -97,7 +97,7 @@ function getSortValue(v, field) {
|
|||||||
case 'file_type': return voiceFileType(v);
|
case 'file_type': return voiceFileType(v);
|
||||||
case 'duration': return v.duration || 0;
|
case 'duration': return v.duration || 0;
|
||||||
case 'dbfs': return voiceDbfs(v) ?? -999;
|
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 'transcript': return (v.transcript || '').toLowerCase();
|
||||||
case 'note': return (v.note || '').toLowerCase();
|
case 'note': return (v.note || '').toLowerCase();
|
||||||
case 'source': return (_displaySource(v) || '').toLowerCase();
|
case 'source': return (_displaySource(v) || '').toLowerCase();
|
||||||
@ -364,7 +364,7 @@ function fmtBenchmark(v) {
|
|||||||
if (!b.ok) return 'ERR';
|
if (!b.ok) return 'ERR';
|
||||||
const elapsed = voiceBenchmarkElapsed(v);
|
const elapsed = voiceBenchmarkElapsed(v);
|
||||||
if (elapsed == null) return '-';
|
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;
|
return elapsed.toFixed(1) + 's' + speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -819,7 +819,7 @@ async function runVoiceBenchmarkBatch() {
|
|||||||
if (b && b.ok) {
|
if (b && b.ok) {
|
||||||
stats.ok++;
|
stats.ok++;
|
||||||
if (b.realtime_ok === false) stats.slow++;
|
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 {
|
} else {
|
||||||
stats.errors++;
|
stats.errors++;
|
||||||
stats.last = `${voice.id}: failed${b && b.error ? ' · ' + b.error : ''}`;
|
stats.last = `${voice.id}: failed${b && b.error ? ' · ' + b.error : ''}`;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user