🦭 手残党福音:我用 Codex 生成了 Sirotan 同款桌面宠物,并打包进了 Petdex

99 阅读7分钟

🦭 手残党福音:我用 Codex 生成了 Sirotan 同款桌面宠物,并打包进了 Petdex

不是美术出身,也能给自己搓一只会呼吸、会蹦跳、会睡觉的桌面宠物。

最近逛到 Petdex 这个桌面宠物平台,突发奇想:能不能养一只 Sirotan(しろたん) 风格的软萌小白豹?但看了一眼自己残废的画笔技能,果断把目光投向了 AI —— 准确地说,是 Codex 的 hatch-pet Skill

结果发现,这不仅仅是一张图的事,而是一套完整的 AI 游戏资产生成流水线。从 Canonical Base 到 8x9 Atlas,再到子代理并行生成、Chroma-key 清洗,最后打包成 Petdex 标准的 pet.json + spritesheet.webp,整个过程堪称一场微型的“AIGC 工程化实践”。

今天把这套流程和踩的坑整理出来,希望对想做桌面宠物或游戏精灵的同学有帮助。


一、需求分析:Marshi 的人设与 Prompt 工程

Sirotan 的官方设定是:白色竖琴海豹幼崽、8月8日生日、男孩、喜欢午睡和变身、爱吃牛奶冰淇淋。为了避开 Clear IP 风险,我把它定位成 "Sirotan-inspired 原创同人",取名叫 Marshi(棉花糖 Marshmallow + Sirotan)。

在 Codex 里使用 /pet 触发 hatch-pet Skill,核心 Prompt 如下:

Create a desktop pet inspired by Sirotan, the fluffy white baby harp seal mascot.

Style:
- Soft, round, pure white seal
- Tiny black dot eyes
- Small gentle smile
- Very fluffy, marshmallow-like body
- Cute Japanese mascot / kawaii plush style
- Cozy, calm, sleepy, comforting vibe

Animation states:
- idle: breathing softly
- walk: small seal wiggle
- sleep: curled up and peacefully napping
- happy: tiny bounce
- thinking: blinking slowly
- excited: flappy-fin wiggle
- drag: soft squish
- click: smiles and sparkles
- hidden: tucked into a fluffy blanket

Avoid:
- No text/logo
- No exact official artwork copy
- Make it original fan-art style

Prompt 设计的关键:不要只写“可爱”,要给出工程可执行的定义。比如 tiny black dot eyescute eyes 更不容易在生成时跑偏;fluffy, marshmallow-like body 则锁定了体积感和轮廓。


二、技术架构:hatch-pet 的流水线解剖

