Files
wled-screen-controller-mixed/BRAINSTORM.md
alexei.dolgolyov de04872fdc Add notification reactive color strip source with webhook trigger
New source_type "notification" fires one-shot visual effects (flash, pulse, sweep)
triggered via POST webhook. Designed as a composite layer for overlay on persistent
sources. Includes app color mapping, whitelist/blacklist filtering, and auto-sizing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:10:32 +03:00

5.7 KiB

Feature Brainstorm — LED Grab

New Automation Conditions (Profiles)

Right now profiles only trigger on app detection. High-value additions:

  • Time-of-day / Schedule — "warm tones after sunset, off at midnight." Schedule-based value sources pattern already exists
  • Display state — detect monitor on/off/sleep, auto-stop targets when display is off
  • System idle — dim or switch to ambient effect after N minutes of no input
  • Sunrise/sunset — fetch local solar times, drive circadian color temperature shifts
  • Webhook/MQTT trigger — let external systems activate profiles without HA integration

New Output Targets

Currently: WLED, Adalight, AmbileD, DDP. Potential:

  • MQTT publish — generic IoT output, any MQTT subscriber becomes a target
  • Art-Net / sACN (E1.31) — stage/theatrical lighting protocols, DMX controllers
  • OpenRGB — control PC peripherals (keyboard, mouse, RAM, fans) as ambient targets
  • HTTP webhook — POST color data to arbitrary endpoints
  • Recording target — save color streams to file for playback later

New Color Strip Sources

  • Spotify / media player — album art color extraction or tempo-synced effects
  • Weather — pull conditions from API, map to palettes (blue=rain, orange=sun, white=snow)
  • Camera / webcam — border-sampling from camera feed for video calls or room-reactive lighting
  • Script source — user-written JS/Python snippets producing color arrays per frame
  • Notification reactive — flash/pulse on OS notifications (optional app filter)

Processing Pipeline Extensions

  • Palette quantization — force output to match a user-defined palette
  • Zone grouping — merge adjacent LEDs into logical groups sharing one averaged color
  • Color temperature filter — warm/cool shift separate from hue shift (circadian/mood)
  • Noise gate — suppress small color changes below threshold, preventing shimmer on static content

Multi-Instance & Sync

  • Multi-room sync — multiple instances with shared clock for synchronized effects
  • Multi-display unification — treat 2-3 monitors as single virtual display for seamless ambilight
  • Leader/follower mode — one target's output drives others with optional delay (cascade)

UX & Dashboard

  • PWA / mobile layout — mobile-first layout + "Add to Home Screen" manifest
  • Scene presets — bundled source + filters + brightness as one-click presets ("Movie night", "Gaming")
  • Live preview on dashboard — miniature screen with LED colors rendered around its border
  • Undo/redo for calibration — reduce frustration in the fiddly calibration editor
  • Drag-and-drop filter ordering — reorder postprocessing filter chains visually

API & Integration

  • WebSocket event bus — broadcast all state changes over a single WS channel
  • OBS integration — detect active scene, switch profiles; or use OBS virtual camera as source
  • Plugin system — formalize extension points into documented plugin API with hot-reload

Creative / Fun

  • Effect sequencer — timeline-based choreography of effects, colors, and transitions
  • Music BPM sync — lock effect speed to detected BPM (beat detection already exists)
  • Color extraction from image — upload photo, extract palette, use as gradient/cycle source
  • Transition effects — crossfade, wipe, or dissolve between sources/profiles instead of instant cut

Deep Dive: Notification Reactive Source

Type: New ColorStripSource (source_type: "notification") — normally outputs transparent RGBA, flashes on notification events. Designed to be used as a layer in a composite source so it overlays on top of a persistent base (gradient, effect, screen capture, etc.).

Trigger modes (both active simultaneously)

  1. OS listener (Windows)pywinrt + Windows.UI.Notifications.Management.UserNotificationListener. Runs in background thread, pushes events to source via queue. Windows-only for now; macOS (pyobjc + NSUserNotificationCenter) and Linux (dbus + org.freedesktop.Notifications) deferred to future.
  2. WebhookPOST /api/v1/notifications/{source_id}/fire with optional body { "app": "MyApp", "color": "#FF0000" }. Always available, cross-platform by nature.

Source config

os_listener: true           # enable Windows notification listener
app_filter:
  mode: whitelist|blacklist  # which apps to react to
  apps: [Discord, Slack, Telegram]
app_colors:                  # user-configured app → color mapping
  Discord: "#5865F2"
  Slack: "#4A154B"
  Telegram: "#26A5E4"
default_color: "#FFFFFF"     # fallback when app has no mapping
effect: flash|pulse|sweep    # visual effect type
duration_ms: 1500            # effect duration

Effect rendering

Source outputs RGBA color array per frame:

  • Idle: all pixels (0,0,0,0) — composite passes through base layer
  • Flash: instant full-color, linear fade to transparent over duration_ms
  • Pulse: sine fade in/out over duration_ms
  • Sweep: color travels across the strip like a wave

Each notification starts its own mini-timeline from trigger timestamp (not sync clock).

Overlap handling

New notification while previous effect is active → restart timer with new color. No queuing.

App color resolution

  1. Webhook body color field (explicit override) → highest priority
  2. app_colors mapping by app name
  3. default_color fallback

Top Picks (impact vs effort)

  1. Time-of-day + idle profile conditions — builds on existing profile/condition architecture
  2. MQTT output target — opens the door to an enormous IoT ecosystem
  3. Scene presets — purely frontend, bundles existing features into one-click UX