paint-video-skill

agent
Security Audit
Warn
Health Warn
  • License — License: NOASSERTION
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 7 GitHub stars
Code Warn
  • process.env — Environment variable access in cel-kit/render.mjs
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

An agent skill for hand-drawn animated shorts and music videos made entirely in code: twelve styles, each with a finished film and the code that made it. 让 AI agent 用代码画手绘动画短片和 MV,十二套画风,每套都有成片和能跑的代码。

README.md

paint-video

中文 | English

让 AI agent 用代码画手绘动画短片和 MV 的 skill。

每一帧都是时间 t 的纯函数:用笔刷一笔一笔画出来,无头 Chrome 并行渲染成图片,ffmpeg 合成 MP4。画面里没有一张 AI 生图,全是代码画的。skill 里写的是做片子的整套方法和踩过的坑,agent 读了就能从一句话需求做到成片。

用它做的片子

《八音盒纸带》· 赛璐珞 MV

4 分 16 秒,42 个镜头,配一首有版权的流行歌。电车终点站旁有一家修八音盒的小店。一个躲雨的女孩抱着坏掉的八音盒进来,从那以后,她每来一次,他就在一条空白纸带上偷偷打一个孔:孔是声音,空白是她的沉默。烟火节那晚,他把攒了一年的纸带摇给她听,纸带走到头,曲子断在半截;她把盒子推回来,亮出一张画着火车的车票。冬天,他把这条长到绕满整间屋子的纸带一刀剪断,举到灯前,满屋光点拼出她的侧脸;再从头摇到尾,孔经过的地方响一下,大段空白滑过去,什么都没有。

画面是纯 2D canvas 的赛璐珞质感:色线、平涂、一档硬阴影加轮廓光,整片是黄昏光,有窗格光斑、体积光、浮尘和长影子,Clawd 是哑光陶土质感。道具一律经手:用手臂反算站位,够不着就让角色走过去或者搭梯子。字幕是竖排的纸条,和片里的纸带是同一种纸。画面代码都在 cel-kit/。

八音盒纸带

全片一览

八音盒纸带全片

《一圈》· 走马灯

2 分 34 秒。一盏纸雕走马灯里,纸骑手追一只发光的鹿,春夏秋冬追了一整圈都没追上;烛火将尽时他停下回头,鹿从身后走了回来。镜头从夜里的屋子推进灯里,最后又退出来,让灯里的影子投满整间屋子。

画面是纯 2D canvas:烛光打底,一层层剪纸叠上去,每叠一层先把光糊一下,远处又亮又虚、近处又黑又实;彩色玻璃纸只透自己的颜色;最后整幅卷成圆柱。一季一套底光色。配乐也是代码写的 3/4 圆舞曲,八音盒、独奏小提琴、VSCO2 弦乐,分轨后过一个自己写的混音台;画面和乐谱共用一张变速的小节表。画面、配乐和混音配置都在 zoumadeng-kit/。

一圈

全片一览

一圈全片

《一口》· 共点蒙太奇

25.8 秒。一只甜甜圈几乎铺满画面,孔里一个牛仔骑着马一路狂奔。每一拍孔里换一种画风,外圈晚一拍接过孔里刚用过的那种:素描、水墨、木刻、波普、油画、像素、彩色玻璃、洞穴壁画、蓝图、浮世绘、刺绣、水彩、X 光、剪纸、示波器、马赛克、热成像、蜡笔、青花瓷、橡皮管动画、点彩、黏土,24 种画风一路接力,外圈的东西也跟着变成胶带、圆相、眼睛、玫瑰窗。中途在迈布里奇那张奔马老照片上急刹,最后回到甜甜圈,镜头拉远,被咬了一口。

马和人是一套解剖级的共用骨架,照迈布里奇的奔马关键帧动,每种画风只管怎么画,所以动作跨画风一刀都不断。用 Node 加 @napi-rs/canvas 直接出帧,不开浏览器。配乐也是代码写的:西部奔马,弦乐跳弓、圆号、DRSKit 真鼓,一步画风一拍。画面、配乐和音效都在 montage-kit/。

一口

全片一览

一口全片

《页边》· 作业本涂鸦

38 秒,一镜到底。作业本页边上,一支蓝圆珠笔刚画好一只头顶嫩芽的小团子,笔一抬走它就活了:眨眨眼,走出原位,翻过红色页边线,踩着横线蹦进正文,钻进一团涂掉的错字又甩着一身墨点出来;红笔来了把它圈住,它拽着线头把红圈一点点拆开;听见蓝笔回来,它顺着自己的脚印狂奔回去,扑进原位的压痕里一动不动。镜头最后拉远到整页,脚印、墨点、拆开的红圈全都还在。

