ScreenFlow for AI agents.

screeny mascot

Polished screen recordings,on autopilot.

Write a declarative spec of your demo. screeny drives your real Mac app — real cursor, real clicks, real typing — then beautifies it in post with cinematic zoom, a composited cursor, and keycaps. Record once, re-cut without re-recording.

Notes
New Note
zoom 1.0×
notes.screeny
<Demo id="notes-demo" targetApp="com.apple.Notes" typos="off">
  <Setup>
    <Relaunch />
    <NewDocument />
  </Setup>

  <Scene id="open">
    <Open id="launch" app="com.apple.Notes" />
    <Wait id="ready" for="elementVisible" target='role="button" name="New Note"' timeout="5s" />
  </Scene>

  <Scene id="write">
    <Click id="new" target='role="button" name="New Note"' />
    <Type id="note" into='role="textarea"'
          text="screeny — agent-authored screen recordings. Smooth zoom, real cursor, premium feel." />
  </Scene>

  <Scene id="reveal">
    <Pause id="hold" for="2s" />
  </Scene>
</Demo>

The two-document model

Record once. Re-cut forever.

The actions and the camera are never coupled. .screeny is what happens; .screenycut is how it’s filmed — zoom, pan, and highlights anchored to named moments in the recording. Re-frame the whole video without ever re-running the app.

notes.screeny
<Demo id="notes-demo" targetApp="com.apple.Notes">
  <Scene id="write">
    <Click id="new" target='role="button" name="New Note"' />
    <Type  id="note" into='role="textarea"'
           text="screeny — agent-authored recordings." />
  </Scene>
  <Scene id="reveal">
    <Pause id="hold" for="2s" />
  </Scene>
</Demo>

The actions. No camera here.

notes.screenycut
<Cut take="notes-demo">
  {/* frame the button; cursor moves in and clicks */}
  <Camera anchor="click:new" to="type:note.start"
          camera="zoom-1.4 follow-target ease-cinematic" />
  {/* frame the note body while typing */}
  <Camera anchor="type:note.start" to="type:note.end"
          camera="zoom-1.5 follow-target ease-cinematic" />
  {/* pull back for the reveal */}
  <Camera anchor="pause:hold" camera="zoom-1.0 ease-cinematic" />
</Cut>

The camera. Anchored to moments.

renderlive
New Note
screeny — agent-authored recordings.

zoom 1.4× · same take, re-framed

Same recording, re-framed — the actions on the left never re-run. Only the camera changes.

Built like a product, not a screen recorder.

01

Lives with your source code.

Your demo is a declarative .screeny file committed right beside the code it records. Re-run one command and it re-records against the latest state of your app.

demos
notes.screeny committed
notes.screenycuttracked
$screeny render@ HEAD
02

A declarative cut.

Camera, zoom and highlights live in a separate .screenycut, anchored to named moments like click:new and type:note.start — so the frame lands on the right thing at the right time.

New Note
click:newtype:note.starttype:note.endpause:hold
03

Cinematic quality, automatically.

60fps ProRes 422 HQ capture at retina 2×, beautified in post by a critically-damped analytic-spring camera that never bounces, Lanczos upscaling, and a composited 3× cursor that never scales with the frame.

60FPS
04

Input that feels human.

The cursor follows Fitts’-law paths with natural overshoot and micro-jitter; typing uses log-normal cadence with pauses at word boundaries. It reads like a person — not a robot snapping between coordinates.

linear
organic
60fps ProResretina 2×zero-coordinate authoringdeterministic & seeded

A demo in six commands.

Capture the real app once. After a single screeny run, re-author the .screenycut and render again and again — the cinematography changes, the recording never does. No re-capture.

notes-demo — screeny
Record once — drives the real app, captures the take
1$screeny check# validate the .screeny spec
2$screeny compile# → a deterministic plan
3$screeny run# drive the real app & capture
Cut & render — re-author and re-run freely, no re-capture
4$screeny derive-moments# anchorable hooks from the take
5$screeny compile-cut# bind the .screenycut to moments
6$screeny render# post-produce → polished .mp4

Or skip the keyboard entirely: an agent can author the whole .screeny and .screenycut through the screeny-mcp server — every element validated against the same shared catalog the CLI uses.

Pricing

Free to use. $49 to go watermark-free.

One free, local macOS engine. Runs entirely on your Mac — no subscription, no metering, no cloud.

Free

$0

Full-resolution, full-length renders.

Made with screeny
  • Unlimited recordings
  • Cinematic camera, organic cursor & keycaps
  • “Made with screeny” end-card

Pro

Recommended

$49

one-time

Everything in Free, watermark removed.

  • No “Made with screeny” watermark
  • One-time key — no subscription
  • Validates online once, works offline after

Runs on your Mac · no subscription · the only difference is the watermark.