Pets Therapy Desktop Pets

Make Your Own Pet with AI

Turn your real cat, dog or hamster into a desktop pet

A photo, an AI image tool and about half an hour. This guide gives you every prompt to copy, including one that makes the AI package the finished pet, and an example pet to copy from.

How do I turn my pet into a desktop pet with AI?

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, and import it into Pets Therapy (About β†’ Create your own!).

  • Fastest way: give your AI this page's link plus a photo or description, and ask for the finished ZIP.
  • You need: any AI image tool (ChatGPT, Gemini, Midjourney, Stable Diffusion…) and Pets Therapy on Mac, Windows or Linux.
  • You make: three tiny animations: front, walk and drag. Sleep, eat and food are optional extras.
  • Your AI does the fiddly part too: one prompt has it cut the frames, remove the background, name every file, write the JSON and zip it. A coding agent on your computer can even draw the whole pet from a description.
  • You import one ZIP from the app's About page. The same ZIP works on every platform.
  • Free: custom pets cost nothing, on any platform.
  • Our own pets are hand-drawn: every built-in pet is drawn by our designers, not by AI. AI is only for the pets you make.

More and more people are using AI to bring their own animals onto their desktops: the family dog trotting along the Dock, a much-missed cat napping on top of a browser window. The AI part is easy. The hard part is getting AI images into the exact shape a desktop pet needs. This guide covers both.

✏️ Our pets are hand-drawn. Yours can be anything.

Every pet that ships with Pets Therapy is hand-drawn by our designers, pixel by pixel. None of them are made by AI. But AI can create art too, so we're opening the door for you to make your own: your dog, your cat, your office mascot. Your custom pets stay on your computer and never become part of our library.

πŸ“¦ Download an example pet

A complete, working pet (mypet): the JSON plus every frame, named and sized correctly. Unzip it to see exactly what yours should look like, or use it as a template.

Download example pet

Can I just give my AI this page?

Yes, and it's the fastest way. Paste this page's link into an AI that can open websites, together with a photo or description of your pet, and it can follow the guide and hand you the finished ZIP.

Fastest way: give your AI this page
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.

This works with chat AIs that can browse the web and run code, and with coding agents on your computer (Claude Code, Codex, Cursor…). If your AI can't open links, or the result isn't right, follow the steps below. Each one has its own prompt, so you can check and fix as you go.

What files does a custom desktop pet need?

A pet is a folder of small PNG frames plus one JSON file, zipped together. Every frame is named {id}_{animation}-{number}.png. Here is the smallest pet the app will accept, for a pet with the id biscuit:

Front pose example

front

2–6 frames facing you. Shown in the pet grid and when your pet stops to look at you.

biscuit_front-0.png …
Walk cycle example

walk

4–8 frames, side view, facing right. The app mirrors it when walking left.

biscuit_walk-0.png …
Drag pose example

drag

1–4 frames of the pet dangling. Shown while you carry it around with the mouse.

biscuit_drag-0.png …
{ }

biscuit.json

Name, speed, frame rate and behaviours. Your AI writes it for you.

biscuit.json

Frames are small: most built-in pets use a 50 Γ— 50 px canvas played at 10 frames per second. You don't need to draw at that size. Generate big, and the packaging prompt has the AI shrink it without blurring.

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.

Start a new chat in your image tool and stay in it for everything that follows. Consistency is the hardest thing for AI here, and keeping one conversation (with the first image as the reference) helps more than anything else.

Option A: from a photo of your real pet

Attach a clear, well-lit photo where the whole body is visible, then paste:

Character from a photo
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.

Option B: from an idea

Character from a description
Design a cute pixel-art video game character: a small round orange fox with a fluffy white-tipped tail and big dark eyes.

