Communitygithub.com

vvedantb/eva

使用 Remotion 制作精美、移动端友好的 eva 应用产品演示视频——1280×720、快节奏节拍同步硬切、每次切换时低保真音乐渐强,并通过 agent-browser 从真实运行的应用程序捕捉画面(无模拟)。

eva 是什么?

该 AI 技能让用户能够利用现有的 Remotion 项目 (位于 `video/`) 为 eva 应用制作高质量的产品演示视频(接近 Linear/Notion 级别)。它通过 `agent-browser` 从真实运行的应用中捕捉画面,避免使用模拟图。技能包含了大量经过实战验证的默认设置(如 1280×720 分辨率、30fps、全出血显示、无缩放、快节奏节拍同步剪辑、低保真音乐生成等),以节省时间并避免常见错误。工作流程包括规划故事、捕捉素材、在 `EvaHero.tsx` 中编辑场景/时长/字幕、生成音乐以及使用定格帧进行质量检查。技能支持 `EvaHero`、`SessionsDemo`、`EvaPlatform` 等多种现有构图,并提供了详细的参考文档(如 `references/capture-workflow.md`)来指导每一步操作,确保最终视频专业、移动端友好且尊重用户的数据隐私。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/vvedantb/eva/tree/HEAD/.claude/skills/eva-launch-video

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

eva 产品视频

使用 video/ 下现有的 Remotion 项目,为 eva 应用制作高端产品视频(Linear/Notion 品质)。素材来自真实应用,通过 agent-browser 捕捉。

选错了技能? 此技能用于精修的多场景剪辑(Remotion、音乐、字幕)。对于单个功能,请优先使用较轻量的同伴技能:eva-feature-screenshot(一张截图 + 推文)或 eva-feature-demo(一段原始 agent-browser 录制 + 推文)。以上三者的推文文案均来自 eva-tweet。

规范项目已存在——请复用,不要重头开始。

  • 项目:video/ · 主合成:EvaHero (video/src/EvaHero.tsx)
  • 渲染输出:video/out/eva-demo.mp4
  • video/src/components/ 中的可复用组件:Backdrop、AppWindow、EvaMark、HeroCaption(+ Accent)、Cursor、Spotlight、StatCounter、SnapIn、tokens。
  • video/scripts/ 中的辅助脚本:stills.mjs、gen-music.mjs、check-audio.mjs。

制作新视频:为新故事重新捕捉屏幕,在 EvaHero.tsx 中编辑场景列表/字幕/时长,重新生成与剪切时间匹配的音乐,渲染,质量检查。

不可协商的默认设置(经验教训——只有充分理由才能更改)