画面是纯 2D canvas:圆珠笔线会断墨,彩铅是斜排线加纸齿颗粒,整页带手机俯拍的明暗;一支带影子的实物笔在纸面上画,照片感就立住了。活着的线条每秒抖 8 次,定住就回到纸上。配乐也是代码写的,跟着动作走:竖琴是笔在画,拨弦是脚步,单簧管是它的小心思,扑回原位那一下全体停住。画面和配乐都在 doodle-kit/。

页边

全片一览

页边全片

《沙漏》· 沙画短片

75 秒,一粒沙看见的一年。黑场里一根手指划出一只沙漏,光从两个三角里透出来;沙漏下来堆成一座丘,被按成一颗种子,破土长成一棵光做的树;风把树冠拖成流线,流线卷成浪;浪退下去,留下一轮月亮和岸边几株芦苇;月亮被落下的沙慢慢吃暗,雪一排排往下落;最后一道沙帘把一切盖住,同一只沙漏又被划出来,首尾相接。

画面是 WebGL 模拟的一层沙:撒、指尖划、手掌推、休止角滑落、沙帘,底光按三个通道分别透过沙层,薄处是一粒一粒的。画出来的东西大多是「清出来的光」,每一次转场都靠形状接上,没有淡入淡出。配乐也是代码写的,照着画面写:钢琴、竖琴、独奏小提琴、VSCO2 弦乐、圆号、定音鼓,60 拍每分钟,一拍对一秒。画面和配乐都在 sand-kit/。

沙漏

全片一览

沙漏全片

《一滴墨》· 流体彩墨 MV

91 秒,一首古典 + 摇滚的曲子,画面是一张纸上的墨和彩墨。开头一滴墨落下,小提琴像一支笔在纸上写;第 16 秒鼓和失真吉他砸进来,颜色从墨里炸开;高潮每一记镲都换一种开花方式;最后颜色褪回纸色,又是一滴墨。

画面是 WebGL 流体模拟,颜料按吸光度叠色。曲子里的每个音符都直接推动颜料:小提琴是笔,底鼓是冲击,镲是开花,和弦决定颜色。配乐也是代码写的:VSCO2 弦乐、DRSKit 多力度真鼓,分轨后过一个自己写的 Python 混音台。画面、乐谱、鼓采样整理脚本和混音台都在 fluid-kit/。

一滴墨

全片一览

一滴墨全片

《远光》· 版画系列短片

93 秒,不出现人。一颗蒲公英种子的六段旅程:盛夏、仰望、风起、高处、远光、尾声。每段换一种版画工艺:孔版套印、铜版蚀刻、大理石纹染纸、蓝晒、凸版网点、植物图版。地平线和远处那盏光六段都不动。

种子和伙伴们在风里各奔东西。它落进当年仰望的那盏光里,才发现那只是一盏灯;更远处,伙伴们各自亮着。

配乐也是代码写的:Tone.js 加真乐器采样(弦乐组、独奏小提琴、圆号来自 VSCO2 社区版,另有竖琴、长笛、单簧管、尼龙弦吉他等),画面的一切按乐谱的拍子对齐。整部片子的画面、配乐和渲染脚本都在 prints-kit/。

远光

全片一览

远光全片

《用光,打开大脑》· 科普讲解片

3 分 05 秒,讲 2026 年诺贝尔生理学或医学奖:池塘里的绿藻怎么「看见」光,这扇光控的门怎样被装进神经元,变成控制大脑的开关,最后让盲人部分恢复视觉。八场八种画风(显微水下、纸面图示、卡哈尔墨线、荧光显微、俯视旷场、铜版画剖面、点阵视角),字幕和标注齐全;声效全部代码合成,旁白用 edge-tts,三者共用一条时间轴。整部片子的代码在 explainer-kit/。

用光,打开大脑

全片一览

用光,打开大脑全片

《试拳》· 设色水墨打斗

19.5 秒,无声,雾山五行那一路的设色水墨。崖顶对峙,棍拳相撞,矮身钻过勾拳、拖棍擦地上挑,最后跃起抡棍带火砸下,火墨炸满屏。人物是毛笔勾线加平涂和暗面,动作走穿过关键帧的平滑曲线,脚一步一步踩实不打滑;接触点用探针算坐标对准。整部片子的代码在 inkfight-kit/。

试拳

