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>
119 lines
5.7 KiB
Markdown
119 lines
5.7 KiB
Markdown
# 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. **Webhook** — `POST /api/v1/notifications/{source_id}/fire` with optional body `{ "app": "MyApp", "color": "#FF0000" }`. Always available, cross-platform by nature.
|
|
|
|
### Source config
|
|
|
|
```yaml
|
|
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
|