Communitygithub.com

rendydev404/demotion

Membuat (atau memperbarui) video demo produk/sistem OTOMATIS dengan Remotion — rekaman layar bergaya Screen Studio memakai tampilan ASLI aplikasi (kelas Tailwind & markup disalin dari kode), kursor yang bergerak natural + klik, zoom kamera, gulir halus, caption edukatif tentang product knowledge, potong & percepat ke 1-2 menit, render 1080p 60fps lalu kompres untuk dikirim. Pakai setiap kali user minta 'buat demo', 'video demo', 'demo sistem', 'screen recording', 'walkthrough', 'product tour', '

demotion 是什么?

Demotion是一个由AI驱动的技能,用于自动生成产品演示视频,使用Remotion来精确复制真实UI(从代码中复制Tailwind类及标记),而不是模拟。其核心原则包括:以代码为唯一真实来源(所有UI文本、价格、配额等均从代码中读取)、通过时间函数计算所有动画(帧之间无状态)、并生成时长1-2分钟、1080p 60fps的MP4文件。工作流程涵盖:研究产品代码以验证声明、创建故事板(8-14个场景)、搭建Remotion项目、移植UI组件和编写场景、应用剪辑和加速、通过静帧和预览视频进行视觉验证,最后渲染并压缩。该技能支持Indosia语界面,可处理从零开始创建新演示视频或基于git diff更新现有演示视频的场景,并配有全面的参考文档(架构、陷阱、故事板等)。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/rendydev404/open-skill/tree/HEAD/skills/demotion

在你喜欢的 AI 中提问

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

文档

demotion — 通过真实应用界面自动生成系统演示

最终产物:一个 .mp4 文件(1920x1080,60 fps,1-2 分钟),看起来像是专业录制的应用屏幕录像,但完全由 Remotion 代码驱动,因此流畅(无真实录制的卡顿)、可重复,并在功能变更时易于更新。

工作语言:中文(回复、总结、视频字幕)。不要打开 Chrome 或登录本地应用来“查看”UI:界面的真实来源是代码;输出通过 Remotion 静帧/视频检查。

不可违反的原则

  1. 真实 UI,而非模仿。 复制应用程序代码中的标记 + Tailwind 类字符串 + 颜色令牌 + 字体。UI 文本(标题、标签、提示、消息)需精确复制。不要绘制“相似”的内容。
  2. 产品真实性源于代码。 字幕中的每个声明(价格、配额、默认值、限制、谁支付什么)都必须从代码/配置中读取,而非记忆或猜测。真实示例:“机器人测试消耗配额吗?” → 检查其 API 路由和使用记录函数后再编写字幕。代码中不存在的内容不得声明。
  3. 所有运动基于视频时间计算。 无 CSS 动画/过渡、无 setTimeout、无跨帧状态/缓存:每个帧 = t 的纯函数。(并行渲染将帧分配到多个标签页。)
  4. 虚拟数据一致且安全。 一个虚拟企业/角色,占位号码/电子邮件/账户,所有场景中使用相同数字。不要使用真实客户数据。对于“几天后”的统计,添加“示例数据”字幕。
  5. 时长 1-2 分钟,除非另有要求:剪掉等待部分,加快打字/加载速度(3-8 倍),并附上“4x”徽章;需要阅读的部分保持 1-2 倍速度。字幕在加速后必须至少可读 1.2 秒。
  6. 用眼睛验证:在关键帧渲染静帧并查看(读取图像)后再进行最终渲染。

工作流程

阶段 0 — 检测与目标

  • 查找已有演示:**/src/demo/kit/stage.tsx。存在 → 不要重新搭建脚手架;进入“更新演示”。
  • 不存在 → 需要视频项目。默认位置:<repo>/video/(独立文件夹;如果仓库使用 Next/ESLint,则添加到根 tsconfig 的 exclude 和 ESLint 的 globalIgnores,以避免应用构建/CI 检查它)。
  • 仅一次询问无法推断的事项:目标时长、是否有音频/旁白、必须展示的部分。默认:中文字幕、无旁白、≤2 分钟、从零开始到主要功能的用户旅程。

阶段 1 — 产品研究(读取代码,而非猜测)

对于每个要出现的页面/功能,读取:路由(app/**/page.tsx)、组件、UI 文本、套餐/价格/配额、默认规则、限制、引导/入门文本(这是最佳产品知识来源)、支付流程、角色。记录在 referensi/storyboard.md 中,格式为:页面 → 展示内容 → 字幕 → 已验证的声明(文件:行号)。必要时将大量代码阅读分配给子代理 Explore;最终决策仍由您负责。

阶段 2 — 故事板

按照用户旅程编排 8-14 个场景(落地页 → 注册 → 开始/引导 → 核心设置 → “哇”时刻 → 监控 → 支付/订阅 → 行动号召)。每个场景:目标、原始时长、光标步骤、字幕。查看 referensi/storyboard.md(字幕模式、节奏、章节标签“N · 名称”)。

阶段 3 — 搭建脚手架

node "$HOME/.claude/skills/demotion/skrip/scaffold.mjs" --dest <repo>/video --nama "产品名称" --domain produk.com --aksen "#3ddc97" --install

