Audio
WhisperX vs faster-whisper vs a hosted speech API
WhisperX, faster-whisper, and a hosted speech-to-text API all turn audio into text. faster-whisper is a CTranslate2 runtime for Whisper models. WhisperX adds alignment and speaker diarization on top of that family. A hosted API (for example OpenAI transcriptions) runs the model in someone else's account. Pick from timestamps, speakers, and where the file may go.
Updated · Part of What is Whisper?
Three ways to transcribe
The model family is Whisper. The product differences are runtime, alignment, diarization, and whether bytes leave the machine.
faster-whisper
faster-whisper (SYSTRAN) reimplements OpenAI Whisper on CTranslate2. You load a Whisper model size and transcribe locally, typically faster than the original OpenAI Whisper Python implementation, with the same model names. It does not, by itself, assign speakers. With word_timestamps=True it also returns word times. Repo: https://github.com/SYSTRAN/faster-whisper
WhisperX
WhisperX (m-bain) is Whisper plus forced alignment, which adds word-level timestamps, and optional speaker diarization. Transcription, alignment, and diarization are separate steps: alignment runs with or without diarization. The default diarization pipeline on WhisperX 3.8+ is pyannote/speaker-diarization-community-1, which needs an accepted HF token. Repo: https://github.com/m-bain/whisperX
Hosted speech-to-text APIs
A hosted API uploads audio and returns text. OpenAI's transcriptions endpoint is one documented hosted path, with model whisper-1. Deepgram, AssemblyAI, Gladia, and others are also hosted STT products. This page does not rank them or quote prices. The shared trait: the file leaves your process, you do not manage CUDA, and word-level speakers depend on that vendor's API.
How to choose
Start from speakers, timestamps, and data-residency, not from a WER bake-off this page did not run.
- Pick faster-whisper when you want local Whisper text and speed, and you do not need speakers.
- Pick WhisperX when you need word timestamps and speaker labels on a machine you control.
- Pick a hosted API when you do not want to run models, or the vendor's SLA is the contract.
Last reviewed
Facts on this page were checked against vendor documentation on 2026-10-28. Product surfaces move; treat version names and APIs as directional and follow the official links in Related.
WhisperX vs faster-whisper vs a hosted API (last reviewed: Oct 2026)
| faster-whisper | WhisperX | Hosted API (e.g. OpenAI whisper-1) | |
|---|---|---|---|
| What it is | CTranslate2 runtime for Whisper models | Whisper plus alignment and optional diarization | HTTP transcription in a vendor account |
| Word timestamps | Yes, with word_timestamps=True | Yes, from forced alignment | Vendor-dependent; not the same as WhisperX word_segments |
| Speakers | No | Yes, with a pyannote diarization pipeline | Only if that vendor's API includes diarization |
| Where bytes go | Your process | Your process (plus HF for the diarizer weights) | The vendor |
| GPU | Optional; CTranslate2 CPU and GPU paths | Optional; CUDA defaults differ from CPU | None for you |
| Official source | https://github.com/SYSTRAN/faster-whisper | https://github.com/m-bain/whisperX | Vendor transcription docs; OpenAI documents model whisper-1 |
Where Pixeltable fits
Use Pixeltable when transcription is a computed column on an Audio (or extracted Video soundtrack) you store, so insert transcribes that file and unchanged rows stay cached. Local path: whisper.transcribe or whisperx.transcribe. Hosted path: openai.transcriptions(audio, model='whisper-1'). Pixeltable is not a speech model. Keep faster-whisper or WhisperX as the local engine; keep a hosted API when the file may leave the box. Cookbook: Transcribe speech and identify speakers with WhisperX. How-to: transcribe audio uploads and make them searchable.
import pixeltable as pxtfrom pixeltable.functions.video import extract_audiofrom pixeltable.functions.whisperx import transcribeTableModel = pxt.model_base()class Clips(TableModel, name='clips'):title: pxt.Stringvideo: pxt.Videoaudio = extract_audio(video, format='wav')transcript = transcribe(audio, model='tiny.en', language='en', diarize=True)
Questions
Is WhisperX the same as faster-whisper?
Do I need a Hugging Face token for WhisperX?
When should I use a hosted API instead?
Can I search the transcript after?
Next step
Install the Pixeltable skill, or sign up for Cloud and run the same file on a hosted database.