REEL · BROWSER AUTOMATION

Run it twice.
Same frames.

Drive a real browser from a script. A fixed clock, so frames never drift.

FRAMES 314 LENGTH 13.13 s FPS exactly 24 SIZE 1064 KB CRITIQUE 100/100

This clip is Reel's own output. Three shots, nine actions, a fixed clock — 314 frames at exactly 24 fps while real work took 76.6 ms per frame. The first cut scored 98 and named its own defect: jump-cut at 7.5s in terra, reads as a cut, not a move. That was the WebGL scene arriving after the scroll had started. It gets 3.8 s to be up now, and the critique is clean.

Screen recorders drop frames when the machine is busy, so the same run looks different every time and you cannot tell a real change from a slow laptop. Reel runs the clock itself: frame 91 is frame 91 on any machine. Record the same script tomorrow and you get the same frames.

THE VERB

The script is data,
not code.

{
  "name": "studio-tour",
  "viewport": { "width": 1440,
                "height": 900 },
  "fps": 24,
  "shots": [
    { "id": "land",
      "actions": [
        { "type": "goto", "url": "/" },
        { "type": "hold", "ms": 1100 },
        { "type": "scroll", "to": 620,
          "ms": 1500 }
      ] }
  ]
}
actions goto navigate and settle hold let the page breathe scroll to a position, over time click a resolved selector type into a resolved field drag pointer path, for canvas waitFor a condition, not a guess eval read the page's own state

An agent can write, diff and review a shot list before anything runs. Imperative code has to be executed to be understood.

VALIDATE BEFORE YOU CAPTURE

Four seconds,
not four minutes.

$ npx @mrkt_frwd/reel recordings/studio-tour/script.json --dry-run   RECORD  studio-tour  ────────────────────────────────────  ok  script is well formed  ok  every selector resolves   OK dry run — nothing was recorded   real 4.06s
WHY A FIXED CLOCK
Wall clockwhat a screen recorder does
Fixed clockwhat Reel does

Both are counting frames. Put the machine under load and watch which one starts skipping.

A capture dies four minutes in on a renamed selector. --dry-run catches it in four seconds, without recording a frame.

THE CLI GUIDES YOUR AGENT

Point your agent at npx @mrkt_frwd/reel.

--dry-runValidate and resolve every selector. Records nothing.
--deterministicFixed clock. Frame N is frame N on any machine.
--formatsmp4, gif, vertical — from one capture pass.
--gateFail the build when the recording does not hold.

Needs Chromium and ffmpeg. The other three run on a bare Node install; this one does not.

DOCS

What the CLI cats.

Get startedscript · shots · actions Agent readinessagents.md Doc indexllms.txt All seven enginesthe register