关于 extreme-motion-design
Motion Design 是一项通过代码制作动态图形视频的技能,涵盖视觉方向、音频、渲染和质量检查。它引导 Agent 按审批流程制作,并在交付前执行可量化的检查。
主要功能
- 01通过代码制作动态图形视频
- 02动画制作前规划视觉方向
- 03生成旁白和音频提示
- 04检查画面布局与设计一致性
- 05交付前执行质量门槛检查
适用场景
- 01制作品牌短动态图形视频
- 02依据提供的视频参考改编作品
- 03渲染前检查文字布局和视觉一致性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dev-isaacmello/ extreme-motion-design --skill extreme-motion-design安装后在 Claude Code 中输入/extreme-motion-design确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/lexicon.pt-BR.jsonassets/template/direction.jsongitignorepackage.jsonremotion.config.tsroteiro.jsonassets/template/public/brand.jsoncues.jsontimeline.jsonassets/template/public/audio/credits.jsonnarration.words.jsonassets/template/src/blocks/BarChart.tsxCallout.tsxCaptions.tsxChecklist.tsxCodeWindow.tsxCursor.tsxDeviceFrame.tsxDonut.tsxindex.tsLineChart.tsxLogoSting.tsxLowerThird.tsxMarquee.tsxQuoteCard.tsxshared.tsxStatCounter.tsxSteps.tsxassets/template/src/components/Camera.tsx详细介绍
动态设计
通过代码制作带有音频和验证的动态设计视频。Agent 编写代码时看不到视频:因此,工作流会在动画制作前声明设计方向(direction.json),在渲染前进行测量(lint.py),测量帧中的文本(layout.py),测量作品是否具有独特的设计方向,还是落入模型的默认框架(design.py),交由未编写代码的审核者审查,并且只有通过数值门槛后才交付(qa.py)。如果用户提供了参考视频,就会将其结构转化为测量标准,并为新作品生成一个保真度评分(reference.py)。
路径相对于此技能文件夹(<skill>)。带有依赖项的脚本会内联声明所有依赖项(PEP 723):使用 uv run <skill>/scripts/x.py 运行。voice.py、lint.py 和 gl.py 仅使用标准库,可通过 python3 运行;stills.cjs 和 render.cjs 在项目文件夹中通过 node 运行。
必须遵循的工作流
- 5 行简报:目标、受众、格式(16:9、9:16、1:1)、时长、语气和品牌。如果缺少格式或时长,默认采用 16:9、30 fps、15 到 30 秒,并说明默认值。
- 品牌:如果有网站、代码库或产品截图,请运行
uv run <skill>/scripts/brand.py,并使用它生成的brand.json(颜色、字体、logo,以及每个值的来源)。如果已有之前视频的brand/文件夹,请重复使用。如果没有任何来源,请向用户询问颜色和字体;不要臆造品牌信息。详情见references/brand.md。 - 语音问题(始终询问):运行
python3 <skill>/scripts/voice.py,并向用户提出它打印的问题,包含三个选项:无语音、使用 ElevenLabs 语音或本地语音。如果有 Agent 提问工具,请使用该工具并等待回复。不要替用户选择。仅当用户的请求已明确回答此问题时,才可省略。详情见references/narration.md。 - 项目:将
<skill>/assets/template/复制到视频文件夹,将gitignore重命名为.gitignore,把brand.json复制到public/,并运行npm install。项目结构见references/template.md。 - 方向(任何场景制作之前):阅读
references/design.md、references/direction.md和references/doctrine.md。如果用户提供了参考视频,请先运行reference.py analyze并遵循references/reference.md。准备 2 到 3 个不同方向(使用design.md末尾的方向卡,或根据主题衍生;绝不能采用“超大压缩字体、近乎纯黑加一种点缀色、角落里的等宽字体”这一默认组合),每个方向各制作一张风格帧,用contact_sheet.py --images合并后展示给用户选择。将选择记录到direction.json(概念、视觉规则、理由,以及每个场景的布局、入场方式和主视觉元素)。如果用户明确委托你选择,请自行选择,记录"approved_by": "agent",并在交付时说明。 - 脚本和配乐谱:编写
roteiro.json(场景、台词、命名标记、SFX)。uv run <skill>/scripts/score.py --dry会显示需要消耗多少付费字符;告知用户数量并等待其同意,然后才能使用--yes。脚本会逐句生成语音、配乐谱(public/timeline.json)和标记(public/cues.json)。音频是计时依据:视觉内容应据此调整。不得在场景中手动写入帧数。格式见references/score.md。 - 配乐和 SFX:使用
music.py(Incompetech,然后 Openverse,最后本地生成);需要卡点剪辑时使用beats.py。所有下载的文件都要记录到credits.json。详情见references/audio.md。 音频审批(有语音时):运行mix.py,并在动画制作前将public/audio/mix.wav交给用户试听。若请求仅修改语音,则重新运行score.py和mix.py,然后交由用户试听;不要渲染,也不要制作联系表。 - 场景:
<Scene id>和useScene(id).at('marca')用于获取时间;theme.ts提供颜色和字体;useFormat()提供缩放比例和安全区域。先在references/blocks.md中查找现成模块,之后再使用基本图元组合。只阅读你将采用的技术对应的参考文档(见下方路由)。 - Lint(每次渲染前):在项目文件夹中运行
python3 <skill>/scripts/lint.py。修复所有 FAIL;评估每个 WARN。 - 每日预览:
node <skill>/scripts/stills.cjs <Composition>会在一个进程中渲染每个场景的开头、中间和结尾,并测量每帧的文本。uv run <skill>/scripts/layout.py out/stills --timeline public/timeline.json会将裁切、重叠、过小、对比度不足或超出安全区域的文本判定为不合格,并提示构图相同的场景。uv run <skill>/scripts/design.py out/stills --timeline public/timeline.json会统计模型默认画面的特征:如果结论为“模型默认”,请返回方向阶段后再进行润色。contact_sheet.py --stills out/stills会生成联系表。查看图像,按照references/qa.md中的清单进行检查,修正并重复,直到没有 FIX。绝不要在循环中调用remotion still。 - 独立审阅者:将联系表和简报连同
references/critic.md中的文本一起交给上下文干净的子 Agent。编写场景的人不能审批该场景。如果没有可用的子 Agent,请在交付时说明未进行独立审阅。 - 混音、渲染、交付和验收门槛:
如果有参考视频,请使用uv run <skill>/scripts/mix.py public/timeline.json python3 <skill>/scripts/gl.py Showcase # 每个项目运行一次:测量图形后端 node <skill>/scripts/render.cjs Showcase # 或 --formats reels,square,youtube uv run <skill>/scripts/deliver.py out/render.mp4 -o out/final.mp4 uv run <skill>/scripts/qa.py out/final.mp4 --profile youtube --timeline public/timeline.json --stills out/stills uv run <skill>/scripts/contact_sheet.py out/final.mp4 --timeline public/timeline.json -o out/sheet.pngreference.py compare reference/reference.json out/final.mp4 --timeline public/timeline.json完成比对,并报告评分。 渲染后修正:render.cjs Showcase --scene <id>只会重新渲染该场景并重新组装主视频。完整渲染次数有预算限制(budget.full_renders,默认值为 4),超出时脚本会拒绝执行。只有qa.py没有 FAIL 时才能交付。 - 如实交付:MP4、联系表、积分说明,以及 WARN 清单、方向审批者、所有改用替代方案的资源(语音、配乐、格式、简化场景)和所有未经验证的事项。
不可妥协的规则
- 所有视觉状态都必须由
useCurrentFrame()推导。禁止:CSS 过渡或动画、animate-*类、setTimeout、Date.now()、Math.random()(请使用random(seed))、React Three Fiber 的useFrame()。否则渲染会闪烁或与预览不一致。lint.py会判定不通过。 - 曲线和弹簧只能使用
src/lib/motion.ts中的令牌:入场用enter或sharp,出场用exit,位置或形状变化用move,缩小和显现用settle,场景主角用easeX.emphasized,linear仅用于连续旋转和循环。绝不使用bounce或elastic。超调只能有一个(easeX.overshoot或springs.snappy),且仅用于焦点元素。不带easing的interpolate()是线性的:请使用tween()或keys()。 - 时间取自分镜表,颜色取自主题。场景中不得直接填写帧数或十六进制颜色:使用
useScene(id).at('marca')和C.*。 - 每个场景都有自己的布局、入场和主角,并在
direction.json中声明。相邻场景不得重复相同的布局与入场组合。视觉母题应贯穿整个作品,而不是在每个场景中都变成同一张卡片。 - 真实图片只能来自已核实许可的素材库(
stock.py)或用户提供的素材。商业作品中不得出现可识别的人脸、品牌或第三方近期作品。 - 参考作品只可借鉴结构、节奏和技法。不得复用其中的画面、素材、标志、文字、配乐或声音。
- 每次只突出一个主要动作;次要动作的幅度不得超过主要动作的 30%,环境动效不得超过 5%。错峰总时长不超过 500 ms。出场时长约为入场时长的 75%。切镜后 0.1 到 0.3 s 开始首次动画。每次元素到位后停留 0.4 到 0.8 s;高潮前停顿 0.3 到 0.75 s。
- 文字至少停留 1.5 s + 每个单词 0.3 s,且 pt-BR 文本每秒最多 17 个字符。最多 2 行,每行 32 到 42 个字符。
- 安全区域:动作内容位于画面 90% 范围内,文字位于 80% 范围内。对于 9:16(1080x1920),文字应位于 y 360 到 1420 之间。短边为 1080 时,字号至少为 28 px。故意溢出画面的装饰文字需标记
data-decor。 - 每段视频仅在 1 到 3 个快速节拍中使用动态模糊,绝不能用于需要阅读的文字。
- 避免任何 AI 生成感:不得使用全屏紫色渐变、所有元素都淡入、通用光晕、表情符号或全部居中。只使用一种强调色,并确保对比度符合 WCAG AA。
- 画面中不得出现虚构的数字、标志或事实。只能使用用户提供或有来源支持的数据。
- 配乐仅可使用许可为
cc0、pdm或by的素材(或生成的配乐)。不得使用nd、sa、nc、sampling+ 或许可未知的素材。 - API 密钥绝不能出现在聊天、命令、日志或受版本控制的文件中。用户应将密钥写入项目的
.env文件。
技法路由器
| 技法 | 参考资料 | 原语或脚本 |
|---|---|---|
| 图表、计数器、设备外框、图例、代码窗口、光标、下三分之一字幕、Logo 演绎 | references/blocks.md | src/blocks/* |
| 关键帧、运动平滑、缓动、弹簧 | references/techniques-motion.md | keys()、tween()、pop()、springs |
| 放大、缩小、推进、平移、甩镜、视差、手持摄影 | references/techniques-motion.md | <Camera>、<Layer depth>、wiggle() |
| 动态图形(形状、线条、数据、Logo) | references/techniques-motion.md | shapes.ts、strokeDashoffset、@remotion/shapes |
| 动态排版 | references/techniques-motion.md | <KineticWords words={WORDS}> |
| 变形 | references/techniques-motion.md | morphPath()(flubber) |
| 无缝循环 | references/techniques-motion.md | loopPhase()、loopNoise()、qa.py --loop |
| UX/UI 动效与微交互 | references/techniques-motion.md | springs.snappy、弧形光标、涟漪 |
| 预备动作、过冲、跟随动作、挤压与拉伸、拖影 | references/techniques-advanced.md | anticipate()、easeX、lag()、squash()、smear() |
| 级联、速度渐变、时间重映射、速度曲线 | references/techniques-advanced.md | cascade()、timeRemap()、velocity() |
| 匹配剪辑、变形剪辑、无痕剪辑、J-cut 和 L-cut、光圈、形状转场和液态转场 | references/techniques-advanced.md | <IrisReveal>、<GooeyFilter>、@remotion/transitions |
| 遮罩、修剪路径、重复器、基线显现、计数器、回声、光泽、镜头质感 | references/techniques-advanced.md | <MaskReveal>、ticker()、<Echo>、<Shine>、<Grain> |
| 逐帧动画、赛璐珞动画、定格动画 | references/techniques-character.md | stepped()、<BoilFilter>、jitter() |
| 绑定、IK、唇形同步 | references/techniques-character.md | twoBoneIK()、fabrik()、forwardKinematics()、visemeFor() |
| 3D 动效 | references/techniques-3d-compositing.md | @remotion/three + <ThreeCanvas> |
| 合成、将实拍视频作为图层 | references/techniques-3d-compositing.md | 混合模式、遮罩、<Grain>、色度键 |
| 免费真实照片和视频、Ken Burns、照片 2.5D 视差、双色调、字母内部的视频 | references/stock.md 和 references/design.md(第 6 节) | scripts/stock.py |
| 复现参考视频的结构 | references/reference.md | scripts/reference.py |
| 动作跟踪、附着在人脸或手部的图表 | references/techniques-3d-compositing.md | scripts/track.py(--point、--face、--hand)+ <Tracked> |
| 匹配移动 | references/techniques-3d-compositing.md | track.py --quad + <CornerPin>、scripts/matchmove.py |
| rotoscoping | references/techniques-3d-compositing.md | scripts/roto.py(带 alpha 的 PNG 或 SVG 轮廓) |
画面设计与六种艺术指导方向(references/design.md)、指导与约定(references/direction.md)、参考模式(references/reference.md)、免费素材库(references/stock.md)、脚本与乐谱(references/score.md)、品牌(references/brand.md)、模块(references/blocks.md)、旁白(references/narration.md)、音频(references/audio.md)、QA、预算与交付(references/qa.md)、审阅者(references/critic.md)、运动原则(references/doctrine.md)、模板地图(references/template.md)。
语音和音频命令
python3 <skill>/scripts/voice.py # mede o hardware e monta a pergunta de voz
python3 <skill>/scripts/voice.py --check-key # valida a chave da ElevenLabs sem gastar
python3 <skill>/scripts/voice.py --audition "Primeira frase." -o out/vozes # mesma frase em cada voz local
uv run <skill>/scripts/score.py --dry # custo e o que seria gerado, sem gastar
uv run <skill>/scripts/score.py --yes # voz frase a frase + partitura + marcas
uv run <skill>/scripts/align.py public/audio/narration.wav roteiro.txt # tempos por palavra para qualquer WAV
uv run <skill>/scripts/align.py filmagem.mp4 --transcribe -o public/audio/fala # fala de uma filmagem, sem roteiro
uv run <skill>/scripts/tts.py --normalize-only "Plano de R$ 49,90 às 14h30 com IA" # confira a pronúncia
uv run <skill>/scripts/music.py incompetech --feel calm --bpm 70-110 --min-sec 60 -o public/audio/music.mp3
uv run <skill>/scripts/music.py generate --sec 30 --bpm 84 --mood calm -o public/audio/music.wav # offline
uv run <skill>/scripts/beats.py public/audio/music.mp3 --fps 30 # cortes na batida
uv run <skill>/scripts/sfx.py --all public/audio/sfx # whoosh, pop, click...
何时停止并提问
- 第 3 步的语音问题和第 5 步的方向选择。
- 用户未提供的 Logo、品牌、数字或证言。
- 在调用付费 API(语音、音乐)之前:告知
score.py --dry的数字,并等待用户确认。 - 许可类型不同于 cc0、pdm 或 by 的配乐。
- 完整渲染超出预算:说明还需核对哪些内容,以及为什么静帧不够。
- 用户的公司有超过 3 人使用 Remotion:提醒他们需要 Company License。