Создаёт персонализированного Codex Pet без подписки Codex Pro или доступа к $imagegen. Чистая альтернатива через RunComfy CLI.
npx -y skills add agentspace-so/runcomfy-agent-skills --skill codex-pet --agent claude-codeГенератор 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
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 строк анимации.
Выбирайте этот скилл когда:
$imagegen| Строка | Состояние | Кадры | Поведение питомца |
|---|---|---|---|
| 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 | сосредоточенность / обдумывание |
Избегайте: следов движения, теней, свечения, блёсток, текста, белых/чёрных фонов.
npm i -g @runcomfy/cliruncomfy login. Для CI: RUNCOMFY_TOKEN=<token>brew install imagemagick (macOS) или apt-get install imagemagick (Linux)runcomfy run openai/gpt-image-2/edit с чиби-позой на пурпурном chroma-key фонеpet.json, скопировать оба файла в ~/.codex/pets/<name>/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)
magick "${BASE}" \
-fuzz 18% -transparent "${CHROMA}" \
-alpha set -trim +repage \
-resize 192x208 \
-gravity center -background none -extent 192x208 \
"${RUN_DIR}/cell.png"
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"
# Атлас
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}"
#FF00FF chroma-key: GPT Image 2 выводит только RGB без альфа-каналаДля усиления анимации увеличивайте дельты (максимум ≤4 px или ≤4°):
shift:0:-2 вместо shift:0:-1shift:0:-12 вместо shift:0:-8rotate:-4 / rotate:4 вместо ±2| Код | Значение |
|---|---|
| 0 | успех |
| 64 | неверные аргументы CLI |
| 65 | неверный JSON / несоответствие схемы |
| 69 | ошибка сервера (5xx) |
| 75 | таймаут / 429 |
| 77 | не авторизован |