Communitygithub.com

JAYANTCH1797/animate

将参考素材和粗略创意转化为完全由代码绘制帧并合成音轨的短动画MP4。支持三种任务:让静态图像动起来、将参考场景重新绘制为动态画面、或根据参考风格创作全新的影片(解说、动画故事、动态图形、循环动画)。

animate 是什么?

这是一个AI代理技能,用于创建完全由代码生成的短动画,支持合成音轨。用户提供参考图像或视频以及一个粗略的想法,AI代理负责导演和实现。该技能使用Python脚本和HTML Canvas生成每一帧,并使用合成器创建配乐。它支持三种主要任务:为静态图像添加动画效果(通过分层移动)、场景重绘(在HTML Canvas中精确绘制参考场景)、以及全新电影制作(将参考风格应用于新主题)。工作流程分为五个阶段:研究参考素材、规划节拍表、构建画面(使用 piece.html 和 Canvas API)、合成音轨、渲染和质量检查。该技能支持Claude Code、Cursor和Codex等AI代理平台,需要 ffmpeg 和 Chrome 环境。最终输出为符合 -14 LUFS 标准的 MP4 视频文件。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JAYANTCH1797/animate-skill/tree/HEAD

在你喜欢的 AI 中提问

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

文档

animate 是做什么的?

将参考素材和一个粗略的想法转化为一个MP4文件,其中的每一帧都由代码绘制,音效由合成器生成。 用户提供审美;你来负责导演。一个粗略的简报就足够了,所以请自己做出创意决策,只询问那些会改变整个作品的问题。

所有内容都存放在 animations/<slug>/ 目录下:

refs/  study/  style.md  beats.md  piece.html  score.json  out/<slug>.mp4

根据需要在该目录中添加辅助脚本或笔记。examples/bee-dance/ 是本技能文件夹中的一个完整范例影片。

在下面的命令中,$SKILL 表示本技能的文件夹。从用户的项目中运行命令时,如果存在 $SKILL/.venv/bin/python,则使用它,否则使用 python3。如果缺少某个包,请参阅 README.md 中的设置说明。这些命令需要 ffmpeg 和 Chrome。

选择任务

用户想要任务方法
"让这张图动起来"移动艺术品将图像切割成图层并移动它们。阅读 references/move-an-image.md。跳过第3-4阶段的 piece.html;渲染脚本是一个Python脚本。
"画这个","重新创建这个场景"重绘在 piece.html 中绘制整个场景,与参考素材高度匹配。
"以这种风格"创作一个主题或故事新影片下面的完整流程。参考素材设定外观;主题是新的。

如果他们没有指定时长或画幅,对于影片使用15秒、1080x1920;对于移动图像使用5秒。

代码擅长形状、线条、渐变和纹理:扁平矢量、线稿、剪纸、risograph、水彩、动漫背景、植物图鉴。它不擅长照片写实和人物面部表情。如果参考素材是照片写实的,在开始构建之前先说明这一点,并为其提出一个插画风格的演绎方案。

第1阶段:研究每个参考素材

用户可能会给你很多参考素材,所以给每个素材分配一个任务,而不是把它们混为一谈。

python3 $SKILL/scripts/study.py animations/<slug>/study <文件或文件夹...>

这会为你提供每个参考素材的联系表、调色板,对于视频还会提供剪辑点和节奏曲线。如果只有视频的一部分重要,可以添加以秒为单位的时间范围,例如 "reel.mp4@0-12",否则说话人头部的素材会使结果失真。然后亲自查看这些图表,并在纹理重要的地方进行裁剪。数字无法告诉你为什么某些东西感觉很好。

编写 style.md:

  • 每个参考素材给我们带来了什么,每行一个:来自这个的纹理,来自那个的字体,来自另一个的节奏。
  • 我们不复制的内容:姿势、角色、标志、签名、精确构图。取其风格,而非作品;唯一的例外是用户要求动画化的图像上的“重绘”或“移动”任务。
  • 调色板以十六进制值表示,字体(assets/fonts/ 初始有两个字体,或者你可以复制任何开放字体),纹理,运动感觉。
  • 一个贯穿始终的设计要素,将整个作品联系起来:一个镜头、一个涟漪、一条永不中断的线。没有这种要素的影片看起来像幻灯片。

为每个新的参考素材在 animations/library.md 中添加一张简短的卡片,使其经验超越当前项目。当用户指向他们以前使用过的风格时,重用这些卡片;只有当你学到新东西时才扩展一个卡片。

关卡: 你能用一句话说清楚这个影片看起来是什么样子,以及为什么这样设计服务于主题。

第2阶段:节拍表

如果作品中有事实性内容,请先核实它们。一个画得很漂亮但错误的主张仍然是错误的,流行的“事实”往往不严谨。记录下你为最终报告所做的任何软化处理。

将 beats.md 写成一个表格。画面和声音一起规划,因为这种同步才让它看起来昂贵:

