{"_id":"webreel","_rev":"6-4a97e9774f8a5949b31fc388bd4e064f","name":"webreel","dist-tags":{"latest":"0.1.4"},"versions":{"0.0.0":{"name":"webreel","version":"0.0.0","author":"","license":"MIT","_id":"webreel@0.0.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"dist":{"shasum":"af11da509e67cca37d73cb6da08695b2bb1bdc9c","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.0.0.tgz","fileCount":3,"integrity":"sha512-7v/CEBcYywsnBhHUG2YYzl9yAbZhHcBLs2AZvCGwHPJqy1D0+mAgozEHzuJW0sYWlokhho055HXRtlDiwuQN3g==","signatures":[{"sig":"MEQCIH/RIEEiXQf4YAe8BK1j4hkpcv7v4yS2PUNP8y0QOuooAiBzwTMILJUTLpjzwNuVlwwrJMXE0zn+5jb5cyFx0CBbwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251},"main":"index.js","_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.0","description":"Coming soon","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/webreel_0.0.0_1772372668245_0.34442265561446517","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"webreel","version":"0.1.0","keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"license":"Apache-2.0","_id":"webreel@0.1.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/webreel#readme","bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"bin":{"webreel":"dist/index.js"},"dist":{"shasum":"c4a0775e61f177891e00a2b7f3740dc83faf2b4f","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.1.0.tgz","fileCount":58,"integrity":"sha512-HrCqF5xnx6B4SK9hSoFl8Z8hCmO4mTXUoNJKbm4yBiW7opQ9EYI43QzXs+yIxkYhWOFUUALLw49m9dtQv331Zw==","signatures":[{"sig":"MEUCIQDkQTGb4W8d24tiMTw+IePm4CbKRO56YbFErfjZlD7H8wIgZ6z+6moHYBgJlrZ2KYKBc7on4Ipl1tH8L2C9CeTBAqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228779},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/config.d.ts","import":"./dist/config.js"}},"gitHead":"583ba72a7d59f64146a4fcebbad4c5634fa32db1","scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -rf dist && tsc","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/webreel.git","type":"git"},"_npmVersion":"10.9.0","description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jiti":"^2.6.1","commander":"^14.0.3","jsonc-parser":"^3.3.1","@webreel/core":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.9.3","@types/node":"25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/webreel_0.1.0_1772404776982_0.8574163336395446","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"webreel","version":"0.1.1","keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"license":"Apache-2.0","_id":"webreel@0.1.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/webreel#readme","bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"bin":{"webreel":"dist/index.js"},"dist":{"shasum":"f7e719ccaf144b9e1694ea972cfcd6763ffba3bd","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.1.1.tgz","fileCount":59,"integrity":"sha512-Xat4cbi4/8GOxb6nNkOztiKnTGg02RMOKPG/j1iK5Z4uWeObEQIWNdvwhF3oJgtHye5IF/kl9kwZs0ekVNYLLQ==","signatures":[{"sig":"MEYCIQDlaXMH1bBYJXsiZtFjV3rQgf6kGDHS5SGiG45tw7NkYgIhAORqFQBxDq9vwOEkBGvIMakr8DOw4W9N+qDkFvNkGZCK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239752},"type":"module","_from":"file:webreel-0.1.1.tgz","engines":{"node":">=18"},"exports":{".":{"types":"./dist/config.d.ts","import":"./dist/config.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -rf dist && tsc","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/dd2b8bdb4c7b38ca91218cef4c7e131f/webreel-0.1.1.tgz","_integrity":"sha512-Xat4cbi4/8GOxb6nNkOztiKnTGg02RMOKPG/j1iK5Z4uWeObEQIWNdvwhF3oJgtHye5IF/kl9kwZs0ekVNYLLQ==","repository":{"url":"git+https://github.com/vercel-labs/webreel.git","type":"git"},"_npmVersion":"10.9.0","description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jiti":"^2.6.1","commander":"^14.0.3","jsonc-parser":"^3.3.1","@webreel/core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.9.3","@types/node":"25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/webreel_0.1.1_1772405078843_0.5648195120191968","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"webreel","version":"0.1.2","keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"license":"Apache-2.0","_id":"webreel@0.1.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/webreel#readme","bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"bin":{"webreel":"dist/index.js"},"dist":{"shasum":"8de430533639d6735d59b1ac186f7d169ba669e8","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.1.2.tgz","fileCount":59,"integrity":"sha512-O7kb99kEkBVjEVOu1Fh075kD7pQln1KuhmMSyWf8vRsnSXUQo0/e8Rb8X8fuRe8wTeTSSd0U6QOi9frQzWmlRg==","signatures":[{"sig":"MEUCIQCYWm4DHRM0qtUGRFpPXRhanzcsAF7VMDasgTYxX09rIQIgBlbcuwD5FAhQVBbnZrPfSjjLz+DaHpy+L8kiDq/NA7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239752},"type":"module","_from":"file:webreel-0.1.2.tgz","engines":{"node":">=18"},"exports":{".":{"types":"./dist/config.d.ts","import":"./dist/config.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -rf dist && tsc","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/60b674bddc14e828c8bd1f961618ca05/webreel-0.1.2.tgz","_integrity":"sha512-O7kb99kEkBVjEVOu1Fh075kD7pQln1KuhmMSyWf8vRsnSXUQo0/e8Rb8X8fuRe8wTeTSSd0U6QOi9frQzWmlRg==","repository":{"url":"git+https://github.com/vercel-labs/webreel.git","type":"git"},"_npmVersion":"10.9.0","description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jiti":"^2.6.1","commander":"^14.0.3","jsonc-parser":"^3.3.1","@webreel/core":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.9.3","@types/node":"25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/webreel_0.1.2_1772406012019_0.06229504793951368","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"webreel","version":"0.1.3","keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"license":"Apache-2.0","_id":"webreel@0.1.3","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://webreel.dev","bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"bin":{"webreel":"dist/index.js"},"dist":{"shasum":"2dab2caa5bceeeeb9dcb8e65f4df4bdf65ba820d","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.1.3.tgz","fileCount":59,"integrity":"sha512-k+fU/0+V5m+VGp3vhSboPQ9DVwqie21JXK4sPjWV7MXNIlTK02JN80xbpMrrvUijIQgPlUpDDjVOV46rtWhFgA==","signatures":[{"sig":"MEUCIQDCU1PCcSu9tokuSKWAGRoAEOHKuHMfDRf7OY6AJhFDCwIgd9BI68DKbszs/SLQ9JCwTKDqGQOiA2ZRAeEQh0YKQQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239865},"type":"module","_from":"file:webreel-0.1.3.tgz","engines":{"node":">=18"},"exports":{".":{"types":"./dist/config.d.ts","import":"./dist/config.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"rm -rf dist && tsc","clean":"rm -rf dist","type-check":"tsc --noEmit"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/504a692f2ff89bf19ae8a6aefb79b733/webreel-0.1.3.tgz","_integrity":"sha512-k+fU/0+V5m+VGp3vhSboPQ9DVwqie21JXK4sPjWV7MXNIlTK02JN80xbpMrrvUijIQgPlUpDDjVOV46rtWhFgA==","repository":{"url":"git+https://github.com/vercel-labs/webreel.git","type":"git"},"_npmVersion":"10.9.0","description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"jiti":"^2.6.1","commander":"^14.0.3","jsonc-parser":"^3.3.1","@webreel/core":"0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.9.3","@types/node":"25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/webreel_0.1.3_1772406457085_0.33762179304149753","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"webreel","version":"0.1.4","description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","homepage":"https://webreel.dev","repository":{"type":"git","url":"git+https://github.com/vercel-labs/webreel.git"},"bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"license":"Apache-2.0","publishConfig":{"access":"public"},"type":"module","exports":{".":{"types":"./dist/config.d.ts","import":"./dist/config.js"}},"bin":{"webreel":"dist/index.js"},"engines":{"node":">=18"},"dependencies":{"commander":"^14.0.3","jiti":"^2.6.1","jsonc-parser":"^3.3.1","@webreel/core":"0.1.4"},"devDependencies":{"@types/node":"25.3.0","typescript":"5.9.3"},"scripts":{"clean":"rm -rf dist","build":"rm -rf dist && tsc","type-check":"tsc --noEmit","dev":"tsc --watch","test":"vitest run"},"_id":"webreel@0.1.4","_integrity":"sha512-4W9VnjwbxmX8s1GVMqDmaR1atHz4bltnwDIVeuQ/78kK1cDykgHNvwRgsu4om5U59XUYkjdHZHHX5kjhI8AZcQ==","_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/b6d33afa03939cd242d41ceed7678fdc/webreel-0.1.4.tgz","_from":"file:webreel-0.1.4.tgz","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-4W9VnjwbxmX8s1GVMqDmaR1atHz4bltnwDIVeuQ/78kK1cDykgHNvwRgsu4om5U59XUYkjdHZHHX5kjhI8AZcQ==","shasum":"57ac5ceeb99ec762cd5209868035ffbe625bd177","tarball":"https://registry.npmjs.org/webreel/-/webreel-0.1.4.tgz","fileCount":59,"unpackedSize":240310,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD2guVbqQeCtrGl6jZ42edsyNHlOt4x2kKm54BcpQF7SAIgVVJKp4ru4noSDFxQA3/BowTdytUh9yj1HxyQy2hoJ+A="}]},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"directories":{},"maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/webreel_0.1.4_1772472782387_0.8283546544679352"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-01T13:44:28.158Z","modified":"2026-03-02T17:33:02.668Z","0.0.0":"2026-03-01T13:44:28.387Z","0.1.0":"2026-03-01T22:39:37.121Z","0.1.1":"2026-03-01T22:44:38.994Z","0.1.2":"2026-03-01T23:00:12.166Z","0.1.3":"2026-03-01T23:07:37.252Z","0.1.4":"2026-03-02T17:33:02.552Z"},"bugs":{"url":"https://github.com/vercel-labs/webreel/issues"},"license":"Apache-2.0","homepage":"https://webreel.dev","keywords":["video","recording","browser","demo","automation","headless","chrome","mp4","gif","webm","screencast"],"repository":{"type":"git","url":"git+https://github.com/vercel-labs/webreel.git"},"description":"Record scripted browser demos as MP4, GIF, or WebM with cursor animation, keystroke overlays, and sound effects.","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"readme":"# webreel\n\nCLI that records scripted browser videos as MP4, GIF, or WebM files from JSON configs.\n\nDefine 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.\n\n## Installation\n\n```bash\nnpm install webreel\n```\n\n## Quick Start\n\n```bash\nnpx webreel init --name my-video --url https://example.com\nnpx webreel record\n```\n\n## Examples\n\n<!-- EXAMPLES:START -->\n\n**[custom-theme](../../examples/custom-theme)** - Demonstrates fully customizing the cursor overlay and keystroke HUD appearance using a code editor page.\n\n<video src=\"../../examples/custom-theme/videos/custom-theme.mp4\" controls muted width=\"100%\"></video>\n\n**[drag-and-drop](../../examples/drag-and-drop)** - Demonstrates dragging elements between positions on a kanban board.\n\n<video src=\"../../examples/drag-and-drop/videos/drag-and-drop.mp4\" controls muted width=\"100%\"></video>\n\n**[form-filling](../../examples/form-filling)** - Demonstrates typing into form fields and clicking a submit button, simulating a login flow.\n\n<video src=\"../../examples/form-filling/videos/form-filling.mp4\" controls muted width=\"100%\"></video>\n\n**[gif-output](../../examples/gif-output)** - Demonstrates outputting the recording as an animated GIF instead of the default MP4.\n\n<video src=\"../../examples/gif-output/videos/gif-output.gif\" controls muted width=\"100%\"></video>\n\n**[hello-world](../../examples/hello-world)** - The simplest possible webreel example. Opens a landing page and clicks the call-to-action button.\n\n<video src=\"../../examples/hello-world/videos/hello-world.mp4\" controls muted width=\"100%\"></video>\n\n**[keyboard-shortcuts](../../examples/keyboard-shortcuts)** - Demonstrates pressing key combos and displaying them in the keystroke HUD overlay. Uses a code editor page as the target.\n\n<video src=\"../../examples/keyboard-shortcuts/videos/keyboard-shortcuts.mp4\" controls muted width=\"100%\"></video>\n\n**[mobile-viewport](../../examples/mobile-viewport)** - Demonstrates recording at mobile device dimensions using a finance app interface.\n\n<video src=\"../../examples/mobile-viewport/videos/mobile-viewport.mp4\" controls muted width=\"100%\"></video>\n\n**[modifier-clicks](../../examples/modifier-clicks)** - Demonstrates clicking elements with modifier keys held down, simulating multi-select in a file manager.\n\n<video src=\"../../examples/modifier-clicks/videos/modifier-clicks.mp4\" controls muted width=\"100%\"></video>\n\n**[multi-demo](../../examples/multi-demo)** - Demonstrates defining multiple videos in a single config file, each producing its own output from the same page.\n\n<video src=\"../../examples/multi-demo/videos/homepage.mp4\" controls muted width=\"100%\"></video>\n\n**[page-scrolling](../../examples/page-scrolling)** - Demonstrates scrolling the page and scrolling within a specific container element on a blog post layout.\n\n<video src=\"../../examples/page-scrolling/videos/page-scrolling.mp4\" controls muted width=\"100%\"></video>\n\n**[screenshots](../../examples/screenshots)** - Demonstrates capturing PNG screenshots at specific points during a recording. Useful for generating static marketing assets or documentation images alongside videos.\n\n<video src=\"../../examples/screenshots/videos/screenshots.mp4\" controls muted width=\"100%\"></video>\n\n**[shared-steps](../../examples/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.\n\n<video src=\"../../examples/shared-steps/shared-steps.mp4\" controls muted width=\"100%\"></video>\n\n**[webm-output](../../examples/webm-output)** - Demonstrates outputting the recording as a WebM video using VP9 encoding.\n\n<video src=\"../../examples/webm-output/webm-output.webm\" controls muted width=\"100%\"></video>\n\n<!-- EXAMPLES:END -->\n\n## Commands\n\n### `webreel init`\n\nScaffold a new config file.\n\n```bash\nwebreel init\nwebreel init --name login-flow --url https://myapp.com\nwebreel init --name hero -o hero.config.json\n```\n\n| Option                | Default               | Description      |\n| --------------------- | --------------------- | ---------------- |\n| `--name <name>`       | `my-video`            | Video name       |\n| `--url <url>`         | `https://example.com` | Starting URL     |\n| `-o, --output <file>` | `<name>.json`         | Output file path |\n\n### `webreel record`\n\nRecord videos.\n\n```bash\nwebreel record\nwebreel record hero login\nwebreel record -c custom.config.json\n```\n\nWhen run without arguments, webreel reads `webreel.config.json` from the current directory and records all videos. Provide video names to record specific videos only.\n\n### `webreel preview`\n\nRun a video in a visible browser window without recording.\n\n```bash\nwebreel preview\nwebreel preview hero\n```\n\n### `webreel validate`\n\nCheck config files for errors without running them.\n\n```bash\nwebreel validate\nwebreel validate -c custom.config.json\n```\n\n### `webreel composite`\n\nRe-composite videos from stored raw recordings and timelines without re-recording.\n\n```bash\nwebreel composite\nwebreel composite hero login\n```\n\nRaw 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.\n\n## Config format\n\n```json\n{\n  \"$schema\": \"https://webreel.dev/schema/v1.json\",\n  \"videos\": {\n    \"my-video\": {\n      \"url\": \"https://example.com\",\n      \"viewport\": { \"width\": 1080, \"height\": 1080 },\n      \"defaultDelay\": 500,\n      \"steps\": [\n        { \"action\": \"pause\", \"ms\": 500 },\n        { \"action\": \"click\", \"text\": \"Get Started\" },\n        { \"action\": \"key\", \"key\": \"cmd+a\", \"delay\": 1000 }\n      ]\n    }\n  }\n}\n```\n\n### Config options\n\n| Field          | Default       | Description                                               |\n| -------------- | ------------- | --------------------------------------------------------- |\n| `url`          | required      | URL to navigate to                                        |\n| `baseUrl`      | `\"\"`          | Prepended to relative URLs                                |\n| `viewport`     | 1080x1080     | Browser viewport dimensions                               |\n| `zoom`         | -             | CSS zoom level applied to the page                        |\n| `waitFor`      | -             | CSS selector to wait for before starting                  |\n| `output`       | `<name>.mp4`  | Output file path (`.mp4`, `.gif`, or `.webm`)             |\n| `thumbnail`    | `{ time: 0 }` | Object with `time` (seconds) or `enabled: false`          |\n| `theme`        | -             | Overlay theme (`cursor: { image, size, hotspot }`, `hud`) |\n| `include`      | -             | Array of JSON file paths whose steps are prepended        |\n| `defaultDelay` | -             | Default delay (ms) after each step                        |\n\n### Actions\n\n| Action       | Fields                                                 | Description                           |\n| ------------ | ------------------------------------------------------ | ------------------------------------- |\n| `pause`      | `ms`                                                   | Wait for a duration                   |\n| `click`      | `text` or `selector`, optional `within`, `modifiers`   | Move cursor to an element and click   |\n| `key`        | `key` (e.g. `\"cmd+z\"`), optional `label`, `target`     | Press a key or key combo              |\n| `type`       | `text`, optional `target`, `charDelay`                 | Type text character by character      |\n| `drag`       | `from` and `to` (each with `text`/`selector`/`within`) | Drag from one element to another      |\n| `scroll`     | optional `x`, `y`, `selector`                          | Scroll the page or a container        |\n| `wait`       | `selector` or `text`, optional `timeout`               | Wait for an element or text to appear |\n| `moveTo`     | `text` or `selector`, optional `within`                | Move cursor to an element             |\n| `screenshot` | `output`                                               | Save a PNG screenshot                 |\n| `navigate`   | `url`                                                  | Navigate to a new URL mid-video       |\n| `hover`      | `text` or `selector`, optional `within`                | Hover over an element (triggers CSS)  |\n| `select`     | `selector`, `value`                                    | Select a value in a dropdown          |\n\nAll 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.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}