Pets Mac App Prompts
Note: Don't want to prompt anything? Get the automatic version → besstfriend.com. Upload a photo of your real pet and get your own animated pixel pet living on your Mac desktop, done for you. The prompts below are the full DIY build if you'd rather make it yourself.
Note: Give your AI a few photos of your real pet and get an animated pixel version of her living on your Mac desktop — always on top, walking around, reacting when you click her. This is the full build, phase by phase, for a version you run yourself. Paste it into Claude Code (or any coding agent) and go.
Build me a desktop pet on my Mac, made from photos of my real pet.
I give it a few photos of my dog. It generates a pixel-art sprite of *her*,
animated across a handful of states, and that sprite lives on my desktop —
always on top, walks around, reacts when I click it. One user: me, on this
laptop.
Go phase by phase. At the end of each, show me it working, tell me how to run
it, and wait for my go before the next.
PHASE 0 — Decisions.
Ask me only what you can't assume, then write answers to docs/decisions.md:
image model + do I have a key, pixel dimensions for the sprite, which
animation states to build. Recommend a default for each in one line. Stop.
PHASE 1 — One good sprite from real photos.
No app yet — a script. Photos in, one pixel-art side-view of my pet out,
transparent background, on disk. Get the prompt right before anything else:
the entire product is whether I look at it and see MY dog. Run it on my real
photos and show me. Iterate the prompt with me until it's her. Everything
downstream is worthless if this phase is mediocre. Stop.
PHASE 2 — Freeze the prompts, generate the states.
Now extend to a set of states — idle, walk, wave, celebrate, sleep, whatever
we picked. Each state is a strip of frames, generated seeded from the Phase 1
sprite so it stays the same animal across all of them. Slice strips into a
spritesheet with a documented grid (fixed cell size, fixed frame count per
row) and write a pet.json manifest describing it. Once a prompt produces a
good result, FREEZE it in a file and stop editing it — drift between states is
the failure mode here, and every regeneration costs money. Stop.
PHASE 3 — Make failure cheap.
These calls are slow, paid, and flaky. Retry transient failures
(429/timeout/5xx) with backoff, capped; fail fast on bad key, malformed
request, or content rejection. Log every attempt with duration and cost. Write
each finished frame to disk immediately. Keep the source photos so a failed
run resumes instead of restarting. Test the retry decision logic specifically
— that's where a bug bills me. Stop.
PHASE 4 — Put her on the desktop.
Electron. A transparent, frameless, always-on-top window with no shadow,
click-through everywhere except the pet's pixels. She idles, walks across the
screen, stays on top of my dock and windows, survives me changing displays or
resolutions. Menu bar icon to quit and resize her. Load the spritesheet from
Phase 2 — the app should know nothing about generation. Stop.
Getting this right on macOS is fiddly: window level vs. fullscreen apps, mouse
events the compositor drops, the pet drifting off-screen after a display
change. Expect to fight it. Tell me what fought back.
PHASE 5 — Make her alive.
Idle should be MOSTLY STILL — a blink every 6–10 seconds, occasional small
motion. Constant animation reads as a screensaver and gets annoying by lunch.
Click → she reacts. Drag → she follows and stays where I drop her. Pixel
speech bubbles for anything she says. No sound. Stop.
PHASE 6 — Give her a job.
One thing that earns her screen space: a focus timer, a stretch nudge, a water
reminder. She reacts when it fires. Pick one and do it well. Stop.
PHASE 7 — Live in it.
Launch at login, remember her position and size across restarts, one command
from clean clone to running app. README: how to run, where the key lives, how
to regenerate a pet, what to check first when it breaks.
THROUGHOUT:
- Run it before you call it done. Screenshots of the actual desktop, not
"tests pass."
- Tell me when output is bad — a sprite that doesn't look like my dog, a state
that came out wrong.
- Key in .env, never in the repo. Photos go to the image model and nowhere
else.
- Commit per phase.
- Look at github.com/alvinunreal/openpets (MIT) before building Phase 4 from
scratch. It's a working desktop-pet engine — sprite rendering, window
behavior, plugins, all solved. Forking it and pointing it at my generated
spritesheet may be most of the app. Evaluate it and tell me whether to fork
or build, with a reason.
Why it's ordered this way
Phase 1 is the whole product. If the sprite isn't recognizably your pet, nothing downstream saves it. Spend your patience here, not on the app.
The frozen-prompt rule in Phase 2 is what stops your pet from turning into a slightly different animal in every state. Once a prompt works, it's done being edited.
The OpenPets pointer at the end can collapse Phase 4 from a week of macOS window-manager pain into an afternoon. Let the AI make the call, but make it look first.
Get the next guide when it's ready.
No emails yet. Your address stays private.