This Web UI lives under examples/docker/server/webui/, but audiocpp_server can also serve it directly when webui_root is configured.
Location:
examples/docker/server/webui/
Recommended mode is backend-hosted: the browser loads the UI from the same origin as audiocpp_server, so there is no separate proxy hop and no CORS issue.
For the container examples, set "webui_root": "/app/webui" in server.json and start the backend:
docker compose -f compose.podman.yml upThat exposes both the API and the Web UI at http://127.0.0.1:8880.
Open:
http://127.0.0.1:8880
Expose it to your LAN by publishing the backend port and binding the server to 0.0.0.0 in server.json.
If you still want to run the Web UI by itself:
cd webui
npm startLint the Web UI:
cd webui
npm run lintThe lint script uses npx to run ESLint with the checked-in eslint.config.js, so no separate frontend build step is required for this example app.
Defaults:
- Web UI:
http://127.0.0.1:3000 - Proxied backend:
http://127.0.0.1:8880
Override host, port, or backend origin manually:
WEBUI_HOST=0.0.0.0 WEBUI_PORT=3000 AUDIOCPP_API_ORIGIN=http://127.0.0.1:8080 npm startThen open it from another machine using your host machine's LAN IP, for example:
http://192.168.1.50:3000
- Fetch models from
GET /v1/models - Switch between TTS and ASR models based on the server-reported task
- For TTS models, submit text to
POST /v1/audio/speech - For TTS models, populate family-specific voice controls from
GET /v1/audio/voices?model=<id> - For
pocket_tts, choose either a built-in/cachedvoice, a shared WAV sample fromsamples[], or a locally uploaded WAV for clone mode - For multi-speaker TTS families such as
vibevoice, choose each speaker row from shared WAVsamples[], preset-backedvoice_presets, or a local upload, then submit orderedvoice_samplesthroughPOST /v1/audio/speech - For ASR models, upload WAV audio to
POST /v1/audio/transcriptions
Non-goals:
- No sidecar container