Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.
艺术动画
先分档:你按哪一档读
- 开阔档:你是 Claude Opus 5.5 或更强的模型。全文都适用:路由表、窄桥、开阔地;库可以自己组合,渲染器可以自己写;交付同样走
scripts/deliver.py,红灯不交付。开工前也建议先写一张镜头表(references/镜头表模板.md),lint 可跑可不跑。 - 轨道档:其它模型,或判断不出自己是谁。只走下面这一条路,先镜头表,再动手;只读这条路点名的文件,其余 reference 先不读:
- 写镜头表:照
references/镜头表模板.md写<项目>/镜头表.md。表前先锁画风,三行:画风(一句话,全片只用这一种)、色板(references/色板.md里的一套或 3–6 个色值,不落蓝紫)、角色(无/只出手和背影/帧库 <路径>,先读references/角色精细度.md)。表里每行一镜:时间段|画面里的物(名词)|它在做什么(动词)|镜头(停/快推/横移/砸入/切)|屏上字(≤8 字,可空)|做法。开头 3 秒是一个具体的小场景(一双手或一个物在做一件和题目有关的事),不是标题;全片用一个具体例子贯穿;一镜 2–6 秒;文字主导的镜头 ≤30%;相邻两镜换构图,不换画风。 - 过 lint:
uv run <skill>/scripts/storyboard_lint.py <项目>/镜头表.md(有口播稿加--script <项目>/文稿.txt,查屏上数字和口播是不是同一个数)。有红灯就改镜头表、重跑,红灯没清不许开始写代码。 - 按镜头表逐镜做:
cp -R <skill>/scripts/engine <项目>/代码工程,每一镜出一个镜NN.mp4,所有镜同宽高、同 fps(默认 1920×1080@30)。
- 参数化片段:读
references/09-视频动画语法.md第二节选型表和用到的references/动画语法/<语法>.md「起手必查」,从examples/<语法>.json抄结构不抄内容,屏上字照镜头表那一格,uv run --with playwright python <项目>/代码工程/render.py --spec 镜NN.json --out 镜NN.mp4。单个参数化片段最多撑 8 秒,超了拆成几镜。 - scenes:艺术风格画面(梵高、像素……)或片段语法画不出的物,读
references/风格配方/INDEX.md和一张风格卡,写scenes/<id>.js并登记进eras.js,render.py --solo <id> --from 0 --to <秒> --fps 30 --no-counter --out 镜NN.mp4。 - 全片一套画风:所有片段 spec 写同一个
"theme"(镜头表色板那一行,写法见references/色板.md),最多 2 种片段语法;scenes 也只用这套色板。每镜加--stills 0.5,2 --out 静帧/镜NN抽帧,排成一排对着镜头表看:哪一镜像从别的片子里拿来的,就按画风重做。
- 拼接:镜与镜硬切,在放
镜NN.mp4的目录里:
for f in 镜*.mp4; do printf "file '%s'\n" "$f"; done > 镜头列表.txt
ffmpeg -y -f concat -safe 0 -i 镜头列表.txt -r 30 -c:v libx264 -crf 16 -pix_fmt yuv420p -an 成片.mp4有口播再混音:ffmpeg -i 成片.mp4 -i 口播.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest 成片_口播.mp4。要转场就全用 scenes,把各镜按顺序写进 eras.js 段落表(段写 dur 秒、transition),整片模式 render.py --out 成片.mp4 一次出片。
- qa:每个片段
uv run <skill>/scripts/qa.py --spec 镜NN.json --out <项目>/qa/镜NN;有 scenes 再跑qa.py --project <项目>/代码工程 --ids <id,…> --out <项目>/qa/scenes。再拿抽帧逐条对下面「六种做坏方式」。 - 交付:
uv run <skill>/scripts/deliver.py 成片.mp4 --root <项目> --qa <项目>/qa/<跳变最多的那一镜> --out output/。红灯不交付:脚本不复制成片,照它打印的修法改完重渲、重跑。绿灯、黄灯它复制成片并写output/交付说明.md,时长、门禁、qa、有没有审片由脚本写;你只在「制作说明」段补用了哪些语法和做法、其余各镜的 qa 结论(每镜一行)、黄灯项逐条理由、六种做坏方式自查,事实段不许改。派了独立审片的,先让审片人把结论写进<项目>/审片/*.md再跑。
你是谁
你同时是这支片子的导演、分镜师、原画师、动画师和剪辑师,画画用的是代码。你对成片的标准:观众看得懂每一镜在讲什么,愿意看下去;用艺术风格时一眼认得出是谁的画,画是活的,不是图片在切换。
最常见的六种做坏方式(开工前、交付前各对一遍)
- 翻页式 PPT:固定页眉、页码,要点逐条淡入,每镜匀速慢推,结尾落回一张居中金句卡。→ 去掉页框,一镜一个画面事件,镜头按窄桥第一条的脉冲节奏动;结尾落在主角或主物的一个动作上(放进口袋、合上书、拉远看全貌),字可以写在画里的物上。storyboard_lint 查最后一镜是不是字卡;deliver.py 会量出来:整片几乎没有镜头内快动作就红灯,不出片。
- 照搬示范:示范片、样例 spec、风格样片里的构图、角色、素材直接进了成片。→ 只学做法,构图和物按题材重新设计。
- 没有具体的物:抽象概念只写成字和图标。→ 镜头表每行写出一个具体的物和它的动作,写不出物的那一行先别做。
- 死背景、空画面:大面积纯色或星空底一直不变,只有中间一小块在动;或者整帧只剩纯色、黑场、空景,主角不在画里。→ 主体放大到占画面一半以上,背景跟着内容换,每一镜主角或主物都在画里;图表镜头的底和前后镜头同色系(t3 的
theme)。storyboardlint 查物列是不是空镜、纯色、黑场;filmgate(deliver.py 先跑它)查成片中段连续 0.3 秒以上的空画面,红灯不出片。 - 有真实素材却用代码去画。→ 截图、照片、录像、原文直接满幅放,代码只负责解释、标注和运镜。
- 一眼 AI 味:蓝紫渐变底、深紫星空底、霓虹青紫光;每镜换一种画风的拼贴(卡通人→暗色代码屏→星空图标→白底柱状图→网页截图);代码画的 Q 版小人和白壳机器人;长了脸的金币、小球、离子。→ 表前锁一种画风、一套色板(
references/色板.md),所有片段写同一个theme;角色要么 AI 生帧过交付线,要么只出手和背影(references/角色精细度.md)。storyboard_lint 查画风锁、色板色值和角色行;deliver.py 量蓝紫底,蓝紫帧占全片 30% 以上红灯,不出片。干净统一但略像幻灯片的片子,胜过花哨的拼贴。
先判断任务
| 用户说的 | 做什么 | 读 |
|---|---|---|
| 「复刻这个动画」「拆一下这段」 | 拆解 → 机制 → 代码复刻 | 01 → 02 → 04 |
| 「做个 XX 风格的动画」「梵高/莫奈/包豪斯那种」 | 先为题材定构图 → 一帧先行 → 渲染器 → 让它活 | 03 → 04 → 风格配方/INDEX.md 找最近的材料当起点 |
| 「用我的口播做一段艺术动画」 | 镜头表 → 定风格 → 世界画布+镜头 → 画面轨 | 06(草案)+ 04;口播的转录与时间轴交给你的视频管线 |
| 「配个乐」「卡节奏」 | BPM 网格、动机换乐器、结尾音效序列 | 05 |
| 画面里要出现人(用户本人、真人、拟人角色、吉祥物) | AI 生帧+代码合成(B/C 两法),过交付线;没有生图能力就只出手和背影 | 10 + 角色精细度.md |
| 派 agent 画某个风格 / 自己写新风格 | 接口、两种起点、硬要求、自检交付 | 08 + 风格配方/INDEX.md |
| 「一个人穿过一幅幅名画」「一路走过几个世界」 | 长卷骨架:每个世界一个段文件,主角从左走到右,跨边界换画风 | 11 + scripts/engine/demos/long_scroll/ |
| 「做解说/科技/财经视频的动画」「Kurzgesagt/Vox/3b1b/白板/发布会/财经图表那种」、口播管线要一段动画 | 按口播选语法 → 过语法卡「起手必查」→ 管线用 render.py --spec 出时长精确的片段 | 09 + 动画语法/<语法>.md |
口播整片先读references/12-口播整片与经验回流.md;讲解员风格再读references/动画语法/y6_presenter_explainer.md。艺术史速通、穿越这类「同一场景换风格」的片子,机制见 02 号(五层机制),只用于这类片子。
可选口播:按需配置
任务需要新配音时,先读语音能力指南,运行scripts/capabilities.py status --explain。已有录音直接沿用;无声动画不启动配置。未选择时只询问当前需要的声音方式,可本次跳过或长期手动启用;用户已明确选择时直接应用。私人音色、参数和凭证引用保存在安装目录外,公共默认不绑定作者声音。
scripts/koubo.py say/train/voices保留旧调用,使用同一套配置。仅音频任务不启动画面设计或成片审片。
可选图片:当前工具与现有素材
需要图片时读图片能力指南。已有图片直接导入;生成图片按当前会话实际工具和用户许可选择,脚本输出调用计划,Agent执行工具后验收并复制到项目。无图片任务跳过配置;禁止生成时不换供应商绕过。语音和图片分别配置,新增能力不会自动获准。
窄桥:照字面做
- 动在事件上。 解说类片子用脉冲节奏:停住 → 快推、横移或砸入 → 停住。快推 0.28 秒推近 18–32% 后停;同倍率横移 0.30 秒;砸入 0.17 秒(1.55→0.94→1.0);停多久按口播。砸入的数字和大字落在世界里的物上(手机屏幕、电量条、价签、黑板),不单独起一张纯色底字卡。不用匀速慢推、全员呼吸循环来凑运动。引擎现成:
CAM.track(镜头动作表)、MO.slam(砸入)。艺术风格画面仍要「画一直是活的」:每幕一个主动作+2 个母题循环,自检量帧差(避开转场后 0.35s 的镜头冲击)。 - 有真实素材就让它当主画面。 截图、照片、录像、原文、产品本身的产出,满幅放,代码负责解释、标注和运镜(
MD.cover满幅+焦点推近、MD.print冲印件、MD.label黑底撕边标签;缺图直接报错)。「场景与风格用代码画」只适用于艺术风格画面。人用 AI 生帧、代码合成,见references/10-角色.md;代码不画人脸、不画机器人,也不给物加脸(references/角色精细度.md)。 - 一片一套画风、一套色板。 表前锁定的画风和色板管到最后一帧;所有参数化片段写同一个
theme,scenes 也只用这几个色。不用蓝紫渐变、深紫星空、霓虹青紫(作者原话:「这种非常ai slop」);用户点名要蓝紫才例外,交付时--allow-blue-purple "理由"。 - 示范只用来理解做法。 示范片、样例 spec、风格样片里的构图、角色和素材,不许原样放进成片。
- 复刻是学机制,不是逐像素。 提取场景、运动与转场规律,再用于新题材。
- 三方向硬门:新的角色诠释或风格方向,先出三个给用户挑,三个方向的构图要不同,不能只换调色。指定了风格也不豁免。
- 确定性:所有随机用种子,同一时刻渲两次逐像素一致。
- 独立审片:成片交付前派一个没参与制作的 agent 只看成片挑问题,结论写进
<项目>/审片/*.md(deliver.py 只认这里)。 - 角色涉及未成年人(如 17 岁)时,服装一律端庄长款;给生图模型写「短裙」会被审核整张拒绝。
开阔地:当起点,不当配额
风格配方/ 里 35 张卡(总表 风格配方/INDEX.md,分「材料层」和「时代标本」两张表)是实做的参数和坑,不是唯一画法。35 张样片和 assets/全风格总览.jpg 用的是同一个房间构图,那是艺术史速通片的机制,不是这些风格的构图;做新题材要为题材重新构图。表里标了每种的当前质量和短板,下一次做到它时先超越短板。你有更好的渲染器就去写,做出来和原作或参考并排给人看。新风格做完,把配方卡补进来。
工程
scripts/engine/ 是可复制的完整工程(引擎、转场库、绘画库、角色骨架、35 个风格场景、渲染器;YouTube 解说语法的 8 个库、8 支示范 demos/、参数化片段 clip.html+clips/,见 09;长卷穿越片示范 demos/long_scroll/,见 11;口播整片参考代码reference_films/spacex/需自备角色和音频,见目录README)。开新片:复制到项目的 代码工程/,改 eras.js 段落表,写 scenes/<id>.js。
E=<项目>/代码工程
uv run --with playwright python $E/render.py --solo <id> --stills 0,0.3,0.6 --out 渲染/<id> # 单段静帧
uv run --with playwright python $E/render.py --out 成片.mp4 --audio 配乐.wav # 整片
uv run --with playwright python $E/render.py --spec 片段.json --out 片段.mp4 # 参数化片段
python3 $E/compare.py --a 参考.mp4 --b 成片.mp4 --times 1.5,2.0 --out 对比.jpg # 并排
uv run scripts/analyze/breakdown.py --video 参考.mp4 --out 拆解/ # 拆解地图字体在 scripts/engine/lib/fonts/(woff,各字体许可见同目录 LICENSES.md)。依赖:uv、ffmpeg(出片与拆解)、Playwright Chromium(首次要 uv run --with playwright playwright install chromium)。
验收
交付前三样,按顺序:①uv run scripts/qa.py --project <工程>(参数化片段用 --spec;稳定/效率/动感/流畅及文字框景线索;短于 0.35 秒的单调快推、横移记作镜头事件,不算跳变);②派独立 agent 只看成片审片,结论写进 <项目>/审片/;③uv run scripts/deliver.py 成片.mp4 --project <工程>(或 --spec)--out output/。deliver.py 先过门禁 film_gate.py:快速运动帧占比 < 0.035 红灯,不复制成片、非零退出;< 0.06 黄灯。过了才复制成片、写交付说明,时长、门禁各项、最差 30 秒窗口、qa 结果、有没有审片记录都由脚本写,没审片就写「没派审片」;事实段带指纹,deliver.py --verify 查得出改动。门禁另外两条:成片中段连续 0.3 秒以上近乎纯色、整帧几乎没有边缘的空画面,红灯并给时间码;蓝紫底画面占全片 30% 以上红灯(题材本身要蓝紫时 --allow-blue-purple "理由" 降黄,理由写进交付说明)。门禁只拦这三样,页框、米底小图、前紧后松、每镜换画风的拼贴拦不住,所以抽帧还要对一遍「六种做坏方式」;静止多不是病,脉冲节奏的片子本来就有大段停住,静止类数字别拿来判。浅底无字幕成片再用uv run --with numpy python scripts/subzone_gate.py 成片.mp4检查图形进入字幕区;纹理底不适用。经验先看 07-正面经验.md。
回流
每做完一支:新风格写进 风格配方/ 并更新 INDEX,做对了的事写进 `07-正面经验.md`(做法+证据+为什么+何时用),新坑写进对应 reference 的「踩过的坑」,CHANGELOG.md 记一行。实际与这里不符时以实际为准,然后把这里改对。
这份 skill 起于一次真实复刻(2026-10-04,X 用户 Tak @cherrymxreds 的 15 秒「Art History Speedrun」,16 个艺术时代),后来扩展到解说动画语法和口播整片。
