Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing a command to run OpenAI's local Whisper speech-to-text CLI (transcribe/translate audio, pick a model, choose an output format or folder): emit the exact `whisper` flags — snake_case long options, real local model names, --output_format/--task/--language — which cheaper models hyphenate or hallucinate by default.
.claude/skills/openai-whisper/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 0% | 1 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +17% | +215% | 0% | 23 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-07 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✓→✓ | = Same ✓ | — | — |
Enforces the real, current command-line interface of OpenAI's local Whisper tool (the whisper binary from the openai-whisper package). Apply whenever the task is to write a shell command that transcribes or translates an audio file with Whisper on the user's own machine — choosing a model, an output format, an output folder, a language, timestamps, or precision. The base model knows Whisper exists but reproduces the flags in wrong forms; this pins the exact tokens the CLI accepts.
whisper <audio> [<audio> ...] [options]. Theaudio file paths are POSITIONAL arguments, not a --file/--input flag. Pass several files to one invocation to batch them. This is the local CLI — not the hosted OpenAI transcription API and not a Python snippet, unless the user asks for code.
underscores and rejects the hyphenated form with "unrecognized arguments". Every multi-word flag: --output_format, --output_dir, --model_dir, --word_timestamps, --initial_prompt, --max_line_width, --max_line_count, --max_words_per_line, --highlight_words, --condition_on_previous_text, --suppress_tokens, --best_of, --beam_size, --clip_timestamps, --length_penalty, --logprob_threshold, --no_speech_threshold. Do NOT write --output-format, --output-dir, --word-timestamps, etc.
--model takes a LOCAL model name. The valid names are tiny, base, small, medium,large (and large-v1/large-v2/large-v3), and turbo, plus the English-only variants tiny.en, base.en, small.en, medium.en. The default is turbo. Do NOT use the hosted API model name whisper-1, the HuggingFace id openai/whisper-*, or a whisper.cpp ggml-*.bin filename — those are different products. Smaller = faster; large/large-v3 = most accurate.
.en model. For material that is entirely English, a .en variant(base.en, small.en, …) is faster and slightly more accurate than the multilingual model of the same size.
--output_format (alias -f). The value is exactly one oftxt, vtt, srt, tsv, json, all; the default is all. Do NOT invent --format, --srt, --json, --subtitle, or --output-format. Meanings: txt plain text, srt SubRip subtitles, vtt WebVTT captions, tsv tab-separated start/end/text columns, json structured with timings, all writes every type.
--output_dir (alias -o), default .. Not --out, --output, --dir.--task translate. --task is transcribe (default) or translate, andtranslate ALWAYS produces English (Whisper only does X→English). Do NOT write --translate, --to en, --target-language, or --english.
--language. The value is the language NAME (Japanese, Spanish) or its code(ja, es). Setting it skips auto-detection. Not --lang, --source-language, --locale.
True/False value. They are parsed with str2bool, so youMUST supply the value: --word_timestamps True, --fp16 False, --verbose False, --highlight_words True, --condition_on_previous_text False. Do NOT use a bare switch (--word_timestamps) or a --no-... negation (--no-fp16).
--word_timestamps True emits per-word timing.Line length in the SRT/VTT is then capped with --max_line_width N and --max_line_count N; --highlight_words True underlines each word as spoken (it depends on word timestamps).
--initial_prompt "...". Feed known names/jargon spellings as its stringvalue to steer transcription. Not --prompt, --vocab, --hint.
--device cuda or --device cpu; force full precision on CPU with--fp16 False. Silence per-segment console output with --verbose False.
~/.cache/whisper on first run; relocate them with--model_dir PATH. Not --cache-dir, --download-dir.
BEFORE = the base model's wrong default → AFTER = the conforming Whisper CLI form.
Subtitles.
bash# BEFORE whisper interview.mp3 --format srt --output-dir ./out # AFTER whisper interview.mp3 --output_format srt --output_dir ./out
Translate to English.
bash# BEFORE whisper japanese_lecture.wav --translate --to en # AFTER whisper japanese_lecture.wav --language Japanese --task translate
Model name.
bash# BEFORE whisper podcast.m4a --model whisper-1 # AFTER whisper podcast.m4a --model medium # local names: tiny/base/small/medium/large/turbo (+ .en)
Word timestamps + boolean value.
bash# BEFORE whisper seminar.wav --word-timestamps # AFTER whisper seminar.wav --word_timestamps True
Full precision on CPU.
bash# BEFORE whisper clip.wav --device cpu --no-fp16 # AFTER whisper clip.wav --device cpu --fp16 False
Relocate the model cache.
bash# BEFORE whisper notes.ogg --download-dir /data/models # AFTER whisper notes.ogg --model_dir /data/models # default cache is ~/.cache/whisper
translate only goes to English. There is no target-language option; to get English from anylanguage, use --task translate. For a same-language transcript use --task transcribe (default).
.en models exist only up to medium. There is no large.en; for English at the largestsize use the plain multilingual large/large-v3 or turbo.
--highlight_words True and line caps require --word_timestamps True. Word-level features areno-ops without it.
--max_line_width/--max_line_count shape subtitlefiles, not the txt/json/tsv outputs.
--output_format all is the default. Only narrow it when the user wants a single type.whisper a.wav b.wav c.wav ... processes each.--output-format, --output-dir, --word-timestamps). ALWAYS useunderscores (--output_format, --output_dir, --word_timestamps).
--model whisper-1 or openai/whisper-*. ALWAYS use a local name(tiny/base/small/medium/large/turbo, or an .en variant).
--format, --srt, --json. ALWAYS use --output_format <txt|vtt|srt|tsv|json|all>.--translate or --to en. ALWAYS use --task translate (output is English).--lang. ALWAYS use --language <name-or-code>.--no-.... ALWAYS give the explicit value (--fp16 False,--word_timestamps True).
--out/--dir for the folder. ALWAYS use --output_dir (or -o).whisper-1 for the local CLI.--format/--srt/--subtitle instead of --output_format srt.--translate/--to en/--target-language instead of --task translate.--lang instead of --language.--no-fp16 instead of the True/False value form.--out/--output for the destination folder instead of --output_dir.translate can target a non-English language.whisper <audio> ... with the file as a positional argument (local CLI, not the API).--output_format, --output_dir, --word_timestamps).--model = a local name (tiny/base/small/medium/large/turbo, .en for English).--output_format value ∈ {txt, vtt, srt, tsv, json, all}; --output_dir for the folder.--task translate for English output; --language <name-or-code> to set the language.--fp16 False, --word_timestamps True).--initial_prompt "..." to bias vocabulary; --model_dir to relocate the cache.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +17 percentage points is the difference between those two pass rates over the 23 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/10/2026 | +4% |
Other measured skills in the registry, with their headline benchmark lift.