WLED turns a 5 euro microcontroller and a strip of addressable LEDs into the most flexible lighting system you have ever used. Over 100 built-in effects, full local control, automatic Home Assistant discovery, and zero cloud dependency. Whether you want ambient backlighting behind your TV, color-reactive staircase lights, or holiday decorations that actually look good, this guide covers everything from first flash to advanced automations.
Jump to a section
WLED is free, open-source firmware created by Aircoookie that turns cheap ESP8266 and ESP32 boards into powerful LED controllers. It runs a web server directly on the microcontroller, so you control your LEDs from any browser on your network. No app downloads, no cloud accounts, no subscriptions.
The project started in 2016 and has grown into one of the most popular smart home DIY projects in the world. The GitHub repo has over 15,000 stars and an active community constantly adding new effects and features.
Rainbow, fire, twinkle, meteor, aurora, chase, and dozens more. Each effect has adjustable speed, intensity, and color palette. No coding needed.
Everything runs on your local network. No internet needed after setup. Works with Home Assistant, MQTT, HTTP API, DMX, Alexa, and more.
Split one strip into multiple virtual zones, each with its own color, effect, and brightness. One controller can handle a whole room.
A complete setup costs 15 to 30 euros. Compare that to Philips Hue Gradient strips at 150+ euros for similar (but less flexible) results.
A WLED setup has three components: a controller board, LED strips, and a power supply. Here is what to buy and what to watch out for.
| Board | Chip | Max LEDs | Outputs | Price | Best For |
|---|---|---|---|---|---|
| ESP32-S3 DevKit | ESP32-S3 | 1500+ | Multiple GPIO | ~6 euros | Best Overall |
| ESP32 DevKit V1 | ESP32 | 800-1000 | Multiple GPIO | ~5 euros | Great value |
| QuinLED-Dig-Uno | ESP32 | 1000+ | 2 outputs + level shifter | ~15 euros | Plug and play |
| QuinLED-Dig-Quad | ESP32 | 2000+ | 4 outputs + level shifter | ~25 euros | Large installs |
| ESP8266 NodeMCU | ESP8266 | ~500 | 1 output | ~3 euros | Budget/small |
| Athom WLED Controller | ESP32 | 1000+ | Pre-wired, level shifted | ~12 euros | Easiest Setup |
Our pick: For most people, the Athom WLED Controller is the easiest path. It comes pre-flashed with WLED, has proper connectors, a built-in level shifter, and costs about 12 euros. If you enjoy soldering and want maximum flexibility, grab an ESP32-S3 DevKit.
LED strips are power hungry. Each WS2812B LED draws up to 60mA at full white brightness. A 5-meter strip with 60 LEDs per meter (300 LEDs total) needs up to 18A at 5V, though real-world usage is much lower since you rarely run full white at full brightness.
| Strip Length | LEDs (60/m) | Max Draw (5V) | Recommended PSU | Realistic Draw |
|---|---|---|---|---|
| 1 meter | 60 | 3.6A | 5V 4A | ~1.5A |
| 2 meters | 120 | 7.2A | 5V 8A | ~3A |
| 5 meters | 300 | 18A | 5V 10A + power injection | ~7A |
| 10 meters | 600 | 36A | 5V 20A + injection every 2.5m | ~14A |
Realistic draw assumes colorful effects at 50 to 70% brightness, which is how most people actually use their strips.
Every WLED setup has the same basic wiring: power supply positive and negative go to the LED strip, and the data pin from the ESP connects to the strip's data input. A few important details:
Not all LED strips work with WLED. You need addressable (also called "individually addressable" or "digital") strips where each LED can be controlled independently. Here are the most popular options.
| Strip Type | Voltage | Colors | White Quality | Price/m | Best For |
|---|---|---|---|---|---|
| WS2812B | 5V | RGB | Mediocre (bluish) | 2 to 5 euros | Most Popular |
| SK6812 RGBW | 5V | RGBW | Excellent (dedicated white) | 4 to 8 euros | Best White |
| WS2811 | 12V | RGB (3 LEDs/pixel) | Mediocre | 2 to 4 euros | Long runs, outdoor |
| WS2815 | 12V | RGB | Mediocre | 5 to 10 euros | Long runs, backup data line |
| SK9822 / APA102 | 5V | RGB | Good | 8 to 15 euros | Fast refresh, video sync |
Getting WLED onto your ESP board is surprisingly easy. There are three methods, and the first one does not even require installing any software.
Go to install.wled.me in Chrome or Edge. Plug in your ESP via USB. Click "Install WLED." That is literally it. The browser flashes the firmware directly. Works on Windows, Mac, and Linux.
Best for: First-timers, anyone who just wants it working.
Download the WLED binary from the GitHub releases page, then flash it using ESPHome Flasher (GUI) or esptool.py (command line). This gives you more control over which exact binary you flash, useful for custom builds or specific board variants.
Best for: People who want a specific version or custom compile.
Athom sells ESP32 controllers with WLED already installed. Plug in power and LEDs, connect to Wi-Fi, done. No USB cable needed, no flashing, no drivers. These also come with proper connectors and level shifters.
Best for: People who value their time over saving 5 euros.
After flashing, your ESP creates a Wi-Fi access point called "WLED-AP" (password: wled1234). Connect to it with your phone, and it opens a setup page where you enter your home Wi-Fi credentials. Once connected, WLED gets an IP address on your network and you can access it from any browser.
Home Assistant discovers WLED devices automatically through mDNS. Once your WLED controller is on the same network, it should appear as a discovered integration within a few minutes. If not, add it manually: Settings, Devices and Services, Add Integration, search "WLED," enter the IP address.
Full color control with brightness, RGB color picker, color temperature (RGBW strips), and effect selection. Each segment appears as a separate light entity if you have multiple segments configured.
Pick effects, color palettes, and presets from dropdown menus. All 100+ WLED effects show up as options. You can trigger specific effects from automations using these entities.
Adjust effect speed and intensity with sliders. Handy for fine-tuning how fast animations run or how pronounced effects appear.
Wi-Fi signal strength, free memory, uptime, and estimated current draw. Useful for monitoring the health of your WLED devices and catching power issues.
A simple but effective dashboard setup for a WLED light. Add this as a manual card in your dashboard:
type: light
entity: light.wled_living_room
name: LED Strip
# Or use the custom mushroom light card for a prettier look:
# type: custom:mushroom-light-card
# entity: light.wled_living_room
# show_brightness_control: true
# show_color_control: true
# use_light_color: trueYou can save lighting states in two places. WLED presets are stored on the ESP itself and load instantly. Home Assistant scenes are stored in HA and give you more flexibility (like combining WLED state with other devices). Use WLED presets for quick access from the WLED app or IR remote. Use Home Assistant scenes when you want your LEDs to be part of a larger multi-device scene.
WLED is incredibly versatile. Here are the most popular projects people build, from simple weekend setups to ambitious builds.
Stick an LED strip behind your TV and use HyperHDR or Hyperion to capture screen colors in real time. The LEDs match what is on screen, creating an immersive ambient light effect. Budget: about 25 euros for the strip + ESP, plus an HDMI capture card (~15 euros) for the best results.
Mount a short strip under each stair tread. Use WLED segments so each step is its own zone. Trigger with a motion sensor at the top and bottom, and have them light up one by one as you walk. The "wipe" effect looks stunning.
Warm white strip under the bed frame, triggered by a motion sensor at night. Set brightness to 10 to 15% so it gently lights the floor without waking anyone. One of the simplest and most practical WLED projects.
SK6812 RGBW strips under kitchen cabinets give you both bright white task lighting for cooking and colorful ambient mode for evenings. Use a diffuser channel for a clean, professional look. Way cheaper than commercial under-cabinet lights.
Strip behind the desk, behind the monitor, along shelf edges. Use WLED's audio reactive mode (with the WLED Sound Reactive fork or a connected microphone) to sync lights to game audio or music. Multiple segments let different zones react differently.
IP67 rated strips along deck railings, under steps, or around the patio. Use WS2811 (12V) for longer runs with fewer power injection points. The "fire" effect makes a great evening ambiance. Turn off automatically at bedtime.
Christmas tree, Halloween window display, Easter egg hunt trail. WLED presets let you switch between holiday themes instantly. Save preset 1 for "Christmas warm twinkle," preset 2 for "Halloween spooky," and trigger them with a Home Assistant calendar automation.
Flash red when the doorbell rings. Pulse blue when the washing machine finishes. Show green for 5 seconds when someone disarms the alarm. A small strip near your workspace becomes a silent notification display for any Home Assistant event.
Use WLED segments to create a physical progress bar. Show energy consumption as a green-to-red gradient. Display the UV index. Track how many Pomodoro sessions you have done today. Any number in Home Assistant can become a visual bar.
The WLED Sound Reactive fork (now partially merged into main WLED) uses a microphone connected to the ESP to make LEDs react to music in real time. Frequency-based effects make bass pulse different colors than treble. Perfect for parties, game nights, or just vibing to music.
WLED becomes truly powerful when you connect it to the rest of your smart home. Here are five practical automations you can set up right away.
When your media player starts playing, fade the WLED strip to a low warm glow. When it pauses or stops, bring it back up.
automation:
- alias: "WLED Movie Mode"
trigger:
- platform: state
entity_id: media_player.living_room_tv
to: "playing"
action:
- service: light.turn_on
target:
entity_id: light.wled_tv_backlight
data:
brightness: 30
rgb_color: [255, 147, 41]
effect: "Solid"
- alias: "WLED Movie Mode Off"
trigger:
- platform: state
entity_id: media_player.living_room_tv
from: "playing"
action:
- service: light.turn_on
target:
entity_id: light.wled_tv_backlight
data:
brightness: 150
effect: "Solid"Gradually brighten your bedroom WLED strip from dark red to warm white over 20 minutes before your alarm. Much gentler than a blaring alarm.
automation:
- alias: "WLED Sunrise"
trigger:
- platform: time
at: "06:40:00"
action:
- service: light.turn_on
target:
entity_id: light.wled_bedroom
data:
brightness: 5
rgb_color: [255, 50, 0]
- delay: "00:05:00"
- service: light.turn_on
target:
entity_id: light.wled_bedroom
data:
brightness: 50
rgb_color: [255, 120, 30]
transition: 300
- delay: "00:05:00"
- service: light.turn_on
target:
entity_id: light.wled_bedroom
data:
brightness: 150
rgb_color: [255, 180, 80]
transition: 300
- delay: "00:05:00"
- service: light.turn_on
target:
entity_id: light.wled_bedroom
data:
brightness: 255
rgb_color: [255, 220, 160]
transition: 300Turn on the hallway strip when motion is detected. At night, use a dim warm color. During the day, use full brightness white (SK6812 RGBW). Auto-off after 2 minutes of no motion.
automation:
- alias: "WLED Hallway Motion"
trigger:
- platform: state
entity_id: binary_sensor.hallway_motion
to: "on"
condition: []
action:
- choose:
- conditions:
- condition: time
after: "22:00:00"
before: "07:00:00"
sequence:
- service: light.turn_on
target:
entity_id: light.wled_hallway
data:
brightness: 20
rgb_color: [255, 100, 20]
default:
- service: light.turn_on
target:
entity_id: light.wled_hallway
data:
brightness: 200
color_temp: 300
- alias: "WLED Hallway Off"
trigger:
- platform: state
entity_id: binary_sensor.hallway_motion
to: "off"
for: "00:02:00"
action:
- service: light.turn_off
target:
entity_id: light.wled_hallway
data:
transition: 3Flash the WLED strip when someone rings the doorbell. Useful when you are wearing headphones or in a room where you can not hear the doorbell.
automation:
- alias: "WLED Doorbell Flash"
trigger:
- platform: state
entity_id: binary_sensor.doorbell
to: "on"
action:
- service: light.turn_on
target:
entity_id: light.wled_office
data:
effect: "Blink"
rgb_color: [0, 100, 255]
brightness: 255
- delay: "00:00:10"
- service: light.turn_on
target:
entity_id: light.wled_office
data:
effect: "Solid"
brightness: "{state_attr('light.wled_office', 'brightness') | default(150)}"Change your LED strip color based on the weather forecast. Blue for rain, warm orange for sunny, white for snow. A subtle, glanceable way to know the weather without checking your phone.
automation:
- alias: "WLED Weather Colors"
trigger:
- platform: state
entity_id: weather.home
action:
- choose:
- conditions:
- condition: state
entity_id: weather.home
state: "sunny"
sequence:
- service: light.turn_on
target:
entity_id: light.wled_living_room
data:
rgb_color: [255, 180, 50]
brightness: 80
transition: 10
- conditions:
- condition: state
entity_id: weather.home
state: "rainy"
sequence:
- service: light.turn_on
target:
entity_id: light.wled_living_room
data:
rgb_color: [30, 100, 255]
brightness: 60
transition: 10
- conditions:
- condition: state
entity_id: weather.home
state: "snowy"
sequence:
- service: light.turn_on
target:
entity_id: light.wled_living_room
data:
rgb_color: [200, 220, 255]
brightness: 100
effect: "Twinkle"
transition: 10
default:
- service: light.turn_on
target:
entity_id: light.wled_living_room
data:
rgb_color: [255, 200, 120]
brightness: 60
transition: 10Both WLED and ESPHome run on the same ESP32 hardware and both integrate with Home Assistant. But they are designed for different use cases.
| Feature | WLED | ESPHome |
|---|---|---|
| Built-in effects | 100+ effects ready to go | A handful, build your own |
| Web interface | Full color picker, effects, presets | Basic on/off only |
| Segments | Built-in, easy to configure | Possible with partitions |
| Sound reactive | Yes (built-in since 0.14) | Manual with custom code |
| Multi-device sync | UDP sync built-in | Through HA or custom |
| Custom sensors | Limited (usermods) | Excellent, any sensor |
| HA integration depth | Good (light, select, number) | Deep (native API, any entity) |
| Learning curve | Very easy | Moderate (YAML config) |
| Mobile app | Yes (iOS and Android) | No (use HA app) |
Use WLED if your primary goal is LED strips with lots of effects, sound reactivity, and easy segment control. Use ESPHome if you want to combine LEDs with other sensors on the same board (like a temperature sensor + LED indicator), or if you need very custom LED behavior that WLED's effects do not cover. Many people use both: WLED for their main LED installations and ESPHome for sensor-plus-LED combo devices.
Raw LED strips show individual LED dots. An aluminum channel with a milky diffuser cover turns them into a smooth, continuous light bar. It also acts as a heatsink. Costs about 3 to 5 euros per meter and makes a huge visual difference.
Always configure the current limiter in WLED settings to match your power supply's rating. This prevents brownouts, flickering, and potential overheating. WLED automatically adjusts brightness to stay within the limit.
Running LEDs in multiple rooms? WLED's built-in UDP sync keeps all controllers in lockstep. Set one as the sync sender and others as receivers. They stay perfectly synchronized with no Home Assistant involvement needed.
Set the default brightness to 40 to 60% in WLED settings. Full brightness is blinding for ambient use and eats power. You can always boost it for parties or effects, but the default should be comfortable for daily use.
WLED is actively developed with new effects, performance improvements, and bug fixes. Update through the WLED web interface (Security and Updates section) or use the OTA update option. Always back up your presets first.
If your strip is longer than 5 meters, 12V strips (WS2811, WS2815) are much easier to power. Lower current at higher voltage means thinner wires, fewer power injection points, and less voltage drop.
Pick the path that fits your budget and comfort level.
Great for: learning WLED, TV backlight for a small monitor, desk accent lighting.
Great for: full TV ambilight, kitchen under-cabinet, bedroom accent wall.
Great for: multi-zone room lighting, staircase builds, outdoor installations, anywhere you want both colors and quality white light.
WLED is free, open-source firmware for ESP8266 and ESP32 microcontrollers that controls addressable LED strips like WS2812B and SK6812. It runs entirely on your local network with no cloud dependency. Home Assistant discovers WLED devices automatically and gives you full control over colors, effects, brightness, and segments. You get over 100 built-in effects, a web interface for quick changes, and deep automation possibilities through Home Assistant.
At minimum you need three things: an ESP32 or ESP8266 board (around 5 to 8 euros), an addressable LED strip (WS2812B is the most popular, about 10 to 25 euros for 5 meters), and a 5V power supply sized to your strip length. For strips longer than 2 meters, inject power at both ends to avoid voltage drop. A 10A 5V supply handles about 150 LEDs comfortably.
Yes. WLED runs independently and has its own web interface, mobile app, and preset system. You can control it from any browser on your network. Home Assistant integration is optional but adds automations, dashboard cards, voice control, and the ability to sync lights with other smart home events.
An ESP32 can reliably drive 800 to 1500 LEDs depending on the effects used. ESP8266 tops out at around 500 LEDs due to less memory. For large installations, use multiple ESP boards with WLED Sync to keep them in sync over UDP. Power is usually the limiting factor before the controller.
WLED is purpose-built for LED strips with 100+ built-in effects, a polished web UI, segment support, and an active community. ESPHome gives you more control over custom logic and integrates tighter with Home Assistant, but you have to build effects yourself. For most people, WLED is the better choice for LED projects. Use ESPHome when you need custom sensor logic or want LEDs as part of a larger multi-sensor device.
Yes. WLED has built-in Alexa support (Hue emulation) and can connect to Google Home through Home Assistant. You can turn strips on and off, change colors, and adjust brightness using voice commands. Effects are easier to trigger through Home Assistant automations or the WLED app.
WLED supports PWM output for single-color and RGB analog strips, but this is not its strength. You lose all the individual LED effects and segments. For analog strips, a Shelly RGBW2 or an ESPHome setup with LEDC PWM is usually a better fit. WLED really shines with addressable (digital) strips.
The ESP board itself draws less than 1 watt. Power consumption is almost entirely from the LEDs. A typical 5-meter WS2812B strip at 50% brightness with colorful effects draws about 15 to 25 watts. At full white full brightness, it can peak at 72 watts, but nobody runs them like that. For reference, a single Philips Hue bulb uses about 9 watts.
Not sure which of your existing devices work with Home Assistant? Run our free compatibility scan to find out what you can keep and what might need replacing.