Gradium has open-sourced Phonon, a family of small text-to-speech models built to run on the device. The Gradium Phonon on-device TTS model comes in 31M and 40M sizes. The English Phonon 31m ships under Apache 2.0 and fits in a 64.5 MB file. Developers get natural speech with no cloud call, no GPU and no per-character bill.
TL;DR
- Size: 31M parameters (excluding the audio tokenizer), 64.5 MB q8 GGUF, 24 kHz mono output. Phonon 40m: 40M, 74.6 MB.
- Runs on: CPUs, phones, Raspberry Pi 5, browsers (WASM, WebGPU) and NVIDIA GPUs. No GPU required.
- Performance: top English Elo among open models Gradium tested; about 7 ms to first audio on CPU.
- Best: 1.70% WER on a 500-sentence hard set, versus 3.50% for Kokoro (Gradium’s eval).
- Worst: 0.51% Seed-TTS LLM WER, behind Kokoro (0.45%) and Magpie (0.46%).
What is Gradium Phonon?
Phonon is an open-weight TTS family from Gradium, a Paris voice AI company spun out of Kyutai. It generates speech locally on phones, laptops, boards and browsers.
The family has three models:
- Phonon 31m: English only, 37 built-in voices, Apache 2.0.
- Phonon 40m: 1 model per language (English, French, German, Spanish, Portuguese), CC BY-NC 4.0.
- Phonon 40m multilingual: all 5 languages in 1 model, 102 voices, CC BY-NC 4.0.
How does Phonon work?
Phonon uses a causal transformer backbone. Its prefix combines text and speaker embeddings. A SentencePiece tokenizer with a 4,000-token vocabulary reads raw text, with no phoneme conversion.
The backbone generates 1 latent vector per 80 ms frame. A flow-matching head turns that vector plus noise into an audio embedding in a single step. A smaller variant of Kyutai’s Mimi decoder then outputs 24 kHz PCM audio. A separate end-of-speech head decides when to stop.
Phonon 31m uses 6 transformer layers, width 512 and 8 attention heads. Phonon 40m uses 9 layers at the same width. Both are distilled from a larger Phonon teacher. Training ran on an NVIDIA H100 cluster with NCCL and CUDA Graphs.
The work builds on Kyutai’s Continuous Audio Language Models research and Pocket TTS.
</span>
<div class="st"><span class="n">STEP 3</span><b>Causal transformer</b></div><span class="arr">
</span>
<div class="st"><span class="n">STEP 4</span><b>Flow-matching head</b></div><span class="arr">
</span>
<div class="st"><span class="n">STEP 5</span><b>Mimi decoder</b></div>
</div>
<div class="detail" id="how-d"></div>
<div class="frames" id="frames"></div>
<div class="ctl">
<button class="btn ghost" id="prev">
Back</button>
<button class="btn" id="next">Next step
</button>
<button class="btn ghost" id="play">Stream frames</button>
<span class="cap">Each bar is 1 latent frame = 80 ms of 24 kHz audio</span>
</div>
</div>
<div class="panel" id="p-bench">
<div class="seg" id="bseg">
<button class="on" data-b="wer">Hard-set WER (lower is better)</button>
<button data-b="elo">English Elo (higher is better)</button>
<button data-b="seed">Seed-TTS WER</button>
</div>
<div id="bars"></div>
<div class="note" id="bnote"></div>
</div>
<div class="panel" id="p-speed">
<div class="hw" id="hw"></div>
<div class="gauge">
<div class="gc"><div class="k">Time to first audio</div><div class="val" id="g1">6.9 ms</div><div class="src" id="g1s"></div></div>
<div class="gc"><div class="k">Speed vs real time</div><div class="val" id="g2">29.9x</div><div class="src" id="g2s"></div></div>
</div>
<div class="note">Gradium blog rows are Phonon 31m; partner and press-release rows do not name the variant. Higher "x real time" means more seconds of audio per second of compute. Measured by Gradium and launch partners.</div>
</div>
<div class="panel" id="p-trade">
<div class="to">
<div class="tc p"><h4>Where Phonon 31m leads</h4><ul>
<li>1.70% hard-set WER vs 3.50% for Kokoro</li>
<li>6.9 ms to first audio on a MacBook Air M5 CPU</li>
<li>3.7x real time on a Raspberry Pi 5</li>
<li>Apache 2.0 weights, tokenizer and voices</li></ul></div>
<div class="tc c"><h4>Where it falls short</h4><ul>
<li>0.51% Seed-TTS WER, behind Kokoro at 0.45%</li>
<li>English only at 31M; 40m models are CC BY-NC</li>
<li>Prosody resets between sentences on long text</li>
<li>All benchmarks are run by Gradium</li></ul></div>
</div>
</div>
<div class="ft"><span>Sources: gradium.ai/blog, huggingface.co/gradium · self-reported numbers</span><span class="brand">Built by Marktechpost</span></div>
</div>
<script>
(function(){
var R=document.getElementById('mtp-phonon');
function send(){try{parent.postMessage({mtpFrameHeight:R.offsetHeight+40,id:'mtp-phonon'},'*')}catch(e){}}
R.querySelectorAll('.tab').forEach(function(t){t.addEventListener('click',function(){
R.querySelectorAll('.tab').forEach(function(x){x.classList.remove('on')});t.classList.add('on');
R.querySelectorAll('.panel').forEach(function(p){p.classList.remove('on')});
R.querySelector('#p-'+t.dataset.t).classList.add('on');
if(t.dataset.t==='bench')drawBars(cur);
setTimeout(send,60);});});
R.querySelectorAll('.mc').forEach(function(c){c.addEventListener('click',function(){
R.querySelectorAll('.mc').forEach(function(x){x.classList.remove('on')});c.classList.add('on');
document.get