-
Notifications
You must be signed in to change notification settings - Fork 443
Add v16.0.0 documentation updates #323
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 2 commits
213719d
848258d
08f22dd
bd67e96
a395074
7a14a1b
92b5ec5
3577195
bb48b96
16bebd0
2cf888f
f56c1bc
9ab3817
4418961
6269c1b
b6b9d64
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| --- | ||
| title: Boot-loop Detection & Recovery | ||
| --- | ||
|
|
||
| WLED can detect when your controller is stuck in a crash loop and automatically take steps to recover it — without you needing a USB cable or serial terminal. This feature is especially useful after a bad settings change, a corrupted config file, or a failed OTA update. | ||
|
|
||
| --- | ||
|
|
||
| ## What Counts as a Boot-loop? | ||
|
|
||
| WLED counts **crash resets** stored in RTC memory (which survives a soft reboot). A crash reset is any of these reset reasons: | ||
|
|
||
| - Exception / software exception | ||
| - Hardware watchdog timeout | ||
| - Software watchdog timeout | ||
| - Panic / abort | ||
| - Task watchdog timeout | ||
|
|
||
| Normal power-on resets and clean software restarts reset the counter to zero. Brownout resets are logged but **do not** increment the counter. | ||
|
|
||
| If **5 or more crashes** happen within a **2-minute rolling window**, WLED considers the device stuck in a boot-loop and triggers the recovery sequence. | ||
|
|
||
| --- | ||
|
|
||
| ## Recovery Sequence | ||
|
|
||
| Recovery actions are taken **one per boot**, in order. After each action WLED restarts immediately. If the device still crashes after that restart, the next action is taken on the following boot. | ||
|
|
||
| | Step | Action | What it does | | ||
| |---|---|---| | ||
| | **1** | Restore backup config | Copies `/bkp.cfg.json` back over `/cfg.json` — rolls back to the last known-good configuration. | | ||
| | **2** | Reset config | Renames `/cfg.json` to `/rst.cfg.json` and starts WLED with factory defaults. Your old config is preserved in `/rst.cfg.json` for manual recovery. | | ||
| | **3** | Firmware rollback *(ESP32 only)* | Swaps the OTA boot partition to the previous firmware image. Useful after a bad OTA update. On ESP8266 this step is skipped. | | ||
| | **4** | Emergency serial dump | Dumps all filesystem files to the serial port and then **loops indefinitely**. WLED will not start normally again until you power-cycle or hardware-reset the board. Connect a serial terminal at 115200 baud to retrieve the files. | | ||
|
|
||
| !!! warning | ||
| Step 4 is the last resort. WLED stops booting and only outputs to serial. A hardware reset (power cycle or the RST button) is required to exit this state. | ||
|
|
||
| --- | ||
|
|
||
| ## How the State Is Stored | ||
|
|
||
| The crash counter and recovery progress are stored in **RTC memory**, which persists across soft reboots but is cleared by a power cycle or hardware reset. | ||
|
|
||
| - **ESP32:** uses `RTC_NOINIT_ATTR` static variables (three values: last boot timestamp, crash count, recovery step). | ||
| - **ESP8266:** uses `RTC_USER_MEM` slots 32–34 (same three values). | ||
|
|
||
| This means: | ||
|
|
||
| - Pulling the power clears the counter — the device starts fresh on the next boot. | ||
| - A clean software restart from the WLED UI also clears the counter. | ||
|
|
||
| --- | ||
|
|
||
| ## Where This Runs | ||
|
|
||
| Boot-loop detection runs very early in startup (`WLED::setup()`), right after the filesystem is mounted and before any configuration is loaded. This ensures recovery can happen even if config loading itself is what causes the crash. | ||
|
|
||
| --- | ||
|
|
||
| ## Tips | ||
|
|
||
| - If your device lands in **Step 2** (reset config), check the serial log or the filesystem editor for `/rst.cfg.json` — your previous settings are still there. | ||
| - If you're on ESP32 and a firmware update went wrong, **Step 3** (rollback) may recover you automatically without needing to re-flash. | ||
| - To manually clear the crash counter without power-cycling, do a clean restart from the WLED web UI (reboot button in Settings → Security & Updates). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| --- | ||
| title: Custom Fonts | ||
| --- | ||
|
|
||
| WLED supports loading custom bitmap fonts for use with the **Scrolling Text** effect. Custom fonts are stored on the device filesystem as `.wbs` files and can be created with the [WLED Font Factory](https://github.com/DedeHai/WLED-Tools/tree/main/WLED-FontFactory) tool. | ||
|
|
||
| --- | ||
|
|
||
| ## Built-in fonts | ||
|
|
||
| WLED ships with five built-in fonts. In v0.16, four of them were redrawn for improved legibility while keeping the same pixel heights for backward compatibility. All built-in fonts now use **per-glyph variable width**, so narrow characters like `i` take less space than wide ones like `W`. | ||
|
|
||
| | Name | Width × Height | | ||
| |------|---------------| | ||
| | 6×3 | variable × 3 px | | ||
| | 5×8 | variable × 8 px | | ||
| | 6×8 | variable × 8 px | | ||
| | 7×9 | variable × 9 px | | ||
| | 5×12 | variable × 12 px | | ||
|
|
||
| --- | ||
|
|
||
| ## Custom font files (`.wbs`) | ||
|
|
||
| Up to **5 custom font files** can be loaded from the filesystem at the same time. They appear alongside the built-in fonts in the Scrolling Text effect settings. | ||
|
|
||
| ### File format | ||
|
|
||
| `.wbs` files use a tightly bit-packed binary format with a 12-byte header. You don't need to create or edit them by hand — use the Font Factory tool instead. | ||
|
|
||
| ### UTF-8 support | ||
|
|
||
| Custom fonts can include Unicode characters beyond standard ASCII. The `.wbs` format supports 2-, 3-, and 4-byte UTF-8 code points, making it possible to use accented Latin characters, Cyrillic, CJK glyphs, and other scripts. | ||
|
|
||
| ### Enabling custom fonts | ||
|
|
||
| 1. Upload your `.wbs` file(s) to the WLED filesystem via the **File Manager** (`/edit`) or the OTA update page. | ||
| 2. Open the **Scrolling Text** effect settings. | ||
| 3. Enable the **Custom Font** checkbox. | ||
|
|
||
| If no `.wbs` files are found on the filesystem, WLED falls back to the built-in fonts automatically. | ||
|
|
||
| --- | ||
|
|
||
| ## Creating fonts with Font Factory | ||
|
|
||
| [WLED Font Factory](https://github.com/DedeHai/WLED-Tools/tree/main/WLED-FontFactory) is a web-based tool for creating `.wbs` font files. | ||
|
|
||
| ### Workflow | ||
|
|
||
| 1. Load a source font — either a **TrueType (TTF)** or **BDF bitmap** font file. | ||
| 2. Choose which Unicode range(s) to include (e.g. Basic Latin, Latin Extended, Cyrillic). | ||
| 3. Set the pixel height. The tool renders each glyph at that height. | ||
| 4. Edit individual glyphs pixel by pixel in the built-in glyph editor if needed. | ||
| 5. Click **Export** to download the `.wbs` file. | ||
|
|
||
| ### Showcase mode | ||
|
|
||
| Font Factory includes a **showcase** export that renders a PNG preview of all glyphs in the font — useful for checking readability before uploading to a device. | ||
|
|
||
| --- | ||
|
|
||
| ## Using custom fonts in PixelForge | ||
|
|
||
| The [PixelForge Scrolling Text tool](/features/pixelforge#scrolling-text-tool) also uses the Scrolling Text effect and will pick up any custom fonts you have loaded. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,7 +6,7 @@ hide: | |
| --- | ||
|
|
||
| !!! info "Version Info" | ||
| Beginning in 0.14 up to 10 [Custom Palettes](#custom-palettes) can be uploaded. | ||
| Beginning in 0.14 up to 10 [Custom Palettes](#custom-palettes) can be uploaded. Starting in v0.16, over 100 custom palettes are supported, a new palette editor is built into the UI, and over 800 additional palettes from the cpt-city collection are available. | ||
|
|
||
|
|
||
|
|
||
|
|
@@ -88,8 +88,11 @@ hide: | |
|
|
||
| ### Custom Palettes | ||
|
|
||
| As of 0.14, up to 10 custom palettes can be uploaded by the user in JSON files named `palette0.json` through `palette9.json` | ||
| The format closely resembles that of the palettes defined in `palettes.h` with a position (0-255), red, green, blue for each color. An example of the content would be: | ||
| As of v0.14, up to 10 custom palettes can be uploaded in JSON files. Starting in **v0.16**, over **100 custom palettes** are supported, and the JSON naming scheme has changed — palettes are no longer limited to `palette0.json` through `palette9.json`. | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @DedeHai - please review for accuracy |
||
|
|
||
| **v0.16 and later:** Use the built-in **Palette Editor** (accessible from the palette picker in the UI) to create and edit custom palettes directly in the browser without manual JSON editing. The editor lets you add colour stops, adjust positions, and preview the gradient in real time. Palettes are saved to the filesystem automatically. | ||
|
|
||
| **v0.14–0.15 (legacy):** Custom palettes can be uploaded by placing JSON files named `palette0.json` through `palette9.json` on the device via the `/edit` page. The format closely resembles that of the palettes defined in `palettes.h` with a position (0–255), red, green, blue for each colour stop. An example: | ||
| ``` | ||
| {"palette":[ | ||
| 0, 255, 33, 4, | ||
|
|
@@ -101,6 +104,10 @@ The format closely resembles that of the palettes defined in `palettes.h` with a | |
| 255, 87, 255, 65]} | ||
| ``` | ||
|
|
||
| Once a palette[0-9].json file has been created, it can be uploaded to the controller using the `/edit` page (http://[controller-ip]/edit). | ||
| The controller must be rebooted (`/win&RB`) before the newly uploaded palettes will be available. | ||
| After reboot, the custom palette(s) will be named `~ Custom [0-9] ~` in the Palettes section of the user interface. | ||
| Once a palette file has been created, it can be uploaded to the controller using the `/edit` page (`http://[controller-ip]/edit`). | ||
| The controller must be rebooted (`/win&RB`) before newly uploaded palettes are available. | ||
| After reboot, custom palettes appear in the Palettes section of the UI. | ||
|
|
||
| ### Additional Palettes (v0.16+) | ||
|
|
||
| v0.16 includes over **800 palettes** sourced from the [cpt-city](http://soliton.vm.bytemark.co.uk/pub/cpt-city/) collection. These are available directly in the palette picker — no upload needed. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| --- | ||
| title: Particle System | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @DedeHai - please review for accuracy |
||
| --- | ||
|
|
||
| The Particle System is a physics-based effects engine built into WLED. It simulates many independent particles — each with its own position, velocity, and size — and renders them onto your LED strip or matrix in real time. | ||
|
|
||
| WLED includes both a **1D Particle System** (for strips) and a **2D Particle System** (for matrices). | ||
|
|
||
| --- | ||
|
|
||
| ## How it works | ||
|
|
||
| Each frame, the engine: | ||
|
|
||
| 1. Updates every particle's position based on its velocity. | ||
| 2. Applies forces (gravity, drag, wind, etc.) depending on the active effect. | ||
| 3. Handles collisions between particles where enabled. | ||
| 4. Renders particles onto the LED output using brightness fall-off based on distance. | ||
|
|
||
| ### Rendering (v0.16 improvement) | ||
|
|
||
| Large particles use **squared-distance ellipse rendering** instead of the blur-based method used in older versions. This is more accurate and can improve rendering speed by up to **30% FPS** on dense particle effects. | ||
|
|
||
| ### Collisions | ||
|
|
||
| When particle collisions are enabled, the engine uses **mass-ratio based collision response**: a larger particle pushes a smaller one proportionally to the mass difference, rather than applying equal and opposite forces. This makes interactions feel more physically realistic. | ||
|
|
||
| --- | ||
|
|
||
| ## 1D Particle System | ||
|
|
||
| The 1D Particle System works on standard 1D LED segments. Effects include things like sparks, rain, fire, and bouncing balls along a single strip. | ||
|
|
||
| **2D mapping:** 1D particle effects support the `map1D2D` option, which maps the 1D output onto a 2D segment using various patterns (line, zigzag, circle, etc.). This lets you use 1D physics effects on a matrix. | ||
|
|
||
| --- | ||
|
|
||
| ## 2D Particle System | ||
|
|
||
| The 2D Particle System requires a **2D segment** configured in WLED. Effects render directly onto the X/Y grid of the matrix. | ||
|
|
||
| Available 2D particle effects include fireworks, sprinklers, waterfall, pinball, and more. | ||
|
|
||
| --- | ||
|
|
||
| ## Memory usage | ||
|
|
||
| The Particle System allocates memory **dynamically per segment** based on the number of active particles. On complex setups with many particles or multiple segments, **PSRAM is recommended** (and required on some configurations). Devices without enough free RAM will reduce the particle count automatically or skip the effect. | ||
|
|
||
| --- | ||
|
|
||
| ## Effect controls | ||
|
|
||
| Particle System effects expose standard WLED effect sliders and toggles (speed, intensity, palette), plus effect-specific controls such as: | ||
|
|
||
| - Gravity strength and direction | ||
| - Particle size | ||
| - Particle lifetime / spawn rate | ||
| - Collision on/off | ||
| - Wrap-around edges on/off | ||
|
|
||
| Controls vary by individual effect. | ||
|
|
||
| --- | ||
|
|
||
| ## Tips | ||
|
|
||
| - For best results on large matrices (32×32 and above), use an ESP32 with PSRAM. | ||
| - 1D Particle System effects run fine on ESP8266 for shorter strips. | ||
| - If an effect runs slowly, try reducing the segment size or lowering the particle count via the intensity slider. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| --- | ||
| title: Pin Info | ||
| --- | ||
|
|
||
| The **Pin Info** page gives you a live overview of every GPIO pin on your controller — what it's doing right now, and what it's capable of. It's a handy diagnostic tool when troubleshooting hardware conflicts or checking whether a pin is free to use. | ||
|
|
||
| Open it from **Settings → Pin Info**, or navigate directly to `http://<wled-ip>/settings/pininfo`. | ||
|
|
||
| The table refreshes every 250 ms, so button presses and touch events show up in real time. | ||
|
|
||
| --- | ||
|
|
||
| ## Table Columns | ||
|
|
||
| | Column | What it shows | | ||
| |---|---| | ||
| | **Pin** | GPIO number (e.g. *GPIO4*) | | ||
| | **Used by** | Who or what currently owns the pin (see below) | | ||
| | **Pin Notes** | Hardware capabilities of that pin (see below) | | ||
|
|
||
| --- | ||
|
|
||
| ## "Used By" — Pin Owners | ||
|
|
||
| A pin can be in one of these states: | ||
|
|
||
| - **Available** — not allocated to anything; free to use. | ||
| - **System** — reserved by WLED internals (flash, USB-JTAG, strapping pins, etc.). These pins cannot be assigned. | ||
| - **LED Digital / LED PWM / LED On/Off** — driving an LED bus. | ||
| - **Button** — configured as a button input. The button type (Push, Switch, Touch, Analog, PIR, …) is shown in small text next to "Button". | ||
| - **IR Receiver** — infrared remote input. | ||
| - **Relay** — relay output. | ||
| - **Ethernet** — used by an Ethernet (LAN) interface. | ||
| - **I2C / SPI / SPI RAM** — bus lines claimed by a peripheral. | ||
| - **DMX Output / DMX Input** — serial DMX data lines. | ||
| - **HUB75** — RGB matrix panel interface. | ||
| - **Debug** — debug/logging output. | ||
| - **Usermod** — claimed by a usermod. The usermod slot number is shown (e.g. *UM #134*). | ||
|
|
||
| For button pins, a small coloured dot appears to the left of the owner label: | ||
|
|
||
| - **Green dot** — button is currently pressed / signal is HIGH. | ||
| - **Grey dot** — button is released / signal is LOW. | ||
|
|
||
| For touch-capable pins, the raw capacitive touch reading is shown in small grey text next to the dot. | ||
|
|
||
| --- | ||
|
|
||
| ## "Pin Notes" — Hardware Capabilities | ||
|
|
||
| This column lists the hardware capabilities of the pin itself (not its current use): | ||
|
|
||
| | Note | Meaning | | ||
| |---|---| | ||
| | **Analog** | Can be used as an ADC (analogue-to-digital) input | | ||
| | **Touch** | Has a built-in capacitive touch sensor | | ||
| | **Input Only** | Output driver not available; can only be read, not driven | | ||
| | **Flash Boot** | Connected to the SPI flash — avoid using during normal operation | | ||
| | **Bootstrap** | A strapping pin that affects boot mode; use with caution | | ||
|
|
||
| A dash (`-`) means no special notes apply. | ||
|
|
||
| --- | ||
|
|
||
| ## Tips | ||
|
|
||
| - Pins shown as **System** or with **Flash Boot** / **Bootstrap** notes are best left unassigned unless you know exactly what you're doing. | ||
| - If a pin shows as **Available** but you know something is connected to it, double-check your LED/button/usermod settings — the pin may not be configured yet. | ||
| - The page works in real time: press a button and watch the dot change colour without reloading. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@DedeHai - please review for accuracy