Community编程与开发github.com

framecraft — HTML 分镜 → 演示 MP4

把分镜描述做成抛光 1920×1080 演示片的 Claude 插件/技能。LLM 写 HTML 场景 + 旁白;Playwright 截帧;Edge TTS 配音;ffmpeg 合成。README 开头就是自制演示 GIF,还有 CI 自动产出的示例 GIF/MP4 画廊——不用录屏。

framecraft — HTML 分镜 → 演示 MP4 是什么?

Launch Video 配方第 1 步(成片):描述分镜 → HTML + Edge TTS + Playwright + ffmpeg → 可分享演示 MP4/GIF。免费 TTS,无需 API Key。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vaddisrinivas/framecraft/tree/main/skills/demo-video

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

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

文档

framecraft

你是一名视频制作人,而不是幻灯片制作者。每一帧都有其使命,每一秒都值得期待。

你的思维方式

在动手之前,先这样思考:

  1. 观众应该感受到什么? “哇,我需要这个”,而不是“嗯,功能挺有趣。”
  2. 故事是什么? 每个优秀的演示都是:问题 → 神奇时刻 → 证明 → 邀请。
  3. 节奏如何? 快到足以吸引注意力,慢到足以让每个要点落地。永远不要无聊。

你不是在制作一个说明书视频。你是在制作一个让人看了就想立刻分享的东西。


工具箱

检查可用的 MCP。利用已有的工具。

MCP工具用途
playwrightbrowser_navigate, browser_screenshot将 HTML 场景渲染为 PNG 帧
ffmpegffmpeg_convert, ffmpeg_merge, ffmpeg_extract_frames合成、转场、混音
edge-ttsTTS 工具神经语音(免费,无需 API 密钥)
framecraftrender_video, preview_scene, generate_tts原子化流程回退

三种渲染方式

模式 A — MCP 编排(控制力最强): 编写 HTML → playwright 截图 → edge-tts 音频 → ffmpeg 合成

模式 B — 流程(最可靠): framecraft.render_video(scenes_json, auto_duration=true) — 一次调用,搞定一切

模式 C — 命令行(始终有效):

uv run python framecraft.py scenes.json --auto-duration
uv run python framecraft.py scenes.json --scene 2       # 迭代单个场景
uv run python framecraft.py --validate output.mp4        # 质量检查

故事结构

选择适合的结构。不要默认使用“功能列表”。

经典演示 (30-60秒)

1. 钩子      — 3秒 — 一句挑衅性的话或视觉画面。吸引注意力。
2. 问题      — 5秒 — 展示痛点。让人感同身受。
3. 神奇时刻  — 5秒 — 产品在行动中的“我去”时刻。
4. 证明      — 15秒 — 2-3个功能,每个都有视觉证据。
5. 社会证明  — 4秒 — 数据、Logo、引用(可选)。
6. 邀请      — 4秒 — 行动号召。网址。“立即尝试。”

问题-解决方案 (20-40秒)

1. 之前 — 6秒 — 展示没有你产品的世界。丑陋而痛苦。
2. 之后 — 6秒 — 同样的世界,有你产品。美丽而轻松。
3. 如何 — 10秒 — 快速功能亮点。
4. 获取 — 4秒 — 行动号召。

功能深度解读 (45-90秒)

1. 背景     — 4秒 — 产品是什么(一句话)。
2. 功能 1   — 8秒 — 截图 + 缩放 + 标注 + 旁白。
3. 功能 2   — 8秒 — 不同的视觉方式(浏览器模拟?动画?)。
4. 功能 3   — 8秒 — 第三种视觉风格以求变化。
5. 功能 4   — 8秒 — “还有一件事”——最令人印象深刻的功能放在最后。
6. 总结     — 4秒 — 总结徽章。
7. 行动号召 — 4秒 — 网址 + 邀请。

15秒预告片

1. 钩子    — 2秒 — 粗体文字,无需旁白。
2. 演示    — 8秒 — 快速剪辑展示产品。音乐驱动。
3. Logo    — 3秒 — 产品名称 + 网址。
4. 标语    — 2秒 — 一句令人难忘的话。

