Skip to content
Agents tracked: 440 Downloads (7d): 202M down 19.5% GitHub stars: 10.4M Releases (7d): 607 Agent status: 1 with issuesSince last limit reset: Claude 28d · Codex 0d Updated Oct 21, 2026

Starter kit for a video and audio to text tool

A recipe for a tool that turns a recording into a transcript, SRT and VTT subtitles and, if you want, short notes, with the speech model on your own machine. For Claude Code, Cursor, Codex or Copilot, with exact versions, a plan with checks and the traps a test build ran into.

New to kits? Read how to use a kit.

How the kit fits together

Your agent reads the brief, builds with these parts and checks its own work before you ship. Click a part to see why it was picked.

File for your agent

AGENTS.md

The plan your agent follows, a step at a time, with a check that must pass before the next step. It also holds the stack with exact versions, the licenses and the known traps.

File for your agent

first-prompt.txt

The first message you paste into your agent. It points the agent at AGENTS.md and tells it to stop after step 1 and report.

File for your agent

.mcp.json

The MCP servers the brief lists, set up for Claude Code. The kit builder writes the same setup for Cursor, Codex or Copilot.

File for your agent

CREDITS.md

The license record of every third-party file. The brief tells the agent to add a row for every file it brings in.

You bring this

Your coding agent

The kit works with any of these. Pick yours in the kit builder and the setup files change to match.

Library knowledge

Context7

4.3.0MIT

Models often write openai-whisper code for faster-whisper; the two APIs differ.

By Upstash · In 1,266 of 29,413 sampled repos · v4.3.0 on npm · Agent can use it through MCP

Tool and asset data

AgentGid

If the agent needs another speech API or model, it asks AgentGid for one that fits your constraints.

By AgentGid · Agent can use it through MCP

Runtime

Python 3.12

official source

One Python version has to satisfy every package below.

Nothing to install

Speech recognition

Faster Whisper

1.2.1MIT

Turns speech into words with start and end times. Everything else in the kit is formatting around this step. Runs Whisper models on the CPU with int8, decodes audio and video itself, and returns word timestamps.

In 18 of 1,546 Python agent projects (1.2%) · #16 of 28 in model sdks · v1.2.1 (pypi registry) · MIT · Installs from a package registry

1 other candidate also fits, 2 ruled out.

When the agent is done

9 checks

  • python -m transcribe run media/test-en.mp4 writes out/test-en/ with transcript.txt, transcript.srt, transcript.vtt, transcript.md and words.json.
  • The test clips are made on the machine from a known text (macOS say, Linux espeak-ng) and wrapped into an .mp4 with a still picture, so the video path is tested and nobody else's recording is needed.
  • Word accuracy on the English test clip is at least 90% against the known text, measured by a word-level edit distance in the tests.
  • A strict test parser reads transcript.srt and transcript.vtt back: SRT cues are numbered and use a comma before the milliseconds, the VTT file starts with WEBVTT and uses a dot, cues are in order, none is longer than 7 seconds or 84 characters, and times never go backwards.
  • transcript.md has the file name, the detected language, the length and paragraphs that each start with a [mm:ss] mark.
  • A folder can be passed instead of a file: every audio and video file in it (not in subfolders) is done once, and a second run skips files whose results exist (--force redoes them). Two files with the same name and different extensions (talk.mp3, talk.wav) get separate folders (out/talk-mp3/, out/talk-wav/).
  • A long file shows progress as a percentage of its duration while it runs.
  • Unit tests cover the subtitle cue splitter, the timestamp formats and the paragraph builder, and pass with python -m pytest.
  • After the first run downloads the model, a second run works with the network off. If the model is already cached from earlier work, check the download with an empty cache (HF_HOME set to a new folder) or say that the first-run download was not seen.
After the agent

Left to you

  • Read one transcript of a real recording of yours before trusting the tool with important material: names, numbers and technical terms are where speech models slip.
Files for your agentAgent tools (MCP)CodeArt, sound and contentChecksOptional, off by default

What you get

The result

