codex-petкастомный питомец Codex
Создаёт персонализированного Codex Pet без подписки Codex Pro или доступа к $imagegen. Чистая альтернатива через RunComfy CLI.
Установка
npx -y skills add agentspace-so/runcomfy-agent-skills --skill codex-pet --agent claude-codeCodex Pet — Pro Pack на RunComfy
Генератор Codex Pet на RunComfy. Превратите одно исходное изображение в кастомного Codex Pet — pet.json + spritesheet.webp — поместите в ${CODEX_HOME:-$HOME/.codex}/pets/<name>/, и Codex подхватит его рядом с 8 встроенными питомцами.
npx skills add agentspace-so/runcomfy-agent-skills --skill codex-pet -g
Что такое Codex Pet
OpenAI Codex Pets (выпущены май 2026) — пиксельные анимированные компаньоны, плавающие на рабочем столе пока Codex кодирует. Реагируют на взаимодействие мышью и статус Codex (чешут голову при обдумывании, показывают речевой пузырь при завершении задачи). Codex поставляется с 8 встроенными питомцами и поддерживает кастомных.
Каждая папка питомца содержит ровно два файла:
pet.json— манифест сid,displayName,description,spritesheetPathspritesheet.webp— атлас спрайтов 1536×1872, 8 столбцов × 9 строк по 192×208 пикселей, прозрачный фон
Зачем этот скилл вместо официального hatch-pet
Официальный hatch-pet требует внутренней системы Codex $imagegen (требует Codex Pro). Этот скилл — альтернатива через RunComfy CLI: только RUNCOMFY_TOKEN + runcomfy и magick. Выходной артефакт идентичен — тот же pet.json, тот же атлас 1536×1872, те же 9 строк анимации.
Выбирайте этот скилл когда:
- Нет Codex Pro /
$imagegen - Нужна генерация через RunComfy Model API
- Нужна пакетная генерация из папки исходных изображений
- Участвуете в конкурсе OpenAI Codex Pet с другой моделью
Строки анимации
| Строка | Состояние | Кадры | Поведение питомца |
|---|---|---|---|
| 0 | idle | 6 | спокойное дыхание/моргание; первый кадр при reduced-motion |
| 1 | running-right | 8 | движение вправо |
| 2 | running-left | 8 | зеркальное движение влево |
| 3 | waving | 4 | приветствие / жест внимания |
| 4 | jumping | 5 | замах, подъём, пик, спуск, приземление |
| 5 | failed | 8 | реакция ошибки / грусть |
| 6 | waiting | 6 | терпеливый вариант idle |
| 7 | running | 6 | активная работа / цикл in-progress |
| 8 | review | 6 | сосредоточенность / обдумывание |
Визуальный стиль
- Утрированные чиби-пропорции: голова занимает ~60% высоты фигуры; тело и ноги короткие и маленькие
- Пиксель-арт, массивный силуэт, жирный тёмный контур 1–2 px
- Ограниченная палитра, плоская заливка, выразительное лицо, крошечные конечности
- Прозрачный фон
Избегайте: следов движения, теней, свечения, блёсток, текста, белых/чёрных фонов.
Требования
- RunComfy CLI —
npm i -g @runcomfy/cli - Аккаунт RunComfy —
runcomfy login. Для CI:RUNCOMFY_TOKEN=<token> - ImageMagick —
brew install imagemagick(macOS) илиapt-get install imagemagick(Linux) - URL исходного изображения — публично доступный HTTPS, JPEG/PNG/WebP
Пайплайн (1 вызов GPT Image 2, ~2 мин)
- Канонический Codex Pet — один вызов
runcomfy run openai/gpt-image-2/editс чиби-позой на пурпурном chroma-key фоне - Нормализация ячейки — пурпурный → alpha 0, обрезка, вписать в 192×208
- 9 строк, программно — ImageMagick micro-transforms (смещение, зеркало, поворот) канонической ячейки
- Атлас — 9 строк сложить вертикально в 1536×1872
- WebP — конвертировать PNG в WebP
- Манифест + установка — записать
pet.json, скопировать оба файла в~/.codex/pets/<name>/
Шаг 1: Генерация канонического Codex Pet
PET_NAME="my-pet"
SOURCE_URL="https://.../source.png"
RUN_DIR="./codex-pet-run/${PET_NAME}"
CHROMA="#FF00FF"
mkdir -p "${RUN_DIR}"
runcomfy run openai/gpt-image-2/edit \
--input "{
\"prompt\": \"Generate one canonical Codex digital pet sprite based on the input image. EXAGGERATED chibi proportions: the head occupies about 60 percent of the total figure height; body and legs are tiny stubby and short. The whole pet figure must fit within a near-square bounding box. Pixel-art-adjacent low-resolution mascot, chunky silhouette, thick dark 1-2 px outline, limited palette, flat cel shading, simple expressive face. Centered. Background: solid flat magenta ${CHROMA} chroma-key. The pet must not use the chroma-key color. No gradients, no shadows, no scenery, no text.\",
\"images\": [\"${SOURCE_URL}\"],
\"size\": \"1024*1024\"
}" \
--output-dir "${RUN_DIR}/decoded/"
BASE=$(ls "${RUN_DIR}/decoded/"*.png | head -1)
Шаг 2: Нормализация в ячейку 192×208
magick "${BASE}" \
-fuzz 18% -transparent "${CHROMA}" \
-alpha set -trim +repage \
-resize 192x208 \
-gravity center -background none -extent 192x208 \
"${RUN_DIR}/cell.png"
Шаг 3: Построение 9 строк программно
SRC="${RUN_DIR}/cell.png"
mkdir -p "${RUN_DIR}/cells"
shift_cell() { magick "$SRC" -background none -roll "+${1}+${2}" -alpha set "$3"; }
rotate_cell() { magick "$SRC" -background none -distort SRT "$1" -alpha set "$2"; }
make_blink() { magick "$SRC" -region 80x6+56+82 -fill "#f4e6d8" -colorize 70% -blur 0x0.5 +region "$1"; }
blank_cell() { magick -size 192x208 xc:none -alpha set "PNG32:$1"; }
build_row() {
local row=$1; shift; local i=0
for spec in "$@"; do
local out="${RUN_DIR}/cells/row${row}-frame${i}.png"
case "$spec" in
base) cp "$SRC" "$out" ;;
blink) make_blink "$out" ;;
shift:*) IFS=':' read -r _ x y <<< "$spec"; shift_cell "$x" "$y" "$out" ;;
rotate:*) IFS=':' read -r _ ang <<< "$spec"; rotate_cell "$ang" "$out" ;;
esac
i=$((i+1))
done
while [ "$i" -lt 8 ]; do blank_cell "${RUN_DIR}/cells/row${row}-frame${i}.png"; i=$((i+1)); done
magick "${RUN_DIR}/cells/row${row}-frame"*.png +append -alpha set "${RUN_DIR}/cells/row${row}-strip.png"
}
build_row 0 base base blink base base blink
build_row 1 base shift:1:0 shift:2:-1 shift:1:0 base shift:-1:0 shift:-2:-1 shift:-1:0
build_row 3 base shift:0:-1 base shift:0:-1
build_row 4 shift:0:2 base shift:0:-8 shift:0:-2 base
build_row 5 base shift:0:1 rotate:1 shift:0:1 shift:0:2 shift:0:1 rotate:-1 base
build_row 6 base base shift:0:-1 base base shift:0:1
build_row 7 base shift:0:-1 base shift:0:-1 base shift:0:-1
build_row 8 base rotate:-2 base rotate:2 base base
magick "${RUN_DIR}/cells/row1-strip.png" -flop -alpha set "${RUN_DIR}/cells/row2-strip.png"
Шаги 4–6: Атлас, WebP, манифест, установка
# Атлас
magick "${RUN_DIR}/cells/row"{0..8}"-strip.png" -append -alpha set "${RUN_DIR}/spritesheet.png"
magick "${RUN_DIR}/spritesheet.png" "${RUN_DIR}/spritesheet.webp"
# Манифест
cat > "${RUN_DIR}/pet.json" <<EOF
{"id":"${PET_NAME}","displayName":"${PET_NAME}","description":"...","spritesheetPath":"spritesheet.webp"}
EOF
# Установка
DEST="${CODEX_HOME:-$HOME/.codex}/pets/${PET_NAME}"
mkdir -p "${DEST}"
cp "${RUN_DIR}/pet.json" "${RUN_DIR}/spritesheet.webp" "${DEST}/"
echo "Codex Pet установлен: ${DEST}"
Советы по промптингу
- Сразу фиксируйте чиби-пропорции: «голова ~60% высоты фигуры» — ключевое отличие от вытянутого персонажа
- Явно требуйте магентовый
#FF00FFchroma-key: GPT Image 2 выводит только RGB без альфа-канала - Запрещайте chroma-key цвет в самом питомце
- Фиксируйте стиль: «pixel-art-adjacent, chunky silhouette, 1-2 px outline, limited palette, flat cel shading»
- Запрещайте неправильные стили: «No polished illustration, no painterly render, no anime key art, no 3D render»
Настройка микро-анимации
Для усиления анимации увеличивайте дельты (максимум ≤4 px или ≤4°):
- Более заметное покачивание в idle:
shift:0:-2вместоshift:0:-1 - Быстрый цикл бега: увеличьте горизонтальные смещения строки 1
- Более высокий прыжок:
shift:0:-12вместоshift:0:-8 - Более заметный наклон головы:
rotate:-4/rotate:4вместо ±2
Ограничения
- Одна каноническая поза — анимация через ImageMagick, не multi-frame генерация
- GPT Image 2 не выводит альфа-канал — магентовый chroma-key обязателен
- Возможен дрейф идентификации при сильной стилизации исходника
- Без звука — Codex Pets только визуальные
Коды выхода
| Код | Значение |
|---|---|
| 0 | успех |
| 64 | неверные аргументы CLI |
| 65 | неверный JSON / несоответствие схемы |
| 69 | ошибка сервера (5xx) |
| 75 | таймаут / 429 |
| 77 | не авторизован |
