mcpField
W
webreel

webreel

github.com/vercel-labs创意与媒体953242 次安装6 周前更新
代码仓库

关于 webreel

webreel 是供开发者制作脚本化浏览器演示的命令行工具。它在无头 Chrome 中执行配置的操作,并录制带光标动画、按键提示层和音效的 MP4、GIF 或 WebM 视频。

主要功能

  1. 01通过 JSON 配置浏览器操作
  2. 02录制 MP4、GIF 和 WebM
  3. 03光标动画与按键提示层
  4. 04预览和配置验证
  5. 05为已有视频重新合成叠加效果

适用场景

  1. 01录制可重复的产品演示
  2. 02制作浏览器操作讲解视频
  3. 03录制前检查脚本操作
  4. 04无需重录即可调整叠加效果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vercel-labs/webreel --skill webreel

安装后在 Claude Code 中输入/webreel确认已加载。

附带文件examples.mdsteps-reference.md

详细介绍

webreel

webreel 可将脚本化的浏览器演示录制为 MP4、GIF 或 WebM,并添加光标动画、按键叠加效果和音效。你可以在 JSON 配置中定义步骤,webreel 会驱动无头 Chrome、捕获帧并使用 ffmpeg 编码。

安装

将 webreel 安装为项目依赖,以便在锁定文件中固定版本。这样可以确保在不同机器和 CI 环境中录制结果一致。

npm install webreel

如果项目依赖中已经包含 webreel,请跳过此步骤。

先决条件

webreel 需要 Chrome 和 ffmpeg,但不需要手动安装。如果尚未安装,两者都会在首次运行时自动下载到 ~/.webreel。不要通过 puppeteer、playwright 或其他工具安装 Chrome 或 Chromium。webreel 会管理自己的浏览器。

如需显式下载依赖项,或修复损坏或故障的二进制文件:

npx webreel install
npx webreel install --force   # delete cached binaries and re-download

如需覆盖自动下载的二进制文件,请设置以下环境变量:

  • CHROME_PATH - Chrome 或 Chromium 二进制文件的路径(用于预览)
  • CHROME_HEADLESS_PATH - chrome-headless-shell 二进制文件的路径(用于录制)
  • FFMPEG_PATH - ffmpeg 二进制文件的路径

如果录制时出现“找不到可检查的目标”或类似的浏览器错误,问题几乎肯定出在 webreel 配置中(waitFor 错误、缺少元素、时序问题),而不是缺少浏览器。请检查配置并使用 --verbose 进行调试。

.gitignore

录制期间会在项目根目录创建 .webreel 目录(包含帧和中间文件)。请将其添加到 .gitignore:

.webreel

快速开始

# Scaffold a config
npx webreel init --name my-demo --url https://example.com

# Edit webreel.config.json with your steps

# Preview in a visible browser (no recording)
npx webreel preview my-demo

# Record the video
npx webreel record my-demo

当 webreel 位于 devDependencies 中时,npx 会使用本地安装的版本。默认情况下,输出会保存到 videos/(可通过 outDir 配置)。

CLI 命令

init

创建新的 webreel.config.json 框架。

webreel init
webreel init --name login-flow --url https://myapp.com
webreel init --name hero -o hero.config.json

标志:--name(视频名称)、--url(起始 URL)、-o, --output(输出文件路径)。

record

录制一个或多个视频。

webreel record                        # all videos in config
webreel record hero login             # specific videos by name
webreel record -c custom.config.json  # custom config path
webreel record --watch                # re-record on config change
webreel record --verbose              # log each step
webreel record --dry-run              # print resolved config only
webreel record --frames               # save raw JPEGs to .webreel/frames/
preview

在可见的浏览器中运行步骤,但不进行录制。

webreel preview
webreel preview hero --verbose
composite

将叠加效果(光标、HUD、音效)重新应用到现有的原始视频,无需重新录制。适用于调整主题设置。

webreel composite
webreel composite hero
install

将 Chrome 和 ffmpeg 下载到 ~/.webreel。也可用此命令修复损坏或故障的二进制文件。

webreel install
webreel install --force  # delete cached binaries and re-download
validate

检查配置是否存在错误,但不运行任何内容。

webreel validate
webreel validate -c custom.config.json

配置结构

配置文件会自动发现,文件名为 webreel.config.json(或 .ts、.mts、.js、.mjs)。使用 -c 指定自定义路径。

顶层字段
字段默认值描述
$schema-"https://webreel.dev/schema/v1.json"
outDir"videos/"渲染后视频的输出目录
baseUrl""添加到相对视频 URL 前面的基础 URL
viewport1080x1080默认视口 { width, height }
theme-光标和 HUD 叠加主题
sfx-音效设置
include-要添加到所有视频前面的步骤文件路径数组
defaultDelay-每个步骤后追加的默认延迟(ms)
clickDwell-点击前光标的停留时间(ms)
单个视频字段

