Install
openclaw skills install webchat-voice-guiVoice input and microphone button for OpenClaw WebChat Control UI. Adds a mic button to chat, records audio via browser MediaRecorder, transcribes locally vi...
openclaw skills install webchat-voice-guiVoice input GUI for OpenClaw WebChat Control UI:
Ctrl+Space Push-to-Talk, Ctrl+Shift+M start/stop continuous recording, Ctrl+Shift+B live transcription [beta]openclaw updatewebchat-https-proxy — HTTPS/WSS reverse proxy must be deployed and running.faster-whisper-local-service — Local STT backend on port 18790.Verify:
systemctl --user is-active openclaw-voice-https.service
systemctl --user is-active openclaw-transcribe.service
bash scripts/deploy.sh
With language override:
VOICE_LANG=de bash scripts/deploy.sh
When run interactively without VOICE_LANG, the script will ask you to choose a UI language.
This script is idempotent.
bash scripts/status.sh
voice-input.js)eval(), new Function(), or innerHTML with user data./transcribe when served over HTTPS. Only falls back to http://127.0.0.1:18790 in local dev./transcribe is accepted via same-origin browser requests; Bearer auth remains optional fallback at the proxy.textContent for all toast messages (no XSS vector).VOICE_LANG must match ^([a-zA-Z]{2,5}(-[a-zA-Z]{2,5})?|auto)$ — prevents injection via sed.execFileSync with array args — no shell interpolation. Script path derived from __dirname, not user input.| What | Path | Action |
|---|---|---|
| Control UI HTML | <npm-global>/openclaw/dist/control-ui/index.html | Adds <script> tag for voice-input.js |
| Control UI asset | <npm-global>/openclaw/dist/control-ui/assets/voice-input.js | Copies mic button JS |
| Gateway hook | ~/.openclaw/hooks/voice-input-inject/ | Installs startup hook that re-injects JS after updates |
| Workspace files | ~/.openclaw/workspace/voice-input/ | Copies voice-input.js, i18n.json |
| Action | Effect |
|---|---|
| Hold (PTT mode) | Record while held, transcribe on release |
| Click (Toggle mode) | Start recording / stop and transcribe |
| Double-click | Switch between PTT and Toggle mode |
| Right-click | Toggle beep sound on/off |
| Ctrl+Space (hold) | Push-to-Talk via keyboard |
| Ctrl+Shift+M | Start/stop recording |
| Ctrl+Shift+B | Start/stop live transcription [beta] |
Auto-detects browser language. Built-in: English (en), German (de), Chinese (zh).
Override in browser console:
localStorage.setItem('oc-voice-lang', 'de'); // force German
localStorage.removeItem('oc-voice-lang'); // back to auto-detect
See assets/i18n.json for all translation keys.
bash scripts/uninstall.sh
This removes the UI injection, hook, and workspace files. Does not touch the HTTPS proxy or faster-whisper backend — uninstall those separately.