🦭 手残党福音:我用 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 eyes 比 cute 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 0 | idle | 待机呼吸 |
| Row 1 | running-right | 向右蠕动 |
| Row 2 | running-left | 由 right 镜像,节省一次生成 |
| Row 3 | waving | 挥手 |
| Row 4 | jumping | 跳跃 |
| Row 5 | failed | 失败/沮丧 |
| Row 6 | waiting | 等待 |
| Row 7 | running | 通用奔跑 |
| Row 8 | review | 复查/思考 |
为什么用子代理?
- 每个状态的 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 后,进入完全确定性的脚本流水线:
- Atlas Assembly:把 9 条
1x8的横条按行拼接成1536x1872的大图 - Validation:校验总尺寸、每帧尺寸、颜色模式、文件体积
- Contact Sheet:生成对照表
contact-sheet.png,人工逐行复核动作连贯性 - Preview Videos:把关键状态(idle、walk、jump)渲染成视频,看实际动画效果
- Manifest 生成:输出
pet.json,定义每行的动画名称、帧率、循环方式
这一步零 AI 参与,纯脚本执行,保证了最终产物的可复现性。
五、打包上传:macOS 元数据污染陷阱
Petdex 要求上传一个仅包含 pet.json 和 spritesheet.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
技术复盘
- Prompt 工程是地基:基础 Sprite 的质量决定了整套 Atlas 的上限。前期在
canonical base上多花 5 分钟,后期能少重试 3 次。 - 子代理并行是效率核心:如果把 8 个状态串行生成,时间成本会翻倍。合理利用并发和镜像策略,才能把实验成本压下来。
- QA 阈值要人工校准:AI 对“纯色背景”的判断可能过于苛刻,必要时用
pragmatic QA baroverride。 - 平台规范比生成更难: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 平台规范。如有更新,请以官方文档为准。