关于 game-character-sprites
game-character-sprites 是用于制作游戏角色定格像素动画素材的技能,涵盖图像生成、拼接、清理、验证和预览,并严格遵循指定尺寸、动作与方向。
主要功能
- 01生成固定单元格的像素动画条
- 02支持 32、64 和 128 像素单元格
- 03控制动作、方向和帧数
- 04拼接、清理并验证精灵表
- 05导出 GIF 或 WebP 动画预览
适用场景
- 01为游戏制作角色行走动画
- 02制作多种单元格尺寸的原生精灵表
- 03只生成指定的动作或方向
- 04通过清理后的预览检查动画
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tachikomared/ character-animation-creator-skill --skill game-character-sprites安装后在 Claude Code 中输入/game-character-sprites确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdagents/openai.yamlreferences/sheet-spec.mdvisual-review-template.jsonscripts/validate_64_sheet.pyaudit_sprite_motion.pyimport_imagegen_contact_sheet.pyexport_animation_previews.pyassemble_action_sheet.pypixel_snap.pyvalidate_resolution_hierarchy.pyvalidate_run_manifest.pyvalidate_sheet.pyvalidate_sheet_impl.py详细介绍
游戏角色精灵
概述
使用此技能制作可直接用于游戏的固定单元格像素艺术角色动画。如果用户指定了单元格尺寸,则这些尺寸就是必须交付的范围。如果未指定尺寸,默认使用 64x64。
绝不擅自扩大或缩小范围。如果用户只要求“攻击和行走”,就只制作这些动作。如果用户要求 GIF,就交付 GIF/WebP 预览,而不只是图集 PNG。如果用户未指定方向,且要求制作完整的游戏角色移动素材包,则默认采用完整的 8 向方向;如果是快速示例、测试或单方向请求,则只使用一个方向并标注清楚。
工作区最低交付内容:
run/
run-manifest.json
source/<original-imagegen-output>.png
<cell>/
generated/<action>-<direction>.png
frames/<action>-<direction>/<index>.png
final/<action>-sheet-clean.png
final/<action>-metadata.json
qa/<action>-validation.json
qa/<action>-contact-sheet.png
qa/visual-review.json
qa/previews/*-transparent-x4.webp
qa/previews/*-transparent-x4.gif
qa/previews/*-checker-x4.gif
范围
支持的单元格尺寸:32、64、128。
尺寸约定
用户要求的尺寸必须交付。如果用户要求 32x32 64x64 128x128,则为每种尺寸创建原生输出集:
run/32/...
run/64/...
run/128/...
除非用户明确表示可以接受缩放变体,否则不要将多尺寸请求缩减为单张 64x64 主图加缩放变体。如果必须以缩放变体作为备用方案,请将其标注为 scaled-32 或 upscaled-128,说明它们不是原生素材,也不要将其描述为创作的原生图集。
通常不要让 imagegen 生成组合的 32/64/128 联系表。组合的多尺寸联系表会让模型将尺寸视为一张图片中的布局元素,而不是独立的像素艺术预算。对于原生素材,请按每种请求的尺寸预算,分别生成各自的 imagegen 行条带。
多尺寸精灵图必须遵循严格的分辨率层级:
- 主级固定为
32x32:剪影、比例、姿势节奏和主要色块。 - 次级从
64x64开始:内部线条、较大的面部/服装细节,以及锁定的主级形状内清晰可辨的次要形态。 - 第三级从
128x128开始:微小高光、小褶皱、表面像素,以及锁定的主级和次级结构内的细小点缀。 - 概念上,较大尺寸应类似于
32px设计的最近邻扩展,并在相同形状内增加信息。 - 较大尺寸不得更改主要剪影、肢体长度、身体比例、姿势序列或主要调色板色块。
对于原生多尺寸任务,应按层级执行工作流程,而不是把三种尺寸作为三张互不相关的图来绘制:
generate the 32px strip directly as a 32px-budget pixel-art row
visually accept the 32px primary silhouette, pose timing, and main color blocks
generate the 64px strip directly as a 64px-budget row, using the accepted 32px strip as the primary-structure reference
generate the 128px strip directly as a 128px-budget row, using the accepted 32px and 64px strips as structure references
assemble each size with --cell <cell>
clean each size with --cell <cell>
validate each size with --cell <cell>
run hierarchy QA by making thumbnail comparisons only; do not create assets by downsampling
export previews for each size
单元格尺寸指南:
32x32:简化细节、夸张剪影、减少颜色,避免添加模糊不清的微小面部/配件细节。64x64:适合游戏原型和清晰易辨的 Q 版角色的均衡默认尺寸。128x128:原生重绘,增加更多像素细节并让次级动作更流畅,而不是将64放大到最近邻尺寸。
不予验收的情况:如果用户要求多种尺寸,而最终回复只包含创作的 64px 图集以及缩放的 32/128 变体,则任务不完整,除非用户同意这种折中方案。
如果 32/64/128 是三张不一致的图,也不予验收。原生的大尺寸版本可以增加细节,但缩小后必须与相同的 32px 主剪影和主要色彩布局一致。
默认方向:
south, south-east, east, north-east, north, north-west, west, south-west
只创建用户要求的方向。对于完整的 8 向导出,按上述顺序排列。
单方向任务
包含“一个方向”“单方向”“只要一个方向”“1 个方向”或“测试一个方向”的请求,表示:
rows: 1
directions: <requested direction, or south/front if the reference is front-facing>
不要将单方向任务扩展为 4 向或 8 向图集。如果用户提供了正面朝向的参考图但未指定方向,则使用 south,并说明测试使用的是参考图所示的朝前方向。
单方向多尺寸测试的预期输出如下:
run/32/final/walk-sheet-clean.png # 192x32 for 6 frames
run/64/final/walk-sheet-clean.png # 384x64 for 6 frames
run/128/final/walk-sheet-clean.png # 768x128 for 6 frames
默认帧数:
idle: 4 frames, optionally padded to 6 cells
walk: 6 frames
attack: 6 frames
Agent 工作流
- 明确请求范围:单元格尺寸、动作、方向、帧数、武器/职业,以及必须保留的参考细节。明确指定的尺寸必须作为必需输出。
- 根据用户提供的参考图确定角色。如果图像工具无法读取文件路径,请使用聊天上下文中附加的图片;如果没有可用于视觉参考的内容,请停止并说明无法使用该参考图,而不要凭空编造一个仅基于文字、与参考图不符的角色。
- 在生成之前创建
run/run-manifest.json。记录参考来源、身份细节、请求范围和计划采用的生成方法。 - 先为请求的最小尺寸制作一个高质量的标准基础精灵图,通常为
32x32,以便先确定主要设计,再添加细节。 - 每次只生成一个动作、方向和尺寸的条带,例如先生成
32/walk-south,再生成64/walk-south,然后生成128/walk-south。 - 对于多尺寸任务,每个请求的尺寸都必须有单独的 imagegen 输出文件。不要使用一张 imagegen 联系表作为多个原生尺寸的来源。
- 在
run/run-manifest.json中记录每个生成的条带,包含method: "imagegen"、单元格尺寸、动作、方向、imagegen 输出路径、源路径和提示词路径。 - 使用
scripts/assemble_action_sheet.py组装条带。 - 使用
scripts/pixel_snap.py进行清理,并使用色度键清理方式。 - 使用
scripts/validate_sheet.py和scripts/audit_sprite_motion.py验证几何形状、残留和动作。 - 对于多尺寸任务,使用
scripts/validate_resolution_hierarchy.py验证分辨率层级。 - 使用
scripts/export_animation_previews.py导出预览。 - 目视检查每张联系表,以及每个方向组至少一张 GIF/WebP,然后编写
qa/visual-review.json。不要只依赖验证 JSON 来评估美术质量。 - 使用
scripts/validate_run_manifest.py验证来源信息和视觉验收结果。 - 只重新生成质量较弱的方向或帧,不要重做质量较高的行。
不要在一条图像提示词中生成完整的八方向图集。一次性生成的图集经常会出现步行动作帧近乎重复、方向偏移、方向缺失和角色不一致等问题。
对于 Web/ChatGPT Agent,请使用基于 CLI 和文件的工作流。将产物写入工作区,在平台提供文件导出/分享工具时调用该工具,然后返回最终图集、元数据、联系表、验证 JSON 和预览 GIF/WebP 文件的可下载链接。如果 UI 需要导出的文件,仅提供 /workspace/... 文本路径是不够的。
不要将未经处理的色度键条带作为最终结果展示。原始条带仅用于中间 QA。最终视觉预览必须是经过清理的透明 WebP/GIF 或棋盘格背景的 GIF/联系表。
使用聊天附件作为参考时,请在运行文件夹中记录一条身份说明,列出从图片中准确保留的细节。除非图片确实不可用,否则不要写“退而使用提示词”。即使聊天中可见的图片无法作为常规文件系统路径访问,它仍可作为身份说明的有效视觉依据。
图像生成文件交接
图像生成结果必须先成为本地文件,技能才能完成。在 Codex Desktop 中,生成的图像会保存到:
D:\CodexHome\generated_images\<thread-id>\<image-id>.png
将选定的图像生成结果复制到 run/source/,并保留原文件。如果平台无法将生成的图像作为文件提供,请停止并说明图像已生成,但无法处理成精灵图文件。不要声称精灵图包已完成。
标准原生工作流:
imagegen -> run/source/32-walk-south.png -> run/32/generated/walk-south.png
imagegen -> run/source/64-walk-south.png -> run/64/generated/walk-south.png
imagegen -> run/source/128-walk-south.png -> run/128/generated/walk-south.png
每张源图都必须专门针对相应的单元格尺寸预算生成。例如,32 图像生成提示词应要求仅生成一行六帧 32x32 图像。64 提示词应要求仅生成一行六帧 64x64 图像。128 提示词应要求仅生成一行六帧 128x128 图像。
仅限紧急备用方案:如果图像生成已经返回一张多尺寸联系表,可使用 scripts/import_imagegen_contact_sheet.py 进行抢救,以便诊断。此输出必须在清单中标记为 imported_contact_sheet: true,除非用户明确接受此备用方案,否则不得称其为原生多尺寸处理流程。
python "<skill>/scripts/import_imagegen_contact_sheet.py" \
--input path/to/imagegen-output.png \
--run-dir path/to/run \
--action walk \
--direction south \
--sizes 32,64,128 \
--columns 6 \
--key-color "#00ff00" \
--copy-source
这会创建:
run/32/generated/walk-south.png
run/64/generated/walk-south.png
run/128/generated/walk-south.png
run/source/<imagegen-output>.png
run/imagegen-import-report.json
然后继续进行组装、清理、验证、预览、清单验证和视觉检查。
参考资料与来源验证关卡
除非视觉源条由 $imagegen 根据用户提供的参考生成,否则该次运行不算有效的美术测试。仅有文字形式的身份说明并不足够。
必需的清单:
{
"reference": {
"source_type": "chat_attachment",
"source": "attached image #1 or path/to/reference.png",
"used_for_generation": true,
"identity_notes": [
"green bird/penguin body",
"red and white cap",
"white unicorn float",
"rainbow tail",
"sandals"
]
},
"scope": {
"sizes": [32, 64, 128],
"actions": ["walk"],
"directions": ["south"],
"frames": 6
},
"generation": {
"method": "imagegen",
"imagegen_output_path": "run/source/32-walk-south.png",
"procedural": false,
"text_only": false,
"imported_contact_sheet": false
},
"strips": [
{
"cell": 32,
"action": "walk",
"direction": "south",
"method": "imagegen",
"imagegen_output_path": "run/source/32-walk-south.png",
"source_path": "run/32/generated/walk-south.png",
"prompt_path": "run/32/prompts/walk-south.txt"
}
],
"visual_review": {
"path": "run/32/qa/visual-review.json"
}
}
验收受阻的情形:
generation.method为procedural、python_draw、script、text_only,或任何非imagegen值- 缺少
generation.imagegen_output_path,或该路径不是实际的本地文件 - 未经明确批准使用备用方案,就将一个图像生成结果重复用作多个所需原生尺寸的源文件
generation.imported_contact_sheet为 true,但最终回复却将输出称为原生生成reference.used_for_generation不为 true- 生成的条带由本地绘图代码制作
- 最终回复将程序化冒烟测试称为真实的图像/参考测试
- 视觉检查认为精灵图与参考、方向或所要求的动作不符
本地代码只能为脚本单元测试创建微型测试样例。这些输出必须标记为 pipeline-only,不得作为美术资源交付,也不得用来声称技能能够生成所需角色。
子 Agent
如果用户明确要求使用子 Agent 或并行 Agent,请按动作或方向拆分工作:
- Worker A:基础精灵图和身份说明
- Workers B/C/D:各自独立制作不同方向的条带,并使用互不重叠的输出路径
- QA worker:验证/联系表检查和薄弱行列表
各 Worker 只能编辑分配给自己的文件,不得覆盖其他 Worker 的输出。主 Agent 负责整合各行、运行验证,并且只重新生成薄弱方向。
方向锁定
根据以下规则提示并排除方向:
south:面朝前,脸部/身体朝向镜头north:背朝前,能看到后脑/身体背面east:侧面朝向屏幕右侧west:侧面朝向屏幕左侧- 对角方向必须与相邻方向明显区分
- 如果每一帧都逐渐偏向屏幕右侧,则排除该行
- 如果只有脚在移动,但躯干/头部方向始终不变,则排除该行
方向错误时,只重新生成薄弱方向,并使用明确措辞,例如“背朝前的北向,不要露出正脸”或“侧面朝左,向西行走”。
生成规则
使用 $imagegen 生成视觉内容。不要用本地代码手绘缺失的动画帧。脚本可以裁剪、组装、量化、对齐、验证和预览已生成的美术资源。
基础精灵图提示词:
<cell>x<cell> pixel-art game sprite, single character, transparent or flat chroma-key background.
Readable silhouette, hard pixel edges, limited palette, no UI, no text, no frame border.
Preserve: <identity details>.
行条带提示词:
<cell>x<cell> pixel-art game sprite animation strip.
One horizontal row of exactly <N> separated frames.
Action: <action>. Direction: <direction>.
Flat pure solid chroma-key background <key color>, no gradient, no rounded panel, no shadows, no floor, no UI, no text, no frame numbers.
Preserve the canonical character identity exactly.
Hard pixel-art edges, saturated readable colors, clear green/magenta space between frames.
优先使用 #00ff00 色度键。如果角色或 VFX 使用绿色,则改用 #ff00ff。遇到渐变背景、圆角彩色卡片、帧分隔缺失、身体/武器被裁切或包含任何文字/标签的条带时,应予以拒绝并重新生成。不要尝试通过等分切片来挽救结构糟糕的条带。
行走质量
不要一次性生成整张行走表。每个方向分别生成 6 帧条带。
使用以下姿势结构:
contact, down, passing, up, contact, passing
生成前锁定以下动画规则:
- 头部上下摆动:1-2 px
- 臀部移动:1 px
- 手臂和腿做相反方向的摆动
- 披风/头发比躯干慢一帧
- 持武器的手保持稳定
- Q 版/小尺寸精灵需要夸张动作才能清晰呈现
如果行走看起来像几乎重复的站立姿势,请使用更强的提示词重新生成该方向:“步幅轮廓清晰易读,双脚交替,接触/下沉/经过/抬起姿势明确。”
跳跃质量
跳跃使用 6 帧:
crouch, launch, rise, apex, fall, land/recover
角色身体应在单元格内垂直移动,同时保持在边距范围内。下蹲/落地时,腿部必须明显压缩。头发、披风、耳朵、尾巴或衣物应略有滞后。如果角色只是改变手臂姿势而双脚保持不动,请舍弃该跳跃帧行。
攻击质量
近战攻击应展现蓄势、挥击/接触和恢复阶段。武器轨迹必须与武器相连,并保持在单元格内。
弓箭手攻击应包含拉弓、保持/瞄准、释放、后坐和恢复阶段。除非用户要求将其放在帧内,否则投射物应作为单独的 VFX。持弓的手应保持稳定,方向准确。
如果攻击看起来被截断,请检查边缘像素和 bbox。仅重新生成该帧行,并使用提示词:“每帧的完整身体和武器都在画面内,不裁切,居中并留出 2-4 px 边距。”
色度键与清理
分两步移除色度键:
- 边缘连通泛洪移除:仅删除与图像边缘连通的键色像素。
- 最终残留清理:适配帧后,仅移除几乎完全一致的键色像素。
切勿全局删除所有偏绿色的像素。许多精灵会用绿色表现魔法、毒素、赛博光效、眼睛或衣物。
建议的清理方式:
python "<skill>/scripts/pixel_snap.py" \
--input path/to/source.png \
--output path/to/clean.png \
--cell <cell> \
--palette 96 \
--alpha-threshold 12 \
--chroma-key "#00ff00" \
--edge-flood-threshold 105 \
--residue-threshold 72
攻击/VFX 使用调色板 96-128,简单的待机/行走使用 32-64。仅当生成的美术效果过于平滑时才使用 --pixelate-scale 2。
可选的 TachiSnap 阶段:如果有 TachiSnap,当生成的像素网格不均匀时,在移除色度键之后、最终预览之前使用它。TachiSnap 是一款客户端 Rust/WASM 像素吸附工具,支持 k-means++ CIELAB 调色板量化、泛洪/全局背景移除、GIF/图集动画支持、批量文件夹处理、JSON 报告和最近邻放大。不要让它改变图集几何结构;逐条带或逐帧运行,然后使用技能脚本重新组装。
TachiSnap 的 Agent 安全用法示例:
tachi-snap bulk ./input-ai-pixel-art ./output-clean \
--recursive \
--k 16 \
--pixel-size 0 \
--upscale 4 \
--remove-bg \
--bg-mode flood \
--json
组装
将独立条带组装成一个动作图集:
python "<skill>/scripts/assemble_action_sheet.py" \
--input-dir path/to/generated \
--output path/to/final/walk-sheet.png \
--action walk \
--cell <cell> \
--columns 6 \
--frames-dir path/to/frames \
--key-color "#00ff00"
然后对组装好的图集或帧运行清理。
使用随附的组装器,避免编写临时切片代码。只有当生成的条带帧槽宽度完全一致,且通过残留、边缘和动作质量检查时,才可接受等宽切片。如需使用自定义备用脚本,请将其保存在运行文件夹中,并确保输出与随附脚本相同。
验证
最终回复前进行验证:
python "<skill>/scripts/validate_sheet.py" \
--input path/to/final/walk-sheet-clean.png \
--rows <rows> \
--columns 6 \
--cell <cell> \
--row-names <comma-separated-requested-directions> \
--chroma-key "#00ff00" \
--fail-on-warnings \
--json-out path/to/qa/walk-validation.json \
--contact-sheet path/to/qa/walk-contact-sheet.png
对每个行走、奔跑和跳跃图集运行 scripts/audit_sprite_motion.py。用户抱怨行走效果差、缺少方向、动作幅度弱、残留色度键颜色或帧混杂时,也要运行该脚本。将警告视为需要重新生成的清单,而不是重做全部内容的理由。
验证运行图集的来源,并进行人工视觉检查:
python "<skill>/scripts/validate_run_manifest.py" \
--manifest path/to/run/run-manifest.json \
--required-sizes 32,64,128 \
--required-actions walk \
--required-directions south \
--require-visual-review
仅将多尺寸层级验证用作 QA。此命令会比较缩略图以检查结构是否发生偏移。绝不能用它来创建 32px、64px 或 128px 资源:
python "<skill>/scripts/validate_resolution_hierarchy.py" \
--base32 path/to/run/32/final/walk-sheet-clean.png \
--sheet64 path/to/run/64/final/walk-sheet-clean.png \
--sheet128 path/to/run/128/final/walk-sheet-clean.png \
--rows <rows> \
--columns 6 \
--json-out path/to/run/qa/resolution-hierarchy.json \
--fail-on-warnings
视觉审查文件:
{
"accepted": false,
"reviewer_notes": "Reject until this is manually inspected.",
"checks": {
"reference_identity": "fail",
"direction": "fail",
"animation_readable": "fail",
"frame_separation": "fail",
"not_procedural": "fail"
}
}
只有当接触表和预览动画确实与用户参考相似,并且符合要求的动作和方向时,才将 accepted: true。
出现以下情况时,不得通过验收:
- 图集尺寸错误
- 必需帧为空
- 精灵意外触及单元格边缘
- 仍有色度键残留
- 透明 GIF 帧累积或出现拖影
- 行走帧几乎完全重复
- 行的方向偏移错误
- 攻击特效脱离主体、尺寸过大或被裁切
- 运行清单无法证明图像生成/参考来源
- 缺少视觉审查,或审查未获通过
- 多尺寸输出未通过分辨率层级 QA 检查
验证通过只能证明几何与像素处理规范,并不能证明动画效果良好。声称素材包“扎实”“干净”或“已就绪”之前,Agent 必须检查接触表和预览。
导出预览
透明预览优先使用动画 WebP。GIF 用于兼容性输出。
python "<skill>/scripts/export_animation_previews.py" \
--atlas path/to/final/walk-sheet-clean.png \
--rows <rows> \
--columns 6 \
--cell <cell> \
--row-names <comma-separated-requested-directions> \
--prefix walk \
--out-dir path/to/qa/previews \
--scale 4
GIF 规则:
- 使用全局调色板
- 调色板索引
0保留为透明色 disposal=2- 不使用抖动
- 不使用会将 disposal 改为
1的优化器
用户索要 GIF 时,务必发送预览链接。
对于 128x128,要区分原生重绘和放大。如果用户要求原生 128,应生成原生 128 条带。将 64px 图像用最近邻算法放大 2 倍,属于放大素材包,而非原生 128 资源。
对于 32x32,要区分原生简化和缩小。如果用户要求原生 32,应生成或重绘简化的 32px 条带。将 64px 图像用最近邻算法缩小一半,属于缩小版本,而非原生 32 资源。
定向重新生成
用户说“效果好多了,但有些方向缺失”或“重新生成效果弱的方向”时,请执行以下操作:
- 检查接触表和预览动画。
- 按动作和方向列出效果较弱的行。
- 以规范基础素材和未通过的行作为上下文,仅重新生成这些条带。
- 重新组装、清理、验证并预览。
除非用户明确要求全部重做,否则不要覆盖效果良好的已生成条带。