全片一览

试拳全片

《两只手》· 皮影短片

60 秒,没有歌。小将军要亮相,胳膊却被另一根杆子拽着满台跑;绕到幕后一看,两根杆子握在同一个人的两只手里。每片皮单独刻好镂空,再叠到透光的幕上;梆子、碎鼓、小锣、「锵」全部用 numpy 合成,按拍号和动作对齐。整部片子的代码、分镜和合成器都在 piying-kit/。

两只手

全片一览

两只手全片

《呆头鸟》· 蜡笔绘本 MV

2 分 29 秒,36 个镜头。油画棒蜡笔加连环画分格,江南小镇从清晨到夜里,男主一慌就「噗」地变成一只呆头鸟。从剧本到带字幕的成片不到 2 小时。

呆头鸟

全片一览

呆头鸟全片

《琵琶曲》· 水彩 MV

2 分 09 秒,39 个镜头。丰子恺式的笔刷小人,不画五官;灯会一段换成剪影配暖光,结尾拉远成一幅画卷。

琵琶曲

全片一览

琵琶曲全片

《落款》· 水墨短片

16.8 秒。一滴墨落成远山,小红块走到哪里,芦苇和河就画到哪里,最后坐下成了整幅画的印。场景代码在 examples/brush/ink.js。

落款

《拾星》· 水彩短片

14.5 秒,第一支测试片。Clawd 捧着空罐子接住掉下来的星星,一罐星光把夜色一点点焐暖。场景代码在 examples/brush/stars.js。

拾星

《琵琶曲》《呆头鸟》《八音盒纸带》三部 MV 的歌有版权,仓库里不带音频和歌词(《八音盒纸带》的字幕换成了自己写的示例词)。上面的预览都是无声画面;《两只手》的锣鼓是合成的,跑一下 piying-kit/sound/synth.py 就能生成;《用光,打开大脑》的声效和旁白分别跑 explainer-kit/tools/audio.js、tools/voice.js 生成;《远光》的配乐跑 prints-kit 里的 npm run audio 生成;《一滴墨》的配乐按 fluid-kit 的说明下好鼓采样后,跑 npm run stems 和 npm run mix 生成;《沙漏》《页边》的配乐分别跑 sand-kit、doodle-kit 里的 npm run audio 生成;《一口》的配乐按 fluid-kit 的办法装好鼓采样后,跑 montage-kit 里的 npm run audio 生成;《一圈》的配乐跑 zoumadeng-kit 里的 npm run stems 和 npm run mix 生成。

它教给 agent 什么

  • 十二套制作引擎
    • 水彩、水墨:p5.js + p5.brush,基于 ClaudeAnimationBase,速度随镜头复杂度波动较大。
    • 蜡笔绘本:本仓库自写的 2D canvas 引擎 crayon-kit/,每帧 10–50ms。
    • 皮影:自写的 2D canvas 引擎 piying-kit/,每帧 2–10ms,锣鼓用代码合成。
    • 设色水墨打斗:自写的 2D canvas 引擎 inkfight-kit/,每帧 20–100ms。
    • 科普讲解片:自写的 2D canvas 引擎 explainer-kit/,每帧 60–130ms,声效代码合成,旁白 edge-tts。
    • 版画系列:SVG 生成的六种版画工艺 prints-kit/,每帧约 1 秒,多路并行渲染。
    • 流体彩墨:WebGL2 稳定流体 fluid-kit/,音符表直接驱动颜料,每帧约 65ms,只能顺序渲染。
    • 沙画:WebGL2 沙子高度场 sand-kit/,撒、划、推、休止角、沙帘,底光透沙,每帧约 90ms 起,只能顺序渲染。
    • 作业本涂鸦:自写的 2D canvas 引擎 doodle-kit/,圆珠笔、彩铅排线、假手写和带影子的实物笔,整页预渲成贴图,每帧 2–10ms。
    • 共点蒙太奇:montage-kit/,两层画风错拍接力,24 种画风共用一套骨架,Node + @napi-rs/canvas 直接出帧。
    • 走马灯:自写的 2D canvas 引擎 zoumadeng-kit/,多层剪纸透烛光、卷成圆柱,灯外推进灯里,每帧 3–20ms。
    • 赛璐珞:自写的 2D canvas 引擎 cel-kit/,黄昏光的质感层、哑光陶土 Clawd、手臂反算站位让道具经手、竖排纸条字幕,每帧约 25ms。
  • 自己写配乐:Tone.js 加真乐器采样(含 VSCO2 真管弦乐),不用合成音色;三层编曲、密度曲线、全曲只留一个高点、人性化;无头 Chrome 离线导出、两遍响度标准化;画面按拍子对齐。古典 + 摇滚的曲子另有多力度轮换的真鼓、分轨导出和一个自写的混音台(均衡、压缩、饱和、卷积混响、按段对齐响度、限幅)。
  • 导演手册:景别、轴线和 30 度规则、剪辑点、「停、爆、停」的节奏、构图和视线、角色表演、动作戏原则,最后是一张分镜检查表。写给只会照指令做的模型也能用。
  • 做片子的规矩:每个镜头只让观众看一件事、先有原因再有反应;给「看懂」留时间;每个接缝都有转场;画面不写字;丰富但不廉价,不撒火花填空。
  • 检查循环:每做完一个镜头就渲出联系表、连续帧、局部放大图,用读图工具自己看,查瞬移、悬空的手、朝向、道具挡脸、颜色发脏。只读代码看不出动画好不好。
  • 整首歌的 MV 流程:节拍分析 → 用拍号写逐镜表(改剪辑只改一处)→ 先便宜地试风格 → 零件库 → 分批做、每批自检 → 局部返修 → ffmpeg 调色。
  • 歌词字幕:单独一层透明 PNG 叠上去,竖排、按半句出。蜡笔版的字也有纸纹、会随画面抖动;用「探针」记下每帧人物实际画在哪里,自动排版避开人物。
  • 科普片的做法:先查新闻和原文核对事实;字幕、章节、引线标注的规矩;转场跟着内容选;声效按段量响度;旁白逐句生成,读得长就把那一段画面拉长,人声一响背景自动避让。
  • 反面教材:一支规矩全守却没戏的测试片,逐条写了为什么没戏。

