Find out why your reel loses people in the first three seconds
Drop in a finished reel and this page measures its cut cadence, shot lengths, hook and dead air, then scores it against short-form norms. It runs entirely on your machine — no upload, no analysis API, and no model anywhere in the loop.
Completely free & open source. No signups, no credit card required.
Your video never leaves this tab. The frames and the audio are decoded and measured on your own CPU — no upload, no analysis API, no model.
Open your browser's network tab and you will see no file upload. What you will see: the page loads the same anonymous product analytics as the rest of this site, and the tool logs that an analysis ran along with the summary numbers it showed you — length, cut count, cuts per minute. It never sends your video, its audio or its filename.
Reel pacing analyzer
Pacing report
Cut detection samples frames and looks for brightness-independent jumps, so whip-pans and flashes don't register as edits. Silence is real RMS over the decoded audio. There is no model anywhere in this: same file in, same numbers out.
Starting…
Drop in a reel, TikTok or Short and you'll get its cut cadence, hook and dead air.
OpenNolan's agent cuts to this cadence for you, then hands you the timeline.
Short-form does not fail slowly. It fails in the first second, and then in every second where nothing changes. The two things that decide it are pacing — how often the frame resets — and dead air, because a feed that is muted by default punishes silence twice.
Both are measurable, and neither needs a model. This page samples your frames, differences them, and marks a cut wherever the picture jumps in a way that motion cannot explain. It decodes the audio track and takes the RMS over 50-millisecond windows to find silence. Then it puts the numbers against short-form norms and tells you where the video is losing people.
Everything happens in your browser. The video is read straight off your disk into a <video> element, the analysis runs on your own CPU, and no byte of your footage is transmitted anywhere. (The page loads this site's ordinary anonymous product analytics, which is spelled out in the FAQ below — it never carries your file.) That is a deliberate design choice, not a limitation — the same one that makes OpenNolan a Mac app instead of an upload box.
How the cut detection actually works
Each sampled frame is drawn to a tiny 64×36 canvas and reduced to luma. Consecutive frames are then differenced after removing each frame's own mean brightness. That single step kills the most common false positive: a camera flash, a light switching on or an auto-exposure ramp moves every pixel by roughly the same amount, so once the shared component is subtracted, nothing is left. A real cut leaves plenty behind.
The remaining signal is thresholded against local activity rather than a fixed number. A cut has to be a spike above the median of its neighbourhood plus several median-absolute-deviations — so a whip-pan, which is sustained high motion, raises its own baseline and does not trip the detector. A real cut also settles immediately: if the next sample is still busy, the tool reads it as movement rather than an edit.
None of this is perfect, and it is not pretending to be. Match cuts, dissolves and cuts between two nearly identical frames will be missed; a hard strobe effect will over-count. The numbers are a read on your video's rhythm, not a frame-accurate EDL.
- Brightness-independent differencing, so flashes are not cuts
- Adaptive local threshold, so whip-pans are not cuts
- Frame-callback sampling where available, seek-based sampling everywhere else
- Capped at 5 minutes, with visible progress and a working cancel
What the numbers mean
Cuts per minute is the headline. Short-form that holds attention tends to sit around one cut every one to two seconds — call it 30 to 60 a minute. Below about 12 you effectively have a single take, and the retention graph will show it.
Longest static shot is often more diagnostic than the average, because one long stretch in the middle can sink a video whose overall cadence looks fine. Hook counts what happens in the first three seconds: cuts, motion energy and whether there is any audio at all. Silence is the share of the clip below −45 dBFS, with the longest continuous gap called out separately — a two-second hole reads as the video having stalled.
Why there is no AI in this tool
Measuring the pacing is arithmetic. Fixing it is the part worth automating.
It would have been easy to send frames to a model and have it describe your video back to you. We deliberately did not, for three reasons. A language model cannot watch a video, so it would be guessing from stills. A hosted key would force a backend, which would mean uploading your footage. And loading a WebAssembly build of ffmpeg is roughly thirty megabytes to compute numbers that a few hundred lines of ordinary browser APIs already produce.
So the verdict below your report is a lookup table. The same file gives the same score every time, and you can read the thresholds in the source. Where AI genuinely helps is on the other side of the problem — not describing the pacing, but doing the cutting. That is what OpenNolan's agent is for.
Frequently asked questions
Is my video uploaded?
No. The file is read into a <video> element locally and analyzed on your own CPU. There is no upload endpoint and no analysis API, so neither your video nor its audio is ever transmitted — open the network tab while it runs and you will see no file upload. What you *will* see is this site's ordinary anonymous product analytics: the tool logs that an analysis ran, along with the summary numbers it just showed you — length, cut count, cuts per minute. It never sends the video, the audio or the filename.
How accurate is the cut detection?
Good on hard cuts, which is what short-form is made of. It is designed not to fire on whip-pans or flashes, and it will miss dissolves, match cuts and cuts between two visually identical frames. Treat the count as a read on rhythm rather than a frame-accurate edit list.
Why is there a 5 minute limit?
Because past that the analysis takes long enough to make the tab feel broken, and short-form is not five minutes long anyway. Longer files are refused with a message instead of freezing — trim to the section you care about.
Does it work in Firefox?
Yes. Firefox has no requestVideoFrameCallback, so the tool falls back to seeking through the video at a fixed interval. It is slower and it says so in the progress text, but the maths is identical.
What counts as silence?
Any 50-millisecond window whose RMS is below −45 dBFS. Continuous runs of at least 0.35 seconds are reported as gaps. If the browser cannot decode the audio track, the report says so and the cut metrics still stand.