每一项最初都是一个错误。除非用户覆盖,否则请保留。

  1. 1280×720, 30fps。 不是 1080p。eva UI 是一个密集的桌面应用;在 1080p 下在手机上显示“过于放大/过大”。720p 是 Twitter/X 上移动端友好的最佳选择。

  2. 以帧的原始布局捕捉,全出血显示。 捕捉时将浏览器视口设置为 1280×720,然后以 1:1 全出血 显示截图(填满整个帧)。单一最大质量杠杆:

    • 以 2560×1440 捕捉并缩小到 720p 会使 UI 文本大小减半 → 显得“缩小”且移动端不可读。
    • 将相机裁剪/缩放到某个区域会显示 UI 的尴尬碎片。
    • 1280 宽的布局以 1:1 显示 = 原生元素大小 = 可读 + “放大” + 清晰。

    零缩放就是零。 对于每个截图场景,PanScene 的 from/to 保持为 { scale: 1.0, fx: 0.5, fy: 0.5 }。即使 1.02–1.06 的“微妙推进”也会剪掉观众需要的 chrome——侧边栏标签、右上角的主按钮、统计页脚。同时,在截图周围传递 <SnapIn from={0.97}>:默认的 1.06 会向内弹入并裁剪每个切片的开场帧。动感来自硬切和字幕快照,而非相机移动。

  3. 真实画面,已完成状态。 使用 agent-browser 驱动真实应用。录制 已经完成的 工作(已合并的任务、差异、PR)——不要等待实时 agent 运行(沙箱已停止;实时运行缓慢且不稳定)。准备干净的输入(例如“新建任务”模态框中的一个整洁任务标题)。请参阅 references/capture-workflow.md。

    绝不提交——仅输入。 填写输入框、打开选择器、捕捉。不要在编辑器中按 Enter,不要点击发送箭头、创建、保存、运行或启动,也绝不要启动真实的会话或 agent 运行,即使是为了演示素材。提交会改变用户的真实工作空间并消耗真实计算资源;准备好的状态就是镜头所需的一切。仅在输入仅提交到字段本身且不触发其他操作时(从打开的选择器中接受 @ 提及)才允许按 Enter——否则点击选择器行。

  4. 快节奏、硬切、节拍同步。 总时长约 20 秒。在节拍上切换(使用 <Series>,避免长淡入淡出)并快速弹入字幕。使用 SnapIn 弹出场景——在标题/结束卡上使用裸 SnapIn,在截图周围使用 from={0.97}(见默认项 2)。无聊 = 太长 + 太多缓慢的淡入淡出。

  5. 音乐与每一次切换同步。 用户的长期偏好是低保真,"经典"变体,无拍手声——使用 gen-lofi-variants.mjs 生成,它会为每次切换标记温暖的弦乐渐强。它接受 --duration、--cuts、--only、--prefix 参数,因此新视频无需修改脚本:

    node scripts/gen-lofi-variants.mjs --duration=20.5 --cuts=2.5,5.5,8.5,11.5,14.5,17.5 \
      --only=classic --prefix=platform      # → public/audio/platform-music-lofi-classic.wav
    

    --cuts 必须与合成中的场景边界匹配。gen-music.mjs 是较旧的拍手声背景音乐——仅在用户明确要求时使用。请参阅 references/remotion-build.md → 音乐。

  6. 匹配 eva 的主题。 接近黑色 #050606、靛蓝强调色 #818cf8、品牌标志渐变紫 #8B3FB8 → 蓝 #3B7DD8、字体 Inter + JetBrains Mono。全部位于 video/src/components/tokens.ts。切勿发明品牌颜色。

  7. 诚实 + 保护机密。 使用用户自己的仓库(vvedantb/eva),绝不要使用客户仓库(Evalucom/CarePulse)。不要显示“代码库”首页(列出客户仓库),并在捕捉前检查文档/任务列表中是否包含客户命名的项目——如果列表不干净,准备一个干净的演示文档。切勿提出关于屏幕上姓名或电子邮件地址的个人数据担忧——设置 → 实验性功能中有一个模糊 PID 开关,可以模糊所有 [data-pii] 元素,因此产品中已处理此问题。如果错误面板泄露了环境变量名或项目 ID,请标记。字幕应如实描述——绝不要暗示屏幕未显示的功能。如果唯一可用的截屏是已停止的沙箱或空状态,请修改字幕以匹配屏幕,而不是美化它。

工作流程