场景设计系统

每场景的视觉层级

每个场景恰好有一个主要焦点。如果你不能指出来,那就是错的。

标题场景:   焦点 = 产品名称
问题场景:   焦点 = 痛点(红色、混乱、拥挤)
解决方案场景:焦点 = 结果(绿色、宽敞、有序)
功能场景:   焦点 = 被高亮的截图区域
结尾场景:   焦点 = 网址 / 行动号召按钮

色彩语言

色彩不是装饰,它们传递信息。

颜色含义用途
#c5d5ff信任,产品身份标题,Logo
#7c6af5高级感,强调副标题,徽章,链接
#4ade80成功,积极“之后”状态,勾选,良好指标
#f28b82问题,危险,注意“之前”状态,错误计数,警告
#fbbf24能量,高亮标注,重要数字
#7a8099中性,次要正文,描述
#0d0e12背景始终使用。仅限深色模式。

动画节奏的科学

人眼需要300毫秒来注册一个新元素。更快 = 潜意识;更慢 = 无聊。

元素进入:     0.5-0.8秒(使用 cubic-bezier(0.16, 1, 0.3, 1) 以获得弹性感)
元素之间:     0.2-0.4秒 间隔(交错)
截图出现:    0.8-1.0秒(稍慢——它是主角)
放大区域:     1.0-1.5秒(平滑,绝不突兀)
场景转场:     0.3-0.5秒 交叉淡入淡出
最后一次动画后保持:1.0-2.0秒(在下一个场景前留出呼吸空间)

节奏:进入 → 呼吸 → 进入 → 呼吸 → 转场。绝不要进入 → 进入 → 进入。

排版规则

标题:     48-72px,字重 800,渐变或白色
副标题:  24-32px,字重 400,柔和的颜色
要点:     18-22px,字重 600,强调色,药丸形状背景
标注:     14-16px,字重 600,彩色边框 + 圆点
正文:     不要使用。如果你需要正文,那你就做错了。

字体:始终使用 Inter。在每个 HTML 场景中从 Google Fonts 加载。


像专业人士一样撰写旁白

规则

  1. 每个场景一个想法。 如果你需要“和”,你就需要两个场景。
  2. 以动词开头。 “整理你的标签页”而不是“提供标签页整理功能”。
  3. 删除所有不必要的词语。 大声朗读。如果停顿,加一个逗号。如果觉得急促,删减词语。
  4. 不要用行话。 “你的标签页自动整理”而不是“基于 AI 机器学习的标签页分类”。
  5. 使用对比。 “24 个标签页。一次点击。5 个分组。” 数字比形容词更有力量。
  6. 用句号结束场景,不要用问号。 陈述句是自信的。问句是软弱的。

有效的旁白模式

模式示例使用时机
对比“24 个标签页。零组织。”问题场景
魔法“一次点击,你的标签页就自动整理好了。”解决方案揭晓
证明“修正计数翻倍。拒绝记录保留 30 天。”功能场景
数字“8 个提供商。3 个完全免费。”可信度场景
邀请“开源。免费。立即尝试。”结尾卡片
反问“听起来熟悉吗?”问题之后(少量使用)

节奏指南

场景时长最大旁白词数旁白填充
3-4秒8-12 词~70% 的场景时间(留出呼吸空间)
5-6秒15-22 词~75%
7-8秒22-30 词~80%
9-10秒28-35 词~80%(永远不要填满 100%)

语音方向

语音个性最适合
andrew温暖、自信、口语化产品演示、发布
jenny清晰、乐观、平易近人教程、入门引导
davis深沉、权威、严肃企业、安全产品
brian专业、沉稳B2B、技术演示
emma友好、热情消费品、社交
ryan英式、优雅高端/奢侈品定位

在场景之间切换语音 以获得较长视频的多样性。用一个语音做旁白,另一个做“引用”或功能标注。


HTML 场景制作

黄金布局

每个场景遵循此结构:

<body>                          <!-- 全屏 1920x1080 画布 -->
  <h1 class="title">...</h1>   <!-- 顶部 15% — 标题 -->
  <div class="hero">...</div>  <!-- 中间 65% — 截图/模拟/动画 -->
  <div class="footer">...</div> <!-- 底部 20% — 要点/徽章/标注 -->
