Compare commits

..

No commits in common. "1b40b7f446a11401741b38639d3a3577d300cd6c" and "79909a6fb8b9ed1b6c74d83705986213019d5591" have entirely different histories.

2 changed files with 3 additions and 12 deletions

View File

@ -19,8 +19,8 @@ One Docker image covers all four backends, with two semantic tag aliases:
| Tag | Use for |
|---|---|
| `:latest` / `:v6` / `:v6.12` | VoiceClone, VoiceDesign, CustomVoice |
| `:latest-streaming` / `:v6-streaming` / `:v6.12-streaming` | Streaming VoiceClone |
| `:latest` / `:v6` / `:v6.11` | VoiceClone, VoiceDesign, CustomVoice |
| `:latest-streaming` / `:v6-streaming` / `:v6.11-streaming` | Streaming VoiceClone |
Both tags point to the same image — the `-streaming` suffix is a semantic convention so compose files and version pins are unambiguous.
@ -378,12 +378,6 @@ The first request after container startup can be slower because CUDA graph captu
## Changelog
### v6.12 — 2026-10-03
**Fix: Streaming (8023) Slower Than Realtime**
- **Root Cause:** `generate_voices.py` wrote `chunk_size: 4` (~0.33 s audio) into every voice. Each streamed chunk runs a codec decode over 25 frames of left context plus a GPU sync, so a 4-frame chunk spent most of its time re-decoding context. Measured on GB10: RTF 1.13–1.49 with 1.0–1.9 s of playback underruns per 8.4 s sentence.
- **Fix:** Default `chunk_size` is now 12 (1 s audio per chunk; upstream default). Same sentence: RTF 0.96–1.01, underruns 0.14–0.29 s; time-to-first-audio rises from ~0.6–0.9 s to ~1.1 s. `voices.json` picks this up the next time `generate_voices.py` runs (container start).
- **Note:** Remaining speed is bound by the model step time (~61–73 ms/step) while other GPU workloads (LLM serving) share the GB10; the upstream figure without contention is ~44 ms/step (RTF ~0.53). Clients should keep a ~1 s jitter buffer.
### v6.11 — 2026-09-21
**Feature: Language Aliases for VoiceClone Voices**
- OpenAI-compatible clients that send a route alias such as `FR`, `FR_F` or `FR_M` in the `voice` field now get a configured speaker in that language (case-insensitive) instead of silently falling back to the default English voice. Unknown aliases still return the default voice or a 400 as before.

View File

@ -93,10 +93,7 @@ for scan_dir in SCAN_DIRS:
entry = {
"ref_audio": audio_path,
"language": detect_language(base_name),
# 12 codec frames = 1 s of audio per streamed chunk. Each chunk
# re-decodes 25 frames of left context in the codec, so 4 made
# streaming ~30% slower than realtime on GB10 (measured RTF 1.3 vs 1.0).
"chunk_size": 12,
"chunk_size": 4,
}
ref_txt = os.path.join(root, f"{base_name}.reference.txt")