---
title: "How to make your own desktop pet · Desktamer"
description: "Draw a pet, lay it out as a Codex spritesheet, add a pet.json, and it walks your Mac, Windows or Linux desktop. Or start from a single animated GIF."
image: "https://desktamer.com/blog/make-your-own-desktop-pet/card-ba1ad53b.jpg"
url: "https://desktamer.com/blog/make-your-own-desktop-pet/"
---

# How to make your own desktop pet

30 September 2026, updated 9 October 2026, by Taha Bozdemir, 7 min read

In short

- Quickest: drop an animated GIF on Desktamer's Pets tab. It walks, hops and naps with that one loop.
- A full pet is a 1536×1872 spritesheet: 8 columns and 9 rows of 192×208 cells, one animation per row.
- Add a pet.json with an id or a displayName, put both in a folder, and drop the folder on Desktamer.
- Try a GIF on this page first, in the box below. Nothing is uploaded.

Desktamer plays [Codex pets](https://desktamer.com/blog/codex-pets/): the little companions from [OpenAI’s Codex app](https://developers.openai.com/codex/app/settings), which people draw and share on [codex-pets.net](https://codex-pets.net/). The format is open, so a pet you make works in Codex and in Desktamer, on Mac, Windows and Linux alike.

There are two ways to make one. A single animated GIF takes minutes. A full spritesheet takes longer, and gives your pet every move: walking both ways, waving, jumping, napping. Desktamer’s own starters, the Knight, the Wizard and the Fox, are full spritesheets made this way. Everything below matches Desktamer 0.7.1, as of 9 October 2026.

![Pixel art: the Wizard paints while the Knight poses on a stand, beside a drawing tablet showing a grid of the Knight's sprite frames.](https://desktamer.com/blog/make-your-own-desktop-pet/cover-ba1ad53b.webp)

## The quick way: one GIF

Drop an animated GIF or WebP on Desktamer’s Pets tab. Desktamer turns it into a sprite grid once, keeps each frame’s timing, and plays that one loop for everything: the pet walks with it, hops instead of jumping, and loops instead of napping. When it walks the other way, it’s mirrored. Tell it which way it faces in the pet’s inspector.

A few things help:

- **A transparent background.** Clicks go through the see-through parts of a pet, and anything opaque looks like a box on your desktop.
- **Pixel art stays sharp.** A GIF is scaled without smoothing. A WebP is too, if it has fully clear or fully solid pixels and 256 colours or fewer.
- **Big frames are shrunk** to 512 px on their longest edge, and very long loops are thinned to 240 frames. A GIF or WebP bigger than 4096×4096 is turned down.

Try one here before you buy anything. Drop a GIF, or a Codex spritesheet, in the box, and it walks out onto this page:

## The full pet: a Codex spritesheet

A spritesheet is one image holding every frame, in a grid of **8 columns and 9 rows**. Each cell is **192×208 pixels**, so the sheet is exactly **1536×1872**. There’s also a newer layout with 11 rows (1536×2288), whose two extra rows let a pet look toward your pointer.

Here is Desktamer’s Knight, with the grid drawn in. The checks are the transparent parts.

![The Knight's spritesheet: an 8 by 9 grid of 192 by 208 pixel cells, one animation per row. Every row uses its first four cells and leaves the rest empty. The Knight wears silver armour, a red plume and cape, and a blue tabard with a yellow star, and carries a round shield and a sword.](https://desktamer.com/blog/make-your-own-desktop-pet/knight-spritesheet.png)

Each row is one animation, and every row starts in the left column:

| Row  | Name      | Frames | What Desktamer plays it for                                                  |
| ---- | --------- | ------ | ---------------------------------------------------------------------------- |
| 0    | Idle      | 6      | Standing about between things                                                |
| 1    | Run right | 8      | Walking right                                                                |
| 2    | Run left  | 8      | Walking left                                                                 |
| 3    | Waving    | 4      | Hovering, waving hello, being dragged                                        |
| 4    | Jumping   | 5      | A click. A fall holds the middle frame, and landing plays the last two       |
| 5    | Failed    | 8      | Napping: it plays once, holds the last frame, and plays backwards to wake up |
| 6    | Waiting   | 6      | Pauses, and turning down food                                                |
| 7    | Running   | 6      | Pauses, and eating                                                           |
| 8    | Review    | 6      | Pauses                                                                       |
| 9–10 | Look      | 8 + 8  | Only in the 11-row layout: sixteen directions to follow your pointer         |

The frame counts are the most a row holds. You can use fewer, as the Knight does: Desktamer counts a row up to its last drawn cell and ignores the empty ones after it.

Careful

Don’t leave a gap in the middle of a row. An empty cell before the last drawn one plays as a blank frame.

Why “Failed” and “Running”

In Codex, those rows mean a task that went wrong and one that’s under way. Desktamer borrows them for napping and eating, so a pet drawn for both looks right in each if its “Failed” row slumps and its “Running” row looks busy.

### Drawing tips

- **Keep the background transparent**, and leave unused cells fully empty.
- **Keep the feet level.** Desktamer stands each row on its lowest pixel, so a foot that dips lower in one frame leaves the other frames floating.
- **Draw a full step in the run rows.** Walking frames advance with the distance the pet covers, not with time, so a complete step cycle looks right at any speed.
- **Face the right way.** Row 1 faces right and row 2 faces left. If they’re swapped, Desktamer notices and mirrors them.

Any pixel editor works: Aseprite, LibreSprite and Piskel all export a PNG. Drawing a Shimeji instead? Its 46 separate pictures are a different format: here’s [how to make a Shimeji, with a template for all 46](https://desktamer.com/blog/how-to-make-a-shimeji/).

No time to draw?

In Codex itself, the [hatch-pet skill](https://github.com/openai/skills/tree/main/skills/.curated/hatch-pet) draws a pet for you in this format.

## pet.json

Next to the sheet goes a small `pet.json` that names the pet:

```json
{
  "id": "pebble",
  "displayName": "Pebble",
  "description": "A small grey cat who naps a lot.",
  "spritesheetPath": "spritesheet.png"
}
```

- `id` or `displayName`: one of them is needed. The id becomes the pet’s folder name.
- `description`: optional, up to 400 characters.
- `spritesheetPath`: the sheet’s file name, next to `pet.json`. Without it, Desktamer looks for `spritesheet.webp`.
- `spriteVersionNumber`: `2` for the 11-row layout. Leave it out for 9 rows.

The sheet can be a PNG, WebP or GIF of up to 40 MB.

## Put it in Desktamer

Put `pet.json` and the sheet in a folder, then do any one of these:

- **Drop the folder** on the Pets tab, or zip it and drop the `.zip`.
- **Put the folder in `.codex/pets`** in your home folder, where Codex keeps its pets. Desktamer finds it there by itself and plays it from where it is, so edit it in place.
- **Import from URL** takes a codex-pets.net pet page, or a direct link to a zip or a spritesheet.

Once it’s in, the Pets tab has a button for each row, so you can play them one at a time and check your drawing.

Changed your drawing? Import the pet again. Desktamer sees it already has a pet with that id and asks: Replace, Keep both, or Skip. A replaced pet waits in the Trash for 7 days, in case you want it back.

![Desktamer's Pets tab with Luck the cat selected. The preview plays her Run right row, frame 1 of 4, and the buttons under it name the nine rows: Idle, Run right, Run left, Waving, Jumping, Failed, Waiting, Running and Review. Beside it, her food, energy and fun.](https://desktamer.com/blog/make-your-own-desktop-pet/pets-tab.webp)

Luck, a pet we made from our own sprites, on her Run right row in the Pets tab.

## If it won’t import

Desktamer says what’s wrong. The ones you’re most likely to see:

- *“this 1500×1800 image isn’t animated and isn’t a Codex spritesheet (expected 1536×1872 for v1 or 1536×2288 for v2)”*: the sheet’s size is off. Check the canvas size, not just the grid.
- *“pet.json needs an id or a displayName”*: add either one.
- *“spritesheet has 11 rows but pet.json says spriteVersionNumber 1”*: remove `spriteVersionNumber`, or set it to 2.
- *“missing spritesheet …”*: `spritesheetPath` doesn’t match the file’s name.
- *“this 5000×5000 animation is too large (at most 4096×4096)”*: shrink the GIF’s canvas before you import it.

To find out before you import, drop the pet in our free [Codex pet checker](https://desktamer.com/tools/codex-pet-checker/). It says what Desktamer would, plays every row, and fixes run rows that face backwards.

## Share it

[codex-pets.net](https://codex-pets.net/) takes uploads, with stricter rules than Desktamer’s: the sheet must be a WebP named `spritesheet.webp`, and `pet.json` needs an `id`, a `displayName` of up to 80 characters and a `description` of up to 280. Once it’s there, anyone can find it in Desktamer’s Gallery tab and bring it home in one click.

**Free tool:** [Codex pet checker](https://desktamer.com/tools/codex-pet-checker/). Drop in a Codex pet to watch every row play, check it the way Desktamer imports pets, fix rows that run backwards, and save a GIF.

**Desktamer** puts pixel pets on your Mac, Windows or Linux desktop. [Meet them](https://desktamer.com/)

Desktamer is made by [Taha Bozdemir](https://tahabozdemir.com/) at [Bold Biscuit](https://boldbiscuit.com/). Questions and bug reports go to <hello@boldbiscuit.com>.

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "@id": "https://desktamer.com/blog/make-your-own-desktop-pet/#post",
  "headline": "How to make your own desktop pet",
  "description": "Draw a pet, lay it out as a Codex spritesheet, add a pet.json, and it walks your Mac, Windows or Linux desktop. Or start from a single animated GIF.",
  "url": "https://desktamer.com/blog/make-your-own-desktop-pet/",
  "mainEntityOfPage": "https://desktamer.com/blog/make-your-own-desktop-pet/",
  "datePublished": "2026-09-30",
  "dateModified": "2026-10-09",
  "inLanguage": "en",
  "image": "https://desktamer.com/blog/make-your-own-desktop-pet/card-ba1ad53b.jpg",
  "author": {
    "@type": "Person",
    "@id": "https://tahabozdemir.com/#person",
    "name": "Taha Bozdemir",
    "url": "https://tahabozdemir.com/"
  },
  "publisher": {
    "@type": "Organization",
    "@id": "https://boldbiscuit.com/#organization",
    "name": "Bold Biscuit",
    "url": "https://boldbiscuit.com/",
    "logo": "https://boldbiscuit.com/logos/logo_black_bb.png"
  },
  "about": {
    "@id": "https://desktamer.com/#app"
  }
}
```
