NEW — Docs are live

AGENT-NATIVE DEMO RECORDER

Cinematic product demos, recorded by your agent.

You say one sentence. It explores your app, writes the shot list, drives a real browser, and renders a polished MP4 — smooth synthetic cursor, click-zooms, motion blur. Then you refine by asking.

Watch a take

MIT · open source · Node 22+

SCENE 01THE ASK
you × your agent

One sentence in.
A postable MP4 out.

There is no timeline to drag and no recorder to operate. Your coding agent is the camera crew: it installs open-take into the project, explores the running app, and shoots it in a real browser.

You stay in the conversation you were already having.

SCENE 02THE SHOT LIST

Editorial before pixels.

01 · EXPLORE

It looks before it shoots.

inspect hands the agent every interactive element with its real bounding box, so the demo is planned against what the page actually is — not a guess.

02 · DIRECT

Thesis first, then beats.

The agent commits to what the demo should say before anything rolls: what is the hero, what earns a zoom, what plays full-view. Competent-but-forgettable is the failure mode it is built to refuse.

03 · RENDER

One take, delivered twice.

A measured camera shoots the plan and renders demo.mp4 — the one you post — beside demo.take/, the working dir that keeps the recording and the editable composition.

SCENE 03CAMERA DEPT.

Measured, not guessed.

Screen recorders infer zoom intent from raw cursor motion — and it shows. An agent-driven camera never infers: it knows every click, coordinate and timestamp, because it wrote the plan. The zoom follows ground truth.

The move itself is a critically-damped spring fitted to a reference export: punch-in ≈ 730 ms, release ≈ 1.8× slower — because a fast release reads like a flinch.

VALIDATOR

It refuses to hand you a bad take quietly. A camera still mid-move at a click, a dead tail, a crowded release — each is flagged in the render summary, with the fix.

zoom.scale / t — the shipped curve
PUNCH-IN ·730 MSHOLDRELEASE ·×1.8 SLOWER
SCENE 04THE NEGATIVE

A take is a file.
The mp4 is a render of it.

demo.take/composition.json — beat 02
{
  "kind": "press",
  "label": "Deploy",
  "bbox": { "x": 640, "y": 220, "w": 640, "h": 248 },
  "zoom": {
    "enabled": ,
    "scale": 1.8,
    "center": { "x": 960, "y": 344 },
    "inAtMs": 4630
  },
  "durationMs": 1400
}
click "enabled" — the frame re-renders
RENDERED OUTPUT · zoom 1.8× on “Deploy”

Every beat, every zoom, every look lives in one readable file beside the kept capture. Change a number, render again — the app is never re-driven. The move you just saw uses the shipped values: 760 ms in, ease (0.3, 0, 0.2, 1).

SCENE 05DAILIES

Watch a take.

demos/deploy.mp4 — 23 s, unedited
Shot by an agent in one take and delivered as-is. The editorial is visible: the file-drop is the hero, so it holds the full frame — the name field and Deploy share one held camera frame. Watch it beat by beat →
SCENE 06TWO DOORS

Refine by asking.
Or by dragging.

DOOR A — DAILIES

Give notes in plain language.

beat 3: no zoom

tighter on beat 2

look: slate

✓ re-rendered from the kept capture

A fix is a re-render, never a re-shoot. The raw capture is kept — which matters when the take involved a real deploy you can’t repeat.

DOOR B — THE EDITOR

open-take edit

A local editor over the live, pixel-faithful preview: drag the frame on the stage, retime zoom blocks, hold Compare against the original. Same composition.json, either door.

SCENE 07PRODUCTION NOTES

ROLL CAMERA

Your next demo is
one sentence away.