This post is for developers who call OpenAI’s speech API and want to know whether Ollama’s new speech endpoint can stand in for it. It covers which request fields pass unchanged, which return an error, what audio comes back, and which Phonon models allow commercial use. Nothing was run for this post: the Phonon library page says these packages require Apple Silicon, so everything below comes from Ollama, Gradium and OpenAI pages read on 27 October 2026.
What Ollama’s speech feature is
Ollama now turns text into audio locally, from the ollama run command or through an HTTP endpoint shaped like OpenAI’s. The Ollama blog post of 24 October 2026 introduces Phonon, a family of small text-to-speech models from Gradium. Speech is available on macOS, with Windows and Linux support described as coming soon. The v0.40.11 release notes say apps can stream audio through the OpenAI-compatible /v1/audio/speech endpoint. That release was published at 00:30 UTC on 24 October 2026.
Gradium’s phonon-31m-en model card describes Gradium’s 31M English checkpoint as producing mono 24 kHz speech and streaming audio while it is still generating.
Which Ollama version serves the speech endpoint
The pages disagree on the minimum version, which matters to anyone who pins Ollama. The OpenAI compatibility page says the endpoint was added in v0.40.8. The speech guide and the library page say v0.40.9 or later. The blog post says 0.40.11 or later, and the v0.40.11 release notes announce speech.
The v0.40.8 notes and v0.40.9 notes cover the Flint model and do not mention speech, audio or Phonon. Of the release notes cited here, only those for 0.40.11 mention speech, so 0.40.11 is the safe minimum.
What an OpenAI speech client can send unchanged
Most of OpenAI’s request shape is accepted, but several fields take a narrower set of values. The OpenAI compatibility page says Ollama supports a subset of the OpenAI API and lists each speech field. The table below sets that list against OpenAI’s speech API reference and text-to-speech guide.
| Field | OpenAI | Ollama |
|---|---|---|
input | up to 4096 characters | up to 4,096 characters |
voice | 13 built-in names, or a custom voice | a voice that ollama show lists; omitted means default |
response_format | default mp3; also opus, aac, flac, wav, pcm | default wav; also pcm |
speed | 0.25 to 4.0, default 1.0 | 1 only |
stream_format | sse or audio | audio only |
instructions | controls the voice; not on tts-1 or tts-1-hd | not supported |
The compatibility page says voice names match in any case and with or without accents. Each API request takes up to 4,096 characters. The speech guide says ollama run splits longer text at paragraph and sentence breaks.
Unsupported options fail with an error instead of being ignored
This is the difference most likely to break an existing OpenAI client. The OpenAI compatibility page says unsupported values return a 400 error instead of being ignored. The speech guide names other formats, other speeds and instructions as examples, and says an unknown voice returns a 400 that lists the available voices.
The compatibility page says voice must be one of the voices that ollama show lists. The voices the speech guide names for phonon are Gradium’s, such as Zoey, Easton and Freya. A client that sends OpenAI’s built-in voices, such as alloy, nova and cedar, has to switch to a Phonon voice from that list, such as Freya.
Ollama’s blog post claims that existing code using the OpenAI SDK only needs a new base URL. That holds only if the client also changes model to a Phonon tag such as phonon and voice to a voice that ollama show lists. The request must also leave out instructions and keep response_format, speed and stream_format at values Ollama accepts; with no response_format it gets WAV back, per the compatibility page. OpenAI’s text-to-speech guide gives mp3 as its default format. Code that sets mp3 explicitly, or any speed other than 1, gets a 400.
What the audio response looks like
A client built around MP3 has to handle WAV or raw PCM instead. The OpenAI compatibility page says audio is 16-bit, mono, 24 kHz, and pcm returns raw little-endian samples with no header. That matches the PCM description in OpenAI’s text-to-speech guide: 24 kHz, 16-bit signed, without the header.
The speech guide adds one WAV detail. The header is written before the length is known, so its size fields hold the maximum value. Code that reads the audio length from the WAV header will get that maximum, not the real length.
Only the 31M English Phonon model allows commercial use
The tag a developer pulls decides whether the model can go into a commercial product. The library page says the 31M English checkpoint is released under Apache 2.0. The 40M English, French, German, Spanish, Portuguese and multilingual checkpoints are released under CC BY-NC 4.0, which limits use to noncommercial purposes.
Gradium’s phonon-31m-en model card gives the same split in its family table. It says the weights, tokenizer and voices in the 31M English repository allow commercial use. Gradium’s voice catalog is Apache 2.0 and has 102 voices for the 31M model.
The default tag has one inconsistency. The library page lists phonon:31m-en as an alias of phonon and says the default model includes one voice, named default. The speech guide says phonon comes with Gradium’s English voices. Ollama’s registry shows both tags use the same model weights, and phonon:latest adds named voice files and an Apache 2.0 licence for gradium/phonon-voices. The phonon:31m-en tag carries only default, and the tag listing gives 104MB for it against 113MB for latest.
What the 35% speed figure compares
The speed claim comes from one source and compares engines at different precisions. The blog post says that on a MacBook Pro with M5 Max, Ollama was 35% faster than the next fastest engine, Gradium’s own runtime, ptts. Its chart measures throughput as times faster than real time. Ollama on the GPU with MLX reached 113x, and ptts on 6 CPU threads reached 84x.
Ollama ran the model in bf16, while ptts used 8-bit weights on the CPU, fp16 on the Neural Engine and f32 on the GPU, according to the blog post. On the Neural Engine ptts reached 43x, on the GPU 38x, and Transformers on MPS reached 17x. The test generated 45 seconds of speech and reports the median of 10 runs. Word error rate on 200 Seed-TTS English sentences, transcribed with Whisper large-v3, was 1.2% for Ollama and 1.2% to 1.4% for ptts.
Limits
Nothing was run for this post, so no 400 response, WAV header or audio stream was observed directly. No source cited says what happens when Phonon is run on Windows, Linux or an Intel Mac. The docs do not say whether an empty instructions field or a float speed of 1.0 returns a 400. The blog post does not say which Phonon checkpoint its benchmarks used, and no source cited gives time to first audio. Windows and Linux support is described only as coming soon.