-
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
Open
netmindz
wants to merge
16
commits into
main
Choose a base branch
from
v16-updates
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 1 commit
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
213719d
Add v0.16.0 documentation updates
netmindz 848258d
Expand audio-reactive docs with configuration, AGC, and sync improvem…
netmindz 08f22dd
Add more info and fix AI slop
DedeHai bd67e96
improve scrolling text how-to
DedeHai a395074
gif-> GIF plus typo
DedeHai 7a14a1b
0.16 => 16.0 ( AI slop)
softhack007 92b5ec5
Update docs/interfaces/espnow.md
softhack007 3577195
markdown style fixes
softhack007 bb48b96
changing a few more "callouts" into admonitions
softhack007 16bebd0
a RGB -> an RGB
softhack007 2cf888f
Merge branch 'main' into v16-updates
softhack007 f56c1bc
HUB75 clarifications
softhack007 9ab3817
Update docs/interfaces/infrared.md
softhack007 4418961
Merge branch 'v16-updates' of https://github.com/wled/WLED-Docs into …
DedeHai 6269c1b
corrections and improvements for audio-reactive.md
softhack007 b6b9d64
Update docs/features/palettes.md
softhack007 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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