New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

webreel

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

webreel

Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.

latest
Source
npmnpm
Version
0.1.4
Version published
Maintainers
1
Created
Source

webreel

CLI that records scripted browser videos as MP4, GIF, or WebM files from JSON configs.

Define steps (clicks, key presses, drags, pauses) and webreel drives a headless Chrome instance, captures screenshots at ~60fps, adds cursor animation, keystroke overlays, and sound effects, and encodes the result with ffmpeg.

Installation

npm install webreel

Quick Start

npx webreel init --name my-video --url https://example.com
npx webreel record

Examples

custom-theme - Demonstrates fully customizing the cursor overlay and keystroke HUD appearance using a code editor page.

drag-and-drop - Demonstrates dragging elements between positions on a kanban board.

form-filling - Demonstrates typing into form fields and clicking a submit button, simulating a login flow.

gif-output - Demonstrates outputting the recording as an animated GIF instead of the default MP4.

hello-world - The simplest possible webreel example. Opens a landing page and clicks the call-to-action button.

keyboard-shortcuts - Demonstrates pressing key combos and displaying them in the keystroke HUD overlay. Uses a code editor page as the target.

mobile-viewport - Demonstrates recording at mobile device dimensions using a finance app interface.

modifier-clicks - Demonstrates clicking elements with modifier keys held down, simulating multi-select in a file manager.

multi-demo - Demonstrates defining multiple videos in a single config file, each producing its own output from the same page.

page-scrolling - Demonstrates scrolling the page and scrolling within a specific container element on a blog post layout.

screenshots - Demonstrates capturing PNG screenshots at specific points during a recording. Useful for generating static marketing assets or documentation images alongside videos.

shared-steps - Demonstrates using include to share common setup steps across videos. The shared steps dismiss a cookie consent banner before the main video steps run.

webm-output - Demonstrates outputting the recording as a WebM video using VP9 encoding.

Commands

webreel init

Scaffold a new config file.

webreel init
webreel init --name login-flow --url https://myapp.com
webreel init --name hero -o hero.config.json
OptionDefaultDescription
--name <name>my-videoVideo name
--url <url>https://example.comStarting URL
-o, --output <file><name>.jsonOutput file path

webreel record

Record videos.

webreel record
webreel record hero login
webreel record -c custom.config.json

When run without arguments, webreel reads webreel.config.json from the current directory and records all videos. Provide video names to record specific videos only.

webreel preview

Run a video in a visible browser window without recording.

webreel preview
webreel preview hero

webreel validate

Check config files for errors without running them.

webreel validate
webreel validate -c custom.config.json

webreel composite

Re-composite videos from stored raw recordings and timelines without re-recording.

webreel composite
webreel composite hero login

Raw video and timeline data are saved in .webreel/raw/ and .webreel/timelines/ during webreel record. Use composite to re-apply cursor overlays, HUD, and sound effects without re-running the browser.

Config format

{
  "$schema": "https://webreel.dev/schema/v1.json",
  "videos": {
    "my-video": {
      "url": "https://example.com",
      "viewport": { "width": 1080, "height": 1080 },
      "defaultDelay": 500,
      "steps": [
        { "action": "pause", "ms": 500 },
        { "action": "click", "text": "Get Started" },
        { "action": "key", "key": "cmd+a", "delay": 1000 }
      ]
    }
  }
}

Config options

FieldDefaultDescription
urlrequiredURL to navigate to
baseUrl""Prepended to relative URLs
viewport1080x1080Browser viewport dimensions
zoom-CSS zoom level applied to the page
waitFor-CSS selector to wait for before starting
output<name>.mp4Output file path (.mp4, .gif, or .webm)
thumbnail{ time: 0 }Object with time (seconds) or enabled: false
theme-Overlay theme (cursor: { image, size, hotspot }, hud)
include-Array of JSON file paths whose steps are prepended
defaultDelay-Default delay (ms) after each step

Actions

ActionFieldsDescription
pausemsWait for a duration
clicktext or selector, optional within, modifiersMove cursor to an element and click
keykey (e.g. "cmd+z"), optional label, targetPress a key or key combo
typetext, optional target, charDelayType text character by character
dragfrom and to (each with text/selector/within)Drag from one element to another
scrolloptional x, y, selectorScroll the page or a container
waitselector or text, optional timeoutWait for an element or text to appear
moveTotext or selector, optional withinMove cursor to an element
screenshotoutputSave a PNG screenshot
navigateurlNavigate to a new URL mid-video
hovertext or selector, optional withinHover over an element (triggers CSS)
selectselector, valueSelect a value in a dropdown

All steps (except pause) accept an optional delay field (ms to wait after the step). Use defaultDelay at the top-level or per-video to set a default.

License

Apache-2.0

Keywords

video

FAQs

Package last updated on 02 Mar 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts