frame-capture
Installation
SKILL.md
Frame capture
Screen recorders capture whatever the GPU managed to draw in real time, so a heavy scene stutters and a scroll-through looks hand-held. This skill records differently. Before the page's own scripts run, its clock is replaced: performance.now, Date.now and requestAnimationFrame read a virtual time, CSS animations and transitions are pinned to it, and every <video> is paused and seeked to it. Each output frame advances the clock by exactly 1/60 s, runs one frame, and takes a screenshot. A frame can take two seconds to render and the video still plays at a perfect 60 fps.
Tools
| Script | What it does |
|---|---|
scripts/record.py |
Records a URL to MP4 with scroll keys, pointer motion and a ready condition |
scripts/compare.py |
Stacks two clips (or sets them side by side) with labels and rounded panels |
scripts/serve.py |
Static server that answers HTTP Range requests, so videos can seek |
Needs Python 3.9+, pip install playwright pillow, python3 -m playwright install chromium webkit, and ffmpeg on PATH.
Run
- Serve the page with
scripts/serve.py, neverpython3 -m http.server. The built-in server ignores Range requests. The browser then cannot seek any video it serves (video.seekableis empty) and every recorded video holds its first frame.record.pywarns when it sees this.