Motion Reel Studio
生成可编辑的动画项目和验证过的影片,而不仅仅是提示或 HTML 预览。改编自 Movez 的课程;实现和修正记录在 出处 中。适用于任何有代码能力的智能体;无需特定模型、付费服务或外部技能。
范围和起始决策
阅读用户的简报和现有的项目说明。保留所要求的引擎、外观、音乐和格式。如果项目已使用 Remotion 或 HyperFrames,则扩展它;查阅该框架的已安装说明/当前文档。否则使用捆绑的 Canvas + Playwright + FFmpeg 启动器。以下命令仅适用于此默认路径。
确定主题/产品 URL、目的、时长、宽高比、参考、品牌资产和声音。推断提供的答案;仅询问重要的缺失输入。对于开放式展示片,选择一个并说明一个概念:15 秒、1080×1920、60 fps 和原始合成音频。不要编造产品声明或截图。如果真实产品资产不可用,则收集它们,或明确标记为授权概念演示。
在用户的工件位置内创建制作。在 X 仓库中,对新影片使用 posts/<slug>/,并将所有资产保持在那里。不要在仓库根目录安装项目文件。技能本身保留在个人技能目录中。默认情况下,在本地工作,不产生 API 开销;请求的提供商需要可用的工具、凭证和授权的预算。发布是单独的操作。
制作工作流程
- 参考和资产。 检查提供的图像。对于视频参考,每 0.5–1 秒提取帧,并检查剪辑周围的运动。使用浏览器工具捕获实际产品状态;在
docs/assets.md中保留原始 URL 和捕获日期。本地下载字体/图像,并等待解码。编写docs/style-guide.md:调色板、排版、空间层次、镜头节奏、过渡语言、摄像机、纹理、要借鉴的内容和要避免的内容。没有参考时,明确定义原创视觉方向。 - 导演简报。 阅读 方向 以了解请求的模式。编写
docs/brief.md和docs/shotlist.md;每个镜头都有目的、开始/结束帧、确切的文案、视觉状态、摄像机、过渡、声音提示和资产。对画面和音频使用单一时间线。展示简洁的计划,并在授权请求范围内进行。仅在用户要求计划/批准关口时等待;沉默绝不提供该批准。 - 声音和节拍。 阅读 音频和执行。分析提供的音乐或合成配乐;保存
beats.json和cues.json。节拍检测器不能确定小节强拍。标记估计值,并在设计小节级动作前确认第一个强拍。保持要求不更改的曲目不变;未经许可不得拉伸或归一化该源文件。 - 静帧和动态故事板。 构建主要构图,并在润色动态前对每个镜头进行采样。以相同宽高比渲染低分辨率动态故事板,并配以预期的节拍网格。检查其节奏和手机可读性。对于长片,在实现章节之前维护角色圣经和章节时间契约。除非独立授权,否则不要委托。
- 动画。 将
window.seek(t)实现为纯时间到帧的映射。使用闭式弹簧轨迹;每帧播种和重置过程随机性,或从时间和元素标识推导噪声。在渲染模式下,没有持续集成、定时器、CSS 过渡或壁钟采样。本地资产准备属于window.ready。为每种宽高比做出响应式构图决策;不要将宽屏最终版裁剪成竖屏。 - 批评和修正。 阅读 审查。检查联系表、快速运动周围的连续帧,以及如果播放工具可用时的实际播放。每轮修复最多三个影响最大的缺陷,并重新渲染受影响的区间。默认使用最多三轮集中修正;当满足简报且没有重要问题剩余时停止,或报告具体障碍。永远不要通过提高自我评分来制造通过。静态图像无法验证音频或运动播放。
- 最终和交付。 渲染请求的分辨率,混合音频,创建 QA 表,并验证流元数据、时长、帧计数和完整解码。交付
out/final.mp4、海报、联系表、源文件、一个可重现的命令以及简洁的剩余限制。仅对请求的循环包含out/loop-check.mp4。公共副本遵循项目的写作规则,并在可用时进行最终人性化处理。
包含的工作工具链
在运行之前阅读 执行。将 <skill> 替换为此 SKILL.md 的目录,将 <project> 替换为所选影片目录。
python3 <skill>/scripts/init_project.py <project>
cd <project>
npm install
npx playwright install chromium
node render.mjs --width 360 --height 640 --fps 30 --out out/animatic.mp4
python3 audio.py synth --duration 15 --bpm 120 --out out/score.wav --beats beats.json
python3 audio.py sfx --duration 15 --cues cues.json --out out/sfx.wav
node render.mjs --width 1080 --height 1920 --fps 60 --sub 4 --out out/silent.mp4
python3 finish.py mix --video out/silent.mp4 --music out/score.wav --sfx out/sfx.wav --out out/final.mp4
python3 finish.py qa --video out/final.mp4 --out out/qa --expected-duration 15 --expected-width 1080 --expected-height 1920 --expected-fps 60 --require-audio
启动器是一个完整的抽象测试动画,不是创意交付品。用简报替换其场景、文案、配乐和提示。motion.mjs 提供正确的过阻尼、临界阻尼和欠阻尼弹簧、多目标轨迹、文字不透明度切换和种子噪声。render.mjs 提供区间渲染、子帧模糊、本地 HTTP 服务、准备就绪检查和非顺序确定性检查。audio.py 提供确定性配乐、音效和可选的音乐分析。finish.py 提供两通道响度混合、全帧分页联系表、电话表、动作条、循环副本和技术检查。
质量不变约束
- 内容必须在没有声音的情况下保持可理解;声音应增强真实的运动事件。
- 避免通用的居中标/渐变/淡入淡出模板,除非被要求。更喜欢具体的构图和可见的变换;“每 2–4 秒新内容”是短格式节奏的启发式规则,并非每部影片的规则。
- 弹簧表达质量;根据材质选择阻尼。不要让每个标签都弹跳,也不要用弹簧替代有意的线性/周期运动。
- 文字在容器开始变化后进入,并在不兼容内容到达前退出。在最终缩放比例下保持字形清晰,并在 360 像素宽下测试。
- 模时间不会使接缝连续。匹配片尾和开始的位置、速度、可见性和声音;检查连接后的播放。
- 将软件/帧的确定性与美学质量分开。可重现的坏帧仍然是坏帧。