Model reference · open weights
phonon-en is an open-weight audio or speech model from gradium. phonon-31m-en (BF16) weighs 65 MB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the gradium/phonon-31m-en model card, 2026-10-22
What it is
| Released by | gradium |
|---|---|
| Released | 2026-10-19 |
| Parameters | 41M |
| VRAM | 65 MB for the weights |
What it runs on
| Card | One stream | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| phonon-31m-en (above) ↗ 2 builds: GGUF 55 MB … Q8 65 MB |
41M | BF16 | 65 MB | RTX 3060 12 GB |
| phonon-40m-en ↗ 2 builds: GGUF 60 MB … Q8 75 MB |
51M | BF16 | 75 MB | RTX 3060 12 GB |
From the model card
High-quality Text-to-Speech, on your device.
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.
Try it in your browser · All Phonon models · Runtime on GitHub · Python · Browser · Discord
model.q8.gguf, 64.5 MB (8-bit quantized)| Model | Parameters | q8 weights | Languages | License |
|---|---|---|---|---|
| phonon-31m-en | 31m | 64.5 MB | English | Apache 2.0 |
| phonon-40m-en | 40m | 74.6 MB | English | CC BY-NC 4.0 |
| phonon-40m-fr | 40m | 74.6 MB | French | CC BY-NC 4.0 |
| phonon-40m-de | 40m | 74.6 MB | German | CC BY-NC 4.0 |
| phonon-40m-es | 40m | 74.6 MB | Spanish | CC BY-NC 4.0 |
| phonon-40m-pt | 40m | 74.6 MB | Portuguese | CC BY-NC 4.0 |
| phonon-40m-multilingual | 40m | 74.6 MB | All 5 languages | CC BY-NC 4.0 |
All of them run on the same runtime and use the same file layout, so switching models means changing the repo ID.
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.
pip install ptts
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
Install 🤗 Transformers from source:
pip install git+https://github.com/huggingface/transformers
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.
| Platform | Guide |
|---|---|
| Python scripts and backends | ptts on PyPI · Python guide |
| Web apps, in the browser | phonon-tts on npm · Browser guide |
| iPhone, iPad and Mac apps (Core ML) | Swift guide |
| Android apps | Android guide · Snapdragon NPU preview |
Android system voice, for TalkBack and every app that uses TextToSpeech | Android TTS engine |
| Se |
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.