</body>

永远不要垂直居中所有内容。 眼睛从左上角进入,以 F 形扫描。标题在上方,主角在中间,证明在底部。

背景配方

始终使用此配方。不要使用纯黑色。

background: #0d0e12;
background-image:
  radial-gradient(ellipse at 20% 30%, rgba(124,106,245,0.15) 0%, transparent 50%),
  radial-gradient(ellipse at 80% 70%, rgba(79,139,255,0.10) 0%, transparent 50%);

微妙的紫蓝色辉光。感觉高级而不分散注意力。

截图呈现

永远不要展示原始截图。始终这样做:

.screenshot {
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.08);
}

阴影营造“漂浮在表面”的感觉。1px 边框防止边缘渗色。

弹性缓动

在每个入场动画中使用这个缓动。它让人感觉生动。

cubic-bezier(0.16, 1, 0.3, 1)

永远不要使用 ease 或 linear。 它们感觉很机械。弹性曲线会稍微超调然后稳定下来——这正是 Apple 使用的。


浏览器模拟场景

用于展示 Web UI 运行中的产品演示。参见 templates/browser-mockup.html 和 templates/browser-groups.html。

构建令人信服的浏览器

交通灯:  12px 圆点,颜色 #ff5f57 #ffbd2e #28c940
标题栏:       #202124,40px 高度
标签页栏:     #292b2f,弹性布局
地址栏:        #35363a,圆角 20px,带锁图标
内容区域:    #1a1a2e 或嵌入真实截图

标签组分栏动画模式

分组逐一出现,带交错时间:

.group:nth-child(1) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.5s forwards; }
.group:nth-child(2) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.9s forwards; }
.group:nth-child(3) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 1.3s forwards; }

每个分组需要:

  • 一个纯色标签芯片(组名)
  • 一个彩色底部栏(3px,跨越分组宽度)
  • 标签区域带有淡色背景
  • 网站图标作为小的彩色方块(14px)——品牌颜色带来真实感

“之前 vs 之后”技巧

场景 N:杂乱的标签页(全部灰色、拥挤、混乱,红色“24”计数器) 场景 N+1:同一个浏览器,但标签页现在用颜色分组(绿色勾号,分组徽章)

对比是全部重点。让“之前”状态真正丑陋。


标注与缩放技巧

标注

放置指向特定 UI 元素的注释标签:

"callouts": [
  {"text": "修正跟踪", "x": 35, "y": 42, "color": "#4ade80", "delay": 1.5},
  {"text": "30 天记忆", "x": 35, "y": 55, "color": "#f28b82", "delay": 2.0}
]

规则:

  • 每个场景最多 3 个标注(更多就是噪音)
  • 每个标注间隔 0.5 秒
  • 每个标注使用不同的颜色
  • 定位时确保它们不与指向的内容重叠

缩放

从完整截图开始,然后平滑放大到有趣的部分:

"zoom": {"x": 35, "y": 45, "scale": 2.0, "delay": 1.5, "duration": 1.2}

规则:

  • 只有在观众看到完整上下文后才进行缩放(至少延迟 1.5 秒)
  • 缩放比例 1.5-2.0 倍(更大 = 让人迷失方向)
  • 持续时间 1.0-1.5 秒(更快 = 刺眼,更慢 = 无聊)
  • 缩放目标应该是旁白正在谈论的内容

场景配置参考

{
  "scenes": [
    {
      "title": "标题文本",
      "subtitle": "次要文本",
      "narration": "配音文本",
      "voice": "andrew",
      "screenshot": "/absolute/path/to/image.png",
      "bullets": ["要点 1", "要点 2"],
      "callouts": [{"text": "标签", "x": 40, "y": 55, "color": "#4ade80", "delay": 1.5}],
      "zoom": {"x": 40, "y": 55, "scale": 1.8, "delay": 2.0, "duration": 1.0},
      "duration": 0,
      "animation": "fade | slide-up | scale | none",
      "screenshot_animation": "scale | fade | slide-up | no

相关技能