Phonon-TTS

Phonon-TTS

Docker app from Aurial Phonon's Repository

Overview

Phonon TTS runs Gradium's Phonon text-to-speech models and serves an OpenAI-compatible speech API (POST /v1/audio/speech), so any client with an "OpenAI TTS" setting and a custom base URL works unchanged. It can also serve the Wyoming protocol, which Home Assistant uses for local voice. It runs entirely on the CPU and is fast: Gradium's models speak faster than real time even on a Raspberry Pi. Language: PTTS_LANG is required and picks how numbers and symbols are spelled out, and which catalog voices are served; it must match the language of the checkpoint (en by default; fr for a French model, and so on). First start: downloads the default model and the voices for its language into the cache folder, and logs little until they load; watch the log. The cache folder keeps them across restarts and updates, so later starts go straight to serving. Home Assistant: set PTTS_WYOMING_ADDR to 0.0.0.0:10200 and map the Wyoming port too; then add the Wyoming Protocol integration in Home Assistant with this server's address and port 10200. Access: the API has NO authentication on either port. Use it on a network you trust; do not expose it to the internet. Other models: leave Model empty for the built-in default, or name a Hugging Face repo as hf://owner/name (add @commit for a fixed version). The Phonon 40M models are gated: accept their terms on Hugging Face first and set an HF token here. Template and Unraid problems: the Support link. Phonon and the server itself: the Project link.

Phonon TTS for Unraid

An Unraid Community Applications template for ptts-openai-server, the official speech server for Phonon, Gradium's open-weight on-device text-to-speech models. It serves an OpenAI-compatible API (POST /v1/audio/speech) and the Wyoming protocol, so it plugs into Open WebUI, SillyTavern, Home Assistant and anything else with an "OpenAI TTS" setting — fully local, CPU-only, and fast enough to speak faster than real time even on a Raspberry Pi.

Report template or Unraid problems in this repository's issues, and problems with the server itself to the xn-ptts project.

Install

Search for Phonon TTS in the Apps tab. The defaults work out of the box:

  • API port 8880 — point any OpenAI-TTS client at http://<tower>:8880/v1
  • Language en — text normalization and the catalog voices; must match the model's language
  • Model and voices cache — under about 1 GB, downloaded on first start and kept across restarts and updates

The first start downloads the default model and voices and logs little until they load — watch the log. Later starts go straight to serving.

The server has no authentication on any port. Run it on a trusted network; never expose it to the internet.

Home Assistant

Set Wyoming address to 0.0.0.0:10200 and map the Wyoming port too (both under Advanced). Then in Home Assistant add the Wyoming Protocol integration with this server's address and port 10200: Phonon appears as a text-to-speech engine you can pick for your voice assistant. It streams — speech starts at the first sentence of a reply, not the last.

Models and voices

  • Default: leave Model empty — the server ships a built-in default model.
  • Other models: hf://owner/name (add @commit_sha to pin the version). The Phonon 40M models are gated: accept their terms on Hugging Face first, then set an HF token.
  • Voices: the public catalog (gradium/phonon-voices) is cached for your language; GET /v1/audio/voices lists what the running server speaks. OpenAI voice names and Voice aliases make clients with fixed voice lists (they send alloy, nova, …) work unchanged.
  • Ignore speed is on by default: OpenAI clients always send a speed parameter; the server accepts it and speaks at the normal rate.

Updates

The template follows latest, which Gradium moves with each release; Unraid shows the update on the Docker tab. Pick a pinned tag (such as 0.5.0) under Branch at install to stay on one release.

Credits and licence

Phonon and the xn-ptts server are by Gradium and contributors, Apache-2.0. The models themselves carry their own licences on Hugging Face (the 31M models are Apache-2.0; the 40M models are gated — check their model cards). The icon in this repository is an original work by the template maintainer, MIT. The template files are MIT licensed; see LICENSE.

Requirements

No authentication — the API ports are open to anything that can reach them; run on a trusted network only. The first start downloads the model and voices (well under 1 GB) into the cache folder, which must persist. CPU only: no GPU or driver plugin needed; quantized weights (q8) do not use a GPU even when one is present.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/gradium-ai/ptts-openai-server:latest
Last Updated2026-10-31
First Seen2026-10-31

Runtime arguments

Network
bridge
Shell
sh
Privileged
false

Template configuration

API portPorttcp

The OpenAI-compatible speech API (POST /v1/audio/speech, GET /v1/audio/voices, GET /health). No authentication — do not expose this port beyond your network.

Target
8880
Default
8880
Value
8880
Wyoming portPorttcp

Home Assistant's Wyoming protocol. Only used when PTTS_WYOMING_ADDR is set below; leave this port empty if you do not use Home Assistant.

Target
10200
Default
10200
Model and voices cachePathrw

Where the model, voices and any HF downloads live (under about 1 GB). Persists across restarts, template edits and updates; deleting it means re-downloading on the next start.

Target
/home/phonon/.cache/huggingface
Default
/mnt/user/appdata/phonon-tts
Value
/mnt/user/appdata/phonon-tts
LanguageVariable

Required. Spelling out of numbers and symbols, and which catalog voices are served. Must match the checkpoint's language: en, fr, es, de, pt for the Phonon checkpoints, plus more normalization-only codes (see the README). In YAML contexts nb is the safe code for Norwegian.

Target
PTTS_LANG
Default
en
Value
en
Ignore speedVariable

true: accept the speed parameter that OpenAI clients always send, and speak at the normal rate anyway. Keep it true unless your client needs real speed control.

Target
PTTS_IGNORE_SPEED
Default
true
Value
true
ModelVariable

Empty: the built-in default model. Or a Hugging Face repo as hf://owner/name — add @commit_sha to pin the version (without it, the repo's main branch is used and updates flow in). Phonon 40M models are gated: accept their Hugging Face terms first and set the HF token below.

Target
PTTS_MODEL
HF tokenVariable

Only for gated or private Hugging Face repos (the Phonon 40M models). Get one at huggingface.co/settings/tokens.

Target
HF_TOKEN
QuantizationVariable

Checkpoint weight format. q8 is the recommended CPU default and runs on the CPU even when a GPU is present.

Target
PTTS_QUANT
Default
q8
Value
q8
OpenAI voice namesVariable

Set to default (or one of your voices) to also accept OpenAI's own voice names (alloy, nova, ...) — handy for clients with a fixed voice list. Empty: only this server's real voices.

Target
PTTS_OPENAI_VOICES
Voice aliasesVariable

Extra names, comma-separated, like nova=VOICE. The named voice must exist or the server does not start.

Target
PTTS_VOICE_ALIAS
Wyoming addressVariable

Set to 0.0.0.0:10200 to also serve Home Assistant's Wyoming protocol (map the Wyoming port above). Home Assistant then lists Phonon as a text-to-speech engine.

Target
PTTS_WYOMING_ADDR
Voice catalogVariable

Empty: Gradium's public voice catalog (gradium/phonon-voices) for your language. Set to hf://owner/name[@revision], or a path inside the container to your own voices.jsonl, to use different voices.

Target
PTTS_VOICE_CATALOG