Style: chunky retro pixel art, roughly 48Γ—48 pixels for the whole body, 1-pixel dark outline, flat colours with a single shade, no anti-aliasing, no gradients.
Pose: full body, side view, facing RIGHT, standing.
Background: plain solid magenta (#FF00FF) filling the whole image. No shadow, no ground, no text.

Iterate until you love it ("make the ears bigger", "fewer colours", "more like the photo"). This image is your reference, and every later prompt says "the same character".

πŸ’‘ Why magenta and not "transparent"?

  • Ask most AI tools for a transparent background and they paint a grey checkerboard into the picture. It looks transparent but isn't.
  • A solid colour that appears nowhere on your pet is trivial to remove. Magenta #FF00FF is the classic choice; use bright green #00FF00 for a pink or purple pet.
  • If your tool really does export transparent PNGs, that's even better: tell the AI there's no background to remove.

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.

Ask for each animation as a sprite sheet: one horizontal row of frames with empty space between them. That gap is what lets the AI cut the frames apart cleanly in Step 3.

Walk (required)

Walk cycle
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 (required)

Front-facing idle
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 (required)

Being carried
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.

Extras (optional, but your pet gets more to do)

These unlock right-click actions in the app: Sleep, Eat, Relax (idle) and Cuddle (love). A food item lets you feed your pet from the Pets Interactions window. Your pet also plays these now and then on its own.

Sleep
Same character curled up asleep on the ground, side view facing right.
4 frames in a single horizontal row with empty space between them: the body gently rises and falls by 1 pixel (breathing), and a small "z" floats above its head in frames 3 and 4.
Same size and pixel-art style. Plain solid magenta (#FF00FF) background. No shadows, no text other than the "z".
Eat
Same character eating, side view facing RIGHT, head lowered to the ground.
4 frames in a single horizontal row with empty space between them: head down, chewing, head slightly up, chewing again.
Same size, same ground line and pixel-art style. Plain solid magenta (#FF00FF) background. No bowl, no shadows, no text.
Food item
A single small pixel-art food item this character would love (for example a fish, a bone, a carrot or a seed), drawn in the same pixel-art style with the same outline.
It should be tiny, about a third of the character's height, and wider than it is tall.
Centred on a plain solid magenta (#FF00FF) background. No plate, no shadow, no text.

Tips per tool

πŸ’¬ Chat-based (ChatGPT, Gemini, Copilot…)

The easiest route. Keep everything in one chat, refer back to "the character from the first image", and ask for single fixes: "same image, but frame 4's back leg is wrong".

🎨 Midjourney

Use its character/image reference feature with your Step 1 image, and a wide aspect ratio for rows (e.g. --ar 3:1). It tends to add soft shading, so add "flat colours, no gradients".

πŸ–₯️ Stable Diffusion (local)

A pixel-art LoRA plus a pose ControlNet gives the most consistent walk cycles. Generate frames one at a time from fixed poses and hand them to the AI as separate files in Step 3.

πŸ’‘ When the AI won't stay consistent

  • Fewer frames is fine. A 4-frame walk looks great at desktop size. Even 2 frames work.
  • Generate extra and pick. Ask for 8 frames, then delete the odd ones before importing.
  • Fix one frame at a time. Ask for "only frame 3 again, matching frames 2 and 4". Single-frame images work fine in Step 3.
  • Re-anchor. If the character drifts, re-attach the Step 1 image and say "match this exactly".
  • No AI is perfect. A minute of touch-up in Piskel (free, in the browser) or Aseprite makes a big difference.

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

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

Packaging prompt (after Steps 1–2)
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: let a coding agent draw the whole pet

Coding agents that run on your computer (Claude Code, Codex, Cursor and others), and chat AIs with code execution, can draw the pixel art in code straight from a description and write the finished ZIP. Change the description and paste:

One-shot prompt: description β†’ finished pet
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.

πŸ’‘ Getting a clean result

  • Chat tools need code execution or file output switched on, or they can't hand you a ZIP.
  • A local coding agent writes the files straight into a folder you choose, ready to import.
  • Fix one thing at a time: "the walk frames face left, mirror them", "frame 3 floats, align the feet to the bottom edge". The troubleshooting table lists what to look for.
  • Prefer doing it by hand? Aseprite (File β†’ Export Sprite Sheet, output biscuit_walk-{frame}.png) or Piskel work too.

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

The pet's id, which animations to use for walking and dragging, its speed and frame rate, and a standard list of behaviours. The packaging prompt has the AI write it for you.

The AI's ZIP already contains this file. If you made the frames by hand, save this as biscuit.json (with your own id in both places). It imports as-is:

biscuit.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 }
  ]
}
FieldWhat it doesGood values
idUnique name, and the prefix of every PNG. Lowercase letters and numbers only; no underscores (they separate the id from the animation name).biscuit, mrwhiskers
movementPathAnimation used while walking. Frames must exist.walk
dragPathAnimation used while you carry the pet. Frames must exist.drag
fpsFrames per second for all animations.8–12 (max 20)
speedWalking speed.0.5 (slow) – 1.2 (zoomy)
scaleSize multiplier on screen (optional).1 – 1.5
tags, zIndexRequired by the app; leave them as shown.[], 0
capabilitiesBehaviours: gravity, dragging, flipping, the right-click menu… Add RandomPlatformJumper to let it hop onto windows.The list above
animationsExtra animations the pet plays on its own every now and then, with how many times each one loops.See below

If you generated sleep, eat, idle or love frames, add them to animations so your pet also plays them on its own:

"animations": [
  { "id": "front", "position": "fromEntityBottomLeft", "requiredLoops": 5 },
  { "id": "sleep", "position": "fromEntityBottomLeft", "requiredLoops": 10 },
  { "id": "eat",   "position": "fromEntityBottomLeft", "requiredLoops": 3 }
]

Or let an AI write it

JSON helper prompt
Write a Pets Therapy species JSON file for my custom desktop pet. Rules:
- Output only valid JSON, no comments.
- Required keys: id, movementPath, dragPath, fps, speed, zIndex, tags, capabilities, animations. Optional: scale.
- id: "biscuit" (lowercase, no underscores). movementPath: "walk". dragPath: "drag". zIndex: 0. tags: [].
- fps: 10. speed: 0.8 (it's a calm pet). scale: 1.
- capabilities exactly: AnimatedSprite, AnimationsProvider, AnimationsScheduler, AutoRespawn, BounceOnLateralCollisions, Draggable, FlipHorizontallyWhenGoingLeft, Gravity, LinearMovement, PetsSpritesProvider, Rotating, ShowsMenuOnRightClick.
- animations: an array of { "id", "position": "fromEntityBottomLeft", "requiredLoops" } for: front (5 loops) and these extras I have frames for: sleep (10 loops), eat (3 loops).
Then list the PNG file names I need, using the pattern {id}_{animation}-{number}.png.

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

Zip the JSON and PNG files together, open Pets Therapy's About page and drop the ZIP on the "Create your own!" area. It's the same on Mac, Windows and Linux.

Your folder should look like this, with every file at the top level or inside one folder:

biscuit/
β”œβ”€β”€ biscuit.json
β”œβ”€β”€ biscuit_front-0.png … biscuit_front-3.png
β”œβ”€β”€ biscuit_walk-0.png  … biscuit_walk-5.png
β”œβ”€β”€ biscuit_drag-0.png    biscuit_drag-1.png
β”œβ”€β”€ biscuit_sleep-0.png … (optional)
└── biscuit_food-0.png    (optional)

Zip it: on macOS, right-click the folder β†’ Compress. On Windows, right-click β†’ Send to β†’ Compressed (zipped) folder (or Compress to ZIP file on Windows 11). The AI's download is already a ZIP, so skip this if you used it.

🍎 macOS

Supported
  1. Open Pets Therapy.
  2. Go to the About page.
  3. Drag your ZIP onto the dashed "Drag and drop your zip file here" area under Create your own!
  4. Find your pet in the list and add it to your screen.

πŸͺŸ Windows & 🐧 Linux

Supported
  1. Open Pets Therapy (Manage Pets).
  2. Go to the About page.
  3. Drag your ZIP onto the Create your own! drop area, or click it to pick the file.
  4. Find your pet in the list and add it to your screen.

What else can a custom pet do?

  • Give it a nickname: on macOS, open the pet's details and rename it.
  • Feed it: with an eat animation and a {id}_food-0.png, your pet appears in the Pets Interactions window like the built-in ones.
  • Too small or too big? Change scale in the JSON (or ask the AI to change it), or use the pet size slider in the app.
  • Changed something? Delete the pet from its details page in the app, then import the new ZIP.

Why won't my custom pet import?

Almost always a file name that doesn't match the id in the JSON, or a missing walk or drag frame. Each error message the app shows is listed below.

You seeWhyFix
"Missing required file: biscuit_walk" (or _drag)The PNG names don't match the id + movementPath/dragPath in the JSON.Rename the files to {id}_walk-0.png… exactly. Names are case-sensitive.
"Missing required file: <species>.json"No JSON in the ZIP, or it's nested two folders deep.Put the JSON next to the PNGs, either at the top level or in one folder.
"Invalid species.json file"A typo (trailing comma, missing quote) or a missing required key.Start from the template above and paste it into any JSON validator.
"…already exists"A pet with that id is already installed.Delete the old one in the app, or pick a new id (and rename the PNGs).
Pet walks backwards (moonwalks)Walk frames face left.Ask the AI to mirror the walk frames. Pets must face right.
Pet jitters or bounces up and downFrames weren't aligned on one ground line.Ask the AI to crop all frames of the animation to one shared box with the feet on the bottom edge.
Pink or green halo around the petSoft edge pixels left after removing the background.Ask the AI to make every pixel fully opaque or fully transparent.
Pet looks blurryFrames were resized with smoothing.Ask the AI to rescale with nearest-neighbour only. Never use a photo editor's default resize.
Pet floats above windowsEmpty space below the feet in the frames.Ask the AI to crop the frames so the feet touch the bottom edge.
Pet is blank in the gridNo front frames.Add {id}_front-0.png (even a single frame).

Where can I find more prompts?

The AI pixel-art pet prompt library has 24 ready-made character prompts (dogs, cats, rabbits, horses, reptiles from a photo; corgis, red pandas, dragons, slimes, mascots and more from a description) plus every animation prompt, including Relax and Cuddle.

Is this easier than making a custom Shimeji?

Yes. A Shimeji-ee character needs a complete set of 46 numbered images; a Pets Therapy pet needs as few as three short animations, imported from one ZIP.

Custom Shimeji (Shimeji-ee)Custom Pets Therapy pet
Images neededA full set: shime1.png … shime46.png, every pose3 animations minimum (front, walk, drag)
File namingNumbered slots you have to map to posesNamed by animation: biscuit_walk-0.png
InstallCopy an image folder into the program, Java requiredDrop one ZIP on the About page
PlatformsWindows; Mac needs workaroundsNative on Mac, Windows and Linux
AI-friendly toolingNone built inCopy-paste prompts that make the AI build the whole pet

Coming from Shimeji? See Shimeji alternatives and Shimeji on Mac.

FAQ

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 you make your own custom pets with it. They stay on your computer and are never part of the built-in library.

Can I turn a photo of my own pet into a desktop pet?

Yes, that's exactly what this guide is for. Use Option A in Step 1 with a clear photo, then follow Steps 2–5.

Which AI tool works best?

Any tool that can keep a character consistent across several images. Chat-based ones are the easiest because you can keep refining in one conversation. Expect to regenerate a frame or two, whatever you use.

Do custom pets cost anything?

No. Importing custom pets is free on macOS, Windows and Linux. Your AI tool may have its own limits or plans.

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

Yes, if your AI can open websites. Use the fastest-way prompt: the link plus a photo or description of your pet. If it can't open links, use the step-by-step prompts instead.

Can an AI make the whole pet from a description?

Yes. A coding agent on your computer, or a chat AI with code execution, can draw the frames in code and write the finished ZIP. Use the one-shot prompt.

Does the same ZIP work on Mac and Windows?

Yes. The format is identical everywhere, so you can send your pet to friends on any platform.

Is it easier than making a custom Shimeji?

Yes. Shimeji-ee needs all 46 numbered images; Pets Therapy needs as few as three animations and imports from one ZIP. See the comparison.

How do I update a pet I already imported?

Delete it from its details page in the app, then import the new ZIP. The app won't import a second pet with the same id.

Show us your pet!

We'd love to see what you make. Share it on our Discord, where people also swap ZIPs and help each other fix tricky frames. For the full format reference (capabilities, animation sizes and more), see Custom Pets.

Get Pets Therapy

Mac App Store