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
- Build or download. Use the builder for something new, or take a pack from the gallery if you only want to test your renderer.
- 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.
- Drop the folder in. Unzip into the pets directory OpenPets watches. The folder name is the id and it already matches
pet.json.
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.