New app to support the Divoom Pixoo 64 with a focus on stability and ongoing maintenance. An older community app exists but hasn’t been updated in a while and may be unreliable depending on your setup.
Test Version here :
The Pixoo 64 is a 10.3” Wi-Fi pixel art display featuring a 64×64 LED matrix. It’s commonly used to showcase pixel art, act as a pixel clock, or display live information (social media counters, gaming stats, etc.). My main use case is displaying album artwork from my Apple audio ecosystem using Apple TV & HomePod | Homey.
Pairing
-
Homey app → Devices → Add device → Pixoo64
-
Use Auto-detect (cloud API finds devices on the same network) or enter the IP manually
-
Find the IP in the Divoom app: Device → Settings → IP address
Tip: Set a static DHCP reservation in your router so the IP never changes.
Core concept: two rendering systems
The app exposes two independent rendering systems that live side-by-side on the display. Understanding the difference is key to building reliable flows.
1 — Canvas (buffer-based)
The app maintains a 64×64 RGB canvas in memory for each device. Drawing operations (`Fill`, `Draw rect`, `Draw image`, `Draw pixel text`, `Draw LaMetric icon`) paint pixels onto this canvas. The canvas is sent to the device as an animated GIF via the `Draw/SendHttpGif` firmware command.
Managed by Homey app (RAM + disk cache)
Compositing : Layers stack — each draw adds on top
Animated sprites : Multiple GIF sources merged into one animation
Screenshot : Full capture possible
Font rendering : PixelFont library (Tiny + 7 PNG fonts)
Persistence : Saved to `/userdata/` — survives app restarts
Caveats:
- Every canvas send triggers a full GIF upload. The Pixoo firmware can only receive one frame at a time, so animation frames are sent sequentially — large or fast animations take longer to push.
- Animated GIFs are capped at 12 frames to avoid oversized payloads.
- Multiple animated sprites (different GIFs on the same screen) are merged into a single animation whose length is the LCM of the individual frame counts.
2 — Firmware overlays (text-based)
Text placed with Draw text at or Display text uses `Draw/SendHttpText`, a separate firmware command. These overlays are rendered by the Pixoo firmware on top of the canvas GIF, independently of it.
Managed by Pixoo firmware
Fonts available : Firmware fonts 0–7 (selected by number)
Supports scrolling : Yes (`Display text`)
Captured by screenshot : No
Survives canvas sends : Automatically re-applied (see below)
Caveats:
- `Draw/SendHttpGif` internally calls `Channel/SetIndex`, which wipes all firmware text overlays. The app works around this with an internal registry: every `Draw text at` call is stored, and after each canvas send the texts are automatically re-applied. You do not need to manage this manually.
- Up to 19 independent text slots (IDs 2–20). Each ID is an independent overlay; writing to the same ID replaces it.
- `Display text` (scrolling) uses a different mechanism - it clears the registry and takes over the display. Do not mix `Display text` with `Draw text at` in the same scene.
- Firmware built-in widgets — Scoreboard, Timer - are also firmware-side and share the same limitations: they are not captured by screenshots and are cleared when the canvas is next sent.
Flow cards reference
Device control
- Set channel: Switch to a built-in channel: 0=Clock, 1=Cloud, 2=Visualizer, 3=Custom, 4=Black
- Sync time: Push the current time to the device’s internal clock
- Play buzzer: Sound the built-in buzzer for N seconds
- Screen on/off: Toggle via the device tile or an on/off flow card
Canvas (buffer) operations
- Fill screen: Flood-fills the canvas with a solid colour. Previous content is replaced.
- Draw rect: Paints a filled rectangle with opacity (0–100 %). |
- Draw image at: Downloads a URL (PNG/GIF), resizes to W×H, composites at (X,Y).
- Display Apple cover: Same as Draw image at, but auto-switches Apple CDN URLs from .jpg to .png.
- Draw LaMetric icon: Fetches an icon from the LaMetric library by ID. `Frame=0` uses all frames (animated). Zoom 1–8 scales the 8×8 native size. LaMetric: Web (as allowed by the terms of use)
- Draw pixel text: Renders text onto the canvas using a pixel font. See Font section below.
- Display image: Sends a full-screen image, replacing the canvas entirely (no compositing).
Firmware overlay operations
- Draw text at: Places static text at pixel coordinates using a firmware font (0–7). Use a unique Text ID per label.
- Display text: Scrolling text — takes over the display, clears all Draw text at overlays.
- Clear text overlays: Removes all `Draw text at` labels from device and registry.
- Show scoreboard: Firmware scoreboard widget (red/blue scores).
- Start / Stop timer: Firmware countdown timer.
Batching
- Hold display: Suspends all canvas sends. Draw operations still update the local canvas.
- Release display: Flushes everything accumulated since Hold as a single send. Use this to avoid the display updating progressively when building a complex scene.
Screenshots
- Take screenshot: Saves the current canvas (with sprites at frame 0) to a numbered slot. Firmware text overlays are not captured.
- Display screenshot: Restores a saved slot to the canvas and pushes it to the device.
Pixel fonts
`Draw pixel text` uses the built-in PixelFont renderer, text is painted directly onto the canvas buffer.
- Tiny: 3×5 px, uppercase only
- Other Fonts: 9 px tall, preserve case (a–z and A–Z both present). Accented characters are automatically stripped to their base form (é>e, ç>c, etc.). Some punctuations will be missing.
Typical flow patterns
Static scene with text:
- Hold display
- → Fill screen (black)
- → Draw image at (album art, 0,0, 48×48)
- → Draw text at (artist, x=0, y=50, font=2, textId=2)
- → Draw text at (title, x=0, y=57, font=2, textId=3)
- → Release display
Complex scene with text & icons:
- Hold display
- → Fill screen (black)
- → Draw image (png)
- → Draw pixel texts
- → Draw LaMetric icons / or Gifs
- → Release display
Samples
Warning (again)
The more elements you try to push in parallel the higher the risk of crash (app will auto restart after a few secondes). Same with GIFs usage or pushing very large PNG. Homey has strict control on ram usage and the Pixoo is itself not very flexible which in turn could cause reboot. Can’t do much about it.
Note
This app is partially vibe-coded. If that’s an issue for you (code quality/process/compliance expectations), please don’t use it.


