mcpField
H
hatch-pet

hatch-pet

github.com/openai创意与媒体28.4k3.4k 次安装18 周前更新
代码仓库

关于 hatch-pet

hatch-pet 是用于 Codex 的技能,可根据概念、品牌线索、名称或参考图创建动画宠物精灵图集,并结合图像生成指引与确定性校验、打包流程。

主要功能

  1. 01处理宠物概念与参考图
  2. 02九种状态动画流程
  3. 03宠物安全风格指引
  4. 04图集校验与打包

适用场景

  1. 01根据品牌线索创建吉祥物
  2. 02依据参考图制作动画精灵
  3. 03准备并校验宠物图集

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openai/skills --skill hatch-pet

安装后在 Claude Code 中输入/hatch-pet确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
agents/
openai.yaml
references/
animation-rows.md
codex-pet-contract.md
qa-rubric.md
scripts/
compose_atlas.py
derive_running_left_from_running_right.py
extract_strip_frames.py
inspect_frames.py
make_contact_sheet.py
prepare_pet_run.py
render_animation_previews.py
validate_atlas.py

详细介绍

Hatch Pet

概述

根据概念、品牌线索、公司/潜在客户名称、一张或多张参考图片,或这些输入的任意组合,创建与 Codex 兼容的动画宠物。此工作流保留确定性的 Hatch Pet 流程,用于图集几何、验证、视觉 QA 和打包,同时采用简洁的分状态提示词,并支持任何适合宠物的视觉风格。

面向用户的输入均为可选项。如果用户未提供宠物名称,请根据概念、品牌、公司或参考文件名推断;如果无法推断,则选择一个简短、友好的名称。如果用户未提供描述,请根据概念或参考内容推断。如果用户未提供参考图片,请先根据文本生成基础宠物,再将其作为每个动画行的规范参考。

生成任务委派

所有常规视觉生成都使用 $imagegen。

在生成基础图稿、行条或修复行之前,加载并遵循已安装的图像生成技能:

