Communitygithub.com

ThomasHMD/motion-design

动效设计工作坊:基于Remotion的完整项目(场景、字幕条、引文和站点演示在`overlays`技能中呈现,位于`src/illustration/`),包括主题(颜色、字体)、合成音效调色板(合成配方、手势词汇、电平)、以代码形式编写的音乐以及面向目标响度的混音。

motion-design 是什么?

motion-design技能是一个完全本地化、确定性的动效设计工作坊。它基于Remotion 4.0.529(React/TSX)构建,提供从动画、主题、音效到音乐混音的完整管线。该技能包含一个完整的Remotion项目(`src/illustration/`),用于为`overlays`技能生成场景、字幕条、引文和站点演示等图形元素。所有素材(图像、视频、声音)均为程序化生成,不使用任何AI生成的内容。核心特性包括:Python编写的合成音效调色板(`scripts/synth.py`)和音乐创作示例、基于EBU R128标准的自动混音(`scripts/mix.py`)、以及支持全屏视频、字幕条、屏幕录像等多种画面构图。该技能适用于Claude Code开发者工具,需要npm和Python环境。最后,它强调所有输出(MP4文件)完全由代码决定——相同的代码必然产生相同的MP4文件,确保结果可复现且可控。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ThomasHMD/premiere-rough-cut/tree/HEAD/skills/motion-design

在你喜欢的 AI 中提问

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

文档

motion-design:工作坊(Remotion、主题、声音、音乐)

一切都是本地化和确定性的:相同的代码 = 相同的MP4。没有由AI生成的图像或视频。

技术栈