目录

路径 内容
paint-video/ skill 本体。SKILL.md 短片入门,mv-workflow.md 长片与 MV 流程,crayon.md 蜡笔画风,piying.md 皮影,wushan.md 设色打斗,directing.md 导演手册(分镜、景别、轴线、剪辑、节奏、表演,各画风通用),explainer.md 科普讲解片,prints.md 版画系列,fluid.md 流体彩墨 MV,sand.md 沙画,doodle.md 作业本涂鸦,montage.md 共点蒙太奇,zoumadeng.md 走马灯,cel.md 赛璐珞,music.md 自己写配乐
crayon-kit/ 蜡笔引擎、角色(3 头身小人和呆头鸟)、零件库、16 秒 demo、歌词字幕工具
piying-kit/ 皮影引擎、带操纵杆的关节小人、60 秒短片《两只手》全部代码和分镜、锣鼓合成器
inkfight-kit/ 设色水墨引擎、勾线平涂的人体骨架、19.5 秒打斗短片《试拳》全部代码、算关节坐标的 probe.mjs、24 招的招式库 moves.js(plan() 按接触时刻拼招,附一段示范对打)
explainer-kit/ 科普片引擎、3 分钟科普片《用光,打开大脑》全部代码、声效合成器 tools/audio.js、旁白脚本 tools/voice.js
prints-kit/ 六种版画工艺的 SVG 生成、93 秒短片《远光》全部代码、配乐乐谱与离线导出、并行渲染脚本
fluid-kit/ WebGL 流体引擎、91 秒 MV《一滴墨》全部画面代码和音符表、乐谱、DRSKit 真鼓整理脚本和播放器、混音台 mixdesk.py 及配置
sand-kit/ WebGL 沙画引擎、75 秒短片《沙漏》全部画面代码、照画面写的配乐和离线导出
doodle-kit/ 圆珠笔和彩铅的 2D canvas 引擎、38 秒短片《页边》全部画面代码和分镜、跟着动作写的配乐和离线导出
montage-kit/ 双层画风接力引擎、解剖级奔马骨架、24 种画风、25.8 秒短片《一口》全部代码、配乐和音效
zoumadeng-kit/ 走马灯引擎、剪纸马和鹿的四足骨架、2:34 短片《一圈》全部代码和分镜、圆舞曲乐谱、分轨导出和混音台
cel-kit/ 赛璐珞引擎、哑光陶土 Clawd(四个视角、围巾和毛线帽)、七处黄昏布景、手臂 IK、4:16 MV《八音盒纸带》全部画面代码和分镜、竖排纸条字幕和 LRC 转换工具
examples/brush/ 《拾星》《落款》的场景代码,放进 ClaudeAnimationBase 就能跑
tools/ analyze.py 节拍与段落分析,make_shotlist.py 拍号逐镜表模板
docs/ README 用的预览图

