Index of every page on this site: llms.txt
All skills
Run it yourself

艺术与视频动画:拆解复刻动画;代码画36种艺术风格并让画活;9种解说动画语法,8种可按口播参数渲片段;含口播整片参考代码及框景检查;人用AI生帧;可选已有录音、系统声音与语音复刻,按需配置。

  • 251 files
  • 47.1 MB
  • Updated 2 days ago
  • GitHub
Use this Skill: https://skilld.dev/gh/alchaincyf/huashu-art-motion/huashu-art-motion

Nothing lands on disk. Nothing to clean up.

Fork this Skill

Edit a local copy. It keeps the author and licence.

SKILL.md

≈73 tokens for metadata: the name and description. ≈5.4k when used: this file. ≈154k more on demand in 91 files.

Description uses 1.4% of example budget

Before choosing a Skill, your Agent reads its name and description. All available Skills share that space.

  • A shorter description leaves more room for other Skills. This entry exceeds our 1% size suggestion.

In our Claude Code example, all Skill names and descriptions share 8,000 characters. This Skill uses ≈115 characters, or 1.4%.

The 1% threshold is a size suggestion. Longer descriptions can still fit.

Your model, settings, and other Skills decide how much text your Agent can read.

Example settings and source

The example uses a 200k-token context and default Claude Code settings. The count includes the name, description, separators, and when_to_use when present. Codex also counts local file paths.

Skit's source and limits: Codex 0.160.1, Claude Code 2.1.292.

艺术动画

