Five burn-in templates
whisper.cpp with word timings, rendered natively with CoreText — classic, boxed, bold, karaoke, minimal. Correct bidi, so Hebrew and Arabic render properly. SRT, VTT and TXT sidecars always.
Every verb is a hotkey, a CLI command, and a localhost REST call — against one daemon. Your agent starts the take; you stop it from the floating pill. Neither has to know the other exists.
Unnotarized open-source build — right-click → Open the first time. Requires macOS 15 or later.
An agent that can see your screen still can't show you one — GUI recorders expose no API. mac-rec inverts that: the interface is a thin shell over a documented local API, so both operators drive the same session.
Recording streams straight into ~2-second fragmented MP4 chunks on disk. Rewinding just deletes trailing fragments — no seeking, no re-encoding, no waiting. Resume opens a new run; stop concatenates whatever survived, losslessly.
Stop runs a real post pipeline: lossless concat, hardware HEVC, transcription, captions, optional AI narration — and keeps the untouched master beside it.
whisper.cpp with word timings, rendered natively with CoreText — classic, boxed, bold, karaoke, minimal. Correct bidi, so Hebrew and Arabic render properly. SRT, VTT and TXT sidecars always.
Replace recorded narration with an ElevenLabs voice. Each sentence is spoken separately, re-anchored to its original timestamp and speed-fit to its slot — then captions are rebuilt from where the audio actually landed.
Auto-gain rescues quiet webcam mics, denoise and speech-leveling clean the take, and a live level meter means you never discover the silence in post.
Pick a monitor, a single window by id or name, or drag a region. System audio and microphone are captured as separate tracks, so they can be mixed — or replaced — later.
VideoToolbox on Apple Silicon: a seven-second 1080p take compresses from 2.2 MB to 423 KB with no visible loss. The lossless master is always kept.
Displays stay awake while recording, a killed capture auto-pauses instead of zombie-recording, and any failed save is rebuildable from the fragments still on disk.
Drop the skill into Claude Code and "record a walkthrough of this bug" just works — the agent checks state, records, rewinds its own mistakes, and hands back a captioned MP4.
$ cp -r skills/mac-rec ~/.claude/skills/ # then, in any session: "record a demo of the checkout flow and caption it"
$ mac-rec status --json {"state":"idle"} $ mac-rec start --source window \ --query "Chrome" --json ... drives the UI, misspeaks ... $ mac-rec pause && mac-rec rewind 8 $ mac-rec resume $ mac-rec stop --captions bold --json {"final":"…/final.mp4","srt":"…"}
Localhost only. Every CLI verb maps to one call; every call returns JSON. Errors come back as {"error":"…"} with a real status code.
| Endpoint | Body | Does |
|---|---|---|
| GET /status | — | state, elapsed, source, mic level, last event |
| POST /start | {source, display, windowID, area, mic} | begin a session |
| POST /pause | — | finish the current run; enables rewind |
| POST /rewind | {seconds} | delete trailing fragments |
| POST /resume | — | open a new run |
| POST /mic | {muted} | mute the mic mid-take |
| POST /stop | {output, captions, voiceover, trim} | finalize and return the deliverable |
macOS 15 (Sequoia) or later. Universal — Apple silicon and Intel. ffmpeg does the finalize work (brew install ffmpeg); add whisper-cpp for captions.
1. Download the .dmg and drag Mac-Rec into Applications. 2. Right-click Mac-Rec → Open → Open. # once — the build is unnotarized, # so macOS quarantines the download 3. Grant Screen Recording on first record. One grant covers the app, the CLI, and your agent.
$ git clone https://github.com/\ joelburlin/mac-rec $ cd mac-rec $ ./setup-signing.sh # once $ ./make-app.sh # app + CLI $ open /Applications/Mac-Rec.app # signing locally means permissions # survive every rebuild