A local-first browser tool that captures audio from any video playing in a tab (Skool, YouTube, Loom, internal training) and turns it into structured markdown that an AI can actually understand. No API keys. Nothing leaves your machine. Record, transcribe, and hand the output straight to Claude.
I consume a lot of training videos: Skool courses, Loom walkthroughs, recorded webinars. The insight density is high, but videos are a terrible format for AI to work with. Pasting “here’s a YouTube link, summarize it” is unreliable. Paid transcription services cost money and ship my audio to someone else’s server. Raw transcript dumps are wall-of-text noise that tokenize badly.
I wanted: record the video locally, get back a markdown file that Claude can ingest cleanly as structured context, and never send the audio anywhere.
A one-page web app that runs on your laptop. Open it, click record, share the browser tab the video is playing in (with tab audio), hit play on the video, and when it’s done you get a markdown file structured for AI consumption, all local, no API keys, no cloud.
What the output file looks like:
All transcription happens locally via whisper-cpp running on CPU against the base.en quantized model. Nothing leaves the machine.
Red record button, live waveform, timer, “Also share tab audio” reminder in red when silent. Browser-based, no install step beyond npm start.
YAML frontmatter + auto-sectioned transcript + paragraph chunking. Ready to hand to Claude as context.
/output/<title>--<timestamp>/ with both the markdown and the raw transcript; old recordings are listable, viewable, downloadable, and deletable from the UI.getDisplayMedia. The browser requires you request video to get tab audio, so the app asks for { video: true, audio: true }, then discards the video tracks. Clever workaround for a real browser API constraint.title--2026-04-13T22-43-11-748Z prevents collision when multiple videos are transcribed in parallel.Stack: Node.js + Express (server), ffmpeg (audio conversion: webm → wav, 16kHz mono for Whisper), whisper-cpp (local CPU inference, base.en quantized model at /usr/local/share/whisper-cpp/models/ggml-base.en.bin), MediaRecorder API (browser capture), Web Audio API (live waveform visualization), vanilla JavaScript UI.
Dependencies: express, uuid. That’s it. Zero ML libraries: whisper-cpp is a shell binary, and the Node server just orchestrates the pipeline (ffmpeg → whisper-cli → markdown post-processor).
npm start, Express server on localhost./usr/local/bin/whisper-cli with the ggml-base.en.bin model at /usr/local/share/whisper-cpp/models/.getDisplayMedia does not support tab audio.base.en is English-only. For other languages, swap in the multilingual base model.“It’s a browser tool that records any video playing in a tab, transcribes it locally with Whisper, nothing leaves your machine, and gives you back a markdown file that’s structured for AI to read, not just humans. So instead of asking ChatGPT to summarize a YouTube link and hoping, you drop a clean, sectioned markdown file into Claude and get grounded answers about what was actually in the video.”