shipped@di-atomic/video-analyst · v0.1.0 · beta

Your agent turns a hit video into a template.

Give it a YouTube link or a video file. It measures the timing, checks every cut, and hands back the section lengths, voice-over pace and opening rules your next video can follow. Every number says whether a script measured it, YouTube supplied it, or your agent judged it from a frame.

For founders and marketers who make video for a business, and who have copied a video's structure by eye and got the pacing wrong.

A dark chalkboard. A video screen with a gold play button, a thick arrow, then the same video drawn as a template: five timed bars with ruler ticks, the top bar gold.
Built by Di-Atomic Marketing & compliance agency Tested on videos with known cuts 7-language team Clients incl. ONYX Radiance, Pamit Group
12timed sections pulled from Linear's 4-minute product intro
12.4×longer shots in its demo than in its hook, so one average fits no part of it
195median words per minute across 14 measured videos. Most plans assume 150.
28,832image tokens for that full 4-minute run, cut checks included
Installopvs-skills install @di-atomic/video-analyst --to ./skills-cache

Use --to, not --runtime: the scripts are the skill. Then say: “watch this video and make a template” or “break down how this intro is built”.

Why a summary is not a template

What a video summary gives you
"a fast-paced product intro with a
 friendly presenter and clear demos"

→ no section lengths
→ no voice-over pace
→ one pace for the whole video
→ cuts guessed by a scene filter
→ no idea how many videos back it
→ nothing the Director can read

(nice to read, nothing to follow)

On a promo with 9 known cuts, the scene-filter thresholds that two popular tools document found none of them.

What video-analyst produces
sections  hook 1.6s · promise 3.8s
          context 33.1s · 4 demo steps
          recap 6.2s · cta 5.9s
pace      168.7 wpm, from the captions
opening   speech at 0s · face by 3s
rhythm    per section, every cut checked
strength  single · emerging · established
labels    measured · platform · judged
director  director_input, ready to fill

Linear's intro as a template. The video-director reads it without anyone editing it by hand.

A summary describes one video. A template shapes the next one.

Five checks, and each one prints a number

verify-observationBlocks a video record with an untraced number, a missing label or a shot rhythm nobody checked. Medians and rates are recomputed, never typed.
verify-templateRe-derives every number in a template from its source videos. It shares no code with the builder, so one bug cannot pass both.
verify-cutsThe control test. Detected cuts against a video whose cuts are known, at ±2 frames. Recall 1.00 and F1 1.00 on the bundled control.
estimate-frame-tokensRecomputes the run's image-token cost from the actual frame sizes. A declared total that is off by more than 1% fails.
verify-coordinationConfirms the four OPVS surfaces are wired: the card, the template library, memory and the protocol.

What you actually get

🎞️

Link or file in, template out

Captions come first and cost nothing in image tokens. Frames are pulled only where a judgment needs eyes. Each video becomes one record; videos of one kind become one template your library keeps by name.

📏

Every number labelled

Scripts measure timing, pace and cost. YouTube supplies views and the replay heatmap. Your agent's own model judges sections and hooks, and cites the frame it used. The label travels with the number.

🧮

Strength follows sample size

One video is a hint. Six is the first sample where the range from lowest to highest covers the true median 96.9% of the time. Every opening rule says how many videos back it, like 5/6.

A control video, then a real one

> "prove the cut timings are right"   (control: 40 s promo, 9 cuts known from its source)

  ffmpeg scene filter, documented thresholds
    scene > 0.2 ........ 0 cuts
    scene > 0.3 ........ 0 cuts
    scene > 0.4 ........ 0 cuts

  detect-shots.py detect control.mp4
    candidates 11   4.0  9.0  13.0  17.0  22.0  27.0  30.0  33.0  36.0  36.767  37.333
    truth       9   4    9    13    17    22    27    30    33    36

  verify-cuts.mjs   (after each candidate is checked from a 4-frame strip)
    CANDIDATES  TP 9  FP 2  FN 0  recall 1.00  precision 0.82
    CONFIRMED   TP 9  FP 0  FN 0  F1 1.00  mean |offset| 0 ms
  RESULT ............... PASS

> "watch this video and make a template"   (Linear, Intro to Linear, 4:01)

  verify-observation.mjs
    speech   649 words · 168.7 wpm · first word 0s
    audit    83/83 candidates classified · precision 0.301
    rhythm   25 confirmed shot changes · median shot 3.966s
    cost     6897 frames + 21935 sheets = 28832 image tokens
  verify-template.mjs
    recomputed from 1 observation, every number matches
    director_input: 12 section timings, readable by video-director
    WARN strength single: a hint from ONE video, not a norm
  RESULT ............... PASS

The ffmpeg and detector lines are output I re-ran on the control video that ships in the bundle. The verify-cuts lines come from the build's control test, where the agent doing the checking knew the answer. The Linear block is the scripts' own output on the bundled template, condensed to the lines that matter.

What a template sees that your eye misses

A dark chalkboard. A film strip whose hook is packed with narrow gold frames and whose demo holds two wide frames. A dashed line marked ONE AVERAGE is crossed out.
One video, two speeds. Linear's hook cuts every 1.6 seconds; its demo shots hold for about 20. The template keeps a shot length per section, because one average describes neither.
A dark chalkboard. VIDEO, ANALYST, TEMPLATE in gold, DIRECTOR and SHOT LIST in one row, joined by arrows.
Built for the Director. The template carries a director_input block in the exact shape video-director accepts, so your shot list starts from a proven structure.

What it will tell you it cannot do

  • It needs the video. A local file, or a download with yt-dlp and a fresh cookie you supply. YouTube's own terms apply, and nothing is kept or listed.
  • One worked template ships. Linear's intro, at single strength. Templates for tutorials, screencasts and changelogs need you to run more videos of that kind.
  • Frames cost tokens. About 29,000 image tokens for 4 minutes with every cut checked. Run the transcript pass first and pull frames only where you need them.
  • English is measured end to end. Caption-language pick passed on 7 languages, but no non-English video has been run through the whole pipeline yet.
  • Most replayed is not retention. YouTube's heatmap shows where people rewatch. It is labelled platform data and never read as drop-off.
  • The cut check is a judgment. Your agent's model confirms each candidate, and the precision is printed. On Linear's intro, 83 candidates became 25 shot changes.
Why this exists

I wanted every video to start from a structure that already worked.

video-analyst is one skill in the system behind Di-Atomic, the marketing and compliance agency that runs cognitoAI, SpiderIQ and OPVS. If you want a video pipeline that studies what works, scripts it and checks its own output, in any of my team's seven languages, that is the day job.

Book a call with Di-Atomic

Just want the skill? Get @di-atomic/video-analyst free.