FA

faster-whisper

Reimplementation of Whisper for fast local transcription

Self-Hosted AI ★ 25.5k stars Medium setup MIT

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

WrapperTalks toBest for
wyoming-faster-whisperHome Assistant Assist over the Wyoming protocolVoice commands, short clips, CPU boxes
SpeachesOpenAI-compatible /v1/audio/transcriptionsOpen WebUI, any app that already speaks the OpenAI API
whisper-asr-webservicePlain HTTP upload, swappable enginesBatch jobs, scripts, subtitle pipelines
The library directlyYour Python codeCustom 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