docs(openwebui): the TTS voice rejector is in-browser Kokoro, not frank-tts
The `Voice "narrator1" not found. Should be one of: af_heart, …, bm_fable` toast is OpenWebUI 0.11.4's bundled Kokoro.js validator: the enum is Kokoro's fixed 29-voice pack, not frank-tts's registry. Frank-tts answers 200 audio/mpeg for the exact OpenWebUI body from inside the container, and the failing click leaves no `audio/speech` line in the container log — that contrast is the instrument. Admin config DB is correct (engine=openai, base URL :7772/v1, model frank-tts, voice narrator1); no container env and no user row carries an audio override, so the `browser-kokoro` choice is per-browser storage. Fix: Settings → Audio → TTS Engine → Default.
This commit is contained in:
1 parent
f206ddfde5
commit
30e3d36b1e
2 files changed
+69
No files matched your search
@@ -2311,3 +2311,36 @@ every restart since the cutover.
|
||||
Kokoro-enum-only — so "the agent talks in my voice" needs that provider row or
|
||||
a `pi.registerProvider` extension, decided in phase 2.
|
||||
|
||||
|
||||
## 2026-10-18 — OpenWebUI "voice narrator1 not found": the rejector is in the browser
|
||||
|
||||
- Frank's toast — `Error: Voice "narrator1" not found. Should be one of:
|
||||
af_heart, …, bm_fable` — looked like frank-tts refusing the name. It is
|
||||
not: that 29-name enum is the voice pack of **Kokoro.js running in the
|
||||
page**, and OpenWebUI 0.11.4 ships that implementation in its own front
|
||||
end (frozen table `{af_heart:{name:"Heart",…}}`, `_validate_voice`, model
|
||||
`onnx-community/Kokoro-82M-v1.0-ONNX`, a personal *Kokoro.js dtype*
|
||||
setting, engine values `""`/`browser-kokoro`).
|
||||
- Instruments that separated the two paths, in order: the admin config DB is
|
||||
correct (`audio.tts.engine=openai`,
|
||||
`audio.tts.openai.api_base_url=http://host.containers.internal:7772/v1`,
|
||||
`model=frank-tts`, `voice=narrator1`, `split_on=punctuation`); from inside
|
||||
the container the exact OpenWebUI body
|
||||
(`{"model":"frank-tts","input":…,"voice":"narrator1","response_format":"mp3","speed":1.0}`)
|
||||
returns **200 `audio/mpeg` 7,629 B**; and `podman logs open-webui` holds
|
||||
**zero** `audio/speech` requests for the failing click. A server-path
|
||||
failure leaves a log line and a frank-tts error — a `browser-kokoro`
|
||||
failure leaves neither. No container env carries an `AUDIO_*`/`TTS`
|
||||
variable and no `user.settings` row (all four users) carries an audio
|
||||
override, so the engine choice is per-browser storage, not fleet state.
|
||||
- Fix is a UI click, not a deploy: Settings → Audio → TTS Engine →
|
||||
**Default** hands synthesis back to frank-tts and the cloned voices;
|
||||
choosing `af_heart` keeps in-browser Kokoro, which cannot clone (fixed
|
||||
pack). Recorded on [[OpenWebUI]] under *Text-to-speech (frank-tts)*;
|
||||
suite green 384/384 (wall 65.9 s).
|
||||
- Also in the window: **PR #22 merged** (`0c7fe8b`, `dank/command-center`) so
|
||||
`agent/extensions/dankvoice.ts` landed on the auto-load path — proven in a
|
||||
plain `omp` session with no flags: `/say merged build check` → 1.20 s WAV
|
||||
to the player, temp dir cleaned; the audible pass through the default
|
||||
`pw-play` detection confirmed by Frank. Sessions open before the merge need
|
||||
a restart to pick the command up.
|
||||
Reference in new issue
Block a user