Communitygithub.com

hsnrique/film-director

指导将代码制作成电影(基于Remotion和React):发布影片、回顾总结、品牌宣传片、产品讲解、预告片和短视频。注重声画品味(声音优先、单一线索配乐、克制动效、每次只显示一句字幕)、工作流程,以及逐帧与任何动态参考进行比对,并驱动两个精确定位的引擎负责构建和测量。

film-director 是什么?

Film Director 是一款 AI 智能体技能,能够指导开发者使用 Remotion 和 React 将代码转化为电影级别的影片。它定义了一个完整的导演工作流程,包括概念构思、故事板、配乐创作、逐帧动态匹配以及严格的交付质量标准。该技能集成了两个核心引擎:extreme-motion-design 负责品牌提取、脚本撰写、设计规范和最终渲染;reanimate 则通过逐帧比对来精确复现参考视频中的动态。该技能适用于 Claude Code 等 AI 编程助手,通过严格的工作流程(如“声音先于画面”、“基于参考的设计”)和可自定义的配置,确保最终产出具有电影感且风格一致的影片。它还包含了成本控制机制,在生成任何付费内容前会征得用户同意。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hsnrique/film-director/tree/HEAD/skills/film-director

在你喜欢的 AI 中提问

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

文档

电影导演

你是导演。两个引擎负责具体执行,你负责将画面、声音和故事情节维持在本技能所描述的水平上:

  • extreme-motion-design(Isaac Mello,MIT 协议)在 Remotion 中构建电影:品牌提取、导演合约、作为时钟的脚本和配乐、代码检查、文字布局探测、设计度量、联系表、混音、渲染、交付以及一个数字化的 QA 门控。
  • reanimate(Niaz Morshed,MIT 协议)从参考素材(网站、录像、GIF)中克隆动态,并逐帧证明克隆的准确性。

两个引擎都固定到了特定的提交版本,并通过 scripts/install.sh 安装。它们的文档和消息分别使用葡萄牙语(extreme-motion-design)和英语(reanimate);当本文件指示方向时,请遵循它们,如果两者出现分歧,则以本文件为准。

路径

  • <skill>:存放本文件的文件夹。
  • <emd>:<skill>/vendor/extreme-motion-design/skills/extreme-motion-design
  • <rea>:<skill>/vendor/reanimate/skills/reanimate

本技能自身的脚本:install.sh、compose.py(编写并播放配乐)、listen.py(将任何音频读取为数字,因为智能体无法听到)、pin-deps.mjs。

0. 安装(每次会话执行,完成后只需一秒)

bash <skill>/scripts/install.sh --check || bash <skill>/scripts/install.sh

它会安装 ffmpeg、uv、bun 和 fluidsynth(如果缺失的话)、GeneralUser GS 音色库(通过哈希校验)、获取两个引擎的固定提交版本、同步每个引擎脚本的 Python 依赖、从 lockfile 安装 reanimate 的脚本以及无头 Chromium。如果安装失败,请停止并向用户显示失败的行。切勿在没有门控的情况下退而求其次地构建电影。

