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>
5.7 KiB
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)
- 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. - Webhook —
POST /api/v1/notifications/{source_id}/firewith 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
- Webhook body
colorfield (explicit override) → highest priority app_colorsmapping by app namedefault_colorfallback
Top Picks (impact vs effort)
- Time-of-day + idle profile conditions — builds on existing profile/condition architecture
- MQTT output target — opens the door to an enormous IoT ecosystem
- Scene presets — purely frontend, bundles existing features into one-click UX