sprite-forge
GitHub用于生成角色动态Sprite和桌宠皮肤的自动化管线,通过视频截帧确保帧间一致性,包含身份锚定、AI生成、FFmpeg加工及三道闸验收流程。
Trigger Scenarios
Install
npx skills add zts212653/clowder-ai --skill sprite-forge -g -y
SKILL.md
Frontmatter
{
"name": "sprite-forge",
"description": "角色动态 sprite \/ 桌宠皮肤 \/ atlas 状态行生产线:母图锚身份 → Frame A 首帧 → AI 视频生成(人工环节)→ 截帧确定性加工 → atlas row + 三道闸。 Use when: 做桌宠皮肤、给猫补新状态动画行、visible-cafe\/F258 猫形象素材、 角色小循环动画(呼吸\/走路\/睡觉\/挥手级)、把静态角色\"做成动态的\"。 Not for: 动画短片成片(用 anime-forge)、录屏\/教程视频(用 video-forge)、 单张静态图\/头像(用 image-generation)、UI 图标。 Output: 192×208 atlas row strip + QA 包(contact\/GIF\/provenance)→ 过三道闸 + operator identity veto 后接 pet.json。"
}
Sprite Forge — 角色动态素材生产线
出生:F229 xianxian-codex 9 态 atlas 的实际生产管线(2026-06-22~24,
video-to-spritesheet-pipeline.md)。 Skill 化诱因:F258 素材首跑两连翻车(2026-07-08)——猫不知道家里有这条验证过的路,临场发明了两条被淘汰的路线(32px 手搓 + imagegen 逐帧直出),operator 连续两次 identity veto 后拉闸:"未来做动态的东西,你们要能想到用这个 skill。"
第一性原理(本 skill 的灵魂判断)
动画的帧间一致性问题,靠换介质解决,不靠更好的 prompt。 imagegen 逐帧独立生图 = 体型漂移、风格跳变、帧间无时序关系(Spike R2 实证,59×64 显示尺寸下可感知劣于视频截帧)。视频模型天然时序连贯——所以生成层必须是视频,图像模型只出首帧。
管线五步(人猫协作产线,人工环节是设计的一部分)
| 步 | 做什么 | 谁 | 关键约束 |
|---|---|---|---|
| 1 锚身份 | 取角色设定母图(KD-21 视觉 canon) | — | 母图库=docs/videos/cucu-pr-flow/assets/references/character-sheets/(按角色名对应 *-r0N.png 四足设定图) |
| 2 生成首尾帧 | imagegen 出 Frame A + Frame B 两张(1024×1024 纯白底):A=基准姿态,B=同姿态仅微小差异("Only differences: ... Everything else IDENTICAL"句式) | 生图猫(须原生 imagegen;prompt 可由更贵的猫代写) | 强 2D 风格锚;母图作 reference image 传入;每次只做一个状态;B 帧锁不住(缩放/构图漂移)→ 降级单图 i2v 只用 A 帧 |
| 3 拍视频 | AI 视频工具生成 2-3s 循环:首尾帧模式(A+B,更可控)优先;单图 i2v(只喂 A,更稳)备选 | 人工(operator / 云端 Gemini) | 16:9 横屏 / 低运动强度 / 2D 锚 + 反 3D negative(模板见真相源 §3) |
| 4 截帧加工 | ffmpeg 截帧 → 抠图 → 缩放 → 拼 row | 廉价猫(sonnet 级)即可——纯确定性命令活,别烧贵猫 | 确定性工具链,命令见下 |
| 5 验收 | 三道闸 + 分批审 | 主审猫 + operator identity veto 终审 | 每批过了才做下一批(2-2-3 批次制先例) |
截帧加工命令(Step 4 速查)
ffmpeg -i video.mp4 -vf "fps=4" frame_%02d.png # 2-3s → 8-12 帧
magick frame_01.png -fuzz 10% -transparent white f1.png # 白底转透明(脏边则重跑 despill)
magick f1.png -resize 192x208 -gravity center -extent 192x208 cell_01.png
magick cell_*.png +append state_row.png # 拼 row strip
magick cell_01.png -resize 59x64 preview.png # 必做:缩到实际显示尺寸目检
工艺红线(每条都是真翻车)
- 2D 风格锚是保命符:视频 prompt 首行必须
2D hand-drawn anime illustration style, flat cel-shaded coloring, clean visible outlines+ negative 排除3D/CGI/photorealistic/plastic/Pixar——不加锚视频秒变塑料 3D(R1 实录) - 16:9 横屏:9:16 会把尾巴甩出画框(R1 实录)
- 运动强度调低:大幅运动=角色变形
- 约束宜简(五爪判例):一页解剖学约束反而让模型逐条画出每个被提到的爪→五爪;operator 一句"不要生成五只猫爪了"完美通过。简单意图 + 一句负面 > 详细规格书
- 主审第一问是"这是不是我们家那只猫",不是特征锚清单——checklist 全过 + operator"不像"= false pass(F229 r3-alpha 与 F258 两次翻车同型)
- 实战提示词必须回流:Step 3 人工环节实际用的提示词(含中途修正版)才是被验证的版本——生产完成后回流 prompt-pack/provenance。理论版翻车靠人工修正救活却不回流 = 下一只猫在同一个坑再摔一遍
Common Mistakes
| 错误 | 后果 | 修复 |
|---|---|---|
| imagegen 逐帧直出动画 row | 帧间漂移;被 operator identity veto(2026-07-08 实录) | 生成层换视频(第一性原理) |
| 手搓低分辨率像素格 | "看不出是猫"(2026-07-08 实录) | 高清生成→工具缩放,宽松生成确定性加工 |
| 拿 atlas 截图当身份 canon | 分辨率层面"像",母设定层面"不像" | canon = character-sheets 母图,不是下游产物 |
| 读了素材池 README 就动工 | 把合规层(hatch-pet/三道闸)误当生成层 | 先读 video-to-spritesheet-pipeline.md 全文再动手 |
| 一次铺满所有状态 | 打回成本×N | 每次一个状态行,分批过 operator |
| 跳过 59×64 实际尺寸预览 | 大图好看小图糊 | Step 4 最后一条命令必跑 |
| 把状态表达物(微粒/气泡/道具)烧进素材 | 失去状态绑定,表情从 telemetry 变演技;环境道具还加剧视频漂移 | 素材只含猫本体动作;粒子/道具/光效归渲染层按状态叠加(F258 S2/S3 判例) |
| 高遮挡姿势 prompt(紧蜷 donut / 肢体交叠) | 视频模型省略被遮挡躯干——生成"头+巨尾"解剖不完整猫(2026-07-09 S1 实录,operator 抽卡翻车) | 蜷姿描述留躯干可见弧线(curled 但 body visible);抽卡 2-3 败即换姿势写法别硬 roll;修正成功版按红线 6 回流 |
与其他 skill 的区别
anime-forge:产短片成片(分镜/EDL/节奏)——sprite-forge 产可循环状态行素材;共享"图锁确定性→视频给活气"哲学image-generation:单张静态图——不解决帧间一致性- GOTCHA:本 skill 含人工环节(拍视频),不是全自动管线;发任务书时必须显式安排"谁拍视频"(operator 或云端 Gemini),不可默认猫能自己完成
真相源(重材料按需读,不复制进上下文)
- 完整提示词模板库 + Spike 数据 + 9 态任务表:
docs/features/assets/F229/desktop-pet-sprite/video-to-spritesheet-pipeline.md - 近例 prompt pack(首尾帧句式 + 渲染分层决策范例):
docs/features/assets/F258/prompt-pack-v1.md - cell 规格与三道闸(合规层):
docs/features/F229-petskin-contract.md - pet.json atlas 格式实例:
packages/web/public/concierge/skins/xianxian-codex/pet.json
下一步
素材过全部闸门 → 接 pet.json / 渲染层(代码改动走 worktree + tdd)→ 新猫皮肤开整套 = 回 Step 1 换母图。
Version History
- f30e20c Current 2026-08-05 06:07