A Python tool: give it a video or audio file and it writes a plain transcript, .srt and .vtt subtitles, a Markdown transcript with timestamps and a JSON file with every word's time.

7 files
Ready for your agent
  • AGENTS.md: the plan, with a check after every step
  • first-prompt.txt, install.txt, .mcp.json
  • CREDITS.md, CLAUDE.md, kit.json
6 parts
Every part is free or has a free tier
  • Transcriber: MIT
  • Agent tools: MIT
0 of 0 asset sources allow commercial use with no credit needed.
9 / 9
Checks met in the last test build
  • Build 2, Oct 12, 2026
  • 5 things in the brief reported, 0 serious
  • Findings went back into recipe v0.3
The brief counts it as done when these 9 checks pass
  • python -m transcribe run media/test-en.mp4 writes out/test-en/ with transcript.txt, transcript.srt, transcript.vtt, transcript.md and words.json.
  • The test clips are made on the machine from a known text (macOS say, Linux espeak-ng) and wrapped into an .mp4 with a still picture, so the video path is tested and nobody else's recording is needed.
  • Word accuracy on the English test clip is at least 90% against the known text, measured by a word-level edit distance in the tests.
  • A strict test parser reads transcript.srt and transcript.vtt back: SRT cues are numbered and use a comma before the milliseconds, the VTT file starts with WEBVTT and uses a dot, cues are in order, none is longer than 7 seconds or 84 characters, and times never go backwards.
  • transcript.md has the file name, the detected language, the length and paragraphs that each start with a [mm:ss] mark.
  • A folder can be passed instead of a file: every audio and video file in it (not in subfolders) is done once, and a second run skips files whose results exist (--force redoes them). Two files with the same name and different extensions (talk.mp3, talk.wav) get separate folders (out/talk-mp3/, out/talk-wav/).
  • A long file shows progress as a percentage of its duration while it runs.
  • Unit tests cover the subtitle cue splitter, the timestamp formats and the paragraph builder, and pass with python -m pytest.
  • After the first run downloads the model, a second run works with the network off. If the model is already cached from earlier work, check the download with an empty cache (HF_HOME set to a new folder) or say that the first-run download was not seen.

Left to you, because no check can do it: Read one transcript of a real recording of yours before trusting the tool with important material: names, numbers and technical terms are where speech models slip.

The parts and why each was picked

Defaults for commercial use, free parts and Claude Code. Change them.

Transcriber

Runtime
Python 3.12 official source

One Python version has to satisfy every package below.

Nothing to install

Speech recognition

Turns speech into words with start and end times. Everything else in the kit is formatting around this step. Runs Whisper models on the CPU with int8, decodes audio and video itself, and returns word timestamps.

In 18 of 1,546 Python agent projects (1.2%) · #16 of 28 in model sdks · v1.2.1 (pypi registry) · MIT · Installs from a package registry

Also fits: Whisper. Ruled out: 2, see why.

Installed along with them: pytest 9.1.1, PyAV below 19.

For your agent

Library knowledge
Context7 4.3.0

Models often write openai-whisper code for faster-whisper; the two APIs differ.

By Upstash · In 1,266 of 29,413 sampled repos · v4.3.0 on npm · Agent can use it through MCP

Tool and asset data

If the agent needs another speech API or model, it asks AgentGid for one that fits your constraints.

By AgentGid · Agent can use it through MCP

The plan your agent follows

The agent works one step at a time and does not start a step until the previous one meets its "Done when" lines. The full instructions, with code, are in AGENTS.md.

  1. Scaffold · done when:
    • python -m transcribe --help lists the commands and python -m pytest runs.
    • The kit files listed under "Before you start" are still there.
  2. Test clips · done when:
    • av.open('media/test-en.mp4') shows one video and one audio stream, and its length matches the audio within a second.
  3. Speech recognition · done when:
    • The English test clip comes back with at least 90% word accuracy (a test computes it with a word-level edit distance after lower-casing and stripping punctuation).
    • The silent clip gives zero segments and no invented text. (Whisper still reports a language for it; with no segments, write the language as unknown.)
  4. Formats · done when:
    • Unit tests with fixed word timings check cue splitting, both timestamp formats (including times past one hour) and paragraph breaks.
    • A test writes every format for the English clip into a temporary folder and reads the subtitles back with a strict parser of its own (numbered SRT cues with commas; WEBVTT first line and dots), because FFmpeg's readers also accept an SRT with dots and a VTT without the header.
  5. Files and folders · done when:
    • Running run media/ twice transcribes each clip once.
  6. Verify · done when:
    • Every line under Definition of done is true, and anything that could not be verified is named in PROGRESS.md.