组件工具位置
动画Remotion 4.0.529(React / TSX),版本锁定在 package.jsonsrc/;使用 npx remotion add <package> 添加更多模块
主题颜色、字体、尺寸、边距src/illustration/theme.ts(由 src/illustration/scenes/kit.tsx 中的 C 和 F 常量读取),字体位于 public/fonts/
Remotion 模块转场、特效、gsap、three、噪声、路径、形状、运动模糊、漏光、星爆、粗略注释、字幕、布局工具、lottiepackage.json
图形构图BrandedVideo(全屏场景)、LowerThirdTrack(字幕条、章节标题)、Screencast(站点演示)、Scene(场景目录)、ControleTexte(文本检查)、FondAnime(循环动画背景;其颗粒由 scripts/make-grain.py 生成)src/illustration/,在 Compositions.tsx 中声明,在 src/Root.tsx 中连接
共享线索以秒为单位的关键时间点,动画和声音均可读取src/<project>/cues.json
音乐在Python中编写的乐谱,基于numpy合成器(scripts/synth.py:FM电钢琴、铺底音色、贝斯、打击乐、黑胶噼啪声、混响)music/<project>.py,模型:music/example_pad.py
音效合成音色调色板:在添加任何声音之前,请先阅读 reference/sound-palette.md。合成配方 scripts/make-sfx.py -> public/sfx/*.wav + palette.json;手势词汇 scripts/son.py(一个计划命名一个手势,从不直接引用文件;列表默认是一个放置一个卡片项,son.LISTES;son.releve:一个视频中所有声音的编号列表,供按编号审阅);scripts/palette-import.py(真实录音的调色板,使用相同的文件名,默认回退到合成版本);scripts/sfx.py(一些额外的声音:快门声、对焦滴答声、嗖嗖声)scripts/
混音音乐 + 音效 + 人声,音乐在人声下自动闪避,EBU R128目标响度,真峰值限制到-1.5 dBTP(过采样限制器,仅当超出时启用)scripts/mix.py
检查每八度音程的音调平衡、响度scripts/ltas.py、mix.py

许可协议。 Remotion 对个人及不超过3名员工的公司免费;超出此范围的公司需要企业许可(remotion.pro)。在大型公司中商业使用此工具包前,请阅读其 LICENSE.md 文件。Inter和Source Serif 4字体遵循OFL协议(public/fonts/OFL-*.txt);声音和示例音乐均为此处合成,不涉及第三方权利。如果使用了其他地方的音乐:请检查其许可协议(在盈利频道上不得使用CC-BY-NC协议)。

设置,以及 node_modules 行的作用

此插件通过以下命令安装一次:

bash "${CLAUDE_PLUGIN_ROOT}/install.sh" --data "${CLAUDE_PLUGIN_DATA}"

(Claude Code 在读取此文件时会将两个变量替换为实际路径。)为什么要用数据文件夹:插件文件夹在每次插件更新时都会被替换,而 node_modules 大约有1 GB。因此 npm ci 在插件的数据文件夹(${CLAUDE_PLUGIN_DATA})中运行一次,该文件夹在更新后仍然存在,然后 skills/motion-design/node_modules 是指向它的一个符号链接。如果插件更新后 node_modules 丢失(新插件文件夹中没有链接),请重新运行上面的命令:它只会补充缺失的部分并在一秒内重新建立链接。

手动安装(将四个 skills/ 文件夹并排复制到 ~/.claude/skills/ 中):从工具包根目录运行 bash install.sh;此时 node_modules 是由 npm ci 安装的普通文件夹。Python 端:python3 -m pip install numpy scipy soundfile pillow,以及 brew install ffmpeg。详细信息和整个链路的检查:请参阅工具包的 INSTALL.md。

从工作坊文件夹(skills/motion-design)运行此技能的所有命令。

完整动效设计视频的制作流程

  1. 确定框架:时长、格式(默认1920x1080,30 fps;竖屏1080x1920;方形1080x1080)、用途、平台限制。编写 src/<project>/cues.json:关键时间点同时驱动画面和声音。
  2. 制作动画:每个交付物在 src/<project>/ 中对应一个构图,在 src/Root.tsx 中声明,属性用zod进行类型约束。所有内容都基于 useCurrentFrame():不得使用自由的CSS动画,不得使用 Math.random()(使用 random(seed) 或 noise2D)。仅使用主题颜色和字体。
  3. 无需等待渲染即可检查画面:对关键帧执行 npx remotion still src/index.ts <Id> out.png --frame=N,然后生成MP4的联系表(ffmpeg tile)。以手机屏幕大小评判:图像缩小到390像素宽时仍应保持清晰可读。
  4. 画外音(如果有):由用户录制(48 kHz WAV),使用 --voice-at 放置。此工具包不进行语音克隆。
  5. 音乐和音效:python3 music/<project>.py <duration> music.wav;通过 son.py 添加声音,放置在与画面相同的时刻(计划调用 son.releve(...) 来写入供聆听的编号列表);使用 python3 scripts/ltas.py music.wav 进行检查(与平缓下降曲线相比,任何频段的凹陷不得深于约6 dB)。
  6. 混音:python3 scripts/mix.py --music ... --sfx ... [--voice ... --voice-at s] --lufs -16 --out public/audio/<project>_mix.wav(轮播视频用-14,YouTube用-16;--sfx-voix-ref -22 根据实际人声重新调整音效电平)。
  7. 渲染:npx remotion render src/index.ts <Id> out.mp4 --props='{"audio":"audio/<project>_mix.wav"}' --codec=h264 --crf=16 --audio-bitrate=320k。
  8. 交付:不要覆盖已有的交付物(添加后缀 -v2),并提供预览。

在Premiere中放置的渲染图形(图形元素)

  • 场景、全屏图形或字幕条中不要包含Logo:这会无端加载图像。
  • 用于29.97 fps序列的文件必须覆盖其剪辑的整个时长:n个序列帧持续 n x 1.001 / 30 秒。src/illustration/ 中的构图接受 tailFrames 参数:TenirFin 组件(src/illustration/tenir-fin.tsx)在其持续时间内播放动画,然后保持最后一帧;退出动画不会移动。overlays 技能的 scripts/render-segments.py 会计算 tailFrames 的值。
  • 图形构图由 overlays 技能的 scripts/render-segments.py、scripts/screencast-render.py 和 scripts/montage-tella.py 渲染(工作文件夹 = 此工作坊,PNG序列帧,4个核心),不得在 remotion still 检查之外手动执行。通过 staticFile 调用的媒体应放在 public/scenes/<video>/ 中。

自定义(更改主题)

此工具包附带了一个中性主题:蓝色强调色 #2F5BEA、Inter和Source Serif 4字体、一个主题文件 src/illustration/theme.ts。要使用您自己的品牌:

  1. 颜色:src/illustration/theme.ts(color:基础色、对比色、墨水柔和色、静音色、表面色、线条色、强调色、强调深色、强调浅色、深色背景、暖纸色);场景通过 C 读取这些颜色。强调色及其浅色调在少数地方仍然是硬编码的:grep -rn "#6B8CFF\|rgba(47,91,234\|rgba(214,224,252" src/(在 preuves.tsx、Screencast.tsx、compositions/FondAnime.tsx 的 PALETTES 变体中),以匹配新的强调色。使用一种强调色,仅用作信号,绝不作为填充色。
  2. 字体:将 .woff2 文件放入 public/fonts/,然后更改加载列表(src/illustration/scenes/kit.tsx、compositions/BrandedVideo.tsx、compositions/LowerThirdTrack.tsx、compositions/Screencast.tsx)和 theme.ts 中的文件名和字体族名(font.display、font.sans)。确保字体包含数字和重音符号(单独的 "latin-ext" 子集既不包含数字也不包含基本字母,所有内容会回退到Georgia)。字体族名中不要包含数字(或在CSS中加引号)。
  3. 动画曲线:scenes/kit.tsx 中的 easeStd 和 scripts/make-sfx.py 中的 EASING 必须保持一致(声音跟随画面的曲线)。
  4. 检查:执行 npx tsc --noEmit,然后对每个构图(引文、字幕条、章节卡片、数字……)执行 remotion still,然后在下一次运行 render-segments.py 时使用 --force 参数(其缓存已经跟随 src/illustration/ 的代码)。

添加场景或声音

  • 场景:在 src/illustration/scenes/opaque.tsx(全屏)或 alpha.tsx(叠加层)中添加组件,在其上方以注释形式编写 data 契约,在注册表 scenes/Scene.tsx 中添加一行,在 overlays 技能的SKILL.md目录中添加一行。每个时刻都来自 cues。检查:在多个帧上执行 remotion still,并将叠加层合成到剪辑的一个帧上。
  • 声音:参考 reference/sound-palette.md 中的“添加或调整声音”部分。

同步文件夹陷阱

如果工作坊位于同步文件夹(Dropbox、iCloud、Drive等)中,另一台机器可能会发回一个文件的旧版本,并将好文件重命名为“冲突副本”。症状:Could not find composition with ID ...。对策:find . -name '*conflicted copy*' -not -path './node_modules/*',比较,保留最新版本。webpack缓存(node_modules/.cache)也可能冲突:删除它,Remotion会重新构建。更好:将 node_modules 排除在同步之外。

Individual skills in this repo

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

相关技能