Film the flash-family effects on the roofline controller to verify the photosensitivity table #168

Open
opened 2026-09-26 09:12:50 +00:00 by claude-bot · 0 comments
Collaborator

Why

The photosensitivity guard (#150 / #167) enforces limits taken from backend/app/data/flash_safety.json. That table was derived from WLED 16.0.0's firmware source (wled00/FX.cpp at commit 4374f01), not measured, and it carries verified_on_hardware: false. The derivation assumes the worst-case frame time and uses conservative judgement. It still needs one real measurement, the same way #21 measured transition wrap on the device instead of trusting the documentation.

Method (also in docs/photosensitivity.md)

  • Film each row at 240 fps on a phone, pointed at the roofline controller, and count flashes per second.
  • Speed-limited effects:
    • Blink, Strobe, Strobe Rainbow and Blink Rainbow at sx 238 (the limit) and 239. Expect about 2.9/s and about 3.1/s.
    • Dynamic at sx 247 and 248.
  • Unsafe effects (Strobe Mega, Lightning, Chase Flash, Chase Flash Rnd, Sparkle+): confirm they really do exceed 3/s at their default and minimum speeds. The table claims they have no safe speed.
  • Judgement calls:
    • Fire Flicker first. The table allows it because the flicker averages out across pixels. Confirm it doesn't read as a whole-segment flash on a real run of LEDs.
    • Single-pixel sparkles (Sparkle, Sparkle Dark, Glitter): confirm they don't read as a general flash at the roofline's pixel density.
  • Check the effective frame rate on this controller (/json/info → fps). Limits were computed at the 2 ms worst case. If the real frame rate is much lower, record that too, but don't loosen the table on the strength of one controller's frame rate.

Done when

  • Measurements are recorded in docs/photosensitivity.md (effect, sx, measured flashes per second, date, firmware).
  • Any row that disagrees is corrected, with its test updated.
  • verified_on_hardware is set to true, per row or for the whole table.
## Why The photosensitivity guard (#150 / #167) enforces limits taken from `backend/app/data/flash_safety.json`. That table was **derived from WLED 16.0.0's firmware source** (`wled00/FX.cpp` at commit `4374f01`), not measured, and it carries `verified_on_hardware: false`. The derivation assumes the worst-case frame time and uses conservative judgement. It still needs one real measurement, the same way #21 measured `transition` wrap on the device instead of trusting the documentation. ## Method (also in `docs/photosensitivity.md`) - Film each row at 240 fps on a phone, pointed at the roofline controller, and count flashes per second. - **Speed-limited effects:** - Blink, Strobe, Strobe Rainbow and Blink Rainbow at `sx` 238 (the limit) and 239. Expect about 2.9/s and about 3.1/s. - Dynamic at `sx` 247 and 248. - **Unsafe effects** (Strobe Mega, Lightning, Chase Flash, Chase Flash Rnd, Sparkle+): confirm they really do exceed 3/s at their default and minimum speeds. The table claims they have no safe speed. - **Judgement calls:** - **Fire Flicker first.** The table allows it because the flicker averages out across pixels. Confirm it doesn't read as a whole-segment flash on a real run of LEDs. - Single-pixel sparkles (Sparkle, Sparkle Dark, Glitter): confirm they don't read as a general flash at the roofline's pixel density. - **Check the effective frame rate** on this controller (`/json/info` → `fps`). Limits were computed at the 2 ms worst case. If the real frame rate is much lower, record that too, but don't loosen the table on the strength of one controller's frame rate. ## Done when - Measurements are recorded in `docs/photosensitivity.md` (effect, `sx`, measured flashes per second, date, firmware). - Any row that disagrees is corrected, with its test updated. - `verified_on_hardware` is set to `true`, per row or for the whole table.
claude-bot added this to the v1.2.0 milestone 2026-09-26 09:13:01 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Iris-WLED#168
No description provided.