● recastr.io / benchmark field notes
How eight speech-to-text models — five vendors, two philosophies — get run through the same eight fixtures, scored on the same four axes, and averaged over ten full passes before a single chart gets drawn.
Every audio file in the manifest is sent to all eight providers, scored the same way, and the whole pass repeats ten times before anything is averaged into a chart.
aggregate_benchmark_runs.py averages matching
(provider, fixture) pairs across runs and hands the result to the plotting script.
Dedicated ASR models are purpose-built for transcription. General multimodal chat models are asked to transcribe via a prompt. The split matters most in what each side can actually output — not every model returns a word timestamp to hang a subtitle cue on.
Six fixtures are synthesized with exact-by-construction ground truth. Two are real archival recordings, chosen from different eras specifically to separate "real-world audio is hard" from "old audio is hard."
reference_words ground truth used
to score every model. The two real-world clips are never averaged together in the
per-model bar charts — spanning 77 years of recording technology, blending them would
hide exactly the variation the comparison exists to surface.
Provider speaker labels are arbitrary — xAI returns integers, prompted models return "Speaker 1" strings — and have no reason to line up with the reference A/B labels. The scorer brute-forces the label mapping that scores best, then reports that number.
jiwer) and timestamp drift alongside
diarization — align_words() matches text greedily in reference order, blind
to speaker; only the diarization step needs the extra permutation search, since it's the
one axis where the provider's labels don't share a vocabulary with the reference's.
Every number below is a mean across the 10 repeated runs described in chapter one — not a single noisy pass. Sorted by synthetic-audio WER, best first.
Lowest synthetic WER
5.1% · gpt-audio
Cheapest per minute
$0.0017grok-stt
Most consistent diarizer
Δ0.00azure, 1949 vs. 2026
Can produce a timed SRT
3of 8 models
| Model | Synthetic WER | 1949 Interview WER | 2026 Interview WER | Latency | $ / min |
|---|---|---|---|---|---|
| gpt-audio | 3.4s | $0.0214 | |||
| azure-fast-transcription | 3.3s | $0.0060 | |||
| gemini-3.7-flash | 11.6s | $0.0021 | |||
| gpt-4o-transcribe | 3.2s | $0.0035 | |||
| gpt-4o-mini-transcribe | 1.9s | $0.0018 | |||
| whisper-1 | 4.0s | $0.0060 | |||
| grok-stt | 0.9s | $0.0017 | |||
| gpt-4o-transcribe-diarize | 22.1s | $0.0192 |
| Model | Synthetic (2–3 speakers) | 1949 Interview | 2026 Interview |
|---|---|---|---|
| gpt-audio | |||
| azure-fast-transcription | |||
| gemini-3.7-flash | |||
| gpt-4o-transcribe | — no diarization | — | — |
| gpt-4o-mini-transcribe | — no diarization | — | — |
| whisper-1 | — no diarization | — | — |
| grok-stt | |||
| gpt-4o-transcribe-diarize |
grok-stt's 1949 bar is the one flagged red — a 22-point drop from its 2026
score, the widest swing of any model here, against azure-fast-transcription's
flat ~92–96% across all three fixture types. Three models never emit a speaker label at
all, regardless of audio type.
There's no single "best" model in this fleet — the winner changes with the use case. Eight categories, called strictly from the numbers above.
Cost
grok-stt
$0.0017/min — cheapest by a wide margin over the next-cheapest model.
Accuracy (WER, ignoring diarization)
gpt-audio
Lowest WER on every fixture group — 5.1% synthetic, 29.8% on the 1949 clip, 10.7% on the 2026 clip. Wins outright, not just on average.
SRT / timed captions
azure-fast-transcription
One of only 3 models with word-level timestamps at all, and the only one of those 3 with native diarization too — plus the flattest diarization accuracy across eras (92.3% on both real-world clips, no swing).
Noisy audio
gemini-3.7-flash
Tied for a perfect 0% WER on the white-noise clip with 4 other models — cheapest of that five-way tie, so it wins on tiebreak.
Multi-speaker diarization (clean audio)
gpt-audio tied with gemini-3.7-flash
Both hit 100% diarization accuracy on the clean synthetic 2–3 speaker dialogues.
Proper nouns & jargon
gemini-3.7-flash tied with gpt-4o-transcribe
Lowest keyterm miss rate (10.8%) across the numbers/names and technical-jargon fixtures.
Latency-sensitive / real-time
grok-stt
0.93s mean latency — 2× faster than the next-fastest model, ~24× faster than gpt-4o-transcribe-diarize.
Best value (accuracy per dollar)
gpt-4o-mini-transcribe
$0.0018/min — nearly as cheap as grok-stt, but with far better real-world WER (11.3% vs. grok's 23.3% on the 2026 clip).
Cheap and fast isn't the same as cheap and accurate. grok-stt wins Cost
and Latency here, but it also has the worst WER of any model on both real-world
clips (35.6% on the 1949 interview, 23.3% on the 2026 podcast) — the category it doesn't
win is the one most use cases actually care about most.