${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/SKILL.md

不要直接调用 Image API、图像 CLI 或任何其他图像生成路径。让 $imagegen 自行选择内置优先的路径和回退规则。如果 $imagegen 表示回退方案需要确认,请先询问用户再继续。

调用 $imagegen 时,将生成的宠物提示词作为权威视觉规范传入。宠物提示词应简洁、针对特定状态、面向精灵图制作,并以列出的输入图片为依据。较长的策略和 QA 规则应保留在此技能和确定性审查脚本中,不要将它们扩展到每条图像提示词里。不要用通用的 $imagegen 共享提示词架构包装提示词。

此技能的脚本仅用于确定性图像处理:准备布局指南和提示词、镜像已批准的 running-left、提取帧、验证行、合成最终图集,以及创建联系表和动作预览 QA 媒体。清单更新、打包和清理由上级负责的 shell/jq 步骤处理。

存储控制

内置的 $imagegen 路径会将生成的 PNG 字节存储在调用它的 rollout 中,即使它也会将文件写入 ${CODEX_HOME:-$HOME/.codex}/generated_images。之后删除文件可以减少文件系统占用,但无法缩小已写入的 rollout。请将图像生成隔离并限制其范围:

  • 每项视觉任务使用一个轻量级生成工作线程。不要在同一个工作线程中批量处理多个基础图或行条任务。
  • 工作线程只能返回 selected_source=... 和 qa_note=...;最终回复中不得包含 Markdown 图像预览、base64 或其他视觉附件。
  • 上级不得逐一打开并查看所有生成的 PNG。每项任务使用工作线程的 QA 结果,只检查最终联系表。
  • 将选定的生成输出复制到 decoded/ 后,如果选定的原始文件位于 ${CODEX_HOME:-$HOME/.codex}/generated_images,请将其删除;然后尽可能删除现已为空的生成目录。
  • 对存储敏感的完整运行,请询问用户是否要在可用时使用 $imagegen CLI 回退方案。此路径需要本地 API 凭据和用户明确确认,但可以避免将内置图像负载嵌入 rollout 事件。

品牌探索

如果用户提供的是品牌、公司、产品或潜在客户的名称,而不是具体的形象描述或参考图片,则在准备宠物任务前,先运行一个轻量级探索子 Agent。探索工作者必须使用网络搜索,并优先选择品牌官网、产品页面、文档、关于页面、新闻页面或品牌页面等官方来源。只有在官方页面信息过少时,才使用可靠的二手来源。搜索范围应保持精简:只需提取视觉和个性线索,无需撰写市场调研报告。

如果用户已经提供了具体的吉祥物/头像描述或参考图片,则跳过探索,除非用户明确要求进行品牌调研。

探索工作者的职责:

  • 在网上搜索 2-4 个相关来源,优先选择官方页面
  • 撰写灵活的 Markdown 简报,而非僵化的字段列表
  • 涵盖身份/类别、受众/使用场景、视觉体系、个性/语气、产品/领域主题、吉祥物转化线索、应避免的内容,以及证据/置信度
  • 将从来源推断出的吉祥物指导标记为推断
  • 避免复制徽标、可读标记、UI 截图、标语或文字
  • 以精简的 Generation handoff 部分结尾,其中只包含 brand_name、brand_brief、avatar_seed、avoid 和 brand_sources

使用以下探索工作者提示词:

Research a brand for hatch-pet mascot creation.

Brand/product/prospect: <brand name>
User context: <short user request>
Output file: <absolute path to brand-discovery.md>

Use web search. Prefer official brand, product, docs, about, press, or brand pages. Use reputable secondary sources only if official sources are too thin. Write an adaptive markdown brief to the output file. Headings may flex by brand, but the brief must cover:
- identity/category: canonical name, product type, what it does
- audience/use context: who it serves and where it appears
- visual system: palette, shapes, line quality, materials, typography feel, iconography, patterns
- personality/tone: emotional traits, energy, formality, playfulness
- product/domain motifs: objects, workflows, verbs, metaphors, environments
- mascot translation cues: candidate forms, signature traits, props, what must read at pet size
- avoidances: logos/text, trademark-sensitive elements, misleading cues, competitor confusion, poor mascot fits
- evidence/confidence: source URLs plus notes where evidence is weak or inferred

Do not copy logos, readable marks, UI screenshots, slogans, or text. Clearly label mascot guidance that is inferred rather than directly sourced.

End the brief with a `Generation handoff` section containing exactly:
- brand_name=<canonical brand/product name>
- brand_brief=<one sentence, max 45 words, covering palette/tone/domain motifs/personality>
- avatar_seed=<short mascot-safe visual idea, no logo copying>
- avoid=<short comma-separated list>
- brand_sources=<comma-separated source URLs>

Return exactly:
brand_discovery_file=<absolute output file path>
brand_name=<canonical brand/product name>
brand_brief=<same compact sentence from Generation handoff>
avatar_seed=<same short seed from Generation handoff>
avoid=<same short avoid list from Generation handoff>
brand_sources=<same comma-separated URLs from Generation handoff>

父 Agent 应在准备任务前保存 Markdown 简报,然后将其与 --brand-name、--brand-brief、重复使用的 --brand-source,以及在用户未提供更合适头像描述时根据 avatar_seed 拟定的简洁 --pet-notes 值,一并传递给 prepare_pet_run.py 的 --brand-discovery-file 参数。保留完整简报供审阅;只有精简的交接字段应影响提示词。如果无法使用网络搜索,且用户只提供了一个单独的品牌名称,则在生成前询问品牌线索。

普通宠物任务最多需要 10 个视觉生成作业:1 个基础宠物作业加 9 个行条作业。Codex 应用目前使用全部 9 种状态:idle、running-right、running-left、waving、jumping、failed、waiting、running 和 review。唯一确定性的视觉衍生状态是 running-left;只有在生成 running-right、完成视觉检查并明确批准其可安全镜像后,才可以通过镜像生成 running-left。如果不适合镜像,则应使用常规且具有可靠视觉依据的 $imagegen 行来生成 running-left。

选定视觉输出后,父 Agent 将该确切图像复制到作业的 decoded/ 路径,并在 imagegen-jobs.json 中将作业标记为完成。不要编写用于填充行输出的辅助脚本。确定性的 Python 脚本只能处理已经生成的视觉输出。

只有基础作业可以仅使用提示词。通过 $imagegen 生成的每个行条作业都必须使用 imagegen-jobs.json 中列出的输入图像,包括选定的基础输出复制后创建的规范基础参考图。任何未附带视觉依据图像的行生成都应视为无效。

对宠物安全的风格

默认风格为 auto:根据用户的提示词和参考图推断宠物的风格,然后在每一行中保持该风格一致。如果用户指定了风格,请遵从。支持的预设风格包括 pixel、plush、clay、sticker、flat-vector、3d-toy、painterly、brand-inspired 和 auto。

只要符合宠物安全要求,任何风格都可以接受:

  • 紧凑的全身轮廓,能在 192x208 单元格内清晰辨认
  • 所有行中的面部、比例、材质、配色和道具保持一致
  • 干净且易于移除的色键背景
  • 细节足够大,在宠物尺寸下仍清晰可辨
  • 不含文字、标签、UI 或可读的徽标,除非用户明确提供经批准的参考图并提出相关要求

非像素风格同样是一等选择。只要符合图集和可读性约束,就应接受毛绒、黏土、贴纸、矢量、3D 玩具、绘画风吉祥物、墨绘和品牌风格等外观。

透明度与效果

宠物行会被处理为透明的 192x208 单元格,因此生成的每个像素都必须属于宠物精灵图,或是可干净移除的色键背景。优先通过姿势、表情和轮廓变化来表现,而非添加装饰效果。

确定性的光栅处理流水线负责确保透明度不变量:变为完全透明的像素会被规范化,不会残留隐藏的 RGB 残值;如果导出的文件违反该不变量,图集验证就应失败。不要通过接受视觉上不一致的输出,来掩盖彩色光晕或透明像素残值。

允许的效果必须满足以下所有条件:

  • 效果与状态相关,有助于说明动画。
  • 效果应附着于、接触或重叠宠物轮廓,而非悬浮在附近。
  • 效果位于与宠物相同的帧槽中,且不会形成独立的精灵图组件。
  • 效果不透明,边缘足够清晰以便干净提取,并使用非色键颜色。
  • 效果足够小,在 192x208 尺寸下仍清晰可辨,不会显得杂乱。

默认情况下应避免以下内容,因为它们通常会破坏透明背景清理或组件提取:

  • 波浪标记、运动弧线、速度线、动作拖尾、残影、模糊或涂抹效果
  • 分离的星星、零散闪光、悬浮标点、悬浮图标、飘落的泪滴、分离的烟团或零散灰尘
  • 投射阴影、接触阴影、投影、椭圆形地面阴影、地面色块、着陆标记、撞击爆发、发光、光晕、灵气或柔和的透明效果
  • 文字、标签、帧编号、可见网格、辅助标记、对话气泡、思考气泡、UI 面板、代码片段、棋盘格透明背景、白色背景、黑色背景或场景
  • 宠物、道具、效果、高光或阴影中与色键颜色相近的颜色
  • 杂散像素、断开的轮廓碎片、斑点或噪点、被裁切的身体部位、重叠的姿势,或任何越界进入相邻帧槽的姿势

特定状态指南:

  • idle:保持平静,尽量减少干扰。只使用轻微的呼吸、微小的眨眼、轻微的头部或身体起伏、极小幅度的材质摇摆,或其他能保留角色个性的安静动作。循环中仍必须包含可见的细微变化;不要接受六张实际上完全相同的图。不要展示挥手、走路、跑步、跳跃、说话、工作、审查、情绪反应、大幅度动作、物品互动或新增道具。
  • waving:只通过爪子、手、翅膀或肢体姿势表现挥手。不要在动作周围绘制挥手标记、运动弧线、线条、闪光、符号或漂浮效果。
  • jumping:只通过身体位置表现垂直运动。不要绘制阴影、灰尘、落地痕迹、撞击爆发效果、弹跳垫或地面提示。
  • failed:如果符合允许效果规则,可以使用眼泪、附着的烟团或附着的星星;不要使用红色 X 标记、漂浮符号、未附着的烟团、未附着的星星或独立的泪滴。
  • waiting:通过期待的询问姿势,表现 Codex 需要批准、帮助或用户输入。要与普通的待机和审查状态有所区别。
  • running:表现积极执行任务、处理、思考、扫描、打字或专注投入。不要表现字面意义上的脚步跑动、慢跑、冲刺、跑步机运动、抬膝、大步迈步、摆臂、定向移动、速度线、尘云、地面阴影、运动轨迹或未附着的运动效果。
  • review:通过身体前倾、眨眼、眼神、歪头或爪子/手的位置表现专注。除非放大镜、纸张、代码、UI、标点、符号或其他新道具已经属于基础宠物形象,否则不要添加这些内容。
  • running-right 和 running-left:只通过身体、肢体和道具的移动表现定向拖动效果。running-right 必须面朝右侧并向右移动;running-left 必须面朝左侧并向左移动。循环中的步态必须有明显交替,而不是重复一种几乎静止的步幅。不要绘制速度线、尘云、地面阴影、运动轨迹或未附着的运动效果。

可见进度计划

每次宠物制作都要保留一份可见清单,让用户知道工作进展到哪一步。开始前创建清单,每次只激活一个步骤,并在每个步骤完成后更新清单。

普通宠物制作请使用以下清单,将 <Pet> 替换为宠物名称或 your pet:

  1. 准备 <Pet>。
  2. 构思 <Pet> 的主要外观。
  3. 设想 <Pet> 的各种姿势。
  4. 孵化 <Pet>。

各步骤的含义:

  • Getting <Pet> ready. 选择或确认宠物名称、描述、源图像、风格预设、风格说明和工作文件夹。对于没有具体说明的品牌/产品/公司请求,先运行品牌发现工作器,并整理出简明的品牌简介、来源 URL 和头像种子。
  • Imagining <Pet>'s main look. 生成宠物的主要参考图像。这将作为视觉标准。
  • Picturing <Pet>'s poses. 通过轻量工作器生成姿势行,先从 idle 和 running-right 开始,以确认形象和步态。只有当 running-right 翻转后仍明显有效时,才镜像生成 running-left。
  • Hatching <Pet>. 将已批准的姿势制作为最终宠物文件,检查联系表、预览和验证结果,修复任何损坏部分,保存 pet.json 和 spritesheet.webp,然后报告输出路径。

只有在实际文件、图像或决策已存在时,才能将步骤标记为完成。如果是修复任务,请从第一个相关步骤开始,而不是重新开始整份清单。

默认工作流

  1. 准备宠物制作文件夹和图像生成任务清单:
SKILL_DIR="${CODEX_HOME:-$HOME/.codex}/skills/hatch-pet"
python "$SKILL_DIR/scripts/prepare_pet_run.py" \
  --pet-name "<Name>" \
  --description "<one sentence>" \
  --reference /absolute/path/to/reference.png \
  --output-dir /absolute/path/to/run \
  --pet-notes "<stable pet description>" \
  --brand-discovery-file /absolute/path/to/brand-discovery.md \
  --brand-name "<optional researched brand name>" \
  --brand-brief "<optional compact researched brand cue sentence>" \
  --brand-source "https://example.com/source" \
  --style-preset auto \
  --style-notes "<optional freeform style notes>" \
  --force

除用于表达用户约束所需的标志外,以上参数均为可选项。对于纯文本请求,请通过 --pet-notes 传入概念,并省略 --reference;prepare_pet_run.py 会根据需要推断名称、描述、色度键和输出目录。 对于仅包含品牌的请求,请先运行发现工作器并保存 Markdown 简报,然后通过 --brand-discovery-file 传入简报路径,通过 --pet-notes 传入 avatar_seed,通过 --brand-name 传入 brand_name,通过 --brand-brief 传入 brand_brief,并为每个来源 URL 重复使用 --brand-source。

  1. 检查 imagegen-jobs.json,找出下一个就绪的 $imagegen 任务。当任务的 status 不是 complete,且 depends_on 中的每个 id 均已完成时,该任务即为就绪。优先使用 jq 或编辑器直接读取清单,而不是添加用于显示状态的辅助脚本:
jq '.jobs[] | {id, kind, status, depends_on, prompt_file, retry_prompt_file, input_images, output_path, derivation_policy}' /absolute/path/to/run/imagegen-jobs.json
  1. 默认使用轻量级工作器生成视觉任务:
  • 首先生成并复制 base,使用轻量级基础工作器。
  • 接着生成并复制 idle 和 running-right,用于检查身份一致性和步态,每行使用一个轻量级工作器。
  • 检查 running-right;仅当视觉身份、道具位置、标记、光照和方向语义仍然正确时,才镜像生成 running-left。
  • 如果镜像会改变含义或身份,则使用轻量级工作器正常生成 running-left。
  • 使用轻量级工作器生成其余各行,并使用每个任务列出的所有输入图像。

对于每个就绪的视觉任务,使用 imagegen-jobs.json 中列出的提示词文件调用 $imagegen,传入所有列出的输入图像及其角色标签,并默认使用内置的 image_gen 路径,除非 $imagegen 自行选择其他路径。父 Agent 应尽量减少自身对图像的处理:不要在父级执行过程中打开每个生成的基础图或各行图像。工作器仅返回所选源路径和一句话 QA 说明;父 Agent 将所选源路径记录到清单中。

prepare_pet_run.py 会在 references/layout-guides/ 下为每种动画状态创建 9 张对应行的布局指南图像,每种状态一张。行任务会将匹配的指南作为仅用于布局的输入,以便模型遵循正确的帧数、间距、居中位置和安全留白。将这些指南视为不可见的构图参考:生成的行条带中不得出现可见方框、边框、中心标记、标签、指南颜色或指南背景。

生成行条带时,行提示词中的身份锁定要求具有最高优先级。请保留规范基础图中的相同风格、面部、标记、调色板、材质、道具设计、身体比例和轮廓。默认情况下,行任务会附上布局指南和规范基础图;解码后的基础图会保存在运行文件夹中,以供确定性处理,而不会作为冗余的生成输入发送。

如果 $imagegen 对某一行返回传输层 Bad Request,请使用为该行生成的 retry_prompt_file 重试一次。重试提示词会保留行 id、帧数、色度键、规范基础图身份和状态动作。请保留规范基础图作为输入。如果重试仍然失败,请停止并报告失败的行及提示词路径,不要改用任何其他生成路径。

  1. 为任务选定生成输出后,将其复制到解码后的输出路径,并将任务标记为完成。对于 base,还要创建规范身份参考:
RUN_DIR=/absolute/path/to/run
JOB_ID=<job-id>
SOURCE=/absolute/path/to/generated-output.png
OUTPUT_REL=$(jq -r --arg id "$JOB_ID" '.jobs[] | select(.id == $id) | .output_path' "$RUN_DIR/imagegen-jobs.json")
mkdir -p "$(dirname "$RUN_DIR/$OUTPUT_REL")"
cp "$SOURCE" "$RUN_DIR/$OUTPUT_REL"
if [ "$JOB_ID" = "base" ]; then mkdir -p "$RUN_DIR/references"; cp "$RUN_DIR/$OUTPUT_REL" "$RUN_DIR/references/canonical-base.png"; fi
UPDATED_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)
TMP_MANIFEST=$(mktemp)
jq --arg id "$JOB_ID" --arg source "$SOURCE" --arg at "$UPDATED_AT" '(.jobs[] | select(.id == $id)) += {status: "complete", source_path: $source, completed_at: $at}' "$RUN_DIR/imagegen-jobs.json" > "$TMP_MANIFEST"
mv "$TMP_MANIFEST" "$RUN_DIR/imagegen-jobs.json"

