# Feature catalog — openai/whisper

> Canonical page: https://codevetter.com/unpack/whisper/feature-catalog

# Feature catalog — openai/whisper

Scanned commit 86098128c0b4f24f0e2aa2994de830614b474227 (2026-08-31). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing surface is (a) the `whisper` CLI, (b) the Python API (load_model, transcribe, decode, detect_language), and (c) six output formats. Core capabilities: multilingual transcription across 99 languages, X→English translation, automatic language detection, word-level timestamps via attention-based DTW, clip selection, prompt conditioning, and two search strategies (greedy/best-of-N vs beam search). Auxiliary features include text normalizers for evaluation and a hallucination-silence skip heuristic.
- The CLI accepts one or more audio paths plus ~30 flags including --model (default `turbo`), --task, --language, --output_dir/-o, --output_format/-f (txt|vtt|srt|tsv|json|jsonl|all), --verbose, --fp16, and --threads. — [whisper/transcribe.py#L528-566](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L528-L566)
- Python API: `whisper.load_model(name)` returns a Whisper on cuda-if-available; `model.transcribe(path)` returns {text, segments, language}; lower-level `whisper.decode(model, mel, options)` and `whisper.detect_language(model, mel)` are exported. — [whisper/__init__.py#L103-161](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/__init__.py#L103-L161) [whisper/__init__.py#L11-14](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/__init__.py#L11-L14) [README.md](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/README.md)
- Thirteen model names are available — tiny/base/small/medium each with a `.en` English-only variant, large-v1/v2/v3, `large` (alias of large-v3), and large-v3-turbo/`turbo` — all mapped to CDN URLs in _MODELS. — [whisper/__init__.py#L17-32](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/__init__.py#L17-L32) [README.md](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/README.md)
- Tasks: `transcribe` (same-language ASR) and `translate` (X→English) are selected via --task and encoded as <|transcribe|>/<|translate|> special tokens in the SOT sequence; `lang_id` is a third internal task that short-circuits after language detection. — [whisper/transcribe.py#L537](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L537) [whisper/tokenizer.py#L155-159](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/tokenizer.py#L155-L159) [whisper/decoding.py#L723-731](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/decoding.py#L723-L731)
- Automatic language detection: when --language is omitted on a multilingual model, transcribe() runs model.detect_language() on the first 30 s mel segment and picks argmax over per-language probabilities. — [whisper/transcribe.py#L143-157](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L143-L157) [whisper/decoding.py#L18-77](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/decoding.py#L18-L77)
- Six output writers exist — WriteTXT, WriteVTT, WriteSRT, WriteTSV, WriteJSON, WriteJSONL — selected by name through the get_writer() registry; `all` instantiates every writer. — [whisper/utils.py#L109-329](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/utils.py#L109-L329)
- Word-level timestamps (--word_timestamps) align tokens to audio via cross-attention weights + dynamic time warping; supporting flags --highlight_words (underline in srt/vtt), --max_line_width, --max_line_count, --max_words_per_line control subtitle reflow in SubtitlesWriter.iterate_result. — [whisper/transcribe.py#L557-563](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L557-L563) [whisper/timing.py#L163-242](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/timing.py#L163-L242) [whisper/utils.py#L119-235](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/utils.py#L119-L235)
- Search strategies: temperature==0 uses BeamSearchDecoder (--beam_size, --patience, --length_penalty); temperature>0 uses GreedyDecoder with sampling and --best_of candidates; MaximumLikelihoodRanker picks the final hypothesis. — [whisper/decoding.py#L272-404](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/decoding.py#L272-L404) [whisper/decoding.py#L546-551](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/decoding.py#L546-L551) [whisper/transcribe.py#L540-544](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L540-L544)
- Fallback ladder: transcribe() accepts a temperature tuple (CLI builds it via --temperature_increment_on_fallback) and retries each 30 s window at higher temperatures when compression_ratio_threshold or logprob_threshold fails; no_speech_threshold can instead mark the window silent. — [whisper/transcribe.py#L184-224](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L184-L224) [whisper/transcribe.py#L584-588](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L584-L588)
- --clip_timestamps accepts comma-separated start,end pairs (seconds) restricting transcription to those ranges; --hallucination_silence_threshold skips long silences around anomalous word segments when word_timestamps is on. — [whisper/transcribe.py#L565-566](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L565-L566) [whisper/transcribe.py#L168-177](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L168-L177) [whisper/transcribe.py#L418-471](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L418-L471)
- Prompt conditioning: --initial_prompt seeds the first window, --carry_initial_prompt prepends it to every window, and --condition_on_previous_text feeds prior output tokens as prompt for the next window. — [whisper/transcribe.py#L547-550](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L547-L550) [whisper/transcribe.py#L238-244](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L238-L244) [whisper/transcribe.py#L288-293](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/transcribe.py#L288-L293)
- Language support covers 99 languages enumerated in LANGUAGES (tokenized as <|en|>…<|yue|> specials) plus alias resolution in TO_LANGUAGE_CODE (e.g. burmese→my, mandarin→zh). — [whisper/tokenizer.py#L10-128](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/tokenizer.py#L10-L128) [whisper/tokenizer.py#L340-350](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/tokenizer.py#L340-L350)
- Evaluation normalizers: BasicTextNormalizer (lowercase, strip bracketed content, NFKD symbol/diacritic removal) and EnglishTextNormalizer (contractions, number words→digits via EnglishNumberNormalizer, UK→US spelling via EnglishSpellingNormalizer) for WER scoring. — [whisper/normalizers/basic.py#L60-80](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/normalizers/basic.py#L60-L80) [whisper/normalizers/english.py#L12-21](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/normalizers/english.py#L12-L21) [whisper/normalizers/english.py#L467-552](https://github.com/openai/whisper/blob/86098128c0b4f24f0e2aa2994de830614b474227/whisper/normalizers/english.py#L467-L552)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
