用 hatch-pet 制作 Codex 桌宠:Hoodie Tide
用 hatch-pet 制作 Codex 桌宠:Hoodie Tide
Hoodie Tide 是我根据一张参考图制作的 Codex 自定义桌宠。成品是一张透明 WebP spritesheet,共 8 列 9 行,单格 192x208,包含待机、移动、等待和审阅等状态。
这项工作主要卡在一致性:几十帧里的脸、发型、衣服和比例要保持稳定,动作方向、透明背景和帧尺寸也必须逐项校验。下面按实际制作顺序记录。
成品规格
本次产物包含两个文件,spritesheet 规格一并列在后面:
Hoodie Tide
├─ pet.json
└─ spritesheet.webp
atlas: 1536x1872
grid: 8 x 9
frame: 192x208
format: WebP / RGBA9 行动画分别对应这些状态:
| Row | State | Frames | 用途 |
|---|---|---|---|
| 0 | idle | 6 | 待机、眨眼、呼吸 |
| 1 | running-right | 8 | 向右移动 |
| 2 | running-left | 8 | 向左移动 |
| 3 | waving | 4 | 打招呼 |
| 4 | jumping | 5 | 跳跃 |
| 5 | failed | 8 | 失败或取消 |
| 6 | waiting | 6 | 等待输入 |
| 7 | running | 6 | 正在工作 |
| 8 | review | 6 | 审阅输出 |
本文规格
上面的尺寸、网格和状态表只描述这次制作的 Hoodie Tide 成品,后续提示词、拆帧和校验都以此为准。
交给 hatch-pet 的任务
我使用了 hatch-pet skill。给 Codex 的需求整理如下:
使用 hatch-pet skill,根据参考图制作一个 Codex 自定义桌宠。
名字:Hoodie Tide
风格:黑色蓬松长发,浅色 oversized hoodie,安静、轻水彩感、Q 版全身比例。
要求:
- 输出 Codex 可用的 pet.json 和 spritesheet.webp
- spritesheet 为 8 列 9 行,单格 192x208
- 需要 idle、running-right、running-left、waving、jumping、failed、waiting、running、review 九种状态
- 保持同一张脸、同一套衣服和同一组颜色
- 背景最终要透明,不能有文字、阴影和多余特效整个任务分成七步:
- 根据参考图生成角色基准图。
- 以基准图锁定身份,分别生成 9 组动画。
- 使用纯色背景,统一做 chroma key。
- 将每组动画拆成
192x208的单帧。 - 把所有帧拼成
1536x1872的 spritesheet。 - 输出 contact sheet 和 GIF,检查角色一致性、动作方向、裁切与背景残留。
- 生成
pet.json,与 spritesheet 一起打包。
先固定角色基准图
参考图是半身构图,桌宠则需要小比例的全身角色。第一张图只解决角色外观,不同时要求模型生成动作。
基础提示词如下:
A compact full-body chibi anime-style Codex pet named Hoodie Tide.
Black fluffy long hair, pale oversized hoodie, quiet and calm expression,
soft gray-blue watercolor line art feeling, readable at small pet size.
Centered full body sprite, no scenery, no text, no props, no shadow.
Pure #FFFF00 chroma key background.我只保留了在小尺寸下仍能辨认的特征:黑色蓬松长发、浅色宽松 hoodie、安静的表情和灰蓝色水彩线条。装饰过多会挤占轮廓,缩小后也很难看清。
| 参考图 | base 图 |
|---|---|
![]() | ![]() |
后面的动画都使用这张 base 图作为身份参考。
按状态生成动画
每一行使用同一套提示词模板,只替换状态、帧数和动作说明:
Use the canonical Hoodie Tide base image as the identity reference.
Create a horizontal sprite strip for state: <state>.
Frame count: <frames>.
Keep the same face, hair shape, hoodie, palette, body proportions, and style.
Each frame must be a separated full-body pose inside its own slot.
Pure #FFFF00 chroma key background.
No text, no guide marks, no shadows, no loose effects, no scenery.
Action: <state-specific action>.模板里反复约束角色身份、背景和槽位。动作描述则尽量具体,避免使用“更有动感”这类无法直接验收的要求。
running-right 的提示词是:
State: running-right.
Create 8 frames of Hoodie Tide dragging/running to the right.
The pet should face and travel right with alternating body and limb movement.
Do not add speed lines, dust clouds, floor shadows, motion trails, or detached effects.
Keep the frame order left to right as the animation timeline.速度线、灰尘和地面阴影虽然能增强画面,但会增加抠图难度,还可能跨出单帧边界,因此这里直接禁用。
处理动作方向
第一版 running-right 的动作质量可以用,但角色看起来朝左。我把这组动画保留为 running-left,再逐帧水平镜像,得到向右版本。
不能直接翻转整张横向 strip。整图翻转会同时颠倒帧的排列顺序,原来的第 0 帧会跑到最后,动画节奏也会跟着反转。逐格处理可以保留第 0 到第 7 帧的时间顺序。
预览动画
contact sheet 用来一次查看所有槽位:

GIF 更适合检查动作连续性。Idle 主要看呼吸和眨眼;running-right 检查方向;waving 和 review 则重点观察手部、表情和角色身份是否漂移。
| idle | running-right | waving | review |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
并行生成时避开状态文件竞争
waving、jumping、failed 和 waiting 可以并行生成,但多个进程同时更新 imagegen-jobs.json 时可能互相覆盖。
我的处理方式是让并行任务只负责生成图片,不写公共 manifest。所有图片完成后,再由一个步骤统一登记状态。这样少了一处共享写入,也更容易定位失败任务。
拆帧和 atlas 校验
图片生成完后,我先检查单帧,再检查整张 atlas。contact sheet 看起来正常,不代表每个槽位都满足桌宠要求。
单帧检查包括:
- 尺寸必须是
192x208。 - 角色不能贴边或被裁切。
- 状态表声明的有效帧位不允许为空。
- 黄色背景需要完整抠除。
atlas 检查包括:
- 尺寸必须是
1536x1872。 - 图像模式为
RGBA。 - 透明像素中不能残留可见 RGB 颜色。
校验结果:
frame inspection errors: 0
frame inspection warnings: 0
atlas validation errors: 0
atlas validation warnings: 0
transparent RGB residue pixels: 0安装文件
pet.json 内容如下:
{
"id": "hoodie-tide",
"displayName": "Hoodie Tide",
"description": "A soft anime-style black-haired companion in a pale hoodie, adapted into a compact Codex pet.",
"spritesheetPath": "spritesheet.webp"
}本次使用的目录结构是:
<CODEX_HOME>\pets\hoodie-tide\
pet.json
spritesheet.webp放入文件并重启 Codex 后,Hoodie Tide 会出现在自定义桌宠列表中。
验收清单
制作同类桌宠时,我会按下面的顺序检查:
- base 图能否在小尺寸下辨认。
- 所有动画是否保持同一张脸、同一套衣服和一致比例。
- 左右移动的朝向与帧序是否正确。
- 每帧尺寸、裁切和透明背景是否合格。
- atlas 的网格、图像模式和透明像素是否通过校验。
pet.json中的 ID、名称和 spritesheet 路径是否对应。
把生成、拆帧和校验分开后,出错时可以直接回到对应步骤,不必重新制作整张 spritesheet。





