Hypernatural

TechniqueBy HypernaturalVersion 1, Oct 21, 2026

python-measure-judder

Score how smooth a video's motion is: a judder number from its per-frame motion steps (mean change in step over the median step), plus a count of repeated frames that shows a padded, dup-then-skip cadence. Use to compare takes of one shot, or a render against its source footage, when motion looks jerky, stuttery or choppy.

SKILL.md

Measure judder

Give it one or more videos; get back, per video, a judder score, the median motion step and the number of repeated frames. A frame's motion step is the mean absolute change in brightness from the frame before. Steady motion keeps the step even, so the score sits near 0. A cadence that repeats one frame and then jumps two scores high. Compare takes of the same shot, or a take against the source footage of that shot. Don't compare scores across different shots: the number depends on how much moves.

Run it

Write references/judder.md's script into the project folder as judder.py, as is, and run it with exec python:

exec python judder.py --videos <source shot>.mp4 <shot>_kling_a.mp4 <shot>_wan_a.mp4
exec python judder.py --videos <take>.mp4 --frames 78 --steps
  • --frames N scores only the first N frames. Use the shot's length, so a still hold at the end of an untrimmed render doesn't count.
  • --steps also prints every frame's step, to find where a stutter happens.

What you get

JSON per video: judder, median_step, frames, repeats (frames whose step is under 0.4 of the local median, so they repeat the frame before).

Reading the numbers

  • Source footage scored about 0.05, and Kling v3 takes about the same.
  • A model whose output was 24 fps content padded to 30 fps (one repeat and one double step in every 5 frames) scored 0.78. After the repeats were dropped and the gap motion-interpolated it scored 0.39, and it still looked jerky. A score several times the source's is visible.
  • repeats near a fifth of the frames, at a 30 fps container, is that padding pattern. Check the frame rate (ffprobe-inspect-media) and suspect the provider's output before the motion itself.
  • A near-static shot (a talking head; a median step around 0.2) gives a noisy score, or none when the median is 0. Judge those by eye.

Tips and traps

  • Measure trimmed takes, or pass --frames: a hold after the action lowers the median and inflates the score.
  • A cut inside the clip is one huge step and pushes the score up. Measure one shot at a time.
  • Retiming a take (speeding it up to fit) adds judder of its own. Trim it, or re-brief it to act in real time, instead.
  • Put the source's score next to each take's on the review page, so the person sees the comparison and not a bare number.

Check it

Run it on the source shot first. It should read near 0.05 with 0 repeats. If it doesn't, the source itself is uneven, and takes have to be read against that number.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy