Model reference · open weights

phonon-en

Audio gradium Text→speech 2 builds Open weights 3k dl/mo

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.

  • phonon-en is a text-to-speech model by gradium that converts English text into 24 kHz audio.
  • It features 41M parameters and an 8192 token context length, allowing it to run on local devices like phones and laptops.
  • The model is released under the Apache 2.0 license.

Summary of the gradium/phonon-31m-en model card, 2026-10-22

What it is

Released bygradium
Released2026-10-19
Parameters41M
VRAM65 MB for the weights

What it runs on

Memory and cards for phonon-31m-en (BF16)

65 MBweights, file size
1.6 GBruntime overhead
CardOne streamMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

Builds

Sizes, precisions & builds

BuildParamsPrecisionWeightsSmallest setup
phonon-31m-en (above) ↗
2 builds: GGUF 55 MB … Q8 65 MB
41MBF16 65 MBRTX 3060 12 GB
phonon-40m-en ↗
2 builds: GGUF 60 MB … Q8 75 MB
51MBF16 75 MBRTX 3060 12 GB

From the model card

What gradium says about phonon-en

Read 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 details

  • 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.
  • Parameters: 31M (excluding the audio tokenizer)
  • Weights file: model.q8.gguf, 64.5 MB (8-bit quantized)
  • Languages: English
  • Output: mono, 24 kHz
  • License: Apache 2.0

The Phonon family

ModelParametersq8 weightsLanguagesLicense
phonon-31m-en31m64.5 MBEnglishApache 2.0
phonon-40m-en40m74.6 MBEnglishCC BY-NC 4.0
phonon-40m-fr40m74.6 MBFrenchCC BY-NC 4.0
phonon-40m-de40m74.6 MBGermanCC BY-NC 4.0
phonon-40m-es40m74.6 MBSpanishCC BY-NC 4.0
phonon-40m-pt40m74.6 MBPortugueseCC BY-NC 4.0
phonon-40m-multilingual40m74.6 MBAll 5 languagesCC 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.

Quickstart

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.

Command line

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.

Python

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

Transformers usage 🤗

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.

Other platforms

PlatformGuide
Python scripts and backendsptts on PyPI · Python guide
Web apps, in the browserphonon-tts on npm · Browser guide
iPhone, iPad and Mac apps (Core ML)Swift guide
Android appsAndroid guide · Snapdragon NPU preview
Android system voice, for TalkBack and every app that uses TextToSpeechAndroid TTS engine
Se

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms