A small tool to paint on adressable LED displays, rings and strips

Pixel Select is a small web utility for composing adressable LED patterns with per‑pixel editing, rotation, label overlay, and URL/localStorage state persistence.

Core flow: choose layout, dimensions and rotation, pick a color, click LEDs to paint.

Supports rings:

Supports matrices:

Toolbox in matrix display allows you to select any image, including SVG, and convert it to your matrix display, and rotate pixels to match your display.

Example:

All versions are stored in URL to share, like this: long URL here

Exports are available in few formats, including ESPHome adressable Lambda and WLED packets:

Example visuals created using this tool:

Links

Web page: pixel-select

Repository: web-utils/pixel-select at main · Ginden/web-utils · GitHub

6 Likes

This looks like a great tool. Could you clarify the process if I want to use this with WLED? Best I can tell that I create the strip, select WLED UPD, enter my WLED’s IP address, confirm RGB order, then hit generate. What is step(s) to get this into the WLED instance?

I looked at your readme file at github but that appears to not reference pixel-select.

Well, you need to execute this command in terminal. Node.js (no libraries required, any version of Node should work) or netcat (standard Linux utility) must be installed.

Note that any other process (eg. HyperHDR) writing to the same WLED receiver will overwrite it soon.

I can’t confirm it with WLED itself, my WLED controller got stuck in customs.

Though, it seems like I made a bug in implementation: bytes should be prepended with 2 to signal DRGB. I will have a look into it today.

EDIT: found a bug, pushed fix, always choose RGB (I think so).

Ok, I can’t get it to work. I execute the command but nothing changes in the WLED instance. Tried using GRB which is how the LEDs are set and RGB and neither worked. No error messages unfortunately.

I asked ChatGPT and it said that command produced a 616 byte message and WLED expects “445 bytes (10-byte header + 3 × 145 RGB LEDs)” I unfortunately am ignorant about this and don’t know what that means nor offer any suggestions to fix. I do have UDP Received checked in WLED settings.

I will just patiently wait until you have your WLED device to work with.

This is a great concept. I wish Govee would accept one of those output options. I HATE selecting the LEDs on a tiny phone screen for DIY scenes. It’s tedious as hell.

Can you post a link? Light data and settings are automatically saved in URL.

Note that it’s compatible with UDP Realtime protocol UDP Realtime / tpm2.net - WLED Project , not WLED UDP Sync.

tl;dr: It works now.

Longer story:

I found an old, forgotten ESP32-WROOM device (my board of choice is usually ESP32-C6), and flashed it with WLED, connected unused WS2812S LED strip and managed to get it to work.

tl;dr:

  • There are several UDP protocols, often on the same port.
  • WLED uses 2 different protocols grouped under single docs page
    • WARLS - standard protocol for live changes, it has 5 sub-modes, listens on UDP 21324
    • Hyperion protocol - listens on port 19446, just bytes RGBRGBRGBRGB

Now Pixel Select can do both:

1 Like

Looks cool. Could you support the WLED JSON API as an export format as well? I tend to just paste that into WLED as a new preset.

@michaelblight Hey, I added this option few days ago, but just today I’ve received WLED controller, and tested it (previous ESP-32 ad-hoc build got dismantled immediately after testing).