faster-whisper
Reimplementation of Whisper for fast local transcription
faster-whisper is a reimplementation of OpenAI's Whisper model using the CTranslate2 inference engine. It transcribes audio several times faster while using less memory, making local speech recognition practical.
Key features
- CTranslate2 acceleration
- Lower memory usage
- Word-level timestamps
- CPU and GPU support
Pros & cons
Strengths
- Much faster than Whisper
- Lower memory usage
- Word-level timestamps
Trade-offs
- Python integration required
- GPU needed for speed
faster-whisper replaces
Last reviewed Aug 26, 2026 · 796 words
You will probably never import faster-whisper yourself, and that is fine. It is a Python library (MIT, 25,085 stars) that runs OpenAI's Whisper weights through the CTranslate2 inference engine, and the project's own benchmark table shows the large-v2 model transcribing a 13-minute file in under a minute on a single GPU using under 5 GB of VRAM, where the reference implementation took over 4 minutes and over 11 GB. What a self-hoster actually deploys is one of the servers built on top of it. Picking the right server is the whole decision; the library underneath is the same in every case.
The four ways to run it
| Wrapper | Talks to | Best for |
|---|---|---|
| wyoming-faster-whisper | Home Assistant Assist over the Wyoming protocol | Voice commands, short clips, CPU boxes |
| Speaches | OpenAI-compatible /v1/audio/transcriptions | Open WebUI, any app that already speaks the OpenAI API |
| whisper-asr-webservice | Plain HTTP upload, swappable engines | Batch jobs, scripts, subtitle pipelines |
| The library directly | Your Python code | Custom pipelines, word timestamps, diarisation glue |
For a Home Assistant voice assistant, install the Wyoming add-on or container and stop reading; it is the path of least surprise. For a chat UI that wants speech input, Speaches gives you a drop-in endpoint and the same image handles text-to-speech. For "transcribe every recording in this folder", the ASR webservice plus a 10-line curl loop is done in an afternoon.
Model choice matters more than hardware
The model name decides accuracy, speed and memory at once. large-v3 is the most accurate and the slowest. large-v3-turbo keeps the encoder and cuts the decoder to 4 layers, giving most of the accuracy at a large fraction of the speed, and is my default for anything in English or a major European language. distil-large-v3 is English-only and quick. small and base exist for CPU-bound boxes doing short commands, where the difference between 0.8 seconds and 3 seconds is the difference between a voice assistant that feels alive and one you stop using. Every model downloads on first run from the Hugging Face hub, so give the container a persistent cache volume or you will fetch 3 GB again after every recreate.
CPU works, GPU is where the speed claim lives
On CPU, set compute_type to int8 and expect roughly real time or better for small, and several times slower than real time for large-v3 on a 4-core box; the 2 GB RAM floor is for the small models, and large ones want 6 GB or more. On an NVIDIA GPU with float16, the large models chew through an hour of audio in a few minutes. The one install failure that accounts for most of the issue tracker is a cuDNN mismatch: recent CTranslate2 wheels expect the CUDA 12 and cuDNN 9 generation, and a host with an older cuDNN produces a cryptic library-loading error rather than a clear message. Use the wrapper's official Docker image, which pins the matching libraries, before you try to align them by hand. The VRAM maths post covers what else fits alongside on a shared card.
If you do write the code
The library API is small enough to fit here, and the two flags shown are the ones that change results most:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3-turbo", device="cuda", compute_type="float16")
segments, info = model.transcribe(
"meeting.mp3",
vad_filter=True, # skip silence with Silero VAD
word_timestamps=True,
)
print(info.language, info.language_probability)
for s in segments:
print(f"[{s.start:7.2f}] {s.text}")
segments is a generator, so nothing is transcribed until you iterate; people who print segments and see a generator object have not hit a bug. vad_filter is the single biggest quality win on real recordings, because Whisper hallucinates text in long silences and the VAD removes the silences before the model sees them. Word timestamps cost a little speed and make subtitle files and search indexes possible. Speaker diarisation is not included; WhisperX layers it on top of the same engine if you need "who said what".
What I'd do
Speaches on the GPU box if you have one, with large-v3-turbo as the default model and a named volume for the model cache; wyoming-faster-whisper with small on the Home Assistant host for voice. Point every app that can speak the OpenAI audio API at Speaches so there is one transcription service instead of three, and keep the raw library for the one script that needs word timestamps. Nothing here leaves your network, which was the reason to bother in the first place.
Compare faster-whisper
3 head-to-head comparisons.
Similar self-hosted ai apps
OpenClaw
Self-Hosted AIThe AI that actually does things
Hermes Agent
Self-Hosted AIThe AI agent that grows with you
OpenCode
Self-Hosted AIThe open source AI coding agent
Replaces Claude Code, Cursor
Hugging Face Transformers
Self-Hosted AIState-of-the-art machine learning model library
Replaces OpenAI API
Dify
Self-Hosted AIOpen-source platform for building production LLM apps
Replaces OpenAI Assistants, Vertex AI Agent Builder
Langflow
Self-Hosted AIVisual framework for building AI agents and RAG pipelines
Replaces Vertex AI Agent Builder