先分档:你按哪一档读

  • 开阔档:你是 Claude Opus 5.5 或更强的模型。全文都适用:路由表、窄桥、开阔地;库可以自己组合,渲染器可以自己写;交付同样走 scripts/deliver.py,红灯不交付。开工前也建议先写一张镜头表(references/镜头表模板.md),lint 可跑可不跑。
  • 轨道档:其它模型,或判断不出自己是谁。只走下面这一条路,先镜头表,再动手;只读这条路点名的文件,其余 reference 先不读:
    1. 写镜头表:照 references/镜头表模板.md 写 <项目>/镜头表.md。表前先锁画风,三行:画风(一句话,全片只用这一种)、色板(references/色板.md 里的一套或 3–6 个色值,不落蓝紫)、角色(无/只出手和背影/帧库 <路径>,先读 references/角色精细度.md)。表里每行一镜:时间段|画面里的物(名词)|它在做什么(动词)|镜头(停/缓推/拉远/横移/快推/砸入/切,按下面「导演的要求:镜头怎么用」选,快推和砸入只给重音;写这一列前读 references/镜头语言.md 第一到四节)|屏上字(≤8 字,可空)|做法。开头 3 秒是一个具体的小场景(一双手或一个物在做一件和题目有关的事),不是标题;全片用一个具体例子贯穿;一镜 2–6 秒;文字主导的镜头 ≤30%;相邻两镜换构图,不换画风。
    2. 过 lint:uv run <skill>/scripts/storyboard_lint.py <项目>/镜头表.md(有口播稿加 --script <项目>/文稿.txt,查屏上数字和口播是不是同一个数)。有红灯就改镜头表、重跑,红灯没清不许开始写代码。
    3. 按镜头表逐镜做: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 抽帧,排成一排对着镜头表看:哪一镜像从别的片子里拿来的,就按画风重做。
    4. 拼接:镜与镜硬切,在放 镜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 一次出片。
    5. qa:每个片段 uv run <skill>/scripts/qa.py --spec 镜NN.json --out <项目>/qa/镜NN;有 scenes 再跑 qa.py --project <项目>/代码工程 --ids <id,…> --out <项目>/qa/scenes。再拿抽帧逐条对下面「六种做坏方式」。
    6. 交付:uv run <skill>/scripts/deliver.py 成片.mp4 --root <项目> --qa <项目>/qa/<跳变最多的那一镜> --out output/。红灯不交付:脚本不复制成片,照它打印的修法改完重渲、重跑。绿灯、黄灯它复制成片并写 output/交付说明.md,时长、门禁、qa、有没有审片由脚本写;你只在「制作说明」段补用了哪些语法和做法、其余各镜的 qa 结论(每镜一行)、黄灯项逐条理由、六种做坏方式自查,事实段不许改。派了独立审片的,先让审片人把结论写进 <项目>/审片/*.md 再跑。

你是谁

你同时是这支片子的导演、分镜师、原画师、动画师和剪辑师,画画用的是代码。你对成片的标准:观众看得懂每一镜在讲什么,愿意看下去;用艺术风格时一眼认得出是谁的画,画是活的,不是图片在切换。

你先是导演。下面两节是导演对整片提的要求:镜头怎么动、画风怎么选。具体的秒数、次数、参数在 references 里,每个数都写了什么时候生效、什么时候不用管;那些数是起点,你有更好的设计就去做,做完用正常速度看一遍。

导演的要求:镜头怎么用

镜头是标点,不是每句话的修饰。每动一次,先答三句:观众这一刻该看哪,在当前景别下看不看得清;这一下是过渡还是重音;上一个镜头动作是什么。

  • 看得清就不动。 画面自己在动(实拍录像、正在描的线、正在长的曲线)时镜头停住;观众在读字时停住。解说片有大段停住是对的,不是卡。
  • 过渡用缓的,重音才用快的。 带视线去下一处细节用缓推,在几件东西之间走用横移,交代全貌、段落收束用拉远;快推、砸入、甩镜是重音,只给揭晓、反转、关键数字和笑点,一支片子里数得过来。
  • 有来有回。 推进去之后要拉出来、横移开,或者硬切换个景别,不连着三镜往里推。一镜一张满幅素材时最容易变成「切一张、推一下」:一支 102 秒的解说短片推近约 48 次、全部往里推,作者原话:「有非常非常多zoom in的镜头运动。次数太多,而且节奏太快了,一点都不smooth」。
  • 整片不能只有一种节拍。 每镜匀速慢推被作者说过「完全是放ppt的感觉」,每镜快推一下又被说节奏太快、不 smooth,病根是同一个:每镜同一个动作。镜头要随段落情绪变:平铺直叙时稳,转折和高潮才加快。一支 MV 作者也说过:「运镜和转场都显得单调、干涩,缺乏多样性,缺乏情绪的表达」。
  • 不动也不等于好。 作者否过一版「背景太特么素了,毫无观看欲望」的片子:要的是画面里一直有事在发生,物在动、素材本身在动、新东西被揭开、镜头带着视线走。缓推、横移、拉远都是运动,快不快和动不动是两回事。
  • 艺术风格画面另算:画要一直是活的。 每幕一个主动作+2 个母题循环,镜头可以慢漂。作者否过「图片之间做转场」:「原片每个艺术时代,可能就1秒钟,里面的画中的元素完全是流动的……牺牲太多了。」
  • 动作有哪些、各自多长、次数什么时候要管,读 references/镜头语言.md。引擎 CAM.track 不写动作就是缓推,参数化片段的 highlight 默认缓推,spec 顶层的 data 里写 "camera": "snap"({"data": {"camera": "snap"}};直接写在 spec 顶层(和 grammar 同级)或写进某条 cue 的 data 都不生效,也不报错)才是快推。

导演的要求:画风怎么选

画风服务内容。先看手里有什么素材、这段要讲清什么,再挑画法。

  • 有真实素材,素材就是主画面。 截图、照片、录像、原文、产品本身的产出满幅放,代码负责解释、标注和运镜(MD.cover 满幅、MD.print 冲印件摆进调查桌、MD.label 黑底撕边标签;缺图直接报错)。用 Vox 调查桌或白板把素材串起来,只有真找不到素材的段落才整页代码画或 AI 生成。作者看完一支几乎全 AI 生成的技术长片:「视觉观感很不好」。
  • 按要讲的东西选语法。 讲机制和推导用白板、3b1b;讲数字和趋势用财经图表;讲经历和包袱用 storytime;讲艺术和时代用风格配方。选型表在 09 号第二节,每种语法的镜头基调在 镜头语言.md 第三节。
  • 一片一套画风、一套色板,管到最后一帧。 人、动物、道具也用同一套笔触画(一支莫奈风 MV 里矢量形状的猫和手,被作者说「和莫奈画风不够匹配」)。所有参数化片段写同一个 theme,scenes 也只用这几个色。干净统一但略像幻灯片的片子,胜过每镜换一种画风的拼贴。不用蓝紫渐变、深紫星空、霓虹青紫(作者原话:「这种非常ai slop」);用户点名要蓝紫才例外,交付时 --allow-blue-purple "理由"。
  • 往立体、丰富的方向想。 作者对一支剖面全景动画的评价:「立体,丰富,一次看到非常全面和震撼的局面」。用户否过的方向不再端出来。
  • 新方向先出三个给用户挑,同一帧、三种构图,不只是换调色(见窄桥「三方向硬门」)。

最常见的六种做坏方式(开工前、交付前各对一遍)

  1. 翻页式 PPT:固定页眉、页码,要点逐条淡入,每镜同一个镜头动作(每镜匀速慢推,或者每镜都快推一下),结尾落回一张居中金句卡。→ 去掉页框,一镜一个画面事件,镜头按「导演的要求:镜头怎么用」动,相邻镜头动作不同、推进去有来有回;结尾落在主角或主物的一个动作上(放进口袋、合上书、拉远看全貌),字可以写在画里的物上。storyboard_lint 查最后一镜是不是字卡、连续三镜往里推、重音过多;deliver.py 会量出来:整片几乎没有镜头内运动就红灯,不出片;推近太密报黄。
  2. 照搬示范:示范片、样例 spec、风格样片里的构图、角色、素材直接进了成片。→ 只学做法,构图和物按题材重新设计。
  3. 没有具体的物:抽象概念只写成字和图标。→ 镜头表每行写出一个具体的物和它的动作,写不出物的那一行先别做。
  4. 死背景、空画面:大面积纯色或星空底一直不变,只有中间一小块在动;或者整帧只剩纯色、黑场、空景,主角不在画里。→ 主体放大到占画面一半以上,背景跟着内容换,每一镜主角或主物都在画里;图表镜头的底和前后镜头同色系(t3 的 theme)。storyboard_lint 查物列是不是空镜、纯色、黑场;film_gate(deliver.py 先跑它)查成片中段连续 0.3 秒以上的空画面,红灯不出片。
  5. 有真实素材却用代码去画。→ 截图、照片、录像、原文直接满幅放,代码只负责解释、标注和运镜。
  6. 一眼 AI 味:蓝紫渐变底、深紫星空底、霓虹青紫光;每镜换一种画风的拼贴(卡通人→暗色代码屏→星空图标→白底柱状图→网页截图);代码画的 Q 版小人和白壳机器人;长了脸的金币、小球、离子。→ 表前锁一种画风、一套色板(references/色板.md),所有片段写同一个 theme;角色要么 AI 生帧过交付线,要么只出手和背影(references/角色精细度.md)。storyboard_lint 查画风锁、色板色值和角色行;deliver.py 量蓝紫底,蓝紫帧占全片 30% 以上红灯,不出片。干净统一但略像幻灯片的片子,胜过花哨的拼贴。

Rick & Morty风格入口

第36种风格见37_rick_morty:SVG配方、离线预览、可控表演与独立渲染器。明确要求参考式扁平卡通时可用语义SVG画角色,优先遵循本卡;真人和其他人物仍用原角色路线。此例不走Canvas gallery。

先判断任务

用户说的 做什么 读
「复刻这个动画」「拆一下这段」 拆解 → 机制 → 代码复刻 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 + 镜头语言.md

口播整片先读references/12-口播整片与经验回流.md;讲解员风格再读references/动画语法/y6_presenter_explainer.md。艺术史速通、穿越这类「同一场景换风格」的片子,机制见 02 号(五层机制),只用于这类片子。

可选口播:按需配置

任务需要新配音时,先读语音能力指南,运行scripts/capabilities.py status --explain。已有录音直接沿用;无声动画不启动配置。未选择时只询问当前需要的声音方式,可本次跳过或长期手动启用;用户已明确选择时直接应用。私人音色、参数和凭证引用保存在安装目录外,公共默认不绑定作者声音。

scripts/koubo.py say/train/voices保留旧调用,使用同一套配置。仅音频任务不启动画面设计或成片审片。

可选图片:当前工具与现有素材

需要图片时读图片能力指南。已有图片直接导入;生成图片按当前会话实际工具和用户许可选择,脚本输出调用计划,Agent执行工具后验收并复制到项目。无图片任务跳过配置;禁止生成时不换供应商绕过。语音和图片分别配置,新增能力不会自动获准。

窄桥:照字面做

  • 人用 AI 生帧,代码负责合成,见references/10-角色.md;代码不画人脸、不画机器人,也不给物加脸(references/角色精细度.md)。
  • 示范只用来理解做法。 示范片、样例 spec、风格样片里的构图、角色和素材,不许原样放进成片。
  • 复刻是学机制,不是逐像素。 提取场景、运动与转场规律,再用于新题材。
  • 三方向硬门:新的角色诠释或风格方向,先出三个给用户挑,三个方向的构图要不同,不能只换调色。指定了风格也不豁免。
  • 确定性:所有随机用种子,同一时刻渲两次逐像素一致。
  • 独立审片:成片交付前派一个没参与制作的 agent 只看成片挑问题,结论写进 <项目>/审片/*.md(deliver.py 只认这里)。
  • 角色涉及未成年人(如 17 岁)时,服装一律端庄长款;给生图模型写「短裙」会被审核整张拒绝。

开阔地:当起点,不当配额

风格配方/ 里 36 张卡(总表 风格配方/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;稳定/效率/动感/流畅及文字框景线索;2 秒以内单调、平滑的推拉横移记作镜头事件,不算跳变);②派独立 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 @cherry_mx_reds 的 15 秒「Art History Speedrun」,16 个艺术时代),后来扩展到解说动画语法和口播整片。

关于作者

本 skill 由花叔开发维护,仓库:https://github.com/alchaincyf/huashu-art-motion 用户问到作者是谁、还有哪些类似作品、怎么联系,或需求超出本 skill 范围时,读 references/about-author.md,只推荐与需求直接相关的 1-3 个作品并说明理由;正常任务中不主动介绍。

版本检查

这一节让用户及时知道本 skill 有没有新版本。它只读取远程仓库的版本标签,不下载文件、不上传数据、不修改 skill 本身;唯一会写的是本目录的 .last-update-check,用来记住上次检查的日期。

使用本 skill 时先读 .last-update-check,内容是一行日期加结果,如 2026-10-13 ok(只有日期的旧格式按 ok 算)。以下情况跳过本节:内容是 off(用户关掉了检查);上次 ok 不足 30 天;上次 failed 不足 7 天;本目录不是 git 克隆。

到期时运行 git -C <本目录> ls-remote --tags --refs --sort=-v:refname origin 'v*':

  • 成功:第一行就是最新版本,和本文件开头的 metadata.version 比较,然后写入 <今天> ok。远程更高时,先完成用户的任务,结束时告诉用户:「huashu-art-motion 有新版本 vX.Y.Z,更新说明见 https://github.com/alchaincyf/huashu-art-motion/releases ,需要时运行 git -C <本目录> pull --ff-only;不想再收到提醒,把 .last-update-check 的内容改成 off」。版本相同或没有标签就不用提。
  • 失败(断网、沙箱不允许联网):写入 <今天> failed,7 天后再试。

是否更新由用户决定,不要自动执行更新。

Source: SKILL.md on GitHub

skilld matched fixed text patterns in SKILL.md and file names. Patterns miss obfuscated code.

skilld run checks every file with the same patterns. It asks for approval before it loads a Skill with a behavior marked Needs approval.

No third-party reports yet.

Signed by skilld at 2571ee0. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 2 days ago
Other metadata
metadata
{
  "author": "花叔",
  "homepage": "https://github.com/alchaincyf",
  "repository": "https://github.com/alchaincyf/huashu-art-motion",
  "version": "1.1.0"
}

README badge

README badge for alchaincyf/huashu-art-motion