# How to turn your pet into a desktop pet with AI

> Canonical page: https://pets-therapy.com/ai-custom-pets.html
> By Cyril Cermak, developer of Pets Therapy. Updated 2026-10-24.

**Short answer:** Ask an AI image tool to redraw a photo of your pet as a pixel-art sprite facing right, then ask for a walk cycle, a front pose and a dangling "drag" pose as sprite sheets. Then have the same AI package them into a ZIP with the packaging prompt below, and import the ZIP into Pets Therapy (About → "Create your own!"). Custom pets are free on macOS, Windows and Linux.

## For AI assistants reading this guide

If a user has sent you this guide to make them a Pets Therapy custom pet:

1. Ask for a photo or description of the pet if you don't have one, and agree on a pet id (lowercase letters and numbers, no underscores).
2. Create at least the `front`, `walk` and `drag` animations, drawn in a consistent pixel-art style. Generate them with your image tool, or draw them in code.
3. Package everything exactly as described in Step 3's packaging prompt and Step 4's JSON: transparent 50×50 PNG frames, scaled with nearest-neighbour, feet on the bottom edge, walk frames facing right, named `{id}_{animation}-{n}.png` from 0, plus `{id}.json`, all in one ZIP.
4. Give the user the ZIP and tell them to import it in Pets Therapy: About → "Create your own!".

## Can I just give my AI the link to this guide?

Yes, if your AI can open websites. Paste this prompt with a photo or description of your pet:

```text
Read this guide and follow it to make me a Pets Therapy custom desktop pet:
https://pets-therapy.com/ai-custom-pets.html

My pet: [attach a photo of your pet, or describe it, e.g. "a small round orange fox with a white-tipped tail"]
Pet id: biscuit

Follow the guide's file format exactly (50×50 frames facing right, the file names, the JSON and the ZIP), draw or generate the front, walk and drag animations, and give me the finished biscuit.zip to import into Pets Therapy.
If you can't open the link, tell me, and I'll paste the guide's prompts instead.
```

## Are Pets Therapy's own pets made with AI?

No. Every pet that ships with Pets Therapy, along with its animations, food and toys, is hand-drawn by our designers, pixel by pixel. AI can create art too, so we let users make their own custom pets with it. Those stay on the user's own computer and are never part of the built-in library.

## What files does a custom desktop pet need?

A ZIP containing one JSON file and PNG frames named `{id}_{animation}-{number}.png`:

- `front`: 2–6 frames facing the viewer (pet grid preview, idle).
- `walk`: 4–8 frames, side view, **facing right** (the app mirrors it when walking left). Required.
- `drag`: 1–4 frames of the pet dangling while carried. Required.
- `{id}.json`: id, speed, frame rate and behaviours.
- Optional: `sleep`, `eat`, `idle` (Relax), `love` (Cuddle) unlock right-click actions; `{id}_food-0.png` lets you feed the pet.

Most built-in pets use a 50 × 50 px canvas at 10 frames per second.

## Step 1: How do I turn a photo of my pet into pixel art?

Upload the photo to a chat-based AI image tool and ask for a chunky pixel-art sprite of that exact animal, in full-body side view facing right, on a solid magenta background. Stay in that one chat for every later step.

```text
Turn the animal in the attached photo into a cute pixel-art video game character.

Style: chunky retro pixel art like a 1990s handheld game, roughly 48×48 pixels for the whole body, 1-pixel dark outline, flat colours with a single shade, no anti-aliasing, no gradients, no blur.
Keep its real fur colours, markings, ear shape, eye colour and tail exactly as in the photo, so its owner instantly recognises it.
Pose: full body, side view, facing RIGHT, standing on all four feet.
Background: plain solid magenta (#FF00FF) filling the whole image. No shadow, no ground, no text, no border.
```

