A small pixel-art display for your desk: 64 x 64 RGB LEDs behind a 3D-printed shell, powered over USB-C, controlled from a browser. It plays animated pixel art from a microSD card and from Makapix Club, shows a clock, the weather and the room temperature, and takes live pixel streams from your computer. Open source, built from two off-the-shelf Waveshare boards, no soldering.
- Plays pixel art the way it was drawn. GIF, PNG/APNG, WebP and BMP, static or animated, with transparency. Small canvases are scaled up by whole numbers so pixels stay square; large ones are scaled down cleanly. Every frame is shown, none skipped.
- Looks right. 11-bit colour per channel at a 264 Hz refresh, gamma 2.2, seamless changes from one artwork to the next: no blank frame, no flicker, no brightness step. A "Photo" mode raises the refresh to 814 Hz for cameras.
- Runs on its own. Put files on a microSD card, or pair it with Makapix Club and it plays channels of community pixel art, refreshing its cache over Wi-Fi. Playsets group channels; a scheduler picks what plays when. Offline, it keeps playing what it has.
- Is a clock too. A time overlay on artworks, nine clock faces (digital, analogue, and seven themed ones: split-flap, nixie tubes, a landscape that follows the real sun, a word clock, an hourglass, an orrery and a seven-segment LED or VFD clock), weather from Open-Meteo, the room temperature from the board's own sensor, and a night schedule that dims or blanks the panel.
- Takes a live feed. Send pixels over UDP with DDP (LedFx, xLights, WLED tooling) or the raw p64 format; a bundled script mirrors any image, animation or a region of your screen to the panel.
- Is controlled from a browser. A mobile-friendly web UI on
http://p64.local(five colour themes, installable as a web app), a documented HTTP API with WebSocket push, an optional PIN. A tap on the shell skips to the next artwork; the IMU turns the picture upright whichever way you stand it. - Updates itself. Firmware updates come from GitHub Releases with a verified install and rollback. Nothing is downloaded or installed without you pressing the button.
![]() |
![]() |
![]() |
|---|---|---|
| The analogue clock face | Time overlay on an artwork | 128 mm square, for scale |
The web UI, on a phone:
![]() |
![]() |
![]() |
|---|---|---|
| Home: live preview, controls, channels | Playsets: your mixes and the built-ins | Settings: display, widgets, network, Makapix |
More photos:
![]() |
![]() |
![]() |
|---|---|---|
| First light, before the shell | The v1 shell, empty | The driver board behind the panel |
![]() |
![]() |
![]() |
| First artwork in the shell | In the hand | Lights off |
![]() |
![]() |
![]() |
| The weather widget | A mosaic artwork | On the desk |
The rest are in docs/images/photos/. There is also a 50-second
concept video of p64b rendered from the enclosure model (the shell as designed, the
mock-ups, an exploded view with a look inside the shell, the two knobs at work, the panel
playing animations and the widgets): the pipeline is in
docs/video/, the MP4 is regenerated with one command and is not
committed.
Three parts from Waveshare plug together, plus a print and a handful of screws. List prices on waveshare.com on 2026-09-21, before shipping:
| Part | What it is | Price |
|---|---|---|
| ESP32-S3-RGB-Matrix | The driver board: ESP32-S3 with 32 MB flash and 16 MB PSRAM, Wi-Fi, HUB75 header, two USB-C ports, IMU, real-time clock, temperature sensor, microSD slot. Ships with the power lead and screws. Wiki. | $24.99 |
| RGB-Matrix-P2-64x64-B | The panel: 4096 RGB LEDs at a 2 mm pitch, 128 x 128 mm, GOB version (a protective layer over the LEDs). The standard version without the layer is $28.99 and fits the same shell. Wiki. | $31.99 |
| PSU-27W-USB-C-B | A 5.1 V USB-C supply; any good 5 V 3 A USB-C supply works. US, EU and UK plugs. | $6.99 |
| The shell | One support-free 3D print, about 80 g of PLA or PETG on a 140 x 140 mm bed, or a print bureau, plus a 2 g insert. Files in enclosure/output/p64a/ or p64b/. The v1 shell in the photos was printed by JLC3DP in black PLA for $18.83, shipping included. |
$18.83 at a bureau, a few dollars of filament at home |
| Small parts | Six M3 x 10 screws, a USB-C cable; for the current shell version two small 90-degree USB-C adapters. A microSD card is optional. | a few dollars |
About $64 in electronics plus the print, so a little over $80 before the electronics' shipping. You also need a computer with a USB-C cable to flash the firmware the first time; after that the device updates itself over Wi-Fi.
p64 comes in two variants, both supported for good (decided 2026-09-22):
- p64a, solder-less: no rotary encoders. Two boards plug together, the power lead goes
into screw terminals, the shell is
enclosure/output/p64a/. - p64b, with soldering: two rotary encoder knobs on the back of the shell
(
enclosure/output/p64b/), wired to the board's GPIO socket as indocs/hardware/.
The firmware is the same; p64a simply has no knobs to read.
docs/build-your-own.md is the step-by-step guide. In short:
- Order the parts above and print
p64_enclosure_print.stlplus the smallp64_cradle_insert.stlfromenclosure/output/p64a/v7a/(no knobs, no soldering) orenclosure/output/p64b/v7b/(two knobs, soldered wiring); see the two variants above. - Install ESP-IDF v5.5, build the firmware from
firmware/and flash it over the board's USB port. - Plug the board onto the panel, connect the power lead, slide the panel into the shell and fit the six screws.
- Power it on. It opens a
p64-setupWi-Fi network; join it, pick your network in the portal, and openhttp://p64.localin a browser.
p64 is a working prototype. One device runs the firmware every day, and every feature in the specification is implemented and checked on it. What is not there yet, as of 2026-09-21:
- No firmware release yet. Building one today means compiling from source with ESP-IDF. A first GitHub release with a ready-to-flash image is planned; the updater is already in the firmware and waits for it.
- The shell in the photos is v1. The current design, v7, adds a window for the USB-C
cables (and, in p64b, mounts for the two knobs) and is not printed yet. v1 is proven,
archived under
enclosure/archive/pre-v7/, and needs a right-angle USB-C cable instead. - The two knobs work on the bench, not yet in a shell. Both are wired to the board's
GPIO socket on a breadboard and accepted (2026-10-01): one turns the brightness and
pauses, the other steps through the artworks and likes on Makapix Club. The permanent
harness and the p64b shell are still to come; the wiring projects are in
docs/hardware/. - Some acceptance measurements in the specification still need instruments.
| Path | What it is |
|---|---|
firmware/ |
The product firmware: ESP-IDF v5.5, C++20, on a patched esp-hub75 driver. Its README has the build, flash and test commands; firmware/docs/ has the architecture, the API and the progress log. |
enclosure/ |
The OpenSCAD shell (one source, two variant files), with ready-to-print STL/3MF and renders under enclosure/output/p64a/ and p64b/. Its README has the design rationale and the print settings; the earlier versions are under enclosure/archive/pre-v7/. |
docs/spec/p64-spec.md, CONTEXT.md, docs/adr/ |
What the device does (the specification), the vocabulary, and the decisions that are hard to reverse. |
docs/build-your-own.md, docs/images/ |
The build guide, the photos (photos/) and the web UI screenshots. |
docs/hardware/ |
Wiring projects for the two rotary encoders, with schematics. |
firmware/reference/hardware-tests/ |
The test firmware that brought up the board and panel; the technical reference for what the hardware taught (pin map, driver patch, frame pacing, DMA). |
prompt/ |
The task prompt of each development session, in order. |
p64 is a sibling of p3a, the same author's ESP32-P4
pixel-art player, and a "player" for Makapix Club, a community
site for pixel art whose server is open source too.
The firmware, the shell and the documentation were developed with Claude Code, session by
session; the prompts are committed under prompt/, and every hardware finding was
verified on the device.
Licensed under the Apache License 2.0. Bundled fonts are VEXED's Capital Hill, Everyday Slight, Standard, Typical and Ample, and High Birth (CC BY 4.0); the LED driver is esp-hub75 with a local patch, the GIF decoder is bitbank2's AnimatedGIF, and libpng and libwebp decode the rest.
