hatch-pet 并不是简单地生成一张大图,而是遵循一套严格的精灵图集(Sprite Atlas)规范

  • Atlas 尺寸1536 x 1872 像素
  • 布局8 列 x 9 行,共 72 帧
  • 每帧尺寸192 x 208 像素(1536/8=192,1872/9=208)
  • 背景:必须是纯净的 Magenta(#FF00FF),供 Petdex 做 Chroma-key 透明抠图
  • 输出格式spritesheet.webp + pet.json

整个流水线分为两个阶段:视觉生成期(不确定性)和确定性后处理期

2.1 Canonical Base:锁定视觉身份证

第一步不是直接画动画,而是生成一张 Canonical Base Sprite。这张图的作用是确立宠物的“视觉身份证”——体型比例、五官位置、配色、光影风格。后续所有动画行都必须基于这张图进行风格对齐。

生成后需要人工(或 Agent)做一次 Parent Review,确认没有多余手指、诡异轮廓或背景杂质。

2.2 子代理并行生成动画行

这是整个流程最硬核的部分。9 行动画对应 9 个状态,Codex 会把每一行拆成独立的子代理任务并行执行:

行(Row)状态备注
Row 0idle待机呼吸
Row 1running-right向右蠕动
Row 2running-left由 right 镜像,节省一次生成
Row 3waving挥手
Row 4jumping跳跃
Row 5failed失败/沮丧
Row 6waiting等待
Row 7running通用奔跑
Row 8review复查/思考

为什么用子代理?

  • 每个状态的 Prompt 上下文独立,互不污染
  • 生成一张 1x8 的横条比直接生成 9x8 的大图更稳定
  • 失败时只需重试单条,不需要整张图重来

踩坑点:Codex 对并发子代理数量有限制。第一次直接 All-in 8 个任务会触发线程上限,需要分批排队。我的策略是:先生成 idle + running-right 做身份验证,确认风格一致后,再批量下发剩余任务,利用“完成一个、补位一个”的动态调度填满队列。

2.3 镜像策略:Running-left 的偷懒哲学

Marshi 是一只对称的圆球海豹,左右形态理论上完全一致。因此 running-left 没有单独生成,而是直接对 running-right 做了水平镜像(Parent-side mirror)。

这一步省了约 15%-20% 的 Token 和时间。但只有对称角色才能这么干,如果你做的是带披风、刘海或单侧配饰的角色,老老实实单独生成。


三、Chroma-key 清洗:Jumping 行的翻车与抢救

所有动画行都必须满足一个隐形强约束:背景必须是均匀、纯色的 Magenta,不能有任何噪点、渐变或透明通道残留。因为 Petdex 会在运行时把 Magenta 抠成透明,如果背景不均匀,宠物边缘会出现粉红色锯齿。

在生成 jumping 行时,子代理连续多轮拒绝了候选图,理由是“背景不够平”。但实际上候选图的背景差异极小,属于过度严格的 QA 误杀

抢救方案:单独对 jumping 发起一次 Targeted Retry,在 Prompt 里强化背景要求:

stricter emphasis on an evenly filled magenta field and 
a pragmatic QA bar tied to chroma-key removability 
rather than mathematical perfection

结果通过。这提醒我们:AI 流水线里的 QA 阈值需要人工兜底,不能让机器的完美主义阻塞交付。


四、确定性后处理:从 9 张条图到 1 个 Atlas

所有行通过 Parent Review 后,进入完全确定性的脚本流水线:

  1. Atlas Assembly:把 9 条 1x8 的横条按行拼接成 1536x1872 的大图
  2. Validation:校验总尺寸、每帧尺寸、颜色模式、文件体积
  3. Contact Sheet:生成对照表 contact-sheet.png,人工逐行复核动作连贯性
  4. Preview Videos:把关键状态(idle、walk、jump)渲染成视频,看实际动画效果
  5. Manifest 生成:输出 pet.json,定义每行的动画名称、帧率、循环方式

这一步零 AI 参与,纯脚本执行,保证了最终产物的可复现性。


五、打包上传:macOS 元数据污染陷阱

Petdex 要求上传一个仅包含 pet.jsonspritesheet.webp 的 zip。我最初直接用 zip -r marshi-petdex.zip marshi/,结果发现:

  • 多出了 .DS_Store
  • 多出了 __MACOSX 目录(AppleDouble 元数据)

这些文件会导致 Petdex 解析异常或上传后显示异常。

解决方案

COPYFILE_DISABLE=1 zip -r marshi-petdex.zip marshi/

COPYFILE_DISABLE=1 是 macOS 特有的环境变量,禁止在归档时复制文件的扩展属性。这个小细节卡了我 10 分钟,堪称“工程化最后一公里”的经典陷阱。

最终目录结构:

marshi/
├── pet.json          # 动画元数据
└── spritesheet.webp  # 1536x1872 精灵图集

六、成果与复盘

最终产物

  • 宠物名:Marshi(棉花糖海豹)
  • 状态覆盖:idle、walk、sleep、happy、thinking、excited、drag、click、hidden 等
  • Atlas 尺寸:1536 x 1872,验证通过
  • QA 凭证:contact-sheet.png、validation.json、preview videos

技术复盘

  1. Prompt 工程是地基:基础 Sprite 的质量决定了整套 Atlas 的上限。前期在 canonical base 上多花 5 分钟,后期能少重试 3 次。
  2. 子代理并行是效率核心:如果把 8 个状态串行生成,时间成本会翻倍。合理利用并发和镜像策略,才能把实验成本压下来。
  3. QA 阈值要人工校准:AI 对“纯色背景”的判断可能过于苛刻,必要时用 pragmatic QA bar override。
  4. 平台规范比生成更难:Chroma-key、固定尺寸、无元数据 zip,这些“ boring 的工程细节”往往比生成图片本身更耗时。

版权与合规

Petdex 官方明确提醒:避免上传 Clear IP 内容,否则可能被下架。Marshi 的定位是 original fan-art style,借鉴了 Sirotan 的“白色海豹+治愈系”气质,但在五官比例、身体轮廓上做了差异化处理。用 AI 做“风格致敬”而非“像素级复制”,是更安全也更可持续的路线。


七、结语

从一段 Prompt 到一只能在桌面上蹦跳的 Marshi,全程没有打开过 Photoshop,也没有画过一笔。Codex 的 hatch-pet Skill 本质上是一套把 AIGC 封装成游戏资产生产线的范例。

如果你也想给自己或产品做一套桌面宠物,不妨从 /pet 开始试试。关于子代理调度、Chroma-key 清洗或 Petdex 上传规范的任何问题,欢迎在评论区交流。

🔗 Petdex 展示页petdex.crafter.run/pets/marshi

最后,愿每一只 AI 生成的海豹,都能在你的桌面上睡个好觉。🦭💤


本文由 Kimi CLI生成和涉及的技术路径基于 Codex hatch-pet Skill 与 Petdex 平台规范。如有更新,请以官方文档为准。