videos 映射中的每个条目都支持以下字段:

字段默认值描述
url必填要打开的 URL(绝对路径,或相对于 baseUrl 的路径)
viewport继承覆盖视口 { width, height }
zoom-CSS 缩放系数
waitFor-开始执行步骤前要等待的选择器或文本
output"<name>.mp4"输出路径(.mp4、.gif、.webm)
thumbnail{ time: 0 }缩略图配置,或 { enabled: false }
include继承要置于开头的步骤文件
theme继承覆盖主题
sfx继承覆盖音效
defaultDelay继承覆盖默认延迟
clickDwell继承覆盖点击停留时间
fps60帧率
quality80编码质量(1-100)
steps必填步骤对象数组
视频映射

配置中按名称为视频指定键:

{
  "videos": {
    "hero": { "url": "...", "steps": [...] },
    "login": { "url": "...", "steps": [...] }
  }
}

按名称录制特定视频:webreel record hero login。

步骤类型

每个步骤都有一个 action 字段。大多数步骤都可选用 label、delay(步骤执行后的毫秒数)和 description 字段。

操作关键字段用途
pausems等待指定时长
clicktext 或 selector、within、modifiers点击元素
typetext、selector、within、charDelay在输入框中输入文本
keykey、target按下组合键(例如 "cmd+s")
dragfrom、to(元素目标)在两个元素之间拖动
scrollx、y、selector滚动页面或元素
waitselector 或 text、timeout等待元素出现
moveTotext 或 selector、within将光标移至元素
navigateurl导航到新的 URL
hovertext 或 selector、within将鼠标悬停在元素上
selectselector、value选择下拉菜单中的值
screenshotoutput截取 PNG 屏幕截图

有关每种步骤类型的完整字段详情,请参阅 steps-reference.md。

元素定位

许多步骤使用以下字段定位元素:

  • text - 按可见文本内容匹配
  • selector - 按 CSS 选择器匹配
  • within - 将搜索范围缩小至与此 CSS 选择器匹配的父元素

可以使用 text 或 selector(不能同时使用)。within 为可选项,用于限定搜索范围。

{ "action": "click", "text": "Submit" }
{ "action": "click", "selector": "#submit-btn" }
{ "action": "click", "text": "Submit", "within": ".modal" }

视口预设

将预设名称作为 viewport 的字符串值使用,或指定 { width, height }:

desktop(1920x1080)、desktop-hd(2560x1440)、laptop(1366x768)、macbook-air(1440x900)、macbook-pro(1512x982)、ipad(1024x1366)、ipad-pro(834x1194)、ipad-mini(768x1024)、iphone-15(393x852)、iphone-15-pro-max(430x932)、iphone-se(375x667)、pixel-8(412x915)、galaxy-s24(360x780)。

主题

自定义光标外观和按键 HUD:

{
  "theme": {
    "cursor": {
      "image": "./cursor.svg",
      "size": 32,
      "hotspot": "center"
    },
    "hud": {
      "background": "rgba(30, 41, 59, 0.85)",
      "color": "#e2e8f0",
      "fontSize": 48,
      "fontFamily": "\"SF Mono\", monospace",
      "borderRadius": 12,
      "position": "top"
    }
  }
}
  • cursor.image - 自定义光标 SVG 或 PNG 的路径
  • cursor.size - 光标尺寸,单位为像素
  • cursor.hotspot - "top-left"(默认值)或 "center"
  • hud.position - "top" 或 "bottom"

常见模式

通过 include 共享步骤

将可复用的步骤序列(例如关闭 Cookie 横幅)提取到 JSON 文件中:

// steps/dismiss-banner.json
{
  "steps": [
    { "action": "wait", "selector": ".cookie-banner", "timeout": 5000 },
    { "action": "click", "selector": ".accept-btn", "delay": 300 }
  ]
}

在配置中引用它们:

{
  "include": ["./steps/dismiss-banner.json"],
  "videos": { ... }
}
在一个配置中录制多个视频

在 videos 映射中定义多个视频。共享设置(viewport、theme、defaultDelay)会从顶层继承。

环境变量

配置值支持从环境变量替换 $VAR 和 ${VAR}。

输出格式

设置 output 扩展名以控制格式:.mp4(默认值)、.gif、.webm。

{ "output": "demo.gif" }

提示

  • 始终为视频设置 waitFor,确保页面准备就绪后再运行步骤。
  • 使用单个步骤上的 delay 控制操作之间的节奏。
  • 开发时使用 --watch,在配置发生更改时自动重新录制。
  • 使用 composite 迭代主题和叠加层设置,无需重新录制。
  • 使用 --verbose 调试步骤执行过程。
  • 使用 --dry-run 检查完全解析后的配置(包括 include、环境变量和默认值)。
  • 使用 zoom 放大小型 UI,提升录制内容的可读性。
  • 先使用 preview 确认步骤正常运行,再提交完整录制。

参考文件

评论

支持 Markdown