本文整理了在 Codex 中启用 pet、安装自定义 pet、以及从一张参考图制作属于自己的 pet 的完整流程。示例以本仓库的 FleetSnowfluff 为准。
适用场景:你已经在使用 Codex 桌面端或 Codex CLI,希望启用内置 pet,或者制作一个自己的动画 pet 并上传分享。
Codex pet 是一个会随工作状态变化的小型动画伙伴。一个可安装的 pet 通常是一个本地文件夹,里面至少包含:
<pet-id>/
pet.json
spritesheet.webp
pet.json 负责描述名字、ID、说明和 spritesheet 文件路径;spritesheet.webp 是动画图集。
本仓库的最终安装包是:
~/.codex/pets/fleetsnowfluff/
pet.json
spritesheet.webp
hatch-pet skill 和 pet 包不是同一个东西hatch-pet 是用于“制作 pet”的 Codex Skill。~/.codex/pets/<pet-id>/ 是 Codex 最终读取的“pet 成品包”。也就是说,别人给你一个已经做好的 pet 包时,你不需要安装 hatch-pet
只有自己从图片或 prompt 生成 pet 时才需要 hatch-pet
在 Codex 桌面端:
Settings。Appearance。Pets 区域。Tuck Away Pet,可以用它暂时隐藏 pet。也支持在 Codex 会话里使用:
/pet
如果你看不到 pet 选择器,先更新 Codex,再重启应用。
把 pet 包放到本机 Codex pets 目录。
macOS / Linux:
mkdir -p "$HOME/.codex/pets/fleetsnowfluff"
cp pet.json spritesheet.webp "$HOME/.codex/pets/fleetsnowfluff/"
Windows PowerShell:
New-Item -ItemType Directory -Force "$env:USERPROFILE\.codex\pets\fleetsnowfluff"
Copy-Item .\pet.json, .\spritesheet.webp "$env:USERPROFILE\.codex\pets\fleetsnowfluff\"
然后重启 Codex,回到:
Settings -> Appearance -> Pets
选择 FleetSnowfluff。
pet.json{
"id": "fleetsnowfluff",
"displayName": "FleetSnowfluff",
"description": "A tiny pink-haired chibi coder sprite with oversized sunglasses, white-blue outfit, and small attached wings.",
"spritesheetPath": "spritesheet.webp"
}
注意:
id 建议使用小写字母、数字和连字符。id 一致。displayName 是界面显示名,可以保留大小写。spritesheetPath 通常指向同目录下的 spritesheet.webp。hatch-pet 工作流使用固定 atlas:
尺寸:1536 x 1872
网格:8 列 x 9 行
单格:192 x 208
格式:WebP 或 PNG,必须支持透明背景
9 行状态如下:
| 行 | 状态 | 帧数 | 用途 |
|---|---|---|---|
| 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 | 检查或 review |
未使用的格子必须是透明的。
hatch-pet如果你还没有安装 hatch-pet,在 Codex 中输入:
$skill-installer hatch-pet
安装后重启 Codex。
如果需要手动安装 curated skill,可以参考 OpenAI skills 仓库中的安装方式:
python "$CODEX_HOME/skills/.system/skill-installer/scripts/install-skill-from-github.py" \
--repo openai/skills \
--path skills/.curated/hatch-pet
通常不需要自己手动跑这条命令,直接在 Codex 里用 $skill-installer hatch-pet 更方便。
参考图可以是:
图片越清楚,生成结果越稳定。最好提前决定:
我们制作 FleetSnowfluff 时,参考图里最重要的特征是:
可以这样要求 Codex:
使用 $hatch-pet,参考这张图片制作一个 Codex pet。
名字:FleetSnowfluff
必须保留:粉色短发、黑色墨镜、白蓝色衣服、白蓝色翅膀。
风格:Codex digital pet,像素感、小体型、粗轮廓、透明背景。
不要:文字、背景、阴影、漂浮装饰、音乐符号、散落星星。
完成后生成 pet.json、spritesheet.webp、QA contact sheet 和预览视频。
重点是把“必须保留”和“不要生成”写清楚。
hatch-pet 的流程可以理解为 4 步:
~/.codex/pets/<pet-id>/。我们当时的进度可以对应成:
Getting FleetSnowfluff ready.
Imagining FleetSnowfluff's main look.
Picturing FleetSnowfluff's poses.
Hatching FleetSnowfluff.
base 是后续所有动作行的身份锚点。base 错了,动作行通常也会错。
检查 base 时要看:
FleetSnowfluff 的第一次 base 没有翅膀,所以必须重做;第二次 base 保留了翅膀,才继续动作行生成。
hatch-pet 适合把动作行交给子代理并行生成。这样每个子代理只负责一个状态:
idle
running-right
running-left
waving
jumping
failed
waiting
running
review
父会话只负责:
running-left这样可以避免多个代理同时改 imagegen-jobs.json 造成冲突。
running-left有些 pet 可以用 running-right 水平镜像得到 running-left。但如果角色有非对称特征,就不要镜像。
FleetSnowfluff 有蓝色发夹、墨镜渐变和侧向翅膀细节,所以我们没有镜像,而是单独生成了 running-left。
判断标准:
idle:只做轻微呼吸、眨眼、上下浮动。waving:只通过手部姿势表达挥手,不要画波浪线。jumping:只用身体位置表达跳跃,不要画地面阴影或落地烟尘。failed:可以有贴着身体的小眼泪或烟雾,但不要漂浮红叉、符号。waiting:安静等待,不要新增复杂道具。running:表示任务进行中,不是字面意义跑步。review:用身体前倾、头部角度或手部姿态表达专注,不要加代码窗口或纸张。生成完成后,至少检查这些文件:
qa/contact-sheet.png
qa/reports/review.json
qa/reports/validation.json
qa/videos/*.mp4
本仓库的 QA 文件:
qa/contact-sheet.png
qa/reports/review.json
qa/reports/validation.json
qa/videos/
人工检查 contact sheet:
validation.json 应该没有:
"errors": []
最好也没有:
"warnings": []
review.json 应该显示每一行 ok: true。
如果安装了 ffmpeg,可以生成每个状态的 mp4 预览。
如果 ffmpeg 不存在,spritesheet 和 pet 包仍然可以生成,只是没有视频预览。我们制作 FleetSnowfluff 时就先遇到了这个问题,安装 ffmpeg 后再补生成了:
qa/videos/idle.mp4
qa/videos/running-right.mp4
qa/videos/running-left.mp4
qa/videos/waving.mp4
qa/videos/jumping.mp4
qa/videos/failed.mp4
qa/videos/waiting.mp4
qa/videos/running.mp4
qa/videos/review.mp4
只改 displayName 不够。应该同步:
~/.codex/pets/<pet-id>/
pet.json
run metadata
README / docs
QA summary
Git 仓库目录
以 FleetSnowfluff 为例:
{
"id": "fleetsnowfluff",
"displayName": "FleetSnowfluff",
"spritesheetPath": "spritesheet.webp"
}
同时目录应该是:
~/.codex/pets/fleetsnowfluff
如果你保留了生成 run 目录,也建议把旧名字全局替换,避免后续上传或二次维护时混乱。
检查残留名称:
rg -n "OldName|oldname" .
建议最终仓库结构:
my-pet/
README.md
pet.json
spritesheet.webp
qa/
contact-sheet.png
reports/
review.json
validation.json
videos/
idle.mp4
running-right.mp4
running-left.mp4
waving.mp4
jumping.mp4
failed.mp4
waiting.mp4
running.mp4
review.mp4
初始化 git:
git init
git add .
git commit -m "Add FleetSnowfluff Codex pet"
上传到 GitHub:
git remote add origin git@github.com:<user>/<repo>.git
git push -u origin main
如果你用 HTTPS:
git remote add origin https://github.com/<user>/<repo>.git
git push -u origin main
检查:
~/.codex/pets/<pet-id>/。pet.json 和 spritesheet.webp。pet.json 里的 spritesheetPath 是否正确。id 是否和目录名一致。通常是透明背景处理失败。应重新生成或修复对应动作行,确保:
不要重做整只 pet。只修复失败行:
queue repair -> regenerate that row -> record result -> finalize again
这是 identity drift。修复时要把 base、原图、contact sheet 和失败说明都作为 grounding context,要求只重做失败行。
必须在 base 生成前说明。比如 FleetSnowfluff 的翅膀就是必须保留项:
必须保留白蓝色翅膀;翅膀是身体轮廓的一部分,不是漂浮装饰。
使用 $hatch-pet 帮我制作一个 Codex pet。
名字:<YourPetName>
参考图:见附件
必须保留:
- <核心特征 1>
- <核心特征 2>
- <核心特征 3>
风格:
- Codex digital pet
- pixel-art-adjacent
- 小体型 chibi 比例
- 粗深色轮廓
- 透明背景
- 平面赛璐璐阴影
不要:
- 文字
- 背景
- 阴影
- 漂浮装饰
- 波浪线
- 速度线
- 粒子特效
请生成:
- pet.json
- spritesheet.webp
- QA contact sheet
- 每个状态的预览视频
如果某一步失败,只重试失败的行,不要重做整只 pet。
完成后整理为一个 git 仓库,方便上传。
pet.json
spritesheet.webp
qa/contact-sheet.png
qa/reports/review.json
qa/reports/validation.json
qa/videos/*.mp4
安装路径示例:
~/.codex/pets/fleetsnowfluff
当前仓库可直接上传,也可直接复制到 ~/.codex/pets/fleetsnowfluff 使用。