按此顺序工作;在执行每个步骤之前,请阅读该步骤的参考文件。

  1. 规划故事。 默认英雄流程(8 个场景,约 20 秒):标题 → 描述任务 → Eva 编写代码 → 审查和合入 PR → 看板 → 项目 → 证明(计数统计数据) → 结尾。先选择场景和一行字幕。

  2. 捕捉素材 → 阅读 references/capture-workflow.md。启动应用(pnpm dev),以 agent 用户身份登录,设置视口为 1280×720,将每个屏幕截图保存到 video/public/captures/。

  3. 合成 / 编辑 → 阅读 references/remotion-build.md。编辑 EvaHero.tsx:场景列表、时长(节拍的倍数)、字幕、输入场景的光标路径。复用现有组件。

  4. 配乐 → 阅读 references/remotion-build.md → 音乐。使用与场景边界匹配的 --cuts(上述默认项 5)运行 gen-lofi-variants.mjs,将合成的 <Audio> 指向生成的文件,确认 MUSIC = true。

  5. 渲染 + 质量检查。 您无法直接预览 mp4(没有系统 ffmpeg,也无法观看视频)——因此使用定格帧进行质量检查,每个场景在场景中间取一帧:

    cd video
    node scripts/stills.mjs "40,110,200,290,380,470,560" EvaPlatform   # 第二个参数 = 合成 ID
    

    合成 ID 默认为 EvaHero——请显式传递它,否则您将检查错误的视频。读取 video/out/ 中的 PNG 文件,检查帧的每个边缘:右上角的主按钮是否完整、侧边栏标签是否完整、字幕是否与实时 UI 文本重叠。然后渲染并验证:

    npx remotion render EvaPlatform out/eva-platform.mp4 --codec=h264 --image-format=png
    node scripts/check-audio.mjs out/eva-platform.mp4   # 时长、1280×720、存在音轨
    

    --image-format=png 保持 UI 文本清晰。在定格帧上迭代直到正确,然后渲染。

快速参考

需求命令(从 video/ 目录运行)
实时预览 / 拖拽npm run dev (Remotion Studio)
捕捉单个画面bash scripts/shot.sh /vvedantb/eva/web/sessions sessions-list 4000
渲染一个合成npx remotion render <Id> out/<name>.mp4 --codec=h264 --image-format=png
质量检查特定帧node scripts/stills.mjs "40,110,200" <CompositionId>
重新生成音乐node scripts/gen-lofi-variants.mjs --cuts=… --only=classic --prefix=<name>
验证输出文件node scripts/check-audio.mjs out/<name>.mp4

现有合成

EvaHero(英雄流程)· SessionsDemo(云会话)· EvaPlatform(所有五个界面合为一体:会话 → 文档 → 测试区 → 看板任务 → PR 审查)· QuickTasksDemo(旧版)。在 video/src/Root.tsx 中以 1280×720 / 30fps 注册任何新合成。

之前耗费时间的陷阱

  • 登录 URL 是 /?agent=true(布尔值),不是 /?agent——路由将 agent 验证为 zod 布尔值,/?agent 会抛出“Expected boolean, received string”。如果回调在“Signing in…”处挂起并显示 You're already signed in,请直接导航到目标页面。
  • 开发工具栏会出现在截图中。 react-scan 会在 #react-scan-root 的 shadow root 中渲染 FPS 工具栏,agentation 会渲染到 [data-agentation-root] 中。仅靠样式表无法杀死 react-scan——其宿主元素带有内联样式,因此还需要在宿主元素上设置 display:none !important 内联样式。scripts/shot.sh 同时处理了这两者;请使用它而不是手写捕捉链。
  • 使用 timeout 将 agent-browser 调用链接到一个 Bash 命令中,并将长时间运行的操作放到后台。简单的打开 → 等待 → 截图链会超出工具超时时间。来自 snapshot -i 的引用在开发工具栏展开的瞬间就会失效——在隐藏覆盖层后、点击前重新快照。
  • 将所有 @remotion/* 包锁定到相同的精确版本,否则打包器会报错。
  • Claude 无法试听音乐。 背景音乐完全按要求执行(每次剪切时渐强),但请告诉用户实际聆听,如果他们想要,可以替换为有许可的曲目——设置 MUSIC=false 以静音。
  • 旧会话捕获中的沙箱已停止,因此每个会话屏幕都显示“Start the sandbox to…”。不要将其字幕描述为实时状态。captures/sessions/ 中没有任何内容显示正在运行的沙箱。
  • 字幕承载信息——大多数 Twitter 播放是静音的,因此每个场景都需要字幕。

详细操作方法:references/capture-workflow.md(素材)和 references/remotion-build.md(合成、主题、音乐、渲染、质量检查)。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能