Your ad underperformed. You already know it. The dashboard tells you that it dropped at 3.2 seconds — it never tells you why. AUTOPSY does.
AUTOPSY is not a creative tool. It doesn't write hooks, generate visuals, or pitch the next concept. It does one job: it stares at a video and its metrics until it can tell you, second-by-second, where attention broke, where clicks happened, and what frame or audio event caused each.
What it does, in one sentence: ingests a video file and its per-second performance export, then overlays the retention curve and CTR timeline against the actual visual + audio events on the timeline — so every drop and every click gets a cause attached to it.
Under the hood, it extracts keyframes every half-second, transcribes the voiceover with timestamps, and detects visual events (cuts, faces, on-screen text, motion direction) and audio events (BPM shifts, silence, voice changes). Then for every retention drop greater than 5%, it finds the visual or audio event happening at that moment and ranks it. Same for every CTR spike.
What comes out is a ranked report, max 8 findings, with confidence scores. No “your hook needs work” platitudes — actual timestamps tied to actual frames. 3.2s · −41% retention · cut from face POV to product · fix: keep face in frame through second 4.
Same skill, two videos. The first underperformed against its category — AUTOPSY tells you exactly when it broke. The second crushed — AUTOPSY tells you exactly what made it work so you can clone the format. Both reports are real shape and length; numbers are illustrative.
$ claude run autopsy \ --video creative_v3.mp4 \ --metrics meta_jan.csv → ingested 28.4s · 1,180 frames → 14 audio events · 31 visual cuts → 4 findings · ranked by impact ══════════════════════════════ RUN SUMMARY ══════════════════════════════ hook rate 24% [cat. avg 32%] avg watch 8.1s ctr 1.4% spend $487 results 12 ══════════════════════════════ DROP-OFFS ▾ ══════════════════════════════ ★ 3.2s · −41% retention visual: face POV → product shot audio: voice on, no SFX bridge ↳ keep face in frame thru sec 4 ★ 11.5s · −18% retention visual: text overlay 24pt on 1080 audio: music swells over voice ↳ text 48pt+, duck music under VO 17.8s · −9% retention visual: scene 6 → 7, hard cut audio: no bridge between scenes ↳ low priority, fix on reshoot ══════════════════════════════ CTR SPIKES ▴ ══════════════════════════════ ★ 21.8s · +280% ctr · PEAK trigger: price reveal “$49” context: static frame, vo silent ↳ keep this as-is — it's working ══════════════════════════════ VERDICT ══════════════════════════════ hook is broken · close is strong re-shoot first 4s · keep 21s on ─ confidence: 0.84
$ claude run autopsy \ --video winner_v1.mp4 \ --metrics meta_feb.csv → ingested 18.2s · 750 frames → 8 audio events · 19 visual cuts → 5 findings · ranked by impact ══════════════════════════════ RUN SUMMARY ══════════════════════════════ hook rate 47% [cat. avg 32%] avg watch 13.8s ctr 3.6% spend $612 results 58 ══════════════════════════════ WHAT'S WORKING ▴ ══════════════════════════════ ★ 0.0–2.1s · 92% hold visual: face entry at 0.4s audio: vo at 0.0 — no cold open ↳ replicate: face in frame-one ★ 8.5s · +340% ctr · MAIN trigger: product + price overlay context: face stays in 30% frame ↳ never lose face during demo 12.0s · 85% sustained visual: text card + motion bg audio: rhythm shift to button SFX ↳ pattern: audio shift = spike ══════════════════════════════ WATCH-OUTS ⚠ ══════════════════════════════ 14.8s · −12% small dip visual: text “30-day guarantee” audio: music continues, no SFX ↳ try: brief music pause on guar. ══════════════════════════════ VERDICT ══════════════════════════════ strong end-to-end · ship more like this clone the format · swap product + price ─ confidence: 0.91
AUTOPSY ships as a folder, not a single skill.md, because video work needs helpers — frame extraction, transcription, the analysis loop. Each file is short, plain Python or Markdown, no hidden dependencies beyond ffmpeg and your Anthropic key.
The four files do four jobs. extract_frames.py is a 20-line ffmpeg wrapper. transcribe.py calls Whisper. diagnose.py is the actual analysis loop — that's the file worth reading. skill.md is the contract.
If you don't like our drop threshold (5% by default — change it). If you want to add a third axis beyond retention and CTR — completion rate, replay rate, cost per action — the loop is a hundred lines, mostly comments.
No telemetry. No call-home. Nothing imported except the model client and ffmpeg. The version on the right is the tree you'll receive.
$ tree ~/.claude/skills/autopsy/ autopsy/ ├── skill.md ← entry point ├── extract_frames.py ← ffmpeg, 20 lines ├── transcribe.py ← whisper wrapper └── diagnose.py ← the loop ───────────────────────────── $ cat skill.md ───────────────────────────── --- name: autopsy description: video ad post-mortem version: 1.2.0 license: MIT --- ## Input (required) · video .mp4/.mov · ≤120s · metrics .csv · per-sec retention + ctr ## Input (optional) · benchmark top-performer for compare · notes your hypothesis ## Process 1. extract keyframes @ 0.5s 2. transcribe vo + timestamps 3. detect visual events 4. detect audio events 5. overlay retention + ctr 6. for each drop >5%, find cause 7. for each spike, find trigger 8. rank by impact · max 8 ## Constraints · never invent metrics not in source · flag ambiguous drops, don't guess · min confidence threshold: 0.6 · max 8 findings (signal > noise) $ claude run autopsy --video ad.mp4 \ --metrics export.csv
AUTOPSY needs ffmpeg (for frame extraction) on top of Claude Code. If you have ffmpeg already, skip step zero. Everything else is drop-the-folder, point-at-your-files, run.
Claude Code (the runtime), ffmpeg (frame extraction), and the Whisper Python package. One-liner per platform. Skip what's already on your machine.
$npm i -g @anthropic-ai/claude-code $brew install ffmpeg $pip install openai-whisper// linux: apt install ffmpeg · windows: choco install ffmpeg
Save the zip we emailed you, unzip it, move the whole autopsy/ folder into your local skills directory. Claude Code auto-discovers it on next run.
$unzip ~/Downloads/autopsy.zip $mv autopsy/ ~/.claude/skills/// Windows: %USERPROFILE%\.claude\skills\
Point it at a video file and the matching per-second metrics export from Meta. About 30 seconds later, a markdown report lands in your CWD — open it in any editor.
$claude run autopsy \ --video ./ad.mp4 \ --metrics ./meta_export.csv// → autopsy_ad_2026-05-31.md
One email arrives within 60 seconds. A zip with the four files, plus a 3-minute Loom walking through a real run on a real ad and explaining how to read the report. That's the whole transaction.
AUTOPSY is the second standalone skill we ship for free. HOOK-1 is the first. They solve different problems on different timelines — and neither requires the other. If you want the bigger system that connects them (briefing → scripting → shooting → shipping → measuring), that's the paid pipeline.
One line of brand context → 12 ranked opening hooks across 4 angles, top three starred. Use it to brief the next concept. Module 03 of the pipeline, shipped for free.
GET HOOK-1 ▶Video + metrics → ranked diagnostic report. Every retention drop and CTR spike tied to a specific frame and audio event. Standalone — not a pipeline module.
GET AUTOPSY ▶Six modules in sequence: tagging → brief tree → hooks → copy → image prompts → delivery. Hire us to run it weekly, or buy the install. Same engine, different operator.
SEE BOTH PATHS ▶AUTOPSY tells you why the ad you shipped didn't work. HOOK-1 helps you write the next one better. Use them in that order — Monday autopsy, Tuesday brief — and you've got the smallest possible creative-feedback loop without buying a system.