Guide
Free local text to speech for Open WebUI
Open WebUI can read answers aloud through any server that speaks OpenAI’s speech API. loudness-tts is such a server, free and local, with voices in 31 locales. Setup takes about five minutes.
1Start the speech server
With Docker, which includes FFmpeg:
docker run -d --name loudness-tts -p 8880:8880 -v loudness-tts:/data ghcr.io/loudness-ai/loudness-ttsOr with Python, listening on all network interfaces so that the Open WebUI container can reach it:
python -m pip install loudness-tts loudness-tts serve --host 0.0.0.0 --port 8880 --api-key choose-a-secretCheck that it answers:
http://127.0.0.1:8880/healthin your browser shows"status": "ok".2Open the audio settings
In Open WebUI, open Admin Panel → Settings → Audio.
3Fill in the text-to-speech settings
- Text-to-Speech Engine: OpenAI
- API Base URL:
http://host.docker.internal:8880/v1when Open WebUI runs in Docker, orhttp://127.0.0.1:8880/v1when it runs directly on the same computer - API Key: the secret you chose, or any text if the server has no key
- TTS Model:
tts-1 - TTS Voice:
nova, or a voice id
Then select Save. On Linux, start the Open WebUI container with
--add-host=host.docker.internal:host-gatewayso thathost.docker.internalreaches your computer.4Test it
Start a new chat, send a message and press the speaker icon under the answer. The first answer can take a few seconds longer while the voice downloads.
5Choose voices and languages
OpenAI voice names map to strong English (US) voices: nova, shimmer, coral, sage and marin are female; echo, onyx, ash, ballad, verse and cedar are male; alloy and fable are the top voices overall. For another language, enter a voice id as the TTS voice, such as
de_DE-mls-medium-s162, or start the server with--language de-DE.loudness-tts voices --language frlists the ids; listen first in the browser demo or the Piper Voice Explorer.6Optional: run both with Docker Compose
To start Open WebUI and the speech server together, with the audio settings filled in on the first start:
services: open-webui: image: ghcr.io/open-webui/open-webui:main ports: ["3000:8080"] volumes: ["open-webui:/app/backend/data"] environment: AUDIO_TTS_ENGINE: openai AUDIO_TTS_OPENAI_API_BASE_URL: http://loudness-tts:8880/v1 AUDIO_TTS_OPENAI_API_KEY: local AUDIO_TTS_MODEL: tts-1 AUDIO_TTS_VOICE: nova loudness-tts: image: ghcr.io/loudness-ai/loudness-tts volumes: ["loudness-tts:/data"] volumes: open-webui: loudness-tts:Open WebUI applies these values on its first start; after that, change them in the Admin Panel. Details are in Open WebUI’s documentation.
Common problems
Open WebUI cannot connect
Inside a container, 127.0.0.1 is the container itself. Use http://host.docker.internal:8880/v1, or http://loudness-tts:8880/v1 with Docker Compose, and start the Python server with --host 0.0.0.0.
Error 401
The API key in Open WebUI must match the server’s --api-key.
A foreign text is read with an English accent
Choose a voice for the language of your answers, or start the server with --language.
The first answer is slow
The voice downloads once. Download it in advance with loudness-tts download --language en-US, or add -e LOUDNESS_TTS_PRELOAD="en-US" to the Docker command.
Next steps
More guides
- Install the AI Noise Remover SDKPython and FFmpeg on Windows, macOS and Linux, your first noise removal and the JavaScript build.
- Install loudness-ttsPython or JavaScript on Windows, macOS and Linux, first speech with subtitles, the speech server, Docker and offline use.
- Free local text to speech for LibreChatConfigure librechat.yaml so LibreChat reads messages aloud with free local voices.
- Free local text to speech for AnythingLLMUse AnythingLLM’s OpenAI Compatible provider with free voices on your own machine.