loudness.ai

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.

Updated 16 October 2026

  1. 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-tts

    Or 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-secret

    Check that it answers: http://127.0.0.1:8880/health in your browser shows "status": "ok".

  2. 2Open the audio settings

    In Open WebUI, open Admin Panel → Settings → Audio.

  3. 3Fill in the text-to-speech settings

    • Text-to-Speech Engine: OpenAI
    • API Base URL: http://host.docker.internal:8880/v1 when Open WebUI runs in Docker, or http://127.0.0.1:8880/v1 when 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-gateway so that host.docker.internal reaches your computer.

  4. 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.

  5. 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 fr lists the ids; listen first in the browser demo or the Piper Voice Explorer.

  6. 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

All developer guides

More from Loudness.ai

Sign in to Loudness.ai