Take5 is a local CLI that uses an LLM-driven browser agent to explore a web app and record a polished demo video.
npm install -g @mikhail.angelov/take5Or install locally in your project:
npm install @mikhail.angelov/take5You give it:
- a URL
- a scenario
It opens a real Chromium browser, navigates the app, performs the flow, highlights what it is about to click, records the session, and exports a video.
- explores the live app through Playwright snapshots
- uses an LLM to decide what to click, type, select, and scroll
- highlights click targets before interacting with them
- scrolls off-screen click targets into view before highlighting and clicking
- records the browser session to video
- converts
.webmto.mp4when ffmpeg is available - can cut idle delays between meaningful actions
- Start the CLI.
- Enter an app URL and a scenario, or provide a scenario file.
- Take5 launches Chromium with video recording enabled.
- The agent navigates, snapshots the page, and executes tool calls against the live UI.
- Before clicks, Take5 temporarily highlights the target so the recording is easier to follow.
- The recording is saved to
take5-output. - If ffmpeg is installed, the output is converted to
.mp4. Otherwise the raw.webmis kept.
- Node.js 20.6+
DEEPSEEK_API_KEY- Playwright Chromium browser
- ffmpeg optional, for
.mp4conversion
First, install Playwright Chromium:
npx playwright install chromiumThen create a .env file in your working directory with your API key:
echo "DEEPSEEK_API_KEY=sk-..." > .envOr copy from the example:
cp .env.example .envThen edit .env to add your API key.
DEEPSEEK_API_KEY=sk-...If installed globally:
take5If installed locally or developing:
npm startThe CLI will ask:
App URL: https://your-app.com
Scenario: Show how a user creates a project and invites a teammate
Scenario-file mode with delay cutting (local development):
npm run devThat runs the app with the local test.md file and enables delay cutting.
Direct Node usage:
node --env-file=.env src/cli.js
node --env-file=.env src/cli.js --cut-delays -f test.mdOutput files are written to:
./take5-output
The filename is generated by Playwright, for example:
29d69e7e39a34972aa1ef5c32aeee209.mp4
If ffmpeg is not available, the .webm recording is kept instead.
npm startloads.envand runs interactivelynpm run devloads.env, usestest.md, and enables--cut-delays--cut-delaystrims idle time between meaningful actions in post-processingDEBUG=1prints stack traces on failures
Run the native Node.js test suite with:
npm testCurrent tests cover core browser behavior including:
- ref-based filling for normal textboxes
- honoring requested waits
- automatic click highlighting
- annotation target resolution from snapshot refs
- scrolling selector targets into view before clicking
take5/
├── src/
│ ├── cli.js
│ ├── agent.js
│ ├── browser.js
│ ├── browser.test.js
│ ├── annotator.js
│ ├── converter.js
│ └── prompt.js
└── docs/
└── prd.md
src/cli.js: CLI entry point, argument parsing, interactive input, and orchestrationsrc/agent.js: LLM loop and tool-call executionsrc/browser.js: Playwright integration and browser tool implementationsrc/annotator.js: temporary in-page highlight and end-state overlayssrc/converter.js:.webmto.mp4conversion and delay cuttingsrc/prompt.js: system prompt for the agentsrc/browser.test.js: native Node.js tests for core browser behavior
- behavior depends on the live state of the target app
- authentication flows may require credentials in the scenario
- runs are not fully deterministic
.mp4export requires ffmpeg- the browser snapshot path relies on Playwright internals and may need maintenance across Playwright upgrades
- be specific in the scenario
- describe credentials or setup constraints if login is required
- keep flows focused and demo-oriented
- use
--cut-delayswhen you want a tighter final video - if you need to add a bit music
ffmpeg -i "take5-output/record.mp4" \ -stream_loop -1 -i "music.mp3" \ -filter_complex "[1:a]volume=0.15[a]" \ -map 0:v:0 -map "[a]" \ -c:v copy -c:a aac -shortest \ "take5-output/output-with-music.mp4"