Chris Collins

Tools · electronics

LED strip and pixel planner

Lay out LED strips, frames, rings and matrix panels in millimetres, watch patterns run on them, and get the current, supply, voltage drop and power injection points, feeder wire and fuses, data outputs and frame rate — then export a WLED ledmap and segments, ESPHome YAML, a FastLED XY map and a bill of materials.

Added

How to use it

I kept doing the same sums for every LED build — how many pixels, how big a supply, where the far end goes yellow, which pin on the ESP32 — and then typing the same map by hand into WLED. This puts the drawing and the sums in one place.

How to use it

  1. Add shapes: a straight run (two ends), a rectangle around a frame (pick the corner the data enters and the direction), a matrix panel (columns × rows, pitch, first-LED corner, serpentine or progressive, in rows or columns), a ring (radius and LED count), or a polyline (points in mm). Pixel count follows from the length and the LEDs per metre unless you type one. Drag a shape on the drawing to move it.

  2. Give each shape a data output. Shapes on the same output are chained in list order (↑ ↓ to reorder); Data enters at the other end reverses one. The coloured arrow marks each data input, and hovering a pixel shows its global index — the order WLED and FastLED see.

  3. Under LEDs, power and controller choose the LED type and density, the brightness cap you will actually set, and how much of full white your content averages.

  4. Play a pattern on the layout (rainbow across the layout or along the data, chase, fire, solid, or index order to check the wiring), and tick indices to label the pixels.

The LED types and the figures it uses (per pixel at full white; override the mA if you have measured yours):

Type Full white Notes

WS2812B, 5 V

60 mA

≈20 mA per colour, ≈1 mA idle

SK6812 RGBW, 5 V

80 mA

R+G+B+W all on; white channel alone ≈20 mA

WS2815, 12 V

15 mA

colours share one 12 V path; backup data line

APA102 / SK9822, 5 V

60 mA

clock + data, timing-free

WS2811, 12 V

60 mA per IC

one IC per 3 LEDs, so 60 LEDs/m = 20 pixels/m

Plain white 12 V / 24 V

20 mA per segment

3 (12 V) or 6 (24 V) LEDs per cut

Plain RGB 12 V (5050)

60 mA per segment

whole strip one colour, PWM per channel

Power & injection gives the worst case (full white at your brightness cap), the typical figure, and a supply with your headroom from standard sizes (over 70 A it splits it across supplies). Each strip’s far-end drop if fed only at the start is R′·i·L², with R′ the resistance per metre of one rail (0.04 Ω/m by default — 0.03–0.06 is typical for 10 mm strips; measure yours) and i the amps per metre. When that is over your allowed drop it places the fewest feeds that keep every point within it — one at the data input, the rest evenly spaced, the middle between two feeds sagging R′·i·s²/4 — and draws them as ⚡ on the layout. Each feeder gets a wire gauge (for your feeder length and drop, within a cautious free-air rating) and a fuse (the next size above 1.25× its current). Check bundles and enclosures in the wire gauge and ampacity table and long runs in PCB traces, vias and wiring; Power supply design has the single-strip version of the budget.

Controller & data puts one output per data line on suggested GPIOs (ESP32: 8 RMT channels; S3: 4; C3: 2; ESP8266: GPIO3 and GPIO2), and works out each output’s frame rate: WS281x send 24 (or 32 for RGBW) bits at 800 kHz, 30 µs per pixel plus a 300 µs reset, so 60 fps is about 545 pixels per output; APA102 go as fast as the SPI clock. It also gives data-line advice: level shifter, series resistor, capacitor, and what to do past one or five metres. Pin conflicts on the rest of the board are for the ESPHome config builder; single LEDs and constant-current strings are in LED drivers.

Export:

  • WLED ledmap.json — the layout snapped to a grid (the map grid size, about the pixel pitch): map[y·width + x] is the LED at that cell, −1 a gap. Upload it at /edit and set a 2-D matrix of the same size.

  • WLED segments — one per shape, as JSON for POST /json/state, and the LED outputs (start, length, GPIO, colour order, type, current limit) for LED Preferences.

  • ESPHome YAML — an esp32_rmt_led_strip light per output (or neopixelbus for APA102 and the ESP8266, or ledc outputs with a monochromatic/rgb light for analogue strips), and a partition light per shape.

  • FastLED XY() — a lookup table so leds[XY(x, y)] addresses the layout as a grid.

  • Bill of materials as a table and CSV, and the layout itself as JSON to load again.

The figures are typical, not guaranteed: strips from different makers differ in copper and LED current, so measure one metre at full white before buying the supply for a big build.

Sharing

Share link copies a URL that opens this tool with your current layout and settings, packed into ?s=. Opening a link replaces your saved layout for this tool.

Browser support

Any current browser, on a phone too. Everything is drawn on a canvas; there is no hardware to connect.

Privacy

Nothing leaves your browser. The layout is kept in this browser’s local storage, and the exports are files you download.

Runs entirely in your browser; nothing you type leaves this page.