Original shutter timing and HyperFrames study Unzip hyperframes-source-kit.zip to a new folder and read README.md and REVIEW.md Use Node and the pinned hyperframes@0.8.193 CLI The source loads pinned GSAP through jsDelivr and uses the Inter font Run preview then check and inspect snapshots before rendering From the shutter-study folder run npx --yes hyperframes@0.8.193 render . --fps 24 --workers 1 --quality looks --output shutter-study.mp4 For the other variants copy the folder and change data-motion-blur-shutter plus the displayed angle and reciprocal label 45 degrees is 1/192 second and 360 degrees is 1/24 second at 24 fps No AI inference is involved To reproduce the saved metadata review paste the published hyperframes-probe-example.json into the guide checker To verify the timing records place the default and rational JSON and CSV beside verify-shutter-timing.py and run python3 verify-shutter-timing.py Native measurement script requires FFmpeg and NumPy Place the three published hyperframes-shutter-45.mp4 hyperframes-shutter-180.mp4 and hyperframes-shutter-360.mp4 files in a folder then run uv run --no-project --with numpy python measure-hyperframes-study.py PATH_TO_FOLDER It checks all decoded timestamps and a four row strip through the moving marker Published repeat equality is one recorded same-worker comparison and not reasserted by this three-file verifier Artwork uses enlarged decoded frame 36 crops with nearest neighbor scaling The GIF preview is resampled to 15 fps and is not a cadence reference Review native MP4s for timing