Communitygithub.com

hanamorix/image-to-animated-pixel-art

用于将图像或插画转换为Aseprite中的精致像素艺术,或为像素艺术添加动画效果(待机循环、呼吸、眨眼、头发或衣物摆动、软体抖动、手部或肢体移动、闪光、水面等),通过Aseprite MCP实现。

image-to-animated-pixel-art 是什么?

该技能是一个为AI代理设计的高级像素艺术转换和动画工具,专门用于Aseprite平台。它能将任何输入图像转换为精致的像素艺术,并添加丰富的动画效果,如呼吸、眨眼、头发摆动、软体抖动和肢体移动。技能的核心原则是严格忠于原始图像,避免引入虚假细节,并通过严格的检查机制确保动画质量,特别是防止像素跳变、撕裂或闪烁。整个流程分为八个阶段:需求确认、源图像处理、静态像素艺术生成、眨眼姿态、动画帧生成、特效添加、额外需求处理以及最终输出。每个阶段都有对应的Lua脚本(如`1_still.lua`、`5_animation_frames.lua`)和严格的检查表,包括零偏移渲染验证、单帧闪烁检测和热力图分析,确保动画流畅且无视觉缺陷。该技能需要Aseprite MCP支持,并支持用户通过CLAUDE.md文件自定义像素艺术偏好。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hanamorix/hana-pixel/tree/HEAD/skills/image-to-animated-pixel-art

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

图像转动画像素艺术

结果必须忠于原始素材:修复因缩小至像素尺寸而损坏的部分,绝不发明细节。在运动中,断裂是敌人:任何跳变、撕裂、闪烁或抖动的像素都必须避免。Claude无法观看GIF,因此每次展示前都要进行定量检查,而非仅凭“静止时看起来没问题”。

如果用户在CLAUDE.md或其所指向的文件中保留了像素艺术偏好,请先读取;这些偏好将覆盖本文件的默认设置。需要Aseprite MCP:references/aseprite-mcp.md。在到达相应阶段时,请阅读:references/still-recipe.md、references/motion-and-breaks.md。

工作流程

每次检查都是一条消息:一张并排图像(原始 | 之前 | 之后,或一张GIF加一份裁剪的翻页书)以及一个问题。每次更改前将当前文件复制为_vN,这样如果某轮被拒绝,可以从该副本还原。每一轮只进行所要求的改动,不做任何其他事情。

  1. 简要说明。 在规划之前先询问需求:哪些部分移动、移动多少、移动速度多快、哪些部分保持静止、哪些部分需要保护。编写一份简短的规划文件(半页),并获得确认。当用户批准规划后,此阶段完成。
  2. 源图像。 裁剪或调整源图像大小,使其尺寸正好为目标精灵的3倍(大约200-260像素宽)。脚本假定为3倍。
  3. 静态图像(先运行1_still.lua,然后使用2_local_rerender.lua和3_join_outline.lua进行修复)。根据still-recipe.md为当前图像测量参数。按顺序检查:手部,然后是面部和眼睛,接着是轮廓、金属和背景。当每个部分获得批准,并且静态图像保存为*_still_FINAL后,此阶段完成。
  4. 眨眼姿态(运行4_blink_poses.lua,眼睛跨度手动追踪,比例为14x)。在一次检查中展示全部四个姿态以及一张眨眼GIF,按照motion-and-breaks.md构建。获得批准后完成。
  5. 动画(运行5_animation_frames.lua)。根据静态图像的测量结果填充其SETTINGS块,先运行BF_ZERO = true(必须改变0像素),然后进行实际运行,最后运行6_deflicker_metrics.lua。通过以下检查,然后展示完整的GIF以及一份裁剪的翻页书,展示移动部分。
  6. 特效(运行8_effects.lua,仅限颜色,在去闪烁之后)。检查,然后展示。
  7. 额外需求,每次一个请求(手臂、水面等),每次都有自己的检查。
  8. 最终处理。 复制为*_FINAL(.aseprite + 3倍GIF),保留之前的最终版本。

每次动画检查前的检查项

检查项通过标准位置
零偏移渲染等同于姿态使用BF_ZERO时0像素变化5
刚性部分(手部)精确每一帧的框(按整体像素提升量回移后)等同于静态图像:0像素变化使用自定义Lua进行比较
单帧闪烁(A→B→A)眨眼和特效之外不应出现6会打印它们
跳变步骤帧(列于BA_STEPS)被排除;其余每帧的变化像素数不超过约2倍中位数,任何超过的帧必须有命名的原因6
热力图轮廓、肩带、睫毛、眼睛上无红色(每个循环变化数≥8)7_flicker_heatmap.lua
特效每个特效像素至少持续2帧;变化像素计数大于0(弱混合可能回弹到相同调色板颜色)8会打印计数
闭眼闭眼帧上无虹膜颜色残留以12倍放大率使用view_sprite
翻页书手部、面部以及每个移动边缘的8-16帧,以6倍或更高放大率查看时看起来连续使用view_sprite区域和帧

脚本(scripts/)

每个脚本需要先设置PA_DIR(项目文件夹,以路径分隔符结尾:Windows用\,macOS用/)和PA_SRC(源图像文件名),以及其头部列出的自身全局变量。通过run_lua_script并附带一个短启动器来运行它们;<skill>是此技能的基础目录,在技能加载时提供:

PA_DIR, PA_SRC = [[/path/to/project/]], "reference.jpg"
BF_POSES, BF_OUT, BF_PUSH = "blink_poses.aseprite", "frames", true
dofile([[<skill>/scripts/5_animation_frames.lua]])
脚本功能
1_still.lua3倍线性保持缩小、k-means调色板+强调色、雀斑处理、孤立点合并
2_local_rerender.lua在另一个线条阈值或使用额外颜色(手部、嘴唇)时重新渲染指定区域
3_join_outline.lua连接源图像中细线导致的虚线轮廓
4_blink_poses.lua睁眼、半睁、接近闭合、闭眼姿态(文件中的眼睛跨度因图像而异)
5_animation_frames.lua所有帧;每个坐标都存在于其SETTINGS块中(包含示例值)
6_deflicker_metrics.lua去闪烁、闪烁检测、跳变检查(BA_SKIP刚性区域,BA_STEPS步骤帧)
7_flicker_heatmap.lua热力图PNG
8_effects.lua挤压光、闪光、海面闪光、沙地闪烁(每个图像一个SETTINGS块)
checkin_sheet.lua用于某个区域的原始/之前/之后对比图
example_metal_rerender.lua仅作为工作示例:使用来自源图像的阴影带重新渲染金属

5_animation_frames.lua 包含迄今遇到的运动类型(呼吸带、软体穹顶、摇摆框、刚性整像素推动、肢体片段、海面)。当遇到具有不同移动部分的新图像时,会在此脚本中添加相应字段。

相关技能