MITOpen source and free to run

Demo videos,recorded by your agent

Nobody has an afternoon to re-record a product demo. Hand it to your coding agent. It rehearses the flow, then renders a Screen Studio style video with a smooth cursor, eased zooms and a padded frame.

Claude CodeCodexCursor

Then ask: “Record a 30 second demo of creating a project on localhost:3000.”

00:00 / 00:12

The agent writes the script.The video plays it back.

As your agent clicks through the app, takeone writes down each step. That file becomes the video, played back at a smooth, steady pace.

create-project.tsrecording
  1. 1await s.startRecording();
  2. 2await s.type({ role: "textbox", name: "Project name" }, "acme-prod");
  3. 3await s.click({ role: "button", name: "Create project" });
  4. 4await s.lapse(8, () => s.waitFor({ text: "is ready" }));
  5. 5await s.zoom({ text: "prj_7f3k2a" }, { scale: 2.1 });
  6. 6await s.zoomOut();
  7. 7await s.stopRecording();

Screen Studio polish,none of the screen time

It renders headless, so the recording runs on a Linux server while your laptop stays closed.

Read the docs on GitHub
  • 0 min

    spent recording it yourself

  • 60 fps

    H.264 MP4 or VP9 WebM

  • 4K

    sharp even when zoomed in

  • 1 take

    rehearse once, replay it any time

Record demos without sitting through them

Your agent walks through your app once. takeone turns that walkthrough into a polished video with a smooth cursor, zooms and a clean frame.

$ npx takeone do goto localhost:3000

✓ #1 await s.goto("http://localhost:3000/");

main

4 heading "Create a project"

5 textbox "Project name"

6 button "Create project"

7 button [icon ellipsis] (opens menu)

$ npx takeone do click 6

+ 8 status "Creating acme-prod…"

Your agent finds the way

It clicks through your app step by step. That path becomes your video's script.

Agent

38s

4.2s6.8s3.1s
becomes

Video

11s

Paced like a person

Your agent takes as long as it needs. The video plays every step at a steady pace.

$ npx takeone render recordings/demo

Restyle without re-recording

Swap the background, cursor or size, then render the same take again.

deploy
clickzoom
The whole wait, sped up.2.5s

await s.lapse(8, () => s.waitFor({ text: "Deployed" }));

Long waits, your call

Show a slow deploy in real time, speed it up as a time-lapse, or trim it to a moment.

Ask for a video.Get back an mp4.

The skill teaches your agent the whole job, from installing the package to handing you the file. You write one sentence about what the video should show.

Faster with the MCP server

Every reply includes a screenshot, so your agent sees the page as it works.

Your agent
Record a 30 second demo of creating a project on localhost:3000, and zoom in on the new project's ID at the end.
  1. 1.Install the package

    npm i -D takeone

  2. 2.Set up Chromium

    npx takeone setup

  3. 3.Rehearse the path and export it

    npx takeone session export demo.ts

  4. 4.Dry-run the scenario

    npx takeone dry-run demo.ts

  5. 5.Record the video

    npx takeone record demo.ts

▶

output.mp4

0:28, 1920×1080, 60 fps

Your next demo isone take away

Install the skill, then ask your agent for the video you've been putting off.

Claude CodeCodexCursor