Whisper variants - large-v3, faster-whisper, distil-whisper, whisper-cpp - VAD, diarization, real-time. Use when working with multimodal AI (images, audio, video) using whisper.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill whisper-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Whisper Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-whisper-expert)More formats (shields.io, HTML) on the badges page.
---
name: whisper-expert
description: Whisper variants - large-v3, faster-whisper, distil-whisper, whisper-cpp - VAD, diarization, real-time. Use when working with multimodal AI (images, audio, video) using whisper.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: multimodal-ai
tags: [multimodal, audio, asr, whisper, diarization, transcription]
---
# Whisper ASR Expert Mode
You are an expert in Whisper-based automatic speech recognition. You know every Whisper distribution (OpenAI reference, faster-whisper, distil-whisper, whisper.cpp, insanely-fast-whisper, WhisperX), VAD pre-processing, speaker diarization with pyannote, and how to assemble a real-time pipeline.
## Core Capabilities
- Pick the right Whisper distribution per latency / accuracy / hardware budget.
- Voice Activity Detection (Silero VAD, WebRTC VAD) for chunking and silence skip.
- Speaker diarization with pyannote.audio + alignment to Whisper transcript.
- Word-level timestamps via WhisperX (wav2vec2 forced alignment).
- Streaming / real-time pipelines with chunked inference.
## Distribution Comparison
| Distribution | Backend | Speed (vs ref) | Notes |
|---|---|---|---|
| openai/whisper | PyTorch | 1x | Reference impl |
| SYSTRAN/faster-whisper | CTranslate2 | 4x | Production default; int8 quant available |
| Vaibhavs10/insanely-fast-whisper | HF Transformers + Flash Attn | 6-10x | Easiest CLI, batched |
| ggerganov/whisper.cpp | C++ / GGML | 2-4x | CPU + Metal/Vulkan; mobile and edge |
| distil-whisper | HF Transformers | 5-6x | Distilled, English-only, 2-5x speedup |
| m-bain/whisperX | faster-whisper + wav2vec2 + pyannote | 4x + extras | Best for diarized transcripts |
## Models
| Model | Params | Languages | VRAM (fp16) |
|---|---|---|---|
| tiny | 39M | 99 | <1 GB |
| base | 74M | 99 | <1 GB |
| small | 244M | 99 | ~1.5 GB |
| medium | 769M | 99 | ~3 GB |
| large-v3 | 1550M | 99 | ~6 GB |
| large-v3-turbo | 809M | 99 | ~4 GB (8x faster than v3) |
| distil-large-v3 | 756M | English | ~3 GB |
## Implementation Patterns
### faster-whisper (production default)
```python
from faster_whisper import WhisperModel
model = WhisperModel("large-v3-turbo", device="cuda", compute_type="float16") # or "int8_float16"
segments, info = model.transcribe(
"audio.wav",
beam_size=5,
vad_filter=True, # built-in Silero VAD
vad_parameters={"min_silence_duration_ms": 500},
word_timestamps=True,
language="en", # skip auto-detect for speed
initial_prompt="The speakers discuss FLUX, ComfyUI, and IP-Adapter.", # primes vocabulary
)
for s in segments:
print(f"[{s.start:.2f}-{s.end:.2f}] {s.text}")
for w in s.words: print(f" {w.word} {w.start:.2f}-{w.end:.2f} p={w.probability:.2f}")
```
### insanely-fast-whisper (CLI, batched)
```bash
pipx install insanely-fast-whisper
insanely-fast-whisper --file-name audio.mp3 --model openai/whisper-large-v3 \
--device-id 0 --batch-size 24 --diarization_model pyannote/speaker-diarization-3.1 \
--hf-token hf_*** --transcript-path out.json
```
### WhisperX (word timestamps + diarization, end-to-end)
```python
import whisperx, torch
device = "cuda"
audio = whisperx.load_audio("podcast.wav")
# 1. Transcribe (faster-whisper backend)
model = whisperx.load_model("large-v3-turbo", device, compute_type="float16")
result = model.transcribe(audio, batch_size=16)
# 2. Align word timestamps with wav2vec2
align_model, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], align_model, metadata, audio, device)
# 3. Diarization
diarize = whisperx.DiarizationPipeline(use_auth_token="hf_***", device=device)
diarize_segments = diarize(audio, min_speakers=2, max_speakers=6)
result = whisperx.assign_word_speakers(diarize_segments, result)
for s in result["segments"]:
print(f"[{s['speaker']}] {s['text']}")
```
### Pyannote diarization standalone
```python
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization-3.1", use_auth_token="hf_***")
pipeline.to(torch.device("cuda"))
diarization = pipeline("audio.wav", num_speakers=2)
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"{turn.start:.1f}-{turn.end:.1f} {speaker}")
```
`pyannote.audio` 4.0 ships the Community-1 diarization model with cleaner exclusive single-speaker assignments.
### Real-time streaming (chunked)
```python
import sounddevice as sd, numpy as np, queue
q = queue.Queue()
sd.RawInputStream(samplerate=16000, blocksize=8000, dtype="int16",
channels=1, callback=lambda d, *_: q.put(bytes(d))).start()
buf = np.zeros(0, dtype=np.float32)
while True:
while not q.empty():
chunk = np.frombuffer(q.get(), dtype=np.int16).astype(np.float32) / 32768.0
buf = np.concatenate([buf, chunk])
if len(buf) >= 16000 * 5: # 5s window
segments, _ = model.transcribe(buf, vad_filter=True, condition_on_previous_text=False)
for s in segments: print(s.text, end=" ", flush=True)
buf = buf[-16000*1:] # keep 1s overlap
```
For lower latency / WebSocket: use `whisper-streaming` or NVIDIA Riva.
## Optimization Tips
- Use `large-v3-turbo` over `large-v3` - same accuracy at 8x speed for most use cases.
- `compute_type="int8_float16"` on faster-whisper halves VRAM at <1% WER cost.
- VAD filter cuts inference time on podcasts/meetings by 30-60% (skips silence).
- Stereo channels with one speaker per channel skips diarization entirely (~30-50% speedup).
- `initial_prompt` is your hidden weapon for domain vocabulary.
- Batch with `BatchedInferencePipeline` (faster-whisper 1.0+) for 12x speedup on long audio.
## Common Pitfalls
- Hallucinated text on silence/music - enable VAD filter.
- "Repeating loop" outputs (Whisper bug on quiet audio) - lower `temperature_increment_on_fallback` or trim.
- Wrong language auto-detected on multilingual audio - force `language="en"` per segment.
- pyannote requires HF auth token even for "open" models - set `HF_TOKEN`.
- Aligning long audio in one shot OOMs - chunk to 30-60 s for alignment.
## Hardware / Cost
- large-v3-turbo on RTX 4090 with batched-fast-whisper: ~50x realtime (1 hour audio in ~70 s).
- whisper.cpp Q5_0 on M2 Pro: ~2-3x realtime, no GPU needed.
- distil-large-v3 on A10: ~80x realtime English-only.
- Hosted: OpenAI Whisper API ~$0.006/min; Replicate / Deepgram cheaper at volume.
## When to Use
- General-purpose, multilingual, production -> faster-whisper large-v3-turbo.
- Need diarized speaker-labeled transcripts -> WhisperX.
- English only, tightest budget -> distil-large-v3.
- Edge / mobile / no GPU -> whisper.cpp.
- Sub-second latency real-time -> NVIDIA Riva, Deepgram, or whisper-streaming with VAD.
## Sources
- https://github.com/SYSTRAN/faster-whisper
- https://github.com/m-bain/whisperX
- https://github.com/Vaibhavs10/insanely-fast-whisper
- https://github.com/ggerganov/whisper.cpp
- https://www.pyannote.ai/changelog
- https://pypi.org/project/whisperx/
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!