Ask for a solid magenta (#FF00FF) or green (#00FF00) background, not "transparent": many tools paint a fake checkerboard instead.

## Step 2: How do I get AI to make a walk-cycle sprite sheet?

In the same chat, ask for one horizontal row of 4–6 frames of "the same character", facing right, with empty space between frames and the same ground line in every frame.

Walk:

```text
Using exactly the same character, create a walk-cycle sprite sheet.

6 frames in a single horizontal row, evenly spaced, with clear empty background between frames.
Side view facing RIGHT in every frame. Same size, same proportions and same ground line in every frame; only the legs, tail and a 1-pixel body bob change, so the frames loop smoothly from the last back to the first.
Same pixel-art style: 1-pixel dark outline, flat colours, no anti-aliasing.
Plain solid magenta (#FF00FF) background. No shadows, no text, no frame numbers, no grid lines.
```

Front:

```text
Same character, now facing the viewer (front view), sitting.

Make a 4-frame idle animation in a single horizontal row with empty space between frames:
frame 1 neutral, frame 2 eyes closed (blink), frame 3 neutral, frame 4 tiny head tilt.
Identical size and position in every frame. Same pixel-art style and outline.
Plain solid magenta (#FF00FF) background. No shadows, no text.
```

Drag:

```text
Same character being lifted up by the scruff of its neck: front view, body hanging straight down, legs dangling, a slightly surprised face.

2 frames in a single horizontal row with empty space between them; in frame 2 the legs swing slightly to one side.
Same size and pixel-art style. Plain solid magenta (#FF00FF) background. No hand, no shadows, no text.
```

24 more character prompts and every animation prompt: https://pets-therapy.com/ai-pixel-art-pet-prompts.html

## Step 3: How do I turn the AI images into a finished pet?

Ask the same AI to package it. In a chat with code execution, or as a coding agent on your computer, it cuts the frames, removes the background, sizes and names every file, writes the JSON and zips it.

Packaging prompt (after Steps 1–2):

```text
Package the sprite sheets from this chat into a Pets Therapy custom pet. Use code, and give me a downloadable ZIP.

Pet id: biscuit (lowercase letters and numbers only, no spaces, no underscores).
Animations: front, walk and drag are required; also include sleep and eat if I made them.
For each sprite sheet: split it into its individual frames in left-to-right order, and remove the solid background colour.

Frame rules, for every animation:
- Fully transparent background; every pixel either fully opaque or fully transparent (no soft edges).
- All frames of one animation share the same crop box, so the pet doesn't jitter, and the feet touch the bottom edge.
- Scale with nearest-neighbour only (never smooth) onto a 50×50 px transparent canvas, bottom-centred.
- Walk, eat and sleep frames face RIGHT (the app mirrors them when the pet walks left).
- Save as PNG named {id}_{animation}-{n}.png, numbered from 0 with no gaps, e.g. biscuit_walk-0.png.

Then write biscuit.json exactly like this:
{
  "id": "biscuit",
  "movementPath": "walk",
  "dragPath": "drag",
  "fps": 10,
  "speed": 0.8,
  "scale": 1,
  "zIndex": 0,
  "tags": [],
  "capabilities": [
    "AnimatedSprite", "AnimationsProvider", "AnimationsScheduler", "AutoRespawn",
    "BounceOnLateralCollisions", "Draggable", "FlipHorizontallyWhenGoingLeft",
    "Gravity", "LinearMovement", "PetsSpritesProvider", "Rotating", "ShowsMenuOnRightClick"
  ],
  "animations": [
    { "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
  ]
}
If sleep or eat frames exist, add them to "animations" too:
{ "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
{ "id": "eat", "position": "fromEntityBottomLeft", "requiredLoops": 3 }

Put biscuit.json and every PNG in one folder named biscuit, zip it as biscuit.zip, and list the files inside so I can check them.
```

Or skip the image tool: a coding agent on your computer (Claude Code, Codex, Cursor…) or a chat AI with code execution can draw the whole pet in code from a description:

```text
Create a Pets Therapy custom desktop pet from this description:
"A small round orange fox with a fluffy white-tipped tail and big dark eyes."

Draw the pixel-art frames yourself in code (for example Python with Pillow): cute chunky retro pixel art, a 1-pixel dark outline, flat colours with a single shade, a limited palette, and the same character in every frame.
Animations to draw:
- front: 4 frames facing the viewer, sitting (neutral, blink, neutral, small head tilt)
- walk: 6 frames, side view facing RIGHT, a smooth looping walk cycle (only the legs and tail move, plus a 1-pixel body bob)
- drag: 2 frames of the pet held up by the scruff, legs dangling and swinging slightly
- sleep: 4 frames curled up, breathing by 1 pixel
- eat: 4 frames, head down to the ground, chewing

Pet id: biscuit (lowercase letters and numbers only, no spaces, no underscores).

Frame rules, for every animation:
- Fully transparent background; every pixel either fully opaque or fully transparent (no soft edges).
- All frames of one animation share the same crop box, so the pet doesn't jitter, and the feet touch the bottom edge.
- Scale with nearest-neighbour only (never smooth) onto a 50×50 px transparent canvas, bottom-centred.
- Walk, eat and sleep frames face RIGHT (the app mirrors them when the pet walks left).
- Save as PNG named {id}_{animation}-{n}.png, numbered from 0 with no gaps, e.g. biscuit_walk-0.png.

Then write biscuit.json exactly like this:
{
  "id": "biscuit",
  "movementPath": "walk",
  "dragPath": "drag",
  "fps": 10,
  "speed": 0.8,
  "scale": 1,
  "zIndex": 0,
  "tags": [],
  "capabilities": [
    "AnimatedSprite", "AnimationsProvider", "AnimationsScheduler", "AutoRespawn",
    "BounceOnLateralCollisions", "Draggable", "FlipHorizontallyWhenGoingLeft",
    "Gravity", "LinearMovement", "PetsSpritesProvider", "Rotating", "ShowsMenuOnRightClick"
  ],
  "animations": [
    { "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
  ]
}
If sleep or eat frames exist, add them to "animations" too:
{ "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
{ "id": "eat", "position": "fromEntityBottomLeft", "requiredLoops": 3 }

Write everything into a folder named biscuit, zip it as biscuit.zip, then show me a preview sheet of all frames enlarged 4× so I can check them.
```

Chat tools need code execution or file output switched on. Fix one thing at a time ("the walk frames face left, mirror them"). By hand, Aseprite or Piskel work too.

## Step 4: What goes in the pet's JSON file?

```json
{
  "id": "biscuit",
  "movementPath": "walk",
  "dragPath": "drag",
  "fps": 10,
  "speed": 0.8,
  "scale": 1,
  "zIndex": 0,
  "tags": [],
  "capabilities": [
    "AnimatedSprite",
    "AnimationsProvider",
    "AnimationsScheduler",
    "AutoRespawn",
    "BounceOnLateralCollisions",
    "Draggable",
    "FlipHorizontallyWhenGoingLeft",
    "Gravity",
    "LinearMovement",
    "PetsSpritesProvider",
    "Rotating",
    "ShowsMenuOnRightClick"
  ],
  "animations": [
    { "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 }
  ]
}
```

Required keys: id, movementPath, dragPath, fps, speed, zIndex, tags, capabilities, animations. The id is lowercase letters and numbers with no underscores.

## Step 5: How do I import a custom pet into Pets Therapy?

Zip the JSON and PNG files (at the top level or inside one folder), open Pets Therapy's About page and drop the ZIP on the "Create your own!" area. On Windows and Linux you can also click it to pick the file. The same ZIP works on every platform. An example pet to download: https://pets-therapy.com/assets/custom-pets/mypet-starter-kit.zip

## Why won't my custom pet import?

- "Missing required file: biscuit_walk" (or _drag): PNG names don't match the id + movementPath/dragPath in the JSON.
- "Missing required file: <species>.json": no JSON in the ZIP, or it's nested two folders deep.
- "Invalid species.json file": a JSON typo or a missing required key.
- "…already exists": a pet with that id is installed; delete it in the app first, or choose a new id.
- Walks backwards: frames face left; ask the AI to mirror the walk frames.

## Is this easier than making a custom Shimeji?

Yes. A Shimeji-ee character needs a complete set of 46 numbered images (shime1.png to shime46.png) and runs on Java. A Pets Therapy pet needs as few as three short animations, runs natively on Mac, Windows and Linux, and imports from one ZIP.

## FAQ

- **Can I turn a photo of my own pet into a desktop pet?** Yes, that is what this guide does.
- **Which AI tool works best?** Any tool that keeps a character consistent across images; chat-based tools (ChatGPT, Gemini, Copilot) are easiest. Expect to regenerate a frame or two.
- **Do custom pets cost anything?** No. Importing is free on macOS, Windows and Linux. Your AI tool may have its own limits or plans.
- **Can an AI make the whole pet from a description?** Yes. A local coding agent or a chat AI with code execution can draw the frames in code and write the finished ZIP; use the one-shot prompt in Step 3.
- **Does the same ZIP work on Mac and Windows?** Yes.
- **How do I update a pet?** Delete it from its details page in the app, then import the new ZIP.

Community and help: https://discord.gg/FFEZ3hrXWV
