产品发布
如何使用本手册。 这是一份食谱,而不是一套规则:以下所有格式、时长、节奏和公式都是默认值,用户的要求优先。不要以提问开头:使用默认值,构建,并在分享第一个渲染版本时用一行文字说明你选择的默认值(仅在缺少关键内容时才提问,例如素材本身)。第一个渲染版本即是提案,因此无需先审批计划。仅在用户要求先查看镜头时,才制作故事板。方法中提到的计划文件(如
BRIEF.md、PLAN.md等)是你自己的工作笔记:在它们对你有帮助时编写,永远不要将其作为用户的步骤。
输入产品,输出精致的发布视频。就像你在X上看到的SaaS团队发布的内容:一个点出痛点的钩子、产品名称在节拍上落地、三个在真实界面中展示的功能、用户证明以及一个干净利落的结尾卡片。音乐驱动,通常无旁白,时长20-60秒。
参考构建:Moritz的Notion发布演示(46秒,16:9,无旁白,120 BPM)。九个画面:暗色背景上的散落工具钩子、在节拍上落地的Logo和旋转标题、浮动窗口中的真实英雄视频、三个基于真实Notion UI构建的功能画面(捕获、提问、代理)、一个用例滚动、带统计数据的Logo墙、以及一个行动号召锁定画面。其计划位于references/example-notion.md中。请达到该水准。
方法是固定的;工具是可变的。如果项目已有视频工具,请使用它。如果没有,则启动一个Hyperframes项目(npx hyperframes init),并将template/hyperframes/复制为起始合成。
以下<playbook>指的是此文件夹(get_playbook返回的本地路径)。
输入与输出
- 输入: 要发布的内容(URL、应用本身、截图、录制、简介或粘贴的脚本)、目标受众、发布位置。可选:品牌文件、旁白脚本、音乐轨道。
- 输出: 一个20-60秒的mp4文件(默认为16:9,可根据要求设为9:16或1:1),包含真实产品UI、动态排版、音乐和音效(均在同一节拍网格上),并在FrameJam中经过评审和批准。
默认值(用户的请求将覆盖任何默认值)
从请求和文件中梳理这些。如果未提及,则使用默认值并继续;仅在缺少关键内容时才提问。
- 一行承诺。 观众应记住的内容。其他所有内容都是它的证据。
- 时长和格式: X Feed 30-45秒 16:9(默认);落地页英雄视频 30-45秒 16:9,默认静音播放;Reels 9:16 ≤ 30秒。
- 声音: 仅音乐(默认,自动播放时静音,因此文字承载故事)或旁白+音乐。
- 真实UI来源: 运行中的应用(录制它)、网站(捕获截图及其英雄视频)或用户提供的文件。如果没有真实内容可展示,请说明;不要凭空发明界面。
- 风格: 使用为此视频选择的风格(如果有),来自
wait_for_pick,或当用户指定预设时来自get_preset。如果用户选择了FrameJam风格,它将决定整体外观(调色板、字体、动态感觉、过渡)。无风格:从产品本身品牌(颜色、字体、UI表面)推导外观。 - 事实: 统计数据、客户Logo和声明仅来自产品自身网站或用户。不要编造数字。
- 音乐: 默认使用附带的免费脚本(
scripts/launch_bed.py)、用户拥有的音乐轨道或已授权的库音乐。生成音乐服务是付费的;在使用前请停止并询问。
使用其他工具创建的现有项目: 保留在该工具中。方法(节拍网格、故事板、浮动窗口中的真实UI、节奏性揭示、验证、FrameJam循环)和脚本(launch_bed.py、sheet.sh)适用于任何工具。
当未指定任何内容时:仅音乐、16:9、约40秒、使用产品品牌外观。在分享第一个渲染版本时,说明你使用的默认值。
工作流程
1. 收集真实产品
在编写任何代码之前收集素材。详情见references/assets.md。
- 应用: 录制每个功能的简短、干净片段(每次操作一个片段,宽度至少2880像素,无通知,使用逼真的演示数据)。记录事件的时间点(点击发生的时间、结果出现的时间)。
- 网站: 保存英雄视频、全页和区域截图(2倍大小)、Logo(SVG)、字体、确切的标题、统计数据和客户Logo。Hyperframes用户可运行
npx hyperframes capture <url> -o capture。 - 编写
ASSETS.md:每个文件一行,说明其内容、大小,对于视频还需说明关键时间点(秒)。 - 品牌真实:颜色(主色调、背景色、一个强调色)、展示字体和正文字体、UI外观(圆角、阴影、镀铬效果)。
2. 故事与节拍网格
阅读references/story.md。然后编写STORYBOARD.md:
- 选择一个叙事弧(问题→平台、演示循环、前后对比、功能级联)。用一行写下承诺。
- 6-10个画面。每个画面有一个任务:钩子、产品介绍、功能、好处、用户证明、行动号召。功能应展示为真实界面上一个简短序列(输入→操作→结果),而不是静态截图。
- AI代理和助手: 展示一个完整的真实请求:输入并发送,变为消息,代理步骤逐一出现(较早的步骤变暗),结果以精确事实和勾选标记呈现为卡片,画面在锁定前停留在结果上。请求和结果应是具体的(名称、时间、计数),绝不能用占位文本。
- 钩子时长3-4秒,且在静音状态下有效:用观众自己的话表达他们的痛点或欲望,绝不要说“X是一个平台……”。
- 先定节拍网格。 选择节奏(110-128 BPM;120 BPM时一拍0.5秒,一个小节2秒)。每个画面在强拍上开始,并持续整数个小节。标记重点节拍:通常是产品名称和用户证明部分。每个画面中的每次揭示都在节拍上。
- 有旁白时:编写
SCRIPT.md,为每个画面写简短提示(6-20个词),让旁白决定画面时长;音乐仍在其下方遵循网格。 - 在顶部写一个
## 视频方向区块:调色板角色、排版角色、窗口如何进入、动态规则、哪些画面是暗色“冲击”画面、什么内容绝不出现。
然后开始构建;第一个渲染版本就是提案。如果用户想先查看画面,请草拟它们,并在FrameJam中以故事板形式评审:open_review,使用panelsDir参数(每个画面一张图片,命名为01-hook.png……),然后wait_for_feedback。
3. 镜头设计
对于每个画面,针对节拍网格编写一个带时间码的镜头表(references/shots.md):
场景1(0.0-0.5秒):……,描述屏幕上显示什么、位置在哪里、如何移动。规则:
- 在t=0时只显示第一个内容。其他每个元素在其节拍(或其对应台词)到达。绝不要在整个画面的前四分之一塞满所有内容然后让它静止不动。
- 真实UI放置在一个浮动产品窗口中(品牌圆角、细边框、柔和的分层阴影),进入时有3D稳定效果。绝不截断UI文本中间的字。只重构必须移动的组件(例如一个正在输入文字的搜索框)。
- 每个画面使用一个强调色,每个标题突出显示一个词。
- 每个画面在结束时保持可读状态。静态稳定性优于懒散的呼吸效果或漂移的摄像机。
- 画面间过渡:默认在节拍上硬切;章节变化时使用缩放穿越;连续功能展示时使用推拉滑动。
4. 音乐与音效
阅读references/music.md。默认免费路线:从故事板编写cues.json(以小节为单位的段落、重点节拍,以及每次重击、弹出、点击、键盘输入和窗口进入的音效),然后运行
uv run <playbook>/scripts/launch_bed.py cues.json --out assets/music/bed.wav(或使用python3,需要安装numpy、scipy和soundfile)。音效来自同一提示表,因此它们精准落在剪辑点上。如果用户带来一条音轨:测量其节奏,使网格与之对齐,并从音轨最强部分开始,而不是缓慢的前奏。
5. 构建
在项目的工具中逐画面构建。Hyperframes的注意事项(及我们遇到的陷阱)见references/hyperframes.md;起始模板为template/hyperframes/。
- 每个画面一个合成,或对于短片段,一个文件每层对应一个画面。保持画面本地时间。
- 使用显式起始状态进行动画(可安全查找)、长尾缓动(
power3/expo.out)、无弹跳、无无限循环、无随机性。 - 产品视频:为每个
<video>元素指定id;通过移动包装div来实现摄像机移动,而不是移动视频元素本身。 - 如果使用了并行子代理,给每个代理一个画面:该画面的故事板区块、
## 视频方向、使用的资产行,以及“仅编辑你的文件”。否则,自行按顺序构建。
6. 检查、渲染、评审
- 在工具中检查/整理,然后渲染至新文件,每次一个版本(
renders/v1.mp4、v2.mp4……)。 - 运行
bash <playbook>/scripts/sheet.sh renders/v1.mp4生成2帧/秒的联系表;阅读它。查看每个画面的中点以及每个剪辑点两侧。检查:无信息过载(初始部分未塞入过多内容)、无文本被裁剪或位于字幕带下方、无接缝处弹出、产品名称在节拍上出现、结速卡片保持≥1.5秒。 - 运行
ffmpeg -i renders/v1.mp4 -vf freezedetect=n=0.003:d=2 -f null -标记静止片段;仅在你计划停留之处允许静止。 - 在FrameJam中评审: 使用渲染版本路径(绝对路径)运行
open_review,指定videoPath参数,在内置浏览器中打开URL,然后wait_for_feedback。根据时间戳将每条反馈映射到对应的画面,修复,渲染v2,再次验证,然后使用一行说明运行add_version并再次等待。重复此过程,直到获得批准。 - 交付最终的mp4文件(X平台:H.264,≤ 2:20,≤ 512 MB),附上其时长和画面列表。
质量标准
- 真实产品,真实呈现: 每个UI镜头都是真实录制或截图。文案、统计数据和Logo均来自产品自身来源。第三方Logo仅在产品本身展示它们时(如集成、客户)才能出现。
- 承诺在第二个画面中落地。 钩子直击观众的痛点或欲望;产品名称在节拍上出现。
- 每次揭示都在节拍上(或其对应台词), 并且音乐、音效和剪辑共享同一个网格。
- 一目了然: 每个标题1-7个词,1080p下至少64像素,每个画面一个焦点。
- 高级动态: 平滑稳定、带深度感的窗口、速度匹配的接缝;无弹跳、无屏幕保护程序式浮动、无用于替代产品的通用股票形状。
- 静音下有效: 故事仅通过文字和UI传达。
- 每次FrameJam评审前,自己先观看(联系表+剪辑检查)。
本手册中的文件
references/story.md:叙事弧、画面角色、钩子类型、每种角色的经证实的台词形式、旁白规则。references/shots.md:发布画面的镜头形状、布局和动态规则、接缝、一个示例式镜头表。references/assets.md:录制应用、捕获网站、资产列表、权利。references/music.md:节拍网格、cues.json格式、使用自有音轨。references/hyperframes.md:在Hyperframes中从头开始、产品窗口、视频和音频、陷阱。references/example-notion.md:Notion发布演示的计划,逐画面详解。scripts/launch_bed.py:根据提示表生成免费本地背景音乐和音效的脚本。scripts/sheet.sh:生成任何渲染版本的联系表的脚本。template/hyperframes/:起始合成(节拍网格助手、产品窗口、动态线条、标签、行动号召卡片)。