Skip to content
Expo Agent Kit

Making a video

Usually you just ask your agent — the installed skill knows the playbook. This is what happens under the hood.

1. Shoot

Recording starts before the page opens, so loaders and entrance animations are on camera; it holds while the page loads, then scrolls.

video_record({ route: "/dashboard", seconds: 8, scroll: true })
video_record({ route: "/analytics", seconds: 8, scroll: true })
video_record({ tap: "My Analytics", tapAt: 1, seconds: 6 })   // tap → hero / side pop-out
Logged-out screens (landing, login)? Shoot them first, then log in yourself on the phone — the agent never types real passwords.

2. Plan

video_plan({ targetSeconds: 45, format: "landscape", appName: "MyApp", cta: "Get it on Google Play" })

The director builds: intro → one scene per take (timing, zooms on stat rows / buttons, scroll speed-ups, captions, pop-up chips, pop-outs) → outro.

3. Direct

Write benefit-led captions and tune pacing in one call:

video_edit({ ops: [
  { op: "update", scene: "dashboard", title: "Your prep at a glance",
    callouts: [{ value: "1 tap", label: "to resume your last paper" }] },
  { op: "update", scene: "start an exam", popouts: [], focus: "Start", zoom: 2.2, zoomTimes: [0.3, 1.3, 2.1, 3.2] },
  { op: "settings", captionSide: "right", sound: { volume: 0.7 } },
]})

4. Collaborate in the studio

video_studio()
// loop:
video_wait_for_prompt()  // → "User asked: …  They were looking at scene #4 …"
video_edit({ ops: [...] })
video_reply({ text: "Done — zoom is slower now." })

5. Render

video_render()   // → launch-video/out/launch-landscape.mp4 (H.264 + AAC)

Want a vertical cut too? video_edit({ ops: [{ op: "settings", format: "portrait" }] }), then render again.