Known traps

What test builds and the official docs showed going wrong with these parts. Each one is in the brief, so the agent reads it before it gets there.

  • faster-whisper 1.2.1 accepts any PyAV from 11 up, but PyAV 19 (Sep 29, 2026) removed the metadata_errors argument it passes to av.open, so a fresh install fails at the first transcribe() with a TypeError. The fix is on faster-whisper's main branch but not released; the Stack pins PyAV below 19. PyAV changelog and faster-whisper source, checked Oct 12, 2026
  • WhisperModel.transcribe() returns a lazy generator: nothing runs until you loop over the segments, so timing or error handling around the call itself measures nothing. faster-whisper README
  • WhisperModel.transcribe() has the voice-activity filter off by default (vad_filter=False), while BatchedInferencePipeline.transcribe() has it on. Pass vad_filter=True yourself. faster-whisper 1.2.1 source
  • Without a language, Whisper detects it from the first 30 seconds only. A recording that opens with music, a jingle or a greeting in another language can be transcribed in the wrong language from start to end. faster-whisper 1.2.1 docstring
  • FFmpeg's subtitle readers are lenient: ffmpeg -i x.srt accepts dots instead of commas, and a .vtt file without the WEBVTT line opens too. A read-back with FFmpeg or PyAV does not prove the file is valid for players. W3C WebVTT, and measured with PyAV 18.1.0 (bundled FFmpeg), Oct 12, 2026
  • Models whose names end in .en know English only. With Russian or any other language they write English-sounding nonsense instead of failing. openai/whisper README
  • SRT and WebVTT look alike but differ: SRT numbers its cues and writes milliseconds after a comma; WebVTT needs the WEBVTT first line and a dot. Players reject the wrong separator silently or show nothing. W3C WebVTT

Checks on this kit

  • Note PyAV is pinned below 19: faster-whisper 1.2.1 passes an argument to av.open that PyAV 19 removed, and the fix is not released yet. Source
  • Note faster-whisper decodes audio and video with PyAV, which bundles FFmpeg's libraries: transcription needs no system FFmpeg. Source

What happened when an agent built from it

The recipe was given to a fresh coding agent in a clean sandbox, twice. The agent got only the kit files. It had to build the project and write down everything in the brief that was wrong, missing or unclear.

Build 1 · brief v0.1 · Oct 12, 2026

9 of 9
lines of the definition of done met
9
things in the brief reported as wrong, missing or unclear
1
serious: would have stopped the build on a stock Mac

The brief made test clips with the ffmpeg command, which a Mac without Homebrew does not have. The agent used PyAV, already in the stack, instead; version 0.2 makes that the documented way. The FFmpeg read-back also accepted subtitle files with the wrong time separator.

Build 2 · brief v0.2 · Oct 12, 2026

9 of 9
lines of the definition of done met
5
things in the brief reported as wrong, missing or unclear
0
serious: stopped the build or shipped a flaw

No retries; the test clips were made with PyAV on a Mac without FFmpeg. Fixes: no ffmpeg in the install list, a word-joining rule that skips Chinese, Japanese, Thai, Lao, Burmese and Cantonese, a mono test clip, file naming in folders, and how to see the first model download with a warm cache.

Result of the last build. A 77-word synthetic clip transcribed on an Apple M4 CPU with the small model at 100% word accuracy in the second build (94.7% in the first); a strict parser found no fault in the SRT and VTT files, 43 tests pass, and a run with the network blocked worked. Its findings went back into the recipe, which is now at v0.3. That version has not been built again as a whole.

