phonon-31m is a text-to-speech model from the Phonon family. It turns text into natural 24 kHz speech in English. It streams audio while it is still generating, and it is small enough to run in a browser tab, on a phone, or on a laptop CPU.
Phonon builds on Pocket TTS and the Mimi codec, developed by Kyutai.
Model type: text-to-speech. A flow-matching transformer predicts audio latents from the text one 80 ms frame at a time, and the Mimi codec's decoder turns them into audio.
Every runtime names this model as hf://gradium/phonon-31m-en, and takes lang, which selects how text is normalized (numbers, symbols, dates). This model speaks English, so use en.
uvx ptts --lang en --quant q8 \
--voice Easton "Hello from Phonon." -o speech.wav
uvx runs the Python package's command without installing it. The standalone ptts binary from GitHub Releases or Homebrew (brew install gradium-ai/tap/ptts) takes the same flags.
import ptts
tts = ptts.TTS("hf://gradium/phonon-31m-en", lang="en", quant="q8")
tts.save("speech.wav", "Hello from Phonon.", voice="Easton")
# Or stream: chunks arrive while the rest is still being generated.
with tts.stream("Speech can start playing right away.", voice="Easton") as audio:
for pcm in audio:
... # float32 chunks at audio.sample_rate
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration
model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")
# Easton (en-us); every voice and its ID: https://huggingface.co/gradium/phonon-voices
voice_path = hf_hub_download("gradium/phonon-voices", "voices/LMDIYE0Oa377Qh6Z.safetensors")
voice = load_file(voice_path)["speaker_wavs"][0].T.float() # (num_frames, 512)
conversation = [
{"role": "user", "content": [{"type": "audio"}, {"type": "text", "text": "Hello from Phonon."}]}
]
inputs = processor.apply_chat_template(
conversation,
tokenize=True,
return_dict=True,
add_generation_prompt=True,
processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)
outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)
processor.save_audio(audio, "speech.wav")
This repo's default-voice.safetensors loads the same way. Unlike the runtime, the tokenizer does not spell out numbers, amounts, symbols or addresses, and long text is split with processor.split_text: see the Transformers docs.
Phonon comes with a catalog of ~100 voices available in the gradium/phonon-voices repo. Instant voice cloning and voice design are available through the Gradium studio.
Phonon was compared with other open text-to-speech models on three measures, per language:
Elo: human preference from blind pairwise listening tests (higher is better).
Hard set LLM WER: word error rate on hard sentences full of structured data (numbers, dates, codes, units), scored with an LLM-assisted ASR comparison (lower is better).
Seed-TTS LLM WER: the same metric on the Seed-TTS evaluation sentences (lower is better).
In every language, a Phonon model is first on all three measures.
English (US) (Elo from 468 raters, 8,290 votes)
Model
Elo
Hard set LLM WER
Seed-TTS LLM WER
phonon-31m-en
2098
1.5%
0.51%
phonon-40m-en
2117
2.3%
0.45%
phonon-40m-multilingual
2097
2.0%
0.48%
Kokoro
2043
3.5%
0.45%
Magpie
1939
28%
0.46%
NeuTTS
2034
8.7%
0.62%
French (Elo from 172 raters, 2,270 votes)
Model
Elo
Hard set LLM WER
Seed-TTS LLM WER
phonon-40m-fr
2072
2.4%
1.3%
phonon-40m-multilingual
2016
2.7%
1.5%
Kokoro
1578
5.5%
1.8%
Magpie
1608
30%
2.0%
NeuTTS
1853
9.9%
2.7%
German (Elo from 168 raters, 2,220 votes)
Model
Elo
Hard set LLM WER
Seed-TTS LLM WER
phonon-40m-de
2097
2.2%
0.83%
phonon-40m-multilingual
2046
2.9%
0.90%
Magpie
1640
29%
1.6%
NeuTTS
1768
9.3%
2.6%
Spanish (Spain) (Elo from 201 raters, 2,290 votes)
Model
Elo
Hard set LLM WER
Seed-TTS LLM WER
phonon-40m-es
2103
2.1%
0.85%
phonon-40m-multilingual
2076
2.6%
1.0%
Kokoro
1629
3.8%
0.93%
Magpie
1870
25%
0.92%
NeuTTS
1778
16%
5.1%
Portuguese (Brazil) (Elo from 171 raters, 2,000 votes)
Phonon is made for applications that speak on the user's device: offline and private assistants, screen readers and other accessibility tools, games, and interactive apps that cannot wait for a cloud round trip. It also runs as a local server with an OpenAI-compatible API and as a voice for Home Assistant.
The model speaks only the languages above. Text in other languages is read with the wrong pronunciation.
Text is normalized before synthesis (numbers, currency, dates, emails and so on), and that step needs the right language. Choose lang to match the text.
Very long inputs are split into sentences and spoken one after the other, so prosody does not carry across the whole text.
Do not use Phonon to impersonate a real person, to deceive listeners about who is speaking, or to clone a voice without the speaker's consent. Tell listeners when speech is synthetic where that matters to them.
The weights, tokenizer and voices in this repository are released under Apache 2.0, which allows commercial use. The runtime is a separate project, licensed MIT OR Apache-2.0.
Files
14 files · 223 MBWeights 55.1 MB (smallest of 2 GGUF variants). Sizes and sha256 from the signed manifest.