Install
openclaw skills install @pinguy/chatterbox-tts-recoveryRestore and verify the Chatterbox TTS browser/OpenAI-compatible bridge stack after upgrades, reinstalls, or damaged local state.
openclaw skills install @pinguy/chatterbox-tts-recoveryUse this skill when Chatterbox TTS, the browser add-on, Voice Lab, or the local OpenAI-compatible bridge stops working after an upgrade/reinstall or when local state has drifted from the known-good setup.
Treat pinguy/chatterbox-tts-addon as the canonical implementation.
Do not copy backend source into this skill and do not maintain a second patched copy here. The canonical repository owns:
chatterbox_nano_server.pyopenwebui_audio_bridge.pychatterbox_voice_app.pyThis skill owns the recovery procedure, protected behaviour, and acceptance checks.
If the live installation disagrees with the canonical repository, identify the reason before overwriting it. Preserve deliberate local configuration and user-created voices.
The normal local topology is:
Firefox / Chrome
|
v
127.0.0.1:8010 OpenAI-compatible bridge
|
| starts Chatterbox on demand
v
127.0.0.1:8020 Chatterbox-Nano service
127.0.0.1:8030 Voice Lab
|
+-------------------------------> 127.0.0.1:8020
Protect these semantics:
CHATTERBOX_IDLE_SECONDS (normally 1200 seconds).CHATTERBOX_CHUNK_CHARS, normally 500) and returned as one joined WAV.Do not reintroduce older semantics where Stop kills the Chatterbox service immediately or where Open WebUI immutable frontend chunks must be patched to provide buffering.
Normal installed runtime state lives under:
~/.local/share/chatterbox-tts/
Important user state includes:
~/.local/share/chatterbox-tts/voices/~/.config/systemd/user/chatterbox-nano.service.d/20-voice-app-default.conf~/.config/systemd/user/chatterbox-nano.service.d/Important user units include:
~/.config/systemd/user/chatterbox-nano.service~/.config/systemd/user/openwebui-audio-bridge.service~/.config/systemd/user/chatterbox-voice-app.serviceTreat voice libraries, selected defaults, and local service overrides as user data. Back them up before destructive recovery.
Do not commit live voice libraries, generated backups, local .env files, service state, or authentication material to the Skills repository.
Collect:
systemctl --user status openwebui-audio-bridge.service --no-pager
systemctl --user status chatterbox-voice-app.service --no-pager
systemctl --user status chatterbox-nano.service --no-pager
curl -fsS http://127.0.0.1:8010/health
Also inspect:
CHATTERBOX_INSTALL_ROOT if overridden;Do not reinstall everything merely because one layer is unhealthy.
Use a clean/current checkout of pinguy/chatterbox-tts-addon.
Before installing from it:
make validate
Do not deploy a checkout that fails its own validation.
The validation covers Python syntax, manifests, installer/build shell syntax, Firefox/Chrome JavaScript syntax, and browser package construction.
Before a reinstall or replacement:
voices/ directory;chatterbox-nano.service.d/;Do not replace user-created voice data with bundled starter voices.
Prefer the narrowest repair:
For a full backend reinstall:
bash chatterbox-tts-addon/install.sh
The installer uses a private environment under ~/.local/share/chatterbox-tts/, installs the canonical backend files and user units, and enables the bridge and Voice Lab. Chatterbox itself remains on-demand.
After unit changes:
systemctl --user daemon-reload
Restart only services whose executable/configuration changed.
Reapply only deliberate local overrides that are still needed.
Prefer environment variables and systemd user drop-ins over editing canonical source.
Typical configuration knobs include:
CHATTERBOX_INSTALL_ROOTCHATTERBOX_MODEL_DIRCHATTERBOX_REFERENCE_ROOTCHATTERBOX_REFERENCE_WAVCHATTERBOX_IDLE_SECONDSCHATTERBOX_CHUNK_CHARSCHATTERBOX_PORTCHATTERBOX_VOICE_APP_PORTBRIDGE_API_KEYIf exposing any service beyond loopback, do not keep the development API key.
Firefox uses the signed/temporary Firefox extension source/package.
Chrome/Chromium uses the Manifest V3 extension, normally through Load unpacked for a local install.
Do not patch generated Open WebUI frontend chunks merely to restore extension playback semantics.
If a separate client uses the bridge as an OpenAI-compatible TTS endpoint, configure that client to use the bridge rather than modifying the bridge to impersonate unrelated frontend state.
Configuration is not acceptance. Verify the real path.
From the canonical checkout:
make validate
This must pass before blaming runtime state on the source tree.
curl -fsS http://127.0.0.1:8010/health
Confirm:
"ok": true;Send a short authenticated request to the bridge and save the WAV.
Verify:
A successful /health response alone is not proof that synthesis works.
Use input longer than one internal chunk.
Confirm:
Use the real installed browser extension.
Verify:
Stop during active multi-part speech.
Confirm:
Do not mark Stop broken merely because chatterbox-nano.service is still alive immediately after cancellation.
Open:
http://127.0.0.1:8030/
Verify:
Confirm the server reports the configured idle-shutdown interval.
When practical, use a temporary short idle interval for a dedicated test rather than waiting the production default. Verify Chatterbox exits only after it is idle and is started again by the next speech/preview request.
If recovery fails:
Useful logs:
journalctl --user -u openwebui-audio-bridge.service -n 100 --no-pager
journalctl --user -u chatterbox-nano.service -n 100 --no-pager
journalctl --user -u chatterbox-voice-app.service -n 100 --no-pager
When this skill conflicts with the current canonical Chatterbox add-on repository, inspect the current implementation and tests before deciding which is stale.
The skill describes protected behaviour and recovery intent. The canonical repository defines the current executable implementation.