---
title: "WhisperX vs faster-whisper vs a hosted speech API"
description: "WhisperX vs faster-whisper vs a hosted speech API: alignment and speakers, a fast Whisper runtime, or an HTTP model. Last reviewed Oct 2026."
url: "https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api"
updated: "2026-10-28"
vertical: "Audio"
doc: "https://docs.pixeltable.com/howto/cookbooks/audio/whisperx-transcription"
---

# 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: 2026-10-28
Part of [What is Whisper?](https://www.pixeltable.com/learn/what-is-whisper).

## On this page

- [Three ways to transcribe](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#what-it-is)
- [faster-whisper](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#faster-whisper)
- [WhisperX](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#whisperx)
- [Hosted speech-to-text APIs](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#hosted)
- [How to choose](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#how-to-choose)
- [Last reviewed](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#review)
- [Comparison](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#comparison)
- [Where Pixeltable fits](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#where-pixeltable-fits)
- [Questions](https://www.pixeltable.com/learn/whisperx-vs-faster-whisper-vs-hosted-api#questions)

## Three ways to transcribe {#what-it-is}

The model family is Whisper. The product differences are runtime, alignment, diarization, and whether bytes leave the machine.

## faster-whisper {#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}

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 {#hosted}

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 {#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 {#review}

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) {#comparison}

|  | 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 {#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.

```python
import pixeltable as pxt
from pixeltable.functions.video import extract_audio
from pixeltable.functions.whisperx import transcribe

TableModel = pxt.model_base()

class Clips(TableModel, name='clips'):
    title: pxt.String
    video: pxt.Video
    audio = extract_audio(video, format='wav')
    transcript = transcribe(
        audio, model='tiny.en', language='en', diarize=True
    )
```

## Questions {#questions}

### Is WhisperX the same as faster-whisper? {#faq-1}

No. faster-whisper is a Whisper runtime. WhisperX uses that family and adds alignment and optional pyannote diarization. The whisperx.transcribe UDF documents both diarize=False and diarize=True.

### Do I need a Hugging Face token for WhisperX? {#faq-2}

Not for diarize=False. Yes for the default diarization pipeline on WhisperX 3.8+, after you accept the pyannote model terms. Pixeltable reads HF_TOKEN. Docs: the WhisperX cookbook in Related.

### When should I use a hosted API instead? {#faq-3}

When you do not want to install CUDA or Whisper weights, or the vendor's model is the contract. openai.transcriptions with model='whisper-1' is the documented hosted path. Other STT vendors can be a UDF you write.

### Can I search the transcript after? {#faq-4}

Yes, if you store segments as rows and declare an embedding index on the text. The WhisperX cookbook splits segments with list_iterator and indexes text. The audio how-to uses audio_splitter plus whisper.transcribe.

## Related

- [What is Whisper?](https://www.pixeltable.com/learn/what-is-whisper)
- [What is speech-to-text?](https://www.pixeltable.com/learn/what-is-speech-to-text)
- [How do I transcribe audio uploads and make them searchable?](https://www.pixeltable.com/learn/how-to/transcribe-audio-and-search-it)
- [WhisperX transcription cookbook](https://docs.pixeltable.com/howto/cookbooks/audio/whisperx-transcription)
- [Transcribe audio files with Whisper](https://docs.pixeltable.com/howto/cookbooks/audio/audio-transcribe)
- [WhisperX repository](https://github.com/m-bain/whisperX)
- [faster-whisper repository](https://github.com/SYSTRAN/faster-whisper)