如果复制的源文件位于 ${CODEX_HOME:-$HOME/.codex}/generated_images 下,请在解码副本生成后删除原始生成文件:

GENERATED_ROOT="${CODEX_HOME:-$HOME/.codex}/generated_images"
case "$SOURCE" in
  "$GENERATED_ROOT"/*)
    rm -f "$SOURCE"
    rmdir "$(dirname "$SOURCE")" 2>/dev/null || true
    ;;
esac
  1. 仅在视觉上安全时才派生 running-left:
python "$SKILL_DIR/scripts/derive_running_left_from_running_right.py" \
  --run-dir /absolute/path/to/run \
  --confirm-appropriate-mirror \
  --decision-note "<why mirroring preserves this pet's identity>"

该脚本会就地镜像每个生成帧槽位,使向左移动的行保留向右移动行的时间顺序。不要用会反转动画时序的整条条带镜像来替代它。

  1. 所有任务完成后,直接运行图像处理脚本:
RUN_DIR=/absolute/path/to/run
mkdir -p "$RUN_DIR/final" "$RUN_DIR/qa"
python "$SKILL_DIR/scripts/extract_strip_frames.py" \
  --decoded-dir "$RUN_DIR/decoded" \
  --output-dir "$RUN_DIR/frames" \
  --states all \
  --method auto
python "$SKILL_DIR/scripts/inspect_frames.py" \
  --frames-root "$RUN_DIR/frames" \
  --json-out "$RUN_DIR/qa/review.json" \
  --require-components
python "$SKILL_DIR/scripts/compose_atlas.py" \
  --frames-root "$RUN_DIR/frames" \
  --output "$RUN_DIR/final/spritesheet.png" \
  --webp-output "$RUN_DIR/final/spritesheet.webp"
python "$SKILL_DIR/scripts/validate_atlas.py" \
  "$RUN_DIR/final/spritesheet.webp" \
  --json-out "$RUN_DIR/final/validation.json"
python "$SKILL_DIR/scripts/make_contact_sheet.py" \
  "$RUN_DIR/final/spritesheet.webp" \
  --output "$RUN_DIR/qa/contact-sheet.png"
python "$SKILL_DIR/scripts/render_animation_previews.py" \
  --frames-root "$RUN_DIR/frames" \
  --output-dir "$RUN_DIR/qa/previews"

如果预览 GIF 显示因逐帧适配单元格提取而导致尺寸跳变或基线跳动,且原始行条本身的缩放和位置稳定,请使用显式的行稳定模式重新提取帧,然后重新运行检查、图集合成、验证、联系表生成和预览:

python "$SKILL_DIR/scripts/extract_strip_frames.py" \
  --decoded-dir "$RUN_DIR/decoded" \
  --output-dir "$RUN_DIR/frames" \
  --states all \
  --method stable-slots
python "$SKILL_DIR/scripts/inspect_frames.py" \
  --frames-root "$RUN_DIR/frames" \
  --json-out "$RUN_DIR/qa/review.json" \
  --require-components \
  --allow-stable-slots

将 stable-slots 用作由 QA 驱动的有意修正,而非默认选项。它应减少提取导致的动作跳变,同时不会掩盖被裁切的宽姿势或质量不佳的源图条。

清理前的预期输出:

run/
  pet_request.json
  imagegen-jobs.json
  prompts/
  decoded/
  frames/frames-manifest.json
  final/spritesheet.webp
  final/validation.json
  qa/contact-sheet.png
  qa/previews/*.gif
  qa/review.json
  qa/run-summary.json

默认情况下,打包输出写入运行目录之外。如果设置了 CODEX_HOME,则使用它;否则使用 $HOME/.codex。

${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>/
  pet.json
  spritesheet.webp

使用 shell 和 jq 打包:

RUN_DIR=/absolute/path/to/run
PET_ID=$(jq -r '.pet_id' "$RUN_DIR/pet_request.json")
DISPLAY_NAME=$(jq -r '.display_name' "$RUN_DIR/pet_request.json")
DESCRIPTION=$(jq -r '.description' "$RUN_DIR/pet_request.json")
PET_DIR="${CODEX_HOME:-$HOME/.codex}/pets/$PET_ID"
mkdir -p "$PET_DIR"
cp "$RUN_DIR/final/spritesheet.webp" "$PET_DIR/spritesheet.webp"
jq -n --arg id "$PET_ID" --arg displayName "$DISPLAY_NAME" --arg description "$DESCRIPTION" '{id: $id, displayName: $displayName, description: $description, spritesheetPath: "spritesheet.webp"}' > "$PET_DIR/pet.json"

打包后写入 qa/run-summary.json:

jq -n --arg run_dir "$RUN_DIR" --arg spritesheet "$RUN_DIR/final/spritesheet.webp" --arg validation "$RUN_DIR/final/validation.json" --arg contact_sheet "$RUN_DIR/qa/contact-sheet.png" --arg review "$RUN_DIR/qa/review.json" --arg package "$PET_DIR" '{ok: true, run_dir: $run_dir, spritesheet: $spritesheet, validation: $validation, contact_sheet: $contact_sheet, review: $review, package: $package}' > "$RUN_DIR/qa/run-summary.json"

完成确定性图像处理后,在接受宠物前,使用轻量级视觉 QA 工作器检查 qa/contact-sheet.png 和 qa/previews/*.gif。确定性验证是必要条件,但并非充分条件。如果任何行意外改变了物种/体型、面部、斑纹、调色板、材质、道具设计、风格、道具所在侧或整体轮廓,则阻止接受。动作预览还必须排除非预期的尺寸跳变、方向节奏反转或停滞、面向错误,以及虽在技术上有所不同但视觉上毫无变化的待机循环。

模型视觉 QA 接受联系表后,移除中间运行产物:

保留 pet_request.json、final/spritesheet.webp、final/validation.json、qa/contact-sheet.png、qa/previews/、qa/review.json 和 qa/run-summary.json。移除生成的提示词文件、布局指南、解码后的行条、提取的帧、final/spritesheet.png 和图像生成任务清单。如果用户需要调试产物,或运行仍需修复,则跳过清理。

轻量级视觉工作器

默认使用轻量级子代理处理图像密集型工作。这样可将每次 $imagegen rollout 限定为一张选定图像,避免将联系表视觉负载带入父线程,并降低成本,同时保留完整的 9 状态应用契约。

子 Agent 委派

除非用户明确禁止,否则本次运行请使用子 Agent。如果用户未允许使用子 Agent,或者对使用子 Agent 的意图含糊不清,请先征求用户同意,以便并行开展工作。

父级职责:

  • 当用户只提供品牌/产品/公司/潜在客户名称时,在准备工作前先运行品牌调研工作器
  • 准备本次运行并检查 imagegen-jobs.json
  • 将基础任务、各行任务和最终联系表 QA 分配给轻量级工作器
  • 将选定的工作器输出复制到其解码后的路径,并在 imagegen-jobs.json 中将任务标记为完成
  • 根据选定的基础输出创建 references/canonical-base.png
  • 适时执行获准的 running-left 镜像派生
  • 执行确定性图像处理、打包、修复再生成和清理

基础工作器职责:

  • 仅处理 base 任务
  • 读取 prompts/base-pet.md 并使用其中列出的所有参考图像
  • 仅使用 $imagegen
  • 将提示词中的简短品牌灵感说明作为宽泛的视觉/个性指导,不得复制徽标、可读标记、UI 截图、标语或文字
  • 仅返回 selected_source=/absolute/path/to/selected-output.png 和 qa_note=<one sentence>

各行工作器职责:

  • 仅处理一个行任务
  • 读取该行提示词并使用其中列出的所有输入图像
  • 仅使用 $imagegen;不得在本地绘制、编辑、平铺或合成精灵图
  • 快速进行视觉检查,确认帧数、角色身份、色度背景、间距、裁切情况和分离效果
  • 遵守该行提示词的透明度和效果规则,包括不得添加分离效果、waving 不得有波浪标记、带方向的跑步行不得有速度线或尘土、非方向性的 running 行不得出现字面意义上的脚部跑步动作,并且仅在状态提示词允许时添加与精灵图相连且不透明的泪水/烟雾/星星
  • 仅返回 selected_source=/absolute/path/to/selected-output.png 和 qa_note=<one sentence>

最终视觉 QA 工作器职责:

  • 检查 qa/contact-sheet.png 和 qa/previews/ 下的行 GIF;必要时参考 qa/review.json 和 final/validation.json 中的文本信息
  • 确认所有 9 行均符合 Codex 应用状态约定,且使用同一只宠物角色
  • 返回简洁结果:visual_qa=pass 或 visual_qa=fail;若失败,还需提供针对具体行的修复说明
  • 不得编辑文件、安排修复、打包或清理

工作器模型选择:

  • 品牌调研优先选择能力足够的小型模型,因为其只需返回简短的调研摘要,无需负责协调工作
  • 如可选择模型覆盖,则视觉工作器优先使用较小的模型,例如采用中等推理能力的 gpt-5.4-mini
  • 仅在协调工作或无法使用较小工作器模型时使用父级/默认模型
  • 除非用户明确要求更高并行度,否则同时运行的生成工作器不得超过两个。确定性图像处理完成后,再以单个工作器运行最终视觉 QA。工作器返回结果并被使用后,应将其关闭。

使用以下基础工作器提示词:

Generate the hatch-pet base image.

Run dir: <absolute run dir>
Job id: base
Prompt file: <absolute base prompt file>
Input images:
- <absolute path> — <role>

Use $imagegen only. Read the base prompt and attach every listed input image. If the prompt contains brand inspiration, use it only as broad mascot-safe guidance; do not copy logos, readable marks, UI screenshots, slogans, or text. Before returning, visually check that the result is one centered full-body pet on a flat chroma background, with no text, scenery, shadows, or detached effects.

Do not edit manifests, copy into decoded, mark jobs complete, generate rows, run image-processing scripts, repair, package, or open unrelated files.
Do not include Markdown image previews, base64, or extra attachments in the final response.

Return exactly:
selected_source=/absolute/path/to/selected-output.png
qa_note=<one sentence>

使用以下行工作器提示词:

Generate one hatch-pet row.

Run dir: <absolute run dir>
Row id: <row-id>
Prompt file: <absolute prompt file>
Retry prompt file: <absolute retry prompt file>
Input images:
- <absolute path> — <role>
- <absolute path> — <role>

Use $imagegen only. Read the row prompt and attach every listed input image. If imagegen returns Bad Request, retry once with the retry prompt and the same input images.

Before returning, visually check: exact frame count, same pet identity as canonical base, flat chroma background, complete separated unclipped poses, and no detached effects or guide marks. The prompt's transparency and effects rules are mandatory: no detached effects, no wave marks for `waving`, no speed lines or dust for directional running rows, no literal foot-running for the non-directional `running` row, and only attached opaque sprite-like tears/smoke/stars when allowed by the state prompt.

Do not edit manifests, copy into decoded, mark jobs complete, mirror rows, run image-processing scripts, repair, package, or open unrelated files.
Do not include Markdown image previews, base64, or extra attachments in the final response.

Return exactly:
selected_source=/absolute/path/to/selected-output.png
qa_note=<one sentence>

使用以下最终视觉 QA 工作器提示词:

Visually QA one finalized hatch-pet contact sheet.

Run dir: <absolute run dir>
Contact sheet: <absolute run dir>/qa/contact-sheet.png
Preview dir: <absolute run dir>/qa/previews
Review JSON: <absolute run dir>/qa/review.json
Validation JSON: <absolute run dir>/final/validation.json

Inspect the contact sheet and the preview GIFs visually. Confirm the same pet identity, style, palette, silhouette, face, proportions, and props across all rows:
0 idle, 1 running-right, 2 running-left, 3 waving, 4 jumping, 5 failed, 6 waiting, 7 running, 8 review.

Fail rows with identity drift, missing/blank frames, copied guide marks, white/nontransparent backgrounds, cropped bodies, slot overlap, detached effects, shadows/glows/smears/dust, chroma-key artifacts, motion that does not match the row state, unintended size popping, wrong facing direction, reversed or non-alternating gait, or idle loops that are effectively static.

Do not edit files, queue repairs, package, clean up, or inspect unrelated files.

Return exactly:
visual_qa=pass|fail
qa_note=<one sentence summary>
repair_rows=<comma-separated row ids, or none>
repair_notes=<short row-specific notes, or none>

修复工作流

如果帧检查或最终视觉 QA 未通过,请读取 qa/review.json,重新生成范围最小的失败内容,将替换行复制到相同的解码输出路径,并使用新的 source_path 和 completed_at 将该任务标记为已完成。修复失败的行,不要重做整张表。

修复身份一致性时,请使用规范基础图像、原始参考图、联系表和精确的行失败说明作为依据。向行处理器提供现有的行提示词,以及来自 qa/review.json 的简短修复说明;保持规范的宠物身份和选定的风格。

对于由提取导致的动作跳变,不要先重新生成图像。如果源图条已保留行级缩放和基线,请使用 --method stable-slots 重新运行确定性流水线,使用 --allow-stable-slots 检查,然后重新检查预览 GIF。只有当原始图条本身被裁切、不稳定或语义错误时,才重新生成该行。

规则

  • 将 $imagegen 作为主要生成层。
  • 对于没有具体头像描述或参考图的品牌/产品/公司/潜在客户请求,请在生成基础图像前进行品牌探索,并仅将简要说明传入运行任务。
  • 仅使用 $imagegen 作为视觉生成层。不得通过此技能调用图像 API、图像 CLI、本地光栅图生成器或一次性生成脚本。
  • 只要所选路径支持参考图,就始终将参考图附加/显示给 $imagegen。
  • 将每一行图条任务对应的 references/layout-guides/<state>.png 图像作为仅供布局参考的指南,并拒绝复制指南图像像素的输出。
  • 默认使用轻量级视觉处理器执行基础图像生成、行图条视觉生成和最终联系表 QA;由父级负责更新清单、运行确定性图像脚本、打包和清理。
  • 使用 $imagegen 生成每个常规视觉任务:基础图像以及所有未明确批准通过 running-left 镜像派生的行图条。
  • 只有基础图像任务可以仅根据提示词生成;每个行任务都必须附上列出的依据图像。
  • 先生成 running-right,再决定是否可以镜像生成 running-left。
  • 镜像生成 running-left 时,请保留帧顺序和时序语义;应通过确定性脚本派生,不要直接整体镜像整个图条。
  • 不要从其他状态派生或复用 waiting、running、failed、review、jumping 或 waving;每个状态都有不同的应用语义,必须分别生成对应的行。
  • 缺少 $imagegen 输出时,绝不能用本地绘制、平铺、变换或代码生成的行图条替代。
  • 只有在所选输出已复制到解码输出路径后,才能将视觉任务标记为已完成。
  • 不要依赖生成图像实现精确的图集几何结构;请使用此技能提供的确定性图像脚本。
  • 使用 pet_request.json 中存储的色度键;不要强制使用固定的绿幕。
  • 所有行中的宠物轮廓、面部、材质、配色、风格和道具必须保持一致。
  • 即使 qa/review.json 和 final/validation.json 没有错误,视觉身份或风格漂移仍应视为阻塞问题。
  • 联系表中出现参考图裁切、重复平铺、白色单元格背景或非精灵图碎片时,应判定为失败。
  • 预览 GIF 出现由提取导致的尺寸跳变、方向时序反转、朝向错误或静止待机循环时,应判定为失败。
  • 出现禁止的分离效果、邻近色度键的伪影、阴影、光晕、拖影、尘土、着陆痕迹、挥手痕迹、速度线或运动轨迹时,应判定对应行失败。
  • qa/review.json 中的错误属于阻塞问题。警告需要进行视觉检查。

验收标准

  • 最终图集为 PNG 或 WebP 格式,尺寸为 1536x1872,支持透明背景,并基于 192x208 像素的单元格。
  • 已使用的单元格不得为空,未使用的单元格必须完全透明。
  • 图集遵循 references/animation-rows.md 中的行数和帧数。
  • 已生成联系表和逐行动作预览,并由轻量级视觉 QA 工作器检查。
  • qa/review.json 中没有错误。
  • 逐行检查确认动画循环对于 Codex 应用已足够完整。
  • 动作预览不得出现意外的尺寸跳变、方向节奏反转或错误的行语义。
  • 非像素风格只要在宠物大小下清晰可读,且各行风格一致,即可接受。
  • 对于自定义宠物,${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>/pet.json 和 ${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>/spritesheet.webp 必须一起暂存。

评论

支持 Markdown