Checked again on Oct 19, 2026. AgentGid checks every recipe each week, without a model: 2 pinned packages all still exist on their registries; the pip lines resolve together; 10 links in the brief: all open. npm lines are checked pin by pin, not installed.

Not checked by anyone yet

  • A real recording: the test clips are synthetic speech
  • Playback of the subtitles in VLC
  • Linux and Windows, and a GPU
  • The web page, the hosted engines, Russian clips and the notes step

The kit files

Put them in an empty project folder, open your coding agent there and paste the first prompt (Claude Code first asks you to approve the MCP servers in .mcp.json). These are the files for Claude Code with the default answers; the kit builder writes them for Cursor, Codex, Copilot or another agent, and for other choices. Full guide: how to use a kit.

FileWhat it isSize
AGENTS.mdThe brief: what to build, stack and versions, licenses, plan with checks, known traps224 lines
CREDITS.mdThe license record of every third-party file18 lines
first-prompt.txtYour first message to the agent8 lines
install.txtInstall commands with exact versions7 lines
CLAUDE.mdOne line that imports AGENTS.md for Claude Code1 lines
.mcp.jsonThe MCP servers the brief lists, for Claude Code15 lines
kit.jsonThe kit as data: parts, versions, checks146 lines

Download all (.zip)

first-prompt.txt the agent stops after each step and reports
Read AGENTS.md from top to bottom before you do anything else. The kit files it lists are already in this folder.

Then do step 1 of the plan and stop. Report back with:
1. the commands you ran,
2. what each "Done when" check showed (a screenshot or the output),
3. anything in AGENTS.md that turned out to be wrong, missing or out of date.

Do not start step 2 until I reply.
Or let it run the whole plan
Read AGENTS.md from top to bottom before you do anything else. The kit files it lists are already in this folder.

Then work through the plan in order. After each step, run its "Done when" checks yourself and write one line in PROGRESS.md: the step, what you checked, and the result.
You may install the packages and download the files that AGENTS.md lists without asking. Stop and ask me only for what its "Before you start" section says needs a person.
When a check fails, fix the cause and run it again. If it still fails after two real fixes, stop and tell me what you tried.
Keep a list in PROGRESS.md of anything in AGENTS.md that turned out to be wrong, missing or out of date.
When every line of the Definition of done is true, stop and show me how to run it.
install.txt
# system packages (use your OS package manager)
espeak-ng

uv venv --seed --python 3.12 .venv && source .venv/bin/activate   # uv fetches Python 3.12 if it is missing; --seed puts pip into the venv, so the pip line below installs there and not into the system Python
# without uv: python3.12 -m venv .venv && source .venv/bin/activate
python --version   # must print 3.12.x
pip install faster-whisper==1.2.1 pytest==9.1.1 "av<19"

Other versions of this kit

How you use it

Command line (this page) Web page

Speech recognition

A local model costs nothing per hour of audio and the recording never leaves your machine. A hosted API needs no download and suits small machines; it is paid by the hour of audio after a free allowance.

Local model (this page) Hosted API

Language of the recordings

English-only models are a little faster, but they cannot write any other language.

Detect it (this page) English Russian

Model size

Only for the local model. The small model downloads about 484 MB and runs on any laptop; large-v3-turbo downloads about 1.6 GB, is slower on a CPU and makes fewer mistakes.

Small (this page) Large v3 Turbo

Notes from the transcript

Notes need a language model, paid per token. Without them the tool is entirely free.

Transcript only (this page) Add notes

Other versions were not test-built as a whole: the kit says which parts differ from the tested one.

Ask for this kit from your agent

Agents connected to the AgentGid MCP server get the same kit without this page: list_recipes(), then plan_project({"recipe": "transcribe", "answers": {"agent": "cursor"}, "files": true}). Every brief also tells the agent to ask AgentGid before it adds a part that is not listed.

Recipe transcribe v0.3. Data snapshot Oct 12, 2026: versions, licenses and prices change, so check the linked pages before you ship.

Comments

  • Built something with this kit? Share what worked, what broke and what you changed.

Other kits