The PrintPal Desk Pal Maker is a free browser tool that designs the printable head of a Desk Pal: a tiny desk pet with a pair of big animated robot eyes on a round 1.28″ touch screen. A Desk Pal is all head — no body, legs or feet — so it sits low on the desk with the face right in front of you. Pick a cute cat, dog, bear, cow, robot or mochi head, recolor it, or describe any creature and let the AI generate a full-color 3D head. Place the 38.5 mm ESP32-S3 screen puck on the head, watch the eyes blink and react, then download a two-part snap-fit shell as a multi-color 3MF or print-ready STLs. The display cavity, 1.5 mm bezel, USB-C channel, connector recess and locating ring are all cut in for you — no CAD needed.
Every head is cut for the Waveshare ESP32-S3-Touch-LCD-1.28: a Φ38.5 mm puck with a 240×240 GC9A01 round display, capacitive touch, a QMI8658 IMU and a Li-ion charger. The tool keeps the screen opening at the real 32.4 mm viewing area behind a thin bezel.
Nine hand-built animal and robot heads with three recolorable zones, or generate a one-of-a-kind creature head from a text prompt as a full-color 3D model whose texture is reduced to 2–8 filament colors.
The head is split into a face shell that holds the puck and a back shell that presses onto its keyed locating ring and snap nubs (it only fits one way round). The face shell prints bezel-down with the cavity open upward, the back shell on its flat split face — no supports needed for most shapes.
The same eye renderer that runs on the device draws on the screen in the 3D preview: nine looks, moods like happy, sleepy, surprised and love, blinks, glances, pokes and shakes.
robot_face.ino, a ready TFT_eSPI_Setup.h and a platformio.ini. Arduino IDE: Espressif ESP32 core + TFT_eSPI; copy the defines into TFT_eSPI’s User_Setup.h (or pick Setup302 and add #define USE_HSPI_PORT). Board: ESP32S3 Dev Module, OPI PSRAM, 16 MB flash, USB CDC on boot. PlatformIO: cd firmware && pio run -t upload.USE_HSPI_PORT is missing. The browser image already has that set.| Feature | Size | Why |
|---|---|---|
| Face plate | Φ47 mm, rounded edge | Guarantees a flat, flush bezel on any head shape |
| Screen opening | Φ33.6 mm through a 1.5 mm bezel | Shows the full 32.4 mm viewing area with no tunnel |
| Puck cavity | Board silhouette + 0.1 / 0.2 / 0.3 mm (Tight / Snug / Loose), 5.15 mm deep | Traced from the Waveshare STEP: Φ38.5 round, 45° chamfers down to the frame’s flat bottom 19.3 mm below centre, then a drafted pocket for the glass tail and lip to 21.2 mm with an extra 0.3 mm on its sloped sides. Depth is exactly glass-to-PCB-back plus 0.15 mm |
| Grip ribs | 5 half-round ribs, Φ1.2 mm, crest 0.05 mm inside the frame outline | Top, both sides and both chamfers of the cavity wall. They take up the wall clearance so the frame sits without side play whatever fit you pick; tapered at the entrance |
| Rest pads | 6 pads on the back shell’s split face, 0.15 mm behind the PCB | Land on parts-free arcs of the PCB rim (from the STEP) and hold the screen flat against the bezel when the shells click together, so it cannot rock front-to-back |
| Locating ring | 1.6 mm wall, 4.5 mm tall, notched to the same silhouette | The board slides in from behind straight through the ring, so its opening matches the cavity instead of being a plain circle |
| USB-C slot | 13 mm wide, open at the split, runs to the bottom | The receptacle on the back of the PCB slides in from behind; the cable exits under the pal |
| Component pocket | Board outline inset 0.4 mm, 4.5 mm deep, in the back shell | Room for everything on the back of the PCB (buttons, FPC and battery connectors, USB-C) and the battery plug |
| Locating ring + nubs | 1.6 mm ring, 4.5 mm tall, 0.2 mm clearance | Self-centering press fit that clicks the two shells together |
| Alignment keys | 2 notches in the ring (3 mm) with matching teeth across the groove, 120° apart | The back shell only closes in one orientation and cannot rotate against the face shell. Two keys at 120° because a single key could still drop into the ring’s USB opening in a wrong position |
Yes. Presets, screen placement, eye preview and both exports are free and run in your browser. Generating a custom head with AI uses PrintPal AI credits or a Pro / Studio subscription, like our other AI generators.
The Waveshare ESP32-S3-Touch-LCD-1.28 (ESP32-S3R2, 16 MB flash, 2 MB PSRAM, GC9A01 240×240 round LCD, CST816S touch, QMI8658 IMU). Other 1.28″ round display boards with a Φ38–39 mm outline generally fit too, but the USB-C channel and firmware are made for this one.
Yes. Upload an STL, OBJ, GLB or a textured OBJ ZIP — ideally a head or bust with a flat bottom. The tool scales it to your chosen height, lets you spin it to face forward, and cuts the face plate and puck cavity wherever you place the screen. Textured models are reduced to your chosen number of filament colors for the 3MF.
Each triangle is tagged with a filament slot using the same painting scheme Bambu Studio and OrcaSlicer use for MMU painting, and the file carries a project profile with your palette, so the shells open with the right colors already assigned. You only map the filaments to your AMS slots.
Rarely. The face shell prints bezel-down with the cavity opening upward and the back shell sits on its flat split face, so most heads print support-free. Long ears or horns that stick out sideways may want tree supports.
Yes. Plug the Waveshare ESP32-S3 puck in with a data USB-C cable and click Flash to board in Chrome or Edge. We ship a precompiled image; your browser writes it over USB serial. Safari and iPhones cannot do this. The source ZIP is still there if you want to compile it yourself.
It is in the source ZIP linked in the tool: a single Arduino sketch that draws the eyes with a signed-distance renderer into a TFT_eSPI sprite, reads the touch controller and IMU, and keeps a per-device look in flash. Serial commands let you puppeteer the face from a computer.
Want a custom head?
Pick a preset and recolor it, or upload your own STL, OBJ or GLB and place the screen on it.
Design a Desk Pal headFlash firmware