October 24, 2026 #
Ollama can now turn text into speech. The first speech model is Phonon, a family of small, state-of-the-art text-to-speech models from Gradium. Speech models are now available for macOS, with Windows and Linux support coming soon.
ollama run phonon "Hello from Ollama."
Performance on Apple Silicon #
On Apple Silicon, Ollama is accelerated by MLX, Apple’s machine learning framework, for state-of-the-art throughput. On a MacBook Pro with M5 Max, Ollama was 35% faster than the next fastest engine, Gradium’s own runtime.
Ollama’s implementation is just as accurate, matching the word error rate of the reference implementation in Hugging Face Transformers:
Voices #
Choose a voice with --voice, or voice in the API:
ollama run phonon --voice Hadley "Hello from Ollama."
The voices come from Gradium’s voice catalog. ollama show phonon lists them all.
Languages #
| Model | Language |
|---|---|
phonon |
English |
phonon:40m-fr |
French |
phonon:40m-de |
German |
phonon:40m-es |
Spanish |
phonon:40m-pt |
Portuguese |
phonon:40m-multilingual |
All five |
phonon is released under Apache 2.0. The 40M models are released under CC BY-NC 4.0, which limits them to noncommercial use.
Read replies aloud #
Pipe a chat model’s reply into Phonon. Text is spoken as it arrives, so the reply starts playing after its first sentence:
ollama run gemma4 --hidethinking "Tell me a fun fact about owls in two sentences." | ollama run phonon
Run ollama run phonon with no text to type lines at a prompt, or redirect the output to save a WAV file:
ollama run phonon "Save this to a file." > speech.wav
API #
Phonon works with the OpenAI-compatible /v1/audio/speech endpoint, so existing code that uses the OpenAI SDK only needs a new base URL.
curl http://localhost:11434/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "phonon",
"voice": "Zoey",
"input": "Hello from Ollama."
}' --output speech.wav
python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
with client.audio.speech.with_streaming_response.create(
model="phonon",
voice="Zoey",
input="Hello from Ollama.",
response_format="wav",
) as response:
response.stream_to_file("speech.wav")
python
import fs from "node:fs"
import OpenAI from "openai"
const openai = new OpenAI({ baseURL: "http://localhost:11434/v1", apiKey: "ollama" })
const response = await openai.audio.speech.create({
model: "phonon",
voice: "Zoey",
input: "Hello from Ollama.",
response_format: "wav",
})
fs.writeFileSync("speech.wav", Buffer.from(await response.arrayBuffer()))
The response streams while the audio is generated, so it can play right away:
curl -sN http://localhost:11434/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "phonon", "input": "Playback starts right away."}' \
| ffplay -nodisp -autoexit -loglevel error -
Audio is 24 kHz mono, returned as WAV by default or as raw 16-bit samples with "response_format": "pcm".
Get started #
Speech models run on Apple Silicon Macs. Download Ollama 0.40.11 or later, then pull Phonon:
ollama pull phonon
For more information, see: