Files
led-sync-studio/.planning/PROJECT.md

4.2 KiB

LED Sync Studio

What This Is

Eine Cyberpunk-Terminal-App (Python/Textual) zur Steuerung von LED-Streifen, die auf einem Raspberry Pi 4B laeuft und per SSH bedient wird. Die App ermoeglicht sowohl Song-Choreografie (Animationen manuell auf Zeitpunkte im Song mappen) als auch Live-Reaktiv-Modus (Beat-Detection aus System-Audio). Die Animationen laufen lokal auf einem ESP32-C3, der per JSON-Kommandos ueber WiFi gesteuert wird.

Core Value

Songs mit LED-Animationen choreografieren und abspielen — der Nutzer baut Timeline-basierte Lichtshows zu seiner Musik.

Requirements

Validated

  • ESP32-C3 Firmware: Animationen lokal ausfuehren, JSON-Kommandos empfangen — Validated in Phase 1
  • Pi-zu-ESP Kommunikation ueber WiFi (JSON-Protokoll) — Validated in Phase 1
  • Vielzahl an LED-Animationen (8 Built-in: Chase, Pulse, Rainbow, Strobe, Color Wash, Breathe, Sparkle, Gradient Sweep) — Validated in Phase 1
  • Animationen mit Parametern konfigurierbar (Farbe/RGBW, Speed, Intensitaet) — Validated in Phase 1
  • 2 LED-Zonen unabhaengig steuerbar (WS2801 Schrank + SK6812 Wand) — Validated in Phase 1

Active

  • Song abspielen und an beliebiger Stelle stoppen/fortsetzen
  • Animationen auf Zeitpunkte im Song zuweisen (Choreografie-Editor)
  • Timeline-Ansicht (horizontal, Song laeuft links-rechts, Animationen als Bloecke)
  • Event-Liste-Ansicht (tabellarisch, Zeitpunkte mit Animationen)
  • Loop-Funktion fuer Animationen (Wiederholungen definieren)
  • Choreografien als Dateien speichern und laden (JSON/YAML)
  • Live-Reaktiv-Modus mit Beat-Detection aus System-Audio (PipeWire/PulseAudio)
  • Lokale Songdateien abspielen (MP3/FLAC/WAV)
  • Streaming-Dienst-Integration (Spotify o.ae.) als Audio-Quelle
  • Cyberpunk/Neon Terminal-UI mit Textual

Out of Scope

  • Frame-Streaming vom Pi zum ESP — ESP fuehrt Animationen lokal aus, Pi sendet nur Kommandos
  • Web-UI oder GUI — reines Terminal mit Textual
  • Mehr als ein ESP32 — beide Strips laufen an einem ESP32-C3

Context

  • Hardware: ESP32-C3 SuperMini mit 2 LED-Strips: WS2801 5m/160 LEDs (U-Turn um Schrank) und SK6812 5m/300 LEDs (Wand entlang)
  • Host: Raspberry Pi 4B, Zugriff per SSH vom Laptop
  • Kommunikation: Pi sendet JSON-Kommandos an ESP ueber WiFi — keine Frame-Daten, nur Animation-Name + Parameter
  • Audio: System-Audio-Stream (PipeWire/PulseAudio) fuer Beat-Detection und Song-Playback
  • Firmware: ESP32-C3 Firmware muss komplett neu gebaut werden (Arduino/ESP-IDF)
  • UI-Style: Cyberpunk/Neon — leuchtende Neonfarben, dunkler Hintergrund, Glitch-Aesthetic

Constraints

  • Platform: Raspberry Pi 4B (ARM, Linux) — App muss performant auf Pi laufen
  • Terminal: Textual TUI Framework (Python) — muss ueber SSH funktionieren
  • ESP: ESP32-C3 SuperMini — begrenzter Speicher, ein Core, WiFi only
  • LED-Protokoll: WS2801 (SPI/Clock+Data) und SK6812 (single-wire like NeoPixel) — unterschiedliche Ansteuerung
  • Latenz: JSON-Kommandos muessen schnell genug sein fuer musikalische Synchronisation

Key Decisions

Decision Rationale Outcome
Animationen laufen auf ESP, nicht gestreamt Reduziert WiFi-Last und Latenz, ESP ist autonom -- Pending
Ein ESP fuer beide Strips Einfacheres Setup, ESP32-C3 hat genug GPIOs -- Pending
Textual als UI-Framework Terminal-basiert, laeuft ueber SSH, Python-Oekosystem -- Pending
JSON ueber WiFi (Pi->ESP) Einfach, flexibel, kein Kabel noetig -- Pending

Evolution

This document evolves at phase transitions and milestone boundaries.

After each phase transition (via /gsd:transition):

  1. Requirements invalidated? -> Move to Out of Scope with reason
  2. Requirements validated? -> Move to Validated with phase reference
  3. New requirements emerged? -> Add to Active
  4. Decisions to log? -> Add to Key Decisions
  5. "What This Is" still accurate? -> Update if drifted

After each milestone (via /gsd:complete-milestone):

  1. Full review of all sections
  2. Core Value check — still the right priority?
  3. Audit Out of Scope — reasons still valid?
  4. Update Context with current state

Last updated: 2026-04-03 after Phase 1 completion