Ollama Can Talk Now: Local Text-to-Speech With Phonon

Introduction
Ollama just learned to talk. The v0.40.11 release, published on GitHub on October 24, adds speech generation, Ollama's first text-to-speech feature. The release notes put it simply: "Ollama can now generate speech on macOS." ollama run plays text or a chat model's reply out loud while the audio is still being generated, and apps can stream audio through an OpenAI-compatible /v1/audio/speech endpoint.
The first voice model in the library is Phonon from Gradium, the tiny on-device TTS family we covered last week. Ollama's version uses Gradium's 31M English checkpoint, which is released under Apache 2.0, so you can use it in commercial projects too.
This isn't a new model. It's a new place to run one. But Ollama is the runtime a huge number of people already have installed for local LLMs, so "give my local assistant a voice" just went from a side project to one command.
What's in the Release
From the Ollama speech docs:
- Model:
phonon, built on Gradium'sphonon-31m-encheckpoint (31M parameters, 8-bit weights of about 65 MB on Hugging Face). English only. - Voices: it ships with Gradium's English voices, such as Zoey, Easton and Freya. Leave the voice out and you get the checkpoint's own
defaultvoice.ollama show phononlists them all. - Streaming: audio starts playing before the whole text is spoken. Piped text is spoken as it arrives, so a chat model's answer starts playing after its first sentence or two.
- Output:
wav(16-bit, mono, 24 kHz) by default, or rawpcmwith no header. - API: the OpenAI-compatible
POST /v1/audio/speechendpoint, so the official OpenAI Python and JavaScript SDKs work by pointingbase_urlathttp://localhost:11434/v1. - Limits: up to 4,096 characters per request.
ollama runsplits longer text at paragraph and sentence breaks for you.
A few details show the care that went in. Prices, numbers, symbols, email addresses and URLs are spelled out, so $4.59 is read as "4 dollars and 59 cents." Emoji, bullet characters and markdown markers like * and # are skipped, which matters when you pipe a chat model's formatted answer straight into it. Options Phonon doesn't support, such as speed changes or style instructions, return a clear 400 error instead of being silently ignored.
How to Run It Today
Update Ollama, then pull the voice:
ollama pull phonon
ollama run phonon "Hello from Ollama."
ollama run phonon --voice Zoey "Hi, this is Zoey."The fun one is chaining a chat model into the voice:
ollama run gemma4 --hidethinking "Tell me a fun fact about owls in two sentences." | ollama run phononWhen the output is redirected, ollama run writes a WAV file instead of playing it, which also works on servers without speakers:
ollama run phonon "Save this to a file." > speech.wavAnd from code, with the regular OpenAI SDK:
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="default",
input="Hello from Ollama.",
response_format="wav",
) as response:
response.stream_to_file("speech.wav")- Platform note: the v0.40.11 release notes announce speech for macOS. The docs also describe playback through the system player on Linux and Windows, so if you're off Mac, check that your build supports it before you plan around it.
- Dates: times and numeric dates are read as written, so write "October 23" instead of "10/23" for a natural read.
- Run ollama run phonon with no text to get a
>>>prompt where every line you type is spoken when you press Enter.
Why It Matters for Audio Creators
Until now, adding a voice to a local Ollama setup meant running a second server, like a separate TTS runtime, and wiring the two together. Now the same tool that runs your LLM speaks the result, through the same API shape that most voice apps already expect from OpenAI. Any script or app that calls OpenAI's speech endpoint can be pointed at your own machine with a URL change.
For creators, that's handy for quick, free, offline jobs: reading drafts back to yourself, temp narration for video edits, placeholder dialogue for game prototypes, or a voice for a local assistant you're building. Phonon is small enough that it won't fight your LLM for memory.
Keep expectations right-sized, though. This is a 31M-parameter English voice. There's no voice cloning, no emotion tags and no speed control in Ollama's version. For performance-heavy reads you'll still want bigger models like Fish Drama 3 or Tesslate's Lure. One more licensing note: Gradium's larger 40M Phonon checkpoints, including the multilingual one, are CC BY-NC 4.0 (non-commercial). Ollama's version uses the Apache 2.0 31M English model.
Conclusion
Ollama v0.40.11 turns the most popular local LLM runtime into a talking one. You get one pull for a tiny Apache-2.0 voice, streaming playback from the terminal, and an OpenAI-compatible speech endpoint on localhost. It's English-only and the voice is basic next to the big expressive models, but the plumbing is the news here. Once Ollama supports speech models, every new open TTS model that lands in its library becomes a one-line install. I'll be watching for which voices come next.
—Anabel ♡
