alt.freeweights.speech / phonon-31m-en
From: gradium <huggingface.co/gradium>Newsgroups: alt.freeweights.speechSubject:

phonon-31m-en

Date: 2026-11-15Commit: 92741c5Signed: 2DC28CC7B26A283B ✓

Text to speech model with 41M parameters. Gguf and safetensors weights, 223 MB in all. Published by gradium under Apache-2.0.

41M params223MBphonon-31m-engguf safetensorspermissive
FactsParams41MSize223 MBFormatsgguf, safetensorsTasktext to speechLicenseApache-2.0From sourcepermissive
$ fw get gradium/phonon-31m-en
# manifest sha256 b15e859dffe6… · 223 MB · 14 files
$ fw verify ./phonon-31m-en gradium/phonon-31m-en
From sourceHosted (signed)gradium/phonon-31m-enLast check: 2026-11-15 02:28 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Overview

Size
223 MB
Weights
55.1 MB (smallest of 2 GGUF variants)
Parameters
41M
Formats
gguf, safetensors
Task
text to speech
License
Apache-2.0 (permissive)
Files
14, each with a sha256
Publisher
gradium
Added
2026-11-15
Section
alt.freeweights.speech
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:28 UTCpassed

Model card

From the publisher at commit 92741c5. Shown as plain text with links; images open at the publisher.

phonon-31m English#

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
Server with an OpenAI-compatible API (Docker)Server guide
Home AssistantHome Assistant setup
Streaming over WebSocketWebSocket server
Rustptts on crates.io · Rust guide
C and C++ptts.h

Voices#

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.

Benchmarks#

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)

ModelEloHard set LLM WERSeed-TTS LLM WER
phonon-31m-en20981.5%0.51%
phonon-40m-en21172.3%0.45%
phonon-40m-multilingual20972.0%0.48%
Kokoro20433.5%0.45%
Magpie193928%0.46%
NeuTTS20348.7%0.62%

French (Elo from 172 raters, 2,270 votes)

ModelEloHard set LLM WERSeed-TTS LLM WER
phonon-40m-fr20722.4%1.3%
phonon-40m-multilingual20162.7%1.5%
Kokoro15785.5%1.8%
Magpie160830%2.0%
NeuTTS18539.9%2.7%

German (Elo from 168 raters, 2,220 votes)

ModelEloHard set LLM WERSeed-TTS LLM WER
phonon-40m-de20972.2%0.83%
phonon-40m-multilingual20462.9%0.90%
Magpie164029%1.6%
NeuTTS17689.3%2.6%

Spanish (Spain) (Elo from 201 raters, 2,290 votes)

ModelEloHard set LLM WERSeed-TTS LLM WER
phonon-40m-es21032.1%0.85%
phonon-40m-multilingual20762.6%1.0%
Kokoro16293.8%0.93%
Magpie187025%0.92%
NeuTTS177816%5.1%

Portuguese (Brazil) (Elo from 171 raters, 2,000 votes)

ModelEloHard set LLM WERSeed-TTS LLM WER
phonon-40m-pt21442.9%1.1%
phonon-40m-multilingual20483.2%1.1%
Kokoro16334.1%1.3%

Intended use#

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.

Limitations#
  • 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.
Responsible use#

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.

