动画贴纸制作器
将一张参考图像和一个动作提示转化为一段短小、透明的动画贴纸。内部自动推导出身份锁定、运动方案、帧时序、验证方案和导出设置;不要让用户填写常规的制作选项。
所有脚本和参考路径均相对于包含此 SKILL.md 的目录进行解析。
输入与边界
仅需提供:
reference_image:一张包含清晰主体的静态图像。prompt:描述预期表情、动作、文字、循环或目标平台的自然语言。
支持人物、宠物、吉祥物、插图、物体和 Logo。如果图像中有多个可能的主体且提示未指定,请在生成前询问一次。不要承诺稳定的多主体表演、场景动画或镜头运动。
每次调用只生成一张贴纸。对于多张贴纸系列,将共享的身份规范、打包顺序、版本命名和品牌资产保留在所属项目中,然后为每张贴纸分别调用此技能。不要将项目特定的打包编排变成通用的技能功能。
这是一个支持标准的 Agent Skills 包,适用于兼容的主机;不要维护第二种主机特定的指令格式。主机必须提供能够保持主体身份的、基于参考的光栅生成或编辑能力。使用主机原生能力,并在没有可用能力时,在生成前以清晰的能力信息失败。agents/openai.yaml 是可选的 OpenAI UI 和调用元数据,不是工作流合同的一部分。
使用 Python 3.10 或更高版本以及 requirements.txt 中的包进行确定性处理。不要将 OpenCV 设为必需依赖。
默认输出
除非提示明确覆盖,否则创建以下结构:
output/<name>/
├── sticker.webp
├── source/
│ ├── frames/
│ │ ├── 000.png
│ │ └── ...
│ ├── rendered-frames/ # 可选的经过验证的高帧率轨道
│ ├── reference.json # 文件名、哈希值和图像元数据
│ └── motion.json
├── validation/
│ ├── contact-sheet.png
│ └── report.json
└── exports/ # 仅当请求了平台或额外格式时
└── <platform>/
使用工作区本地的 output/<name>/,除非用户指定了其他本地目标。<name> 作为从主体和主要语义节拍衍生出的简短、文件系统安全的 slug。如果已经存在,则使用 -2、-3 等;默认情况下不要覆盖现有的包。当用户提供了明确的发布名称或公共名称时,请遵循。
对于连续色调、插画或生成的光栅源,使用 1024×1024 RGBA。对于原生像素艺术或其他严格的低分辨率网格,保留逻辑源画布并将 motion.resampling 设置为 nearest;不要强制其通过非整数 1024×1024 重绘。使用 4-8 个独特帧、每帧时长、总时长约 1.2-2.0 秒,以及在最清晰语义帧上持续 400-700 毫秒。默认循环播放。除非请求或目标平台要求,否则不要创建 preview.gif。
工作流程
1. 规范化请求
- 确认有一张参考图像和一个动作提示可用。提取主体、一个语义节拍、确切文字、循环意图以及任何命名的目标平台。
- 如果主体不明确,询问一次。如果参考图像、提示或所需的主机能力缺失,在生成前以清晰的阻塞信息停止。
- 如果没有指定平台,则生成平台中立的包。命名的平台是在包通过验证后的可选导出分支。
- 在创建文件前,使用上述冲突规则选择输出 slug。
2. 锁定身份并规划运动
阅读 references/motion-plan.md。以全尺寸和小图标尺寸检查参考图像,将可识别特征分类为固定、灵活或可移除,并在生成最终帧前写入 motion.json。
专注于一个主要语义节拍、一小套锚定姿态、确定性过渡、精确文字层、帧时长和循环行为。只生成那些不能通过确定性变换安全获得的内容。有意识地选择 motion.resampling:对于连续色调或插画光栅工作选择 lanczos,对于原生像素艺术或其他严格的逻辑网格选择 nearest。
仅当身份锁定明确且每个请求的语义元素都有计划的帧或确定性层时,此阶段才能完成。
3. 生成锚定帧并清理 RGBA 资源
在生成前阅读主机的光栅生成或编辑指令。请求新锚定帧时始终包含原始参考图像,要求主体在透明背景或平坦的高对比度工作色上,并生成尽可能少的锚定帧。
立即对照身份锁定检查每个锚定帧。在构建时间帧之前拒绝身份漂移。如果被拒绝的完整锚定帧包含可用的局部表情或道具,仅将其提取到已批准的身份稳定基底上;在运动计划中记录组件来源、提取规则和已批准的基底。切勿将拒绝的完整图像标记为已批准。
保留干净的现有 Alpha 通道。否则,阅读 references/transparency.md,选择远离主体色调的工作色,并运行 scripts/chroma_key.py。当提示或平台需要独立的阴影控制时,保持阴影分离。
仅当每个全帧锚定帧都可用、每个提取的组件都有有界的确定性角色、并且每个资源都没有不透明背景、色溢、亮边、剪切的突出部分或画布边缘接触时,此阶段才能完成。
4. 合成创作动画
为每个独特的创作帧创建一个 RGBA PNG。除非请求的运动需要变形,否则保留宽高比。在确定性图层中渲染精确文字,给每个帧一个目的。倾向于预期动作、动作、一个清晰的语义保持和短暂的恢复,而不是均匀的时间运动。
当伴随对象按压、坐在、携带或触摸主体时,将其对齐到其接触面下方的局部轮廓上。当表面弯曲、有缺口或变形时,不要使用主体的全局边界框边缘作为接触平面。
仅当序列无需文件名或解释即可被理解,并且循环没有意外的跳跃、闪烁或位置重置时,此阶段才能完成。
5. 打包并运行技术验证
运行:
python <skill-dir>/scripts/package_sticker.py \
--frames-dir <working-frames> \
--motion <motion.json> \
--reference-image <reference-image> \
--output <output/name>
当源画布不同于 1024x1024 时,传递 --expected-size <WIDTHxHEIGHT>。仅当用户想要嵌入原始参考图像时才使用 --include-reference;否则只绑定其文件名、哈希值、尺寸、模式、格式和字节大小,而不复制它。仅当提示明确覆盖默认值时,才使用非标准时序或帧数标志。当技术验证失败时,不要继续平台导出。
阅读 references/validation.md 以了解报告约定和确定性检查。保持包的事务性,将打包后的 source/motion.json 视为自包含的事实来源,保留工件指纹,并将 technical_validation 与 visual_validation 分开。
如果 motion.render 存在,将其显式有序帧视为可选的单独验证的渲染轨道。默认使用创作的帧;永远不要静默创建或选择渲染轨道。阅读运动参考和平台参考以了解其时序、资源和导出规则。
仅当 WebP、规范化源文件、参考元数据、运动计划、联系表、主要技术报告以及每个适用的渲染轨道报告都存在,并且所有适用的技术检查都通过时,此阶段才能完成。
每次成功的重新打包都会创建一个新的报告,其中视觉验证待定。每次重新打包后重新运行视觉验证;永远不要在已更改的工件上保留先前的视觉通过记录。
6. 检查、记录和可选的导出
阅读 references/validation.md 和 references/review-page.md。在检查或分享之前立即生成一个新的审阅页面:
python <skill-dir>/scripts/generate_review.py <validation-report.json> \
--reference-image <original-reference-image> \
--language <en|zh>
当包包含其绑定的参考图像时省略 --reference-image。对于中文对话选择 zh,否则选择 en。检查实际编码的审阅目标、语义保持标记、Alpha 在棋盘格、亮色和暗色背景上的显示、真实大小和放大的 50×50 视图,以及帧曝光表。创作的帧或渲染帧是比较证据;解码后的 WebP/GIF 控制包或导出页面。
使用 scripts/record_visual_validation.py 记录结果。报告必须保留其确切的工件指纹,并且只有当技术和视觉验证都通过时,deliverable_ready 才为真。如果最终状态必须出现在共享的审阅页面上,请在记录后重新生成页面。审阅页面是一次性的派生 HTML,不是证据或可交付物。
如果请求了平台,请阅读 references/platform-exports.md,验证当前官方约束,并仅从已验证的包导出到 exports/<platform>/ 下。默认使用创作的帧;仅当显式选择的渲染轨道能实质性地改善请求的输出时才选择它。每个请求的导出都需要其自己的技术和视觉验证。
在交付前,在确切要交付的包、渲染轨道和导出报告上运行 scripts/doctor.py。Doctor 是只读的;当适用的视觉验证待定时,预计状态为 incomplete。阅读 references/doctor.md 以了解目标选择和 JSON 输出。
决策与恢复规则
- 在不打扰用户的情况下,决定常规的时序、位置、缩放、工作色阈值、压缩和输出 slug 细节。
- 由安全、可逆的问题导致的技术或视觉故障,可以进行一次只使用这些安全调整的集中自动修正。重新打包、重新生成审阅页面并重新检查;每次重新打包都会重置视觉验证。
- 如果修正仍然失败,或者修复会改变身份、含义、锚定帧生成或明确的公共输出,则停止并向用户询问。永远不要用视觉判断覆盖失败的技术门控。
- 如果用户参与,在对话中分享新的审阅页面并收集反馈。用户不需要运行 Python 或提交表单。
交付交接
使用当前对话语言,并始终报告以下字段:
status:ready、incomplete或blocked;- 包路径和主要验证报告路径;
- 渲染轨道报告路径(如果存在);
- 审阅页面路径(如果已生成);
- 每个请求的导出及其报告路径;
- 针对每个确切交付的报告的 Doctor 结果;
- 未解决的注意事项、待定的视觉检查、外部参考要求或平台特定限制。
除非其确切报告具有 technical_validation、visual_validation 和 deliverable_ready: true,并且 Doctor 报告所交付的边界为 healthy,否则永远不要将工件标记为就绪。不要将审阅 HTML 呈现为包工件、验证证据或可交付物。
升级规则
仅当缺失的选择会改变预期主体、请求的含义或不可逆的公共输出时,才向用户询问。对于不明确的主体询问一次;当所需的输入或主机能力不可用时,清晰地停止。在上述有界的恢复规则内,自动进行安全的项目级调整。