@mrkt_frwd/reel
v0.2.0
Published
Reel — drive a real browser from a declarative script and record it. Deterministic mode gives the same frames every run.
Readme
@mrkt_frwd/reel
Drive a real browser from a declarative script and record it. Run it twice and get the same frames.
npx @mrkt_frwd/reel script.json --dry-run
npx @mrkt_frwd/reel script.json --deterministicWhat it is for
Repeatable video of a web page — product demos, regression captures, marketing clips — without a human driving the mouse and without the output drifting between runs.
The claim, and the evidence for it
The script is data, not code:
{
"name": "studio-tour",
"viewport": { "width": 1440, "height": 900 },
"fps": 24,
"shots": [
{ "id": "land", "intent": "Open on the landing and let the hero settle.",
"actions": [
{ "type": "goto", "url": "/" },
{ "type": "hold", "ms": 1100 },
{ "type": "scroll", "to": 620, "ms": 1500 }
] }
]
}Because it is data, an agent can write one, diff one, and review one before anything runs. An imperative recording script has to be executed to be understood — and by then you have already paid for the capture.
--dry-run on a real 4-shot, 18-action script: 4.06 s. It loads the page,
resolves all six selectors, and validates the whole script without recording a
frame. A capture that dies four minutes in on a renamed selector is the expensive
failure in this pipeline; this is the cheap thing that catches it.
--deterministic runs a fixed clock, so frame N is frame N regardless of how
long a frame cost to draw on your machine.
What it refuses to do
- A shot without an
intentis refused — the critic has nothing to judge against. - A selector that does not resolve fails the dry run rather than the capture.
Flags
--dry-run validate and resolve every selector; record nothing
--deterministic fixed clock — the same frames every run
--formats mp4, gif, vertical, from one capture pass
--live <origin> record against a running server
--gate fail the build when the recording does not holdRequirements
Node 18+, Chromium and ffmpeg — both come in as dependencies. This is the one engine in the set that is not zero-dependency, because it drives a real browser and encodes real video.
MIT © Joe Asare. Built at Joe Asare Studio, where it records the work the other engines make.