License#

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.
Hide all 14 files with their sha256
FileSizesha256
.gitattributes1.62 KB2767e84a54730a23a90d343f21c271eb674089e0da714e62aa063e6cac2865b2
README.md10.5 KBfc04467c0e5560e89cd5bbded052e9b7f6c23e2abcdd03a32a3a07a27a7ea3ed
chat_template.jinja1.51 KB7dbe65d426b02c082cdbb61e7db1d58a7a1f6152328dc929d971e3ce3ad932cc
config.json4.63 KBb5d0f88353638370d94035b7d73d7d6577c0554d78f8d7ecfd40490aae39ae85
default-voice.safetensors256 KBdc537478eaadc1a5257fcda2e3501ab81e14c111a5d95a5838f350db2afd0f1a
generation_config.json220 Bffb086e8f531b10a43bfd17a56069f90b649171a55aae98b5e9a28c8411cffc0
model.q4k.gguf55.1 MBb89e867e995b45835cbe30564fe360178fb39f1fe457c13e1e559c2e4260e4f3
model.q8.gguf64.5 MBa7d9aad2cd6dc66473f24a08bc6d2939030ef4d751ef82349361fbef3272dbae
model.safetensors103 MB8a04cf833cfe69b67c2ec968b2d31244655b9accc84ade9c0ebcc176f2074607
processor_config.json747 B1ba08d75f0aba95fb494e8264e65e6b3e6b0b50981e1d49f183cb70eed58cfee
tokenizer.5.0.0.json303 KB28161547feed30fa70e9ce6da0b791835db9c9720683d87f17e0327f01687cc5
tokenizer.json278 KB691a00068fa7b989f2f3e5ae5daa2d1a5bb319f2d5360deafcfb19a8bb6e7936
tokenizer.model65.0 KB82e4572006d64d483317074c22c368e87779640b6f3a9dcd07b7caae32b030ce
tokenizer_config.json575 B17d12cf8dee2891506648bb1d5657e26fb165263686d0e2ef311513488d6446f
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
92741c5b07 pinned now2026-11-15 02:28 UTC14 files · 223 MB

Use it

$ fw get gradium/phonon-31m-en
# manifest sha256 b15e859dffe6… · 223 MB · 14 files
$ fw verify ./phonon-31m-en gradium/phonon-31m-en
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/gradium/phonon-31m-en.json --dir ./phonon-31m-en $ python3 fw.py verify ./phonon-31m-en ./gradium__phonon-31m-en.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download gradium/phonon-31m-en --revision 92741c5b07d085ff840e26fea8ce43110b87852f --local-dir ./phonon-31m-en
llama.cppDownload one GGUF variant (model.q4k, 55.1 MB), then serve it.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download gradium/phonon-31m-en --include "model.q4k*" --local-dir ./phonon-31m-en $ llama-server -m ./phonon-31m-en/model.q4k.gguf
OllamaMake an Ollama model from the downloaded file.
$ printf 'FROM ./phonon-31m-en/model.q4k.gguf\n' > Modelfile $ ollama create phonon-31m-en -f Modelfile

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
fc04467c0e5560e89cd5bbded052e9b7f6c23e2abcdd03a32a3a07a27a7ea3ed
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: gradium <huggingface.co/gradium>Newsgroups: alt.freeweights.speechSubject: phonon-31m-enDate: 2026-11-15Commit: 92741c5Signed: 2DC28CC7B26A283B ✓
Upstream
gradium/phonon-31m-en
Pinned commit
92741c5b07d085ff840e26fea8ce43110b87852f
Manifest
phonon-31m-en.json · .minisig
Manifest sha256
b15e859dffe6e879952ff933a36c5649587fc82c5e4dfb946dea64d9c7c12391
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:28 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/gradium/phonon-31m-en.json $ curl -O https://freeweights.allternit.com/manifests/gradium/phonon-31m-en.json.minisig $ minisign -Vm phonon-31m-en.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download gradium/phonon-31m-en
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. phonon-31m-en.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of phonon-31m-en. Each has its own license check and page.

From: MIT <huggingface.co/MIT>Subject: ast-finetuned-audioset-10-10-0.4593
From: onnx-community <huggingface.co/onnx-community>Subject: ast-finetuned-audioset-10-10-0.4593-ONNX
From: Edge0 <huggingface.co/Edge0>Subject: Audio8-TTS-Preview-0.6b
From: Edge0 <huggingface.co/Edge0>Subject: Audio8-TTS-Realistic-Air
From: facebook <huggingface.co/facebook>Subject: audiobox-aesthetics
From: mlx-community <huggingface.co/mlx-community>Subject: chatterbox-4bit