安装

git clone https://github.com/nzl153/paint-video-skill
cd paint-video-skill

把 paint-video/ 复制到 agent 的 skills 目录:Claude Code 是 ~/.claude/skills/,Codex 是 ~/.codex/skills/。仓库本身留着,skill 会去里面找 crayon-kit/ 和范例。

需要:

  • Node 22.12+、Chrome 或 Chromium、ffmpeg(在 PATH 里)
  • 脚本只在常见安装位置找 Chrome,装在别处时传 --chrome=<路径> 或设环境变量 CHROME_PATH
  • 字幕工具:Python 3、numpy、Pillow
  • 皮影锣鼓合成:Python 3、numpy、scipy
  • 科普片旁白:Python 3、pip install edge-tts(要能连上微软语音服务,必要时设 TTS_PROXY)
  • 节拍分析:再加 scipy、matplotlib
  • 走马灯的混音:Python 3、numpy、scipy;厅堂混响默认是算出来的,想用原片那份 Bricasti M7 脉冲响应(Samplicity 免费库)就自己下载,用环境变量 HALL_IR 指过去
  • 赛璐珞字幕用系统里的华文仿宋,没有时退到仿宋或楷体
  • 流体彩墨的配乐:Python 3、numpy、scipy;鼓采样要自己下 DRSKit 2.1(约 2.6 GB),解压后跑 python -I tools/drs_build.py <解压目录> samples/drs。只看画面不用下;改了乐谱要重导音符表(npm run events)时也得先装好鼓包
  • 版画、流体、沙画、涂鸦、共点蒙太奇、走马灯的配乐第一次导出时要联网,从 jsDelivr 下载 Tone.js 和乐器采样(版画、沙画各约 200MB),之后从各自的 .cache/ 读
  • 水彩画风:另外 clone ClaudeAnimationBase 并 npm install

先跑一下蜡笔 demo

cd crayon-kit
npm install
node render.mjs --sheet=1,4,8,12 --cols=4 --w=480 --out=out/check/sheet.jpg    # 联系表
node render.mjs --loop=cast --sheet=1 --cols=1 --w=960 --out=out/check/cast.jpg # 人设表
node render.mjs --frames --workers=4                                            # 渲全部帧
node render.mjs --encode --out=out/demo.mp4                                     # 合成

16 秒 384 帧,4 个进程约 45 秒渲完。

怎么用

装好之后直接跟 agent 说要什么,比如:

  • 「用蜡笔绘本风格做一支 15 秒的短片:小狗追着一片落叶跑,最后叶子落在它鼻子上。」
  • 「做一支水墨短片,16 秒左右,一只鹤从画纸里走出来。」
  • 「这首歌(附音频和 LRC 歌词)做成一支横屏 MV,先给我剧本。」

agent 会先写分镜给你看,再一个镜头一个镜头地做,每个镜头渲出来自己检查过才往下走。长片会分批给你看静帧拼图,你点头了再渲动态。

性能参考

RTX 4060 笔记本上实测:

每帧 例子
蜡笔引擎 10–70ms 2:29 的 MV 共 3590 帧,4 进程约 4 分钟
皮影引擎 2–10ms 60 秒 1440 帧,单进程直出 MP4 约 2 分钟
设色打斗引擎 20–100ms 19.5 秒 468 帧,4 进程不到 1 分钟
科普片引擎 60–130ms 3:05 共 5550 帧,单进程直出 MP4 约 9 分钟
p5.brush 水彩 约 1 秒起,复杂镜头更慢 2:09 的 MV 共 3102 帧,3 进程实测约 1.5–2 小时
流体彩墨 约 65ms 91 秒 2730 帧,单进程顺序渲染约 3 分钟
沙画 约 90ms,长树那段几百毫秒 75 秒正片加 3 秒余音共 78 秒,2340 帧,单进程顺序渲染约 25 分钟
作业本涂鸦 2–10ms(第一帧建整页贴图约 1 秒) 38 秒 912 帧,4 进程约 40 秒
共点蒙太奇 约 100ms 25.8 秒 774 帧,单进程直出 MP4 约 1.5 分钟
走马灯 3–20ms 2:34 共 3703 帧,4 进程约 5 分钟
赛璐珞 约 25ms 4:16 共 6144 帧,4 进程约 10 分钟
字幕层 — 整片 6 进程加合成约 3–8 分钟

致谢

许可

MIT,见 LICENSE。

Reviews (0)

No results found