Whisper.cpp Review: Free Local Speech-to-Text in C/C++
Georgi Gerganov's C/C++ port of OpenAI's Whisper runs the same speech-to-text model locally: no Python, no cloud upload, MIT license.
You just finished recording a two hour interview, and the file is sitting on your laptop. You need it as text. The easy route is to drag the file into some cloud service, wait, pay per minute, and hope nobody keeps a copy. The less obvious route is that you could run the transcription right there on the machine in front of you, no account, no meter. That route has a name, and it is the reason whisper.cpp keeps showing up in local AI conversations.
It is a plain C/C++ port of OpenAI's Whisper model. Same weights, same idea, repackaged so it can run on hardware you already own. No Python, no PyTorch, no 10 gigabyte graphics card. If offline speech recognition has always seemed to live in a Python environment, this is the piece you were missing.
Where it comes from
OpenAI open-sourced Whisper in September 2022. It is a large model trained on tens of thousands of hours of speech, and it does three things at once: transcribe audio in 100+ languages, translate non-English audio into English, and put timestamps on what it hears. It is good. It is also heavy. The reference implementation leans on PyTorch, and the large models want a serious chunk of memory.
Georgi Gerganov, who also built llama.cpp, took the same model weights and reimplemented the runtime in plain C/C++. The result is whisper.cpp, now maintained under the ggml-org project on GitHub. Stable is at v1.8.6 as of this writing, the license is MIT, and the commit history is long. It is a community port of a first-party model with its own release cadence.
What makes it different
The headline is the dependency list, because it is short. Whisper.cpp is a self-contained binary. It talks to the model through the ggml tensor library, and that is the whole stack. Everything else is optional.
- Apple Silicon is a first-class citizen, using ARM NEON, Accelerate, Metal, and Core ML. An M-series Mac gets real speed.
- x86 desktops get AVX, POWER machines get VSX, and CPU-only inference is a supported path, not a degraded one.
- If you do have accelerators, it supports NVIDIA CUDA, AMD ROCm, OpenVINO, Ascend NPUs, and Vulkan.
- It exposes a C-style API, so you can drop it into an app in any language that can call C.
That list reads like a hardware tour, and that is the point. The stated goal is to run the same model across the widest spread of machines, from a Raspberry Pi to a Mac Studio to a phone, and the project ships a demo of it running fully offline on an iPhone 13. There is a consequence the feature list does not say out loud: your audio never has to leave the building. For a lot of teams, that is the entire pitch.
How you would actually use it
The day to day is a command line, and the command line is short. Clone the repository, download a model file in ggml format, build, run. The official quick start, in order:
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh
make
./build/bin/whisper-cli -m models/ggml-base.bin -f interview.wav
Once it is running, you get back a transcript in whatever format you ask for: plain text, SRT subtitles, WebVTT, or a JSON file with word level timing. That last one opens the door to other projects, because word level timestamps let you build a captioning tool or a searchable archive without more work.
Picking a model size
Whisper ships in sizes that run from tiny to large, and whisper.cpp runs them all. The tradeoff is simple: bigger models are more accurate and use more memory. The official numbers are worth keeping in your head.
- tiny is about 75 megabytes on disk.
- base is a little over 140 megabytes.
- small sits around half a gigabyte.
- medium is about 1.5 gigabytes on disk and roughly 2 gigabytes in memory.
- large is about 2.9 gigabytes on disk and around 3.9 gigabytes in memory.
In practice most people reach for the turbo variant of the large model. Community benchmarks report it running several times faster than the full large model while giving up only a small amount of accuracy, which makes it the sensible default for most work. If your machine is modest, start with small or base and see how the quality feels on your actual audio. A fast, readable transcript you will actually read beats a perfect one that takes all night.
Where it shines
There are a few situations where whisper.cpp fits so cleanly that it is hard to argue with, so here are three real ones.
The first is a podcast or interview workflow where the audio is sensitive. A law firm, a clinic, a startup doing employee interviews. The recording is valuable, and sending it to a cloud API is either a privacy concern or a line item nobody wants to explain. Run the model locally, keep the file on disk, and the transcript never crosses the network. The MIT license means you can embed it in a product without reaching for a lawyer first.
The second is a device that will not have a stable connection. Field researchers, a retail kiosk taking voice notes, a developer prototyping a voice assistant on a Raspberry Pi. If the network is the thing you cannot count on, the model running on the hardware is the thing you can count on.
The third is a developer who wants speech to text inside an app but does not want to ship a Python runtime and a machine learning framework to end users. A C-style API and a self contained binary make that integration a lot smaller than it sounds.
Where it does not fit
A fair review needs the other side. If you are a team with no engineers and a mountain of audio, a hosted service is the lower friction path: no repo to clone, nothing to build. Whisper.cpp also rewards people comfortable on a command line, and the build step is friction for a team that lives in spreadsheets. And the accuracy ceiling is set by the underlying Whisper model. Accented speakers, heavy background music, or new technical vocabulary can still trip it up. It gives you a very good first draft, and a very good first draft is exactly what it is.
Under the hood, in plain words
Whisper was trained on a huge pile of web audio with transcripts that were not perfectly aligned. That weak supervision is why it is so robust to noise, accents, and the mess of real speech: it learned to expect imperfection, so it does not fall over when it meets some. Whisper.cpp does not change the model, it changes the delivery. The ggml library handles the math efficiently on whatever hardware is present, and the C layer wraps it in something small enough to run anywhere. That separation, the model in one place and the runtime in another, is why the same weights can run on a phone and a server.
How it compares to the alternatives
The Python reference from OpenAI is the most documented and the right choice if you are already in a Python data stack. faster-whisper and whisperX take the same model and optimize it with CTranslate2, trading a bit of setup for speed. On the other side of the fence, hosted services like Deepgram, AssemblyAI, and the major cloud providers transcribe for a per minute fee with no build step. Where whisper.cpp wins is the local and private end of that spectrum: the audio is sensitive, the network is unreliable, the device is small, or you want the transcript without a subscription. It is not the option when you want zero setup at scale, and that is a perfectly fine reason to pick something else.
Who should try it
My honest read. If you are a developer or a technical operator, and your audio has any reason to stay local, whisper.cpp is worth an afternoon. Clone it, build it, run a file, and see how it feels. The model sizes mean you can start small and move up only if you need the accuracy. If your audio is routine and the cloud works for you, a hosted API will save you the build step, and you should not feel bad about that. And if you run a team that lives on audio, the MIT license and the C API make it a realistic part of a product, rather than a hack living in a terminal.
The bigger idea underneath it is the one that made local models popular in the first place. You do not have to send everything to the cloud to get good results. Sometimes the best infrastructure is the laptop on your desk, and whisper.cpp is one of the clearest ways to use it for speech. If you want to get started, begin at the whisper.cpp repository on GitHub, with the OpenAI Whisper repository nearby for the model.