11 KiB
Feature Landscape
Domain: LED Choreography / Music-Synced Light Show Controller Researched: 2026-04-03 Confidence: MEDIUM — based on xLights, WLED, LedFx, Jinx! analysis; ESP32/Pi-specific constraints from community sources
Reference Products Surveyed
| Product | Model | Relevance |
|---|---|---|
| xLights | Timeline-based sequencer, open source | Direct analog — timeline + audio + multi-model |
| WLED | ESP32 firmware + web UI | What runs on the ESP side; preset/segment model |
| LedFx | Network audio-reactive engine | Live reactive reference implementation |
| Jinx! | LED matrix control, audio/MIDI sync | Beat detection + sound-to-light baseline |
| VenueMagic | Professional show control | High-end cue-list model |
Table Stakes
Features users expect. Missing = product feels incomplete or unusable.
| Feature | Why Expected | Complexity | Notes |
|---|---|---|---|
| Audio waveform display on timeline | Every LED sequencer shows this; without it, manual timing is blind | Medium | Display audio amplitude/waveform as scrubbing reference |
| Play / pause / seek | Fundamental transport controls | Low | Must work while animation preview is live on LEDs |
| Per-zone independent control | Both zones (WS2801 + SK6812) behave differently; single global control frustrates | Low | Two named zones minimum |
| Block-based timeline editor | xLights, Vixen, and all sequencers use drag-drop blocks on a horizontal track | High | Blocks represent animation events at timestamps |
| Animation library (built-in effects) | Users expect ready-made animations: chase, pulse, rainbow, strobe, color wash | Medium | At minimum 8–12 distinct named effects per zone |
| Per-animation parameter config | Speed, color, intensity — parameterization is baseline since Jinx! v1 | Medium | Each effect has configurable fields exposed in sidebar/panel |
| Save / load choreography files | Without persistence, no session survives a restart | Low | JSON or YAML; portable between sessions |
| Live reactive mode (beat detection) | Users familiar with WLED/LedFx expect this as a parallel mode | High | System audio capture via PipeWire/PulseAudio; onset/beat detection |
| Visual feedback of current position | Playhead showing current song position during playback | Low | Mandatory for sequencing work |
| Loop / repeat control for blocks | Avoids manually placing repeated blocks; xLights, WLED playlists do this | Low | Repeat N times or until next event |
| Manual timing mark placement | xLights "tapper" workflow: press key on beat to stamp marks | Low | Core ergonomic feature for choreography |
Differentiators
Features that set the product apart. Not universally expected, but create strong value.
| Feature | Value Proposition | Complexity | Notes |
|---|---|---|---|
| Cyberpunk TUI (Textual, SSH-native) | No existing LED sequencer runs as a terminal UI over SSH; this is genuinely unique | High | xLights/LedFx all require a desktop or browser on the same machine |
| Dual-mode in one tool (timeline + live reactive) | Most tools are one or the other; switching modes without restarting is rare | High | Unified session state; reactive mode as a layer on top of timeline |
| Zone-aware beat-reactive routing | Route bass frequencies → Zone A, treble → Zone B | Medium | LedFx does this with virtuals; no TUI equivalent exists |
| Auto-beat detection timing marks | VAMP-style beat analysis that stamps timing marks automatically, then user refines | High | xLights uses VAMP plugins; librosa or aubio in Python are viable |
| Streaming audio source (Spotify) | Playing from Spotify while syncing LEDs to it bridges the "my music is streaming" gap | Very High | Requires Spotify Connect or OS audio loopback — treat as stretch goal |
| Animation preview in-terminal | ASCII/block-character real-time preview of what LEDs will do, without needing to look at physical strip | High | Textual widget, color simulation |
| Per-block transition effects | Crossfade, cut, dissolve between adjacent animation blocks | Medium | WLED playlists have transition time; xLights has layer blending |
| Export / import xLights sequences | Import existing xLights .xsq files to reuse community-built shows | Very High | Complex format; defer unless strong demand |
| Scripted effect language | Jinx!Script-style: define custom animation logic in a mini-DSL | Very High | Not needed for V1; advanced power-user feature |
| Undo / redo | Timeline editors without undo are painful; all quality DAWs have it | Medium | Required for comfortable editing; Textual app state management |
Anti-Features
Features to deliberately NOT build.
| Anti-Feature | Why Avoid | What to Do Instead |
|---|---|---|
| Web UI / browser interface | Contradicts the entire terminal-SSH design; adds a full stack (server, frontend) | SSH + Textual TUI is the whole point |
| Frame-by-frame pixel streaming from Pi to ESP | WiFi jitter (47ms+ on ESP8266, 12ms on ESP32) makes real-time frame data unreliable; kills bandwidth | ESP executes animations locally; Pi sends only named commands + params |
| Support for more than one ESP32 | Multiplies coordination complexity exponentially; no hardware for it | Keep single ESP32-C3 as sole controller |
| Cloud sync / multi-user collaboration | No network dependency is a feature for a local-first tool | Local files only (JSON/YAML) |
| DMX / E1.31 / sACN protocol support | xLights is already excellent at this; out of hardware scope | JSON-over-WiFi to ESP32 is the transport layer |
| Mobile app | Out of scope, contradicts SSH-terminal model | Terminal is accessible anywhere SSH works |
| 2D matrix effects | Hardware is 1D strips; 2D matrix effects (WLED matrix, xLights matrix) are irrelevant | All effects are 1D strip effects |
| Automatic Spotify token management (OAuth flow) | Extremely complex auth flow through terminal; security risk | If Spotify is implemented, use device auth flow or OS-level audio capture instead |
Feature Dependencies
Audio waveform display ──────────────────> Audio file loading (MP3/FLAC/WAV)
|
Manual timing mark placement ──────────────> Audio waveform display
|
Auto-beat detection timing marks ──────────> Audio waveform display + librosa/aubio
Block-based timeline editor ───────────────> Per-zone independent control
|
Per-block transition effects ──────────────> Block-based timeline editor
|
Loop / repeat control ─────────────────────> Block-based timeline editor
Live reactive mode ────────────────────────> Beat detection (onset/BPM)
|
Zone-aware beat-reactive routing ──────────> Live reactive mode + per-zone control
Animation library ─────────────────────────> (standalone, no deps)
|
Per-animation parameter config ────────────> Animation library
|
Animation preview in-terminal ─────────────> Animation library + Per-animation parameter config
Save / load choreography ─────────────────> Block-based timeline editor (saves timeline state)
Undo / redo ───────────────────────────────> Block-based timeline editor (wraps edit operations)
Dual-mode (timeline + live reactive) ─────> Timeline editor + Live reactive mode (both complete first)
MVP Recommendation
Build in this order — each tier unblocks the next:
Tier 1 — Foundation (without this, nothing works):
- Audio file loading and playback (MP3/FLAC/WAV)
- Play / pause / seek transport
- Per-zone control model (WS2801 + SK6812 as named zones)
- Animation library (8–12 built-in effects with parameter config)
- Pi → ESP JSON command protocol
Tier 2 — Core Editor (the actual product): 6. Audio waveform display in timeline 7. Block-based timeline editor (place/move/resize/delete animation blocks) 8. Manual timing mark placement (tapper) 9. Loop / repeat per block 10. Save / load choreography (JSON)
Tier 3 — Live Reactive (second major mode): 11. System audio capture (PipeWire/PulseAudio) 12. Beat / onset detection 13. Live reactive mode (beat → trigger animation)
Tier 4 — Polish (quality of life): 14. Undo / redo 15. Zone-aware beat-reactive routing 16. Auto-beat detection timing marks (librosa/aubio) 17. Per-block transition effects
Defer indefinitely:
- Spotify integration (very high complexity, unclear if system audio loopback is simpler)
- Animation preview in-terminal (nice to have, not critical when you have physical LEDs)
- Export/import xLights sequences
Key Observations
What xLights does that this tool must do:
- Waveform display with zoom and timing marks is non-negotiable for manual sync work
- Timing tracks with auto-generated beat marks (xLights uses VAMP plugins; Python has
librosa.beat.beat_track) dramatically speed up choreography
What WLED does that informs ESP firmware design:
- Segments = zones; presets = named animation configs; playlists = ordered preset sequences with timing
- The WLED mental model (preset per zone, triggered by command) closely matches what this project's JSON protocol needs
What LedFx does that informs live reactive mode:
- Melbank (mel-scale filterbank) over raw FFT for audio features is the right approach — perceptually uniform frequency buckets
- Latency target for reactive mode: ~16ms audio-to-LED pipeline (LedFx achieves this)
- Virtual device layering (effect → post-process → device) is a useful architecture even for two zones
Latency reality check (MEDIUM confidence — community sources):
- WiFi jitter on ESP32: ~12ms variance (acceptable for music sync at ~70ms total budget)
- System audio monitoring buffer latency: 100–300ms (must be accounted for in beat detection offset)
- Command-based approach (vs frame streaming) sidesteps most latency problems — the animation runs autonomously on ESP, only start/stop/param-change commands cross WiFi
Sources
- xLights Manual (timing tracks, waveform, effects): https://manual.xlights.org/xlights/
- xLights 2025 release notes: https://xlights.org/2025/
- WLED segments/presets/playlists: https://kno.wled.ge/features/segments/ and https://kno.wled.ge/features/presets/
- LedFx documentation: https://docs.ledfx.app/en/latest/
- LedFx DeepWiki architecture: https://deepwiki.com/LedFx/LedFx
- Jinx! LED Matrix Control user manual: https://www.hbksaar.de/vorlesungen/details/raumstrategien-mit-kabelgebundenen-farben?file=files/user_accounts/user_46/jinx-usermanual-2.4.pdf
- DIY WiFi LED sync pitfalls (latency/jitter): https://www.oreateai.com/blog/diy-wifi-light-shows-syncing-your-leds-without-breaking-the-bank/b284c3a86d52b27010cd88fe5646e558
- WLED audio reactive (WLED MoonModules): https://mm.kno.wled.ge/WLEDSR/Reactive-Animations/
- ESP32 audio reactive LED strip: https://www.esp32s.com/blog/ultimate-guide-to-building-a-sound-reactive-led-system-with-esp32-and-wled/