[APP][Pro] Divoom Pixoo64

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 :

Divoom Pixoo64 | Homey

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

  1. Homey app → Devices → Add device → Pixoo64

  2. Use Auto-detect (cloud API finds devices on the same network) or enter the IP manually

  3. 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:

  1. Hold display
  2. → Fill screen (black)
  3. → Draw image at (album art, 0,0, 48×48)
  4. → Draw text at (artist, x=0, y=50, font=2, textId=2)
  5. → Draw text at (title, x=0, y=57, font=2, textId=3)
  6. → Release display

Complex scene with text & icons:

  1. Hold display
  2. → Fill screen (black)
  3. → Draw image (png)
  4. → Draw pixel texts
  5. → Draw LaMetric icons / or Gifs
  6. → 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.

2 Likes

Nice! Looking forward to it. The other Divoom app doesn’t seem to be stable and I couldn’t get it to display text correctly.

The old app works fine here.

Only using the deviceclass=light for Pixoo64 is bad, because it’s turned off every time I use the Homey flow card for “all lights off” :frowning:

I’ll check if moving it to the Video category doesn’t trigger any issue.
I’m working on a few new features to make building dashboards simpler, obviously it won’t be needed for everyone (and I’m not sure I’ll have feature parity with the legacy app), but it should for some people :slight_smile:

Changing an app’s category doesn’t change anything about the app itself, it’s just part of the App Store metadata which is being used to display the apps in the Homey App Store.

Sorry, I’ve meant Device Class

I hope to release the test version this week.
Here are some new screenshots as examples of what you can do :

If you have any needs that’s the time :slight_smile:
More information about current features in the first post.

2 Likes

AIO from my computer broke while I was working on the metadata for submission, it will be done next week unfortunately, but I had time to work on a new pixel font with dynamic width (so most characters are 3 pixels wide to optimize space, but some like the W are wider to actually look like a W).

2 Likes

First test version is now live for test.
You don’t have to uninstall the “legacy” app to test this one and its features.

Divoom Pixoo64 | Homey

Check the first post here to get an overview of how things works.
Don’t hesitate to share any issue or question :slight_smile: