Hatchery
ChatGPT Pets compatible

FOR OPENPETS

A pack foundry for the format you already read.

OpenPets solved distribution: one atlas layout, many harnesses. It did not solve supply. Drawing 57 frames of a consistent character by hand is a weekend, and most people give up after the idle row. Hatchery is the supply side, and it hands you a file OpenPets loads unmodified.

ROW TABLE

0 idle
6 frames
1 running-right
8 frames
2 running-left
8 frames
3 waving
4 frames
4 jumping
5 frames
5 failed
8 frames
6 waiting
6 frames
7 running
6 frames
8 review
6 frames

The output, precisely

Atlas
1536 x 1872, PNG or lossless verified WebP
Grid
8 columns x 9 rows, 192 x 208 per cell
Rows
idle 6, run right 8, run left 8, waving 4, jumping 5, failed 8, waiting 6, working 6, review 6
Alpha
unused cells fully transparent, zero RGB behind every transparent pixel
Manifest
pet.json with id, displayName, description, spritesheetPath

That last alpha rule is the one hand built packs fail most often. Plenty of editors leave colour data sitting behind a zero alpha channel, and a strict validator rejects the sheet without telling you why. Hatchery checks it in the browser before the download button turns on, then re-checks the encoded file after export, falling back from WebP to PNG if the encode is not clean.

Three steps

  1. Build or download. Use the builder for something new, or take a pack from the gallery if you only want to test your renderer.
  2. Check the sheet. Every pack page previews all nine rows at their real frame durations, so you can compare against your own timing table before installing anything.
  3. Drop the folder in. Unzip into the pets directory OpenPets watches. The folder name is the id and it already matches pet.json.
macOS and Linux
unzip -o my-pet.zip -d ~/.codex/pets/

Row semantics we hold to

The frame counts are only half the contract. The other half is what each row means, and getting that wrong is what makes a pet feel off even when it validates. running is the working state, focus and effort, not locomotion, so nothing in that row jogs or travels. running-left is derived from running-right by mirroring each frame in place, which preserves order and timing. idle stays calm enough to double as the reduced motion frame.

Free, two a day.

Packs you build are yours. Packs you publish here are CC0.

Open the builder