时间画面声音
0-1.5 秒一个橙色的水滴落下并散开滴水声,湿润的绽放声,铺垫音进入
1.5-3 秒标题行出现,细节弹出每个单词一个拨弦声,微小的滴答声

关卡: 在前半秒内有什么东西动起来;结构是:钩子、构建、呼吸、高潮;没有超过2秒没有新画面创意的时间段;结尾保持大约1.5秒以便可以阅读。让画面承载新创意,而不是文字:每个标题需要大约1.5秒在屏幕上,所以先缩短标题而不是内容。保持文字避开垂直画面的顶部12%和底部18%。

第3阶段:构建画面

复制 assets/piece-template.html 到 piece.html 并在其中绘制。约定是 window.PIECE 加上 window.renderFrame(t)。

renderFrame(t) 必须只依赖于 t,并且可以是异步的。静态帧可以跳到任何时间点,所以任何帧间记忆或未设种子的 Math.random() 都会破坏它们。在 window.ready 内部,使用已设种子的生成器一次性绘制昂贵的静态层,然后逐帧合成。

要在作品中展示另一个影片,将其帧提取到 clips/ 目录下,作为编号的JPEG文件,在异步 renderFrame 中使用 Image 加载需要的帧,并将其绘制到画布上。

在绘制之前阅读 references/styles.md;里面有可用的配方(卡通云、树叶、行走人物、水、水彩、纸张)以及可以复制的源文件。深度来自不同速度移动的图层,生命力来自小的次级运动:摇曳、漂移、闪烁、颤动。

尽早并经常审查静态帧,远在完整渲染之前:

python3 $SKILL/scripts/render.py animations/<slug>/piece.html --stills 0.5 3 7 12

以完整尺寸查看它们,并与参考素材并排比较,修复不匹配的地方。预计需要几轮迭代。第一张静态帧通常是粗糙的草稿,而这个循环正是质量提升的关键。

python3 $SKILL/scripts/compare.py animations/<slug>/out/compare.jpg <静态帧和参考图像...>

关卡: 中间位置的一张静态帧看起来像是用与参考素材相同的材料制作的:相同的纸张、颜料、线条和颜色。主题可以是新的。参考素材的剪贴画版本不合格。

第4阶段:声音

根据 beats.md 中的相同时间编写 score.json。有关可用声音,请参阅 scripts/synth.py 的头部:拨弦声、铃声、铺垫音、滴水声、滴答声、渐强音、嗖嗖声、撞击声、踢鼓声和噪声底床。

python3 $SKILL/scripts/synth.py animations/<slug>/score.json animations/<slug>/out/score.wav

保持在一个调性上。让重音落在画面事件上,而不是网格上。在高潮之前留下真正的静默,因为对比才是它落地的关键。使用几行Python生成长串音符,而不是手动输入它们。

你听不到声音,所以请阅读 synth.py 打印的电平报告:注意你未计划的下凹,以及标志性声音被其余部分淹没的情况。

如果作品有旁白

旁白应该在画面之前完成,因为词语的时间点决定了每个节拍。使用用户拥有的任何语音工具录制它,使用单词时间点进行转录(faster-whisper 可行),然后根据这些时间点构建节拍和标题。Whisper 可能会在其前面的静默中提前开始一个词,所以在剪切停顿之前检查波形。

将人声混合到配乐之上,然后使用结果作为 --audio 进行渲染。配乐在人声下方闪避,因此在停顿处音乐升起:

python3 $SKILL/scripts/mix.py animations/<slug>/out/voice.wav animations/<slug>/out/score.wav animations/<slug>/out/mix.wav

第5阶段:渲染、检查、修复

python3 $SKILL/scripts/render.py animations/<slug>/piece.html --audio animations/<slug>/out/score.wav
python3 $SKILL/scripts/qc.py animations/<slug>/out/<slug>.mp4

render.py 输出 out/<slug>.mp4,母带处理到 -14 LUFS。它会打印进度,典型作品15秒大约需要1-2分钟;如果作品较重,在后台运行。如果只是声音修改,添加 --remux 可以在几秒钟内交换音频而无需重绘。

qc.py 会标记空白片段、单帧故障和音量问题,并写入一个联系表。它无法判断运动是否看起来良好,所以也要阅读联系表,然后逐帧仔细检查风险时刻的特写裁剪:过渡、文字进出、图层重叠处,以及任何重复运动的完整循环。修复并重新渲染直到干净。

交接

用用户易懂的语言报告:你制作了什么,每个参考素材如何使用,你检查了什么,以及你无法检查什么。你无法听到配乐或以速度观看,所以请说明。添加:

  • 一个你知道的事实,如果你软化了某个主张。
  • 容易调整的内容:3或4个他们可以要求下一步做的具体更改。
  • 某个参考素材是否属于他人,在商业使用前需要慎重考虑。

相关技能