复制引擎(src/demo/kit/*)、Root 框架、示例场景、Tailwind v4 配置。然后:

  • 将应用程序 CSS 的颜色令牌 + 组件类复制到 src/demo/index.css(移除动画/过渡)。
  • 将 src/demo/fonts.ts 中的字体替换为应用程序使用的字体(@fontsource/<名称>);加载所有使用的字重。
  • 在 config.ts 中填充 BRAND(名称、域名、深色背景上的强调色)。
  • 测试:REMOTION_FPS=30 npx remotion still src/demo/index.ts S-示例 out/uji.png --frame=270 --config=remotion.demo.config.ts。 有真实场景后删除 scenes/contoh.tsx。

阶段 4 — 移植 UI 并编写场景

  • 产品组件 → src/demo/pages/*.tsx(复制标记/类;用静态 props 替换数据和处理程序)。通用原子组件在 kit/atoms.tsx;WhatsApp 手机在 kit/phone.tsx。
  • 一个场景 = 一个文件 scenes/<id>.tsx,导出 DUR(原始秒数)和组件;在 scenes/index.ts 中用 buat("<id>", Komp, DUR_X) 注册。完整模式:templat/src/scenes/contoh.tsx 和 referensi/arsitektur.md(Stage API:光标/滚动/相机/聚光,data-cur,与 T 一起的事件时间)。
  • 侧边栏/模态框/引导 = fixed 层(不随滚动移动),页面内容 = children。
  • 场景数 ≥6 且独立 → 通过分叉并行化(参见 referensi/brief-fork.md);您首先编写共享框架(数据、多个场景使用的页面)。

阶段 5 — 剪辑与加速

在所有场景以 1x 速度正确后,填充 scenes/potong.ts(每个场景的片段 S(a,b,v))。通过 npx remotion compositions src/demo/index.ts --config=remotion.demo.config.ts 检查总时长(Demo 的时长列)。

阶段 6 — 验证

  1. npx tsc --noEmit -p tsconfig.json
  2. 低成本预览:REMOTION_FPS=30 npx remotion render src/demo/index.ts Demo out/preview.mp4 --config=remotion.demo.config.ts --crf=26 --scale=0.5 --concurrency=10 --gl=angle
  3. 接触片:python "$HOME/.claude/skills/demotion/skrip/lembar-kontak.py" out/preview.mp4 --tiap 5 然后读取图像。
  4. 检查:文本截断、字幕覆盖被点击的按钮、光标偏移、数字不一致、声明错误、布局跳跃、空白/过长时刻。

阶段 7 — 最终渲染与发送

powershell -File "$HOME/.claude/skills/demotion/skrip/bersihkan-proses.ps1"   # 如果有旧渲染则必须执行(如果用户正在使用 Studio,则添加 -JanganStudio)
cd <repo>/video && REMOTION_FPS=60 npx remotion render src/demo/index.ts Demo out/demo.mp4 --config=remotion.demo.config.ts --codec=h264 --crf=17 --concurrency=10 --gl=angle

在后台运行(run_in_background),无小 timeout。预计:约 12-18 帧/秒(GPU),2 分钟 60 fps ≈ 7,000 帧 ≈ 8 分钟。完成后 → 检查 ffprobe(时长,1920x1080,60 fps)+ 一帧,如果 >30 MB 则运行 node ".../skrip/kompres.mjs" out/demo.mp4 out/demo-ringan.mp4 --crf 24 并使用 SendUserFile 发送(限制 30 MB;完整文件保留在磁盘上,告知用户)。

更新现有演示

通过 git diff/git log 查看更改的页面/文本 → 仅更新相关场景及 pages/*(从代码重新复制标记),再次检查字幕声明,调整 potong.ts,验证该场景的静帧,然后重新完整渲染。

曾遇到的陷阱(开始前阅读 referensi/jebakan.md)

React is not defined(模块级别的 JSX)· 跨帧缓存导致光标跳跃 · 孤儿渲染进程消耗 CPU · blur/backdrop-filter 使渲染慢 3 倍 · Tailwind 断点使用无头窗口宽度 · sticky 在滚动内容中失效 · 并行渲染 + 未完成文件破坏 bundle · Remotion 的 ffmpeg 没有 fps/tile 滤镜 · 功能声明错误被用户发现。

本技能中的参考资料

  • referensi/arsitektur.md — 引擎 API(Stage,光标/滚动/相机/聚光步骤,时间映射,工具包)
  • referensi/jebakan.md — 陷阱列表及解决方案
  • referensi/storyboard.md — 如何编排场景、字幕、节奏、研究清单
  • referensi/brief-fork.md — 用于通过子代理分叉编写场景的简要模板
  • referensi/render.md — 渲染命令、速度、GPU、压缩、发送
  • templat/ — 脚手架复制的代码 · skrip/ — 脚手架、进程清理、接触片、压缩
  • 一个包含 13 个场景的真实示例(落地页 + 滚动、聚光引导 + 对话框、手机扫描二维码、分屏仪表盘 + 手机、页面跳转 + 支付)来自作者的项目 ChatGerCep;其模式在 templat/src/scenes/contoh.tsx 和 referensi/arsitektur.md 中。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能