★ FREE · POST-MORTEM TOOL · STANDS ALONE

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.

+1,400
ADS / USED TO TRAIN
~30s
PER VIDEO · CLAUDE 4
0.5s
FRAME RESOLUTION
$0
TO YOU · FOREVER
// 01 · WHAT IT IS

A diagnostic for one video at a time.

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.

// SPEC SHEET

  • FORMATSKILL FOLDER · 4 FILES
  • SIZE8.6 KB + ASSETS
  • RUNTIMECLAUDE CODE
  • MODELSGPT-4V · WHISPER · CLAUDE 4
  • INPUTVIDEO + METRICS CSV
  • OUTPUT1 MARKDOWN REPORT
  • LICENSEMIT · FORK FREELY
  • PRICE$0
// 02 · WHAT IT RETURNS

A loser.
And a winner.

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.

run · DTC · creative_v3.mp4UNDERPERFORMED
$ 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
run · B2B · winner_v1.mp4CRUSHED
$ 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
RED ▾ = ATTENTION LOST · GREEN ▴ = CLICKS GAINED · STARRED ITEMS ARE HIGHEST-IMPACT · CONFIDENCE BELOW EVERY VERDICT
// 03 · INSIDE THE TOOL

No black box.
Four small files.

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.

// WHY SHIP THE SOURCE

Read it before you run it.

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.

~/.claude/skills/autopsy/
$ 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
// 04 · INSTALL IN 90 SECONDS

Three commands.
One dependency.

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.

01

Install the deps

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
02

Drop the folder

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\
03

Diagnose

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
★ FREE

Drop your email.
Get the tool.

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.

NO LIST · NO DRIP · UNSUBSCRIBE = DELETE THE EMAIL

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

// WHAT YOU GET

  • autopsy.zip — the four-file skill folder, MIT licensed.
  • walkthrough.loom — 3 min, real run on a real ad, narrated.
  • benchmarks.json — category baselines for hook rate / CTR (Meta).
  • patterns.md — the ten dropoff causes we see most often.
// 06 · QUESTIONS

Six fair questions.

What metrics format does it accept?+
Out of the box: a CSV with one row per second of video, columns for retention_pct and ctr_pct. Optional columns for spend and impressions if you want them in the run summary. Meta Ads Manager exports map directly; we ship a 10-line converter for TikTok's export format too. If your dashboard exports anything that looks like per-second data, we can probably read it — open diagnose.py and adjust the parser.
Does it work without per-second metrics?+
It works, but it loses half its value. Without retention curve + CTR timeline, AUTOPSY can still describe what happens in the video (cuts, faces, audio events) and flag patterns we know correlate with drops in our benchmarks file. But the killer move — tying a specific drop to a specific frame — needs the timeline. If you don't have per-second exports, ask your media buyer for a custom report; on Meta it's a built-in breakdown.
Can I run it on competitor ads I don't have metrics for?+
Yes — pass --no-metrics and it switches to “structural autopsy” mode. You get the visual + audio breakdown, hook-rate prediction from our benchmark file, and pattern-matching against known winners and losers from the same category. Less precise than a metrics-backed run, but useful for ripping apart a competitor's winning ad before you brief your own.
Won't the model just hallucinate findings?+
The output is constrained two ways. One: every finding must cite a specific timestamp and a specific visual or audio event detected by the deterministic pipeline (ffmpeg + Whisper) — the model can't claim a drop at 7.4s if the timeline data doesn't show one. Two: every finding has a confidence score; anything below 0.6 is dropped silently, and the file caps the report at 8 findings to prevent noise-padding. You will still occasionally see a soft-call (“ambiguous · audio change OR scene change”) — that's the file behaving as designed, not hallucinating.
What if the diagnosis disagrees with my gut?+
Read the confidence score and the source event. A 0.91 confidence finding tied to a visible audio dropout at 11.5s is harder to argue with than gut. A 0.62 finding tagged “ambiguous” deserves your gut's vote — the file is telling you it's a coin flip. The point of the tool isn't to be right; it's to give you a per-second model of the video that's specific enough to argue with. Most “the hook isn't strong enough” debates end the moment you can point at second 3.2.
How is this different from HOOK-1 or the rest of the pipeline?+
Different timeline. HOOK-1 and the rest of the pipeline are forward-looking — they generate what to make next. AUTOPSY is backward-looking — it explains what just happened. Use HOOK-1 to brief the next concept. Use AUTOPSY to learn from the last one. They don't depend on each other; both stand alone, both are free.
// 07 · WHERE THIS FITS

Two free tools.
One full pipeline.

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.

// FREE · FORWARD-LOOKING
Hook-1

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 ▶
$0 · MIT · 2.4 KB
★ YOU ARE HERE
// FREE · BACKWARD-LOOKING
Autopsy

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 ▶
$0 · MIT · 8.6 KB
// PAID · END-TO-END
The Pipeline

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 ▶
FROM $12K / MO

Diagnose the last one.
Brief the next one.

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.

SEE THE FULL PIPELINE ▶