Back to skills
SKILL.md
Whisper Expert
ASecurityWhisper variants - large-v3, faster-whisper, distil-whisper, whisper-cpp - VAD, diarization, real-time. Use when working with multimodal AI (images, audio, video) using whisper.
- 8 stars
- 0 votes
- 0 copies
- 1 view
- Added September 8, 2026
Works with
Security analysis
100/100npx -y skills add anubhavg-icpl/vibe --skill whisper-expert --agent claude-codeAre you the author of Whisper Expert?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-whisper-expert)---
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/
Attribution
Comments
Loading comments…