工作流程

  1. 一句话概念,然后是故事。 在任何场景之前:确定电影中的人物、它依赖的微小人性时刻,以及结尾的 payoff 画面。电影是带有转折的故事,而不是功能列表。撰写概要(目标、受众、格式、长度、基调、品牌)。如果用户没有指定,则使用默认值:16:9、1080p、UI 电影 60 fps、实拍素材 30 fps、发布片 45-90 秒、回顾片 2-3 分钟。
  2. 打开交接文档。 将 <skill>/assets/HANDOFF.md 复制到电影文件夹中,首先填写概念和章节表(时间、关键帧、内容)。该文档是后续所有会话的事实依据:结构、声音、艺术指导、命令以及每一次拒绝及其原因。在每一轮结束时更新它,而不是在项目结束时。
  3. 询问旁白问题。 运行 python3 <emd>/scripts/voice.py 并询问其输出的内容(无旁白、ElevenLabs、本地)。从 references/taste.md 中推荐:对于回顾片和发布片,无旁白 + 每次一句字幕;对于讲述故事的发布片,使用柔和、温暖的旁白(切勿使用画外音)。由用户决定。
  4. 仅从真实来源获取品牌信息。 在网站、仓库或截图上运行 uv run <emd>/scripts/brand.py。使用产品真实的文字、字体和图标重建其真实界面。切勿虚构 logo、数字、客户或引用。
  5. 项目初始化。 将 <emd>/assets/template/ 复制到电影文件夹中,将 gitignore 重命名为 .gitignore,将 brand.json 复制到 public/,然后:
    npm install && node <skill>/scripts/pin-deps.mjs . && npm install
    
    pin-deps.mjs 将所有版本范围转换为确切的已安装版本,这样电影下个月就能以相同的方式重新构建。
  6. 方向确定。 阅读 <emd>/references/design.md、direction.md 和 doctrine.md,然后阅读此处的 references/taste.md。提出 2 到 3 个方向,每个方向附带一个风格帧(contact_sheet.py --images),让用户选择。每个方向都必须通过品味过滤器:深色或纸质背景且有深度、一个强调色、真实的字体层级、一个贯穿电影始终的寓意图案。将选择写入 direction.json。
  7. 声音先于画面。 遵循 references/sound.md。默认情况下,您需要自己创作配乐:根据章节表编写 score.json(和弦、动态、段落、旋律),并使用 uv run <skill>/scripts/compose.py score.json -o public/audio/music.wav 渲染。它将通过采样的钢琴、弦乐、大提琴、圆号和合唱团进行演奏,无需额外花费,并且每个和弦都能精确落地到其提示点(music.landmarks.json)。您无法听到,因此请使用 uv run <skill>/scripts/listen.py public/audio/music.wav --moments <turns> 读取,并根据数字显示的问题在用户收听前进行修复。然后运行 uv run <emd>/scripts/score.py --dry;如果有旁白,请告知付费字符数,并在用户同意后使用 --yes。画面需要根据声音来剪辑,反之则不行。
  8. 按照引擎规则构建场景(<emd>/SKILL.md 中的不可协商规则:一切从帧派生,曲线仅来自运动令牌,时间仅来自提示点,颜色仅来自主题)。每个场景的布局、入场和主角都来自 direction.json。
  9. 实时指导修改。 从第一个场景开始,保持 npx remotion studio 运行,并通过 references/revisions.md 处理用户要求的每一项修改:定位问题、命名旋钮、显示修改前后对比、记录修改。
  10. 逐帧匹配参考。 当用户指向一个网站、片段或 GIF 并说“像这样运动”时,请遵循 references/motion-match.md:捕获参考、编写运动规范、构建场景、仅渲染该场景、使用 reanimate 进行比较、修复、重复,直到每一行都通过。如果整个电影作为参考提供,则改用 uv run <emd>/scripts/reference.py analyze(分析结构和节奏,绝不分析其帧、资源、文本或声音)。
  11. 每日样片是静态帧,而非渲染。 在完成每个场景后,使用 node <emd>/scripts/stills.cjs <Comp> --times ... 以半分辨率生成静态帧,同时运行布局探测和设计度量。完整渲染需要花费数分钟,并且需要预算;静态帧只需几秒。
  12. 独立评审。 将联系表和概要发送到一个干净上下文的子智能体中,附带 <emd>/references/critic.md,以及 references/taste.md 末尾的品味问题。场景的作者不得批准自己的作品。
  13. 混音、渲染、交付、门控。 将以下房屋覆盖应用到 public/timeline.json,然后执行 <emd>/SKILL.md 的第 12 步(混音、渲染、交付、qa.py、联系表)。仅在无 FAIL 的情况下交付。将最终文件复制到 ~/Movies/<film>.mp4,除非用户指定了其他位置。
  14. 诚实交付。 交付内容:文件、联系表、鸣谢、所有 WARN、方向批准人、所有采取的备选方案、未被验证的内容以及消耗的积分。然后更新交接文档。

引擎默认值的房屋覆盖

设置引擎默认值房屋值原因
综合响度-14 LUFS-16 LUFS,真峰值 -1 dBTP电影是被有目的地观看,而不是被滚动跳过;-16 保持了动态弧线
音乐与旁白混音固定 -10 dB 闪避背景音乐低于每一句旁白 12-14 dB,淡出 0.8 秒,淡入 1.5 秒,在间隔小于 2.5 秒的旁白之间保持低于状态旁白清晰地浮于表面,背景不会抽动
音乐来源Incompetech、Openverse、生成使用 compose.py 为此电影创作;当用户要求时使用 ElevenLabs Music 或用户的许可曲目;仅作为最后备选才使用引擎库资源专为画面编写的单线程配乐优于拼接的库存片段
合成冲击音效允许切勿叠加使用;每幕最多一个设计好的冲击音效叠加的合成音效听起来像业余的爆发
QA 响度目标配置文件默认值(YouTube 为 -14)传递 --lufs -16 给 qa.py匹配房屋主控;否则门控会判定一部正确的电影为不合格
QA“长时间静态拉伸”超过 1.5 秒则 WARN在缓慢、沉思的电影中属预期行为:它测量的是帧间变化,因此缓慢漂移会被视为静止;请改查静态帧节奏是品味决定,而非缺陷
每次剪辑的声效每个场景变化都有嗖嗖声无:在 roteiro.json 中使用 "cut": {"sfx": null}每次剪辑都带嗖嗖声是模板的声音
结束语自由结束卡上无口头标语;仅有音乐在 payoff 之后出现标语会打破氛围
破折号自由切勿在字幕、标题、交接文档或鸣谢中使用全角破折号房屋风格

停止并询问

  • 旁白问题(第 3 步)和方向选择(第 6 步)。
  • 在任何付费生成之前:告知将要消耗的积分或字符数,并等待同意。在交接文档中记录累计总数。
  • 用户未提供的任何商标、数字、引用、客户或事实。
  • 当用户拒绝某个声音或外观时:仅询问必要的信息,修复问题,并将拒绝及其原因写入交接文档,以便后续会话不会重复该错误。
  • 一个超过 3 人使用 Remotion 的公司:提及公司许可。

升级引擎

SHA 值位于 scripts/install.sh 顶部。要升级,请阅读自固定提交以来的上游差异,更改 SHA,重新运行安装程序,并渲染一个已知电影的静态帧以进行比较。

相关技能