πŸŽͺ CRUMBLIVE - Complete Live Performance System

FunkFox 🦊 feat. Schnippsi πŸŽ€ feat. Dumbo 🐘 (Hardware)

"Beardyman macht's mit seiner Stimme - wir machen's mit dem Wald!" 🌲


🎯 Die Vision

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                                             β”‚
β”‚                         πŸŽͺ CRUMBLIVE STACK πŸŽͺ                              β”‚
β”‚                                                                             β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚   β”‚ 🎀 IN   β”‚    β”‚ 🎹 MIDI β”‚    β”‚ πŸ’‘ DMX  β”‚    β”‚ πŸŽ›οΈ CTRL β”‚                β”‚
β”‚   β”‚ Audio   β”‚    β”‚ IN/OUT  β”‚    β”‚ WLED    β”‚    β”‚ Tracker β”‚                β”‚
β”‚   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                β”‚
β”‚        β”‚              β”‚              β”‚              β”‚                      β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                      β”‚
β”‚                              β”‚                                              β”‚
β”‚                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                   β”‚
β”‚                    β”‚   🌲 CRUMBLIVE    β”‚                                   β”‚
β”‚                    β”‚      SERVER       β”‚                                   β”‚
β”‚                    β”‚                   β”‚                                   β”‚
β”‚                    β”‚  β€’ Node.js        β”‚                                   β”‚
β”‚                    β”‚  β€’ WebSocket      β”‚                                   β”‚
β”‚                    β”‚  β€’ MQTT Bridge    β”‚                                   β”‚
β”‚                    β”‚  β€’ FFT Analysis   β”‚                                   β”‚
β”‚                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                   β”‚
β”‚                              β”‚                                              β”‚
β”‚        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚
β”‚        β”‚                     β”‚                     β”‚                       β”‚
β”‚   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                  β”‚
β”‚   β”‚ 🎡 DJ   β”‚          β”‚ πŸ‘οΈ VJ     β”‚         β”‚ πŸ’‘ LJ   β”‚                  β”‚
β”‚   β”‚ Strudel β”‚          β”‚ Hydra     β”‚         β”‚ WLED    β”‚                  β”‚
β”‚   β”‚         β”‚          β”‚ CrumbVJ   β”‚         β”‚ DMX     β”‚                  β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚
β”‚                                                                             β”‚
β”‚                         πŸ”Š β†’ πŸ‘οΈ β†’ πŸ’‘ β†’ πŸŽͺ                                  β”‚
β”‚                       Sound  Visual  Light  AUDIENCE                       β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βœ… Was schon funktioniert (v0.9)

[x] Strudel Patterns (9 Missions)
[x] CrumbVJ Controller + Display
[x] WebSocket Sync
[x] Hydra Visuals (Genre Presets)
[x] Audio-Reactive (FFT)
[x] HUE Slider fΓΌr EFX
[x] WAV Export
[x] Multiplayer (2+ Browser)

🎀 FEATURE 1: Audio Input

Was Strudel bereits kann:

// Microphone Input!
$: sound("in").gain(0.8)

// Mit Effekten:
$: sound("in")
  .delay(0.5)
  .room(0.3)
  .lpf(sine.range(500, 2000).slow(4))

// Live Sampling (Beatbox style!)
$: sound("in")
  .slice(8, "<0 3 2 7 1 4 6 5>")  // Slicen wie ein Sampler!

Was wir bauen:

// Audio File Player
samples({
  'track': 'https://url.to/mixcloud-rip.mp3'
})
$: s("track").begin(0).end(1).slow(60)  // Ganzer Track

// Live Input zu Hydra FFT
// β†’ CrumbLive Server nimmt Audio Input
// β†’ Analysiert FFT
// β†’ Sendet an alle Clients via WebSocket
// β†’ Hydra reagiert auf LIVE Musik!

Setup:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🎀 Mic      β”‚     β”‚ 🎧 DJ Mixer β”‚     β”‚ πŸ“ Files    β”‚
β”‚ Beatbox     β”‚     β”‚ Line In     β”‚     β”‚ WAV/MP3     β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚                   β”‚                   β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚  Web Audio API  β”‚
                  β”‚  FFT Analysis   β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚                         β”‚
         β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”
         β”‚ Strudel β”‚              β”‚  CrumbVJ  β”‚
         β”‚ sound() β”‚              β”‚  a.fft[]  β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🎹 FEATURE 2: MIDI IN/OUT

Was Strudel bereits kann:

// MIDI Output - zu Reason, Ableton, Hardware!
$: note("<c4 e4 g4 e4>")
  .midi()           // Sendet MIDI!
  .midichan(1)      // Kanal 1

// MIDI Input - von Controller!
$: ccv(74)          // CC #74 Value
  .range(200, 2000) // Map zu Frequenz
  // β†’ Als Filter nutzen!

// Komplettes MIDI Setup:
$: note("<c3 e3 g3 b3>")
  .midi()
  .midichan(1)
  .velocity(0.8)
  .ccv(1, 64)       // Modwheel

CrumbLive MIDI Bridge:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                                             β”‚
β”‚   🎹 MIDI IN                              🎹 MIDI OUT                       β”‚
β”‚   ──────────                              ───────────                       β”‚
β”‚                                                                             β”‚
β”‚   Akai APC      ─┐                    β”Œβ”€β–Ί Reason                           β”‚
β”‚   Launchpad     ─┼──► CrumbLive ──────┼─► Ableton                          β”‚
β”‚   Beatstep      ──      Server        β”œβ”€β–Ί Hardware Synth                   β”‚
β”‚   Any Controllerβ”€β”˜                    └─► MIDI Thru                        β”‚
β”‚                                                                             β”‚
β”‚   Features:                                                                 β”‚
β”‚   β€’ Button β†’ Scene Wechsel                                                 β”‚
β”‚   β€’ Fader β†’ slider() Werte                                                 β”‚
β”‚   β€’ Pads β†’ Sample Trigger                                                  β”‚
β”‚   β€’ Encoder β†’ Parameter Kontrolle                                          β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Node.js MIDI Bridge:

// npm install midi
const midi = require('midi')
const input = new midi.Input()
const output = new midi.Output()

input.on('message', (deltaTime, message) => {
  const [status, note, velocity] = message

  // CC β†’ WebSocket β†’ Strudel slider
  if ((status & 0xF0) === 0xB0) {
    wss.broadcast({ type: 'cc', cc: note, value: velocity })
  }

  // Note β†’ WebSocket β†’ Sample Trigger
  if ((status & 0xF0) === 0x90) {
    wss.broadcast({ type: 'note', note, velocity })
  }
})

πŸ’‘ FEATURE 3: DMX & WLED Integration

Architektur:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                                             β”‚
β”‚   🎡 AUDIO FFT                                                             β”‚
β”‚        β”‚                                                                    β”‚
β”‚        β–Ό                                                                    β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      MQTT       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
β”‚   β”‚ CrumbLive   β”‚ ───────────────►│   ESP32     β”‚                          β”‚
β”‚   β”‚   Server    β”‚                 β”‚   WLED      β”‚                          β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                          β”‚
β”‚        β”‚                                 β”‚                                  β”‚
β”‚        β”‚ WebSocket                       β”‚ LED Data                         β”‚
β”‚        β–Ό                                 β–Ό                                  β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
β”‚   β”‚   Hydra     β”‚                 β”‚ πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘  β”‚                          β”‚
β”‚   β”‚   Visuals   β”‚                 β”‚ LED Strip   β”‚                          β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
β”‚                                                                             β”‚
β”‚   GENRE β†’ COLOR MAPPING:                                                   β”‚
β”‚   🟒 Reggae  β†’ Green/Gold/Red                                              β”‚
β”‚   🟣 House   β†’ Neon Pink/Cyan                                              β”‚
β”‚   πŸ”΄ DnB     β†’ Red/Orange strobe                                           β”‚
β”‚   πŸ”΅ Ambient β†’ Slow blue fade                                              β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

MQTT β†’ WLED:

// npm install mqtt
const mqtt = require('mqtt')
const client = mqtt.connect('mqtt://localhost:1883')

// FFT β†’ WLED
function sendToWLED(fft, scene) {
  const colors = genreColors[scene]

  // WLED JSON API
  const payload = {
    on: true,
    bri: Math.floor(fft[0] * 255),  // Bass β†’ Brightness
    seg: [{
      col: [
        colors.primary,
        colors.secondary
      ],
      fx: scene === 'dnb' ? 12 : 0,  // Strobe fΓΌr DnB
      sx: Math.floor(fft[1] * 255)   // Low-mid β†’ Speed
    }]
  }

  client.publish('wled/all', JSON.stringify(payload))
}

ESP32 + WLED Setup:

Hardware:
β”œβ”€β”€ ESP32 DevKit
β”œβ”€β”€ WS2812B LED Strip (5V)
β”œβ”€β”€ 5V Power Supply
└── WLAN Verbindung

Software:
β”œβ”€β”€ WLED Firmware (https://install.wled.me)
β”œβ”€β”€ MQTT Sync aktivieren
└── CrumbLive als MQTT Source

β†’ QDRANT β†’ Crumbforest:

// Scene-Erkennung mit Embeddings!
// Audio Features β†’ QDRANT β†’ Γ„hnlichste Genre β†’ WLED Preset

async function detectScene(fftFeatures) {
  const embedding = await model.embed(fftFeatures)

  const results = await qdrant.search('scenes', {
    vector: embedding,
    limit: 1
  })

  return results[0].payload.scene  // 'reggae', 'house', etc.
}

πŸŽ›οΈ FEATURE 4: Tracker/Controller UI

Vision: Ableton-Style Grid fΓΌr Strudel

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸŽ›οΈ CRUMB TRACKER                                          [β–Ά] [β– ] [●REC] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                             β”‚
β”‚  SCENES        β”‚ 1 β”‚ 2 β”‚ 3 β”‚ 4 β”‚ 5 β”‚ 6 β”‚ 7 β”‚ 8 β”‚                          β”‚
β”‚  ─────────────────────────────────────────────────                          β”‚
β”‚  πŸ₯ Drums      β”‚[β– ]β”‚[ ]β”‚[β– ]β”‚[ ]β”‚[β– ]β”‚[ ]β”‚[β– ]β”‚[ ]β”‚  ← Mute/Unmute           β”‚
β”‚  🎸 Bass       β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚[ ]β”‚[ ]β”‚[ ]β”‚[ ]β”‚                          β”‚
β”‚  🎹 Keys       β”‚[ ]β”‚[ ]β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚[ ]β”‚[ ]β”‚                          β”‚
β”‚  🎀 Vox        β”‚[ ]β”‚[ ]β”‚[ ]β”‚[ ]β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚[β– ]β”‚                          β”‚
β”‚  ─────────────────────────────────────────────────                          β”‚
β”‚                                                                             β”‚
β”‚  PARAMETERS                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ Filter ════════════●═══════════════════════ 1200Hz β”‚                    β”‚
β”‚  β”‚ Room   ════●═══════════════════════════════  0.3   β”‚                    β”‚
β”‚  β”‚ Delay  ════════════════●═══════════════════  0.5   β”‚                    β”‚
β”‚  β”‚ Gain   ════════════════════════●═══════════  0.8   β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                                                                             β”‚
β”‚  PATTERN EDITOR                                                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚ bd . . . bd . . . bd . . . bd . . .               β”‚                    β”‚
β”‚  β”‚ .  . . . sn . . . .  . . . sn . . .               β”‚                    β”‚
β”‚  β”‚ hh hh hh hh hh hh hh hh hh hh hh hh hh hh hh hh   β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Implementation:

// React Component fΓΌr Track
function Track({ name, pattern, muted, onMute, onEdit }) {
  return (
    <div className="track">
      <span className="name">{name}</span>
      <button onClick={onMute}>{muted ? '[ ]' : '[β– ]'}</button>
      <div className="pattern">{pattern}</div>
    </div>
  )
}

// Strudel Integration
const tracks = {
  drums: { pattern: 'bd ~ bd ~', muted: false },
  bass: { pattern: 'c2 ~ g2 ~', muted: false },
  keys: { pattern: '<Am G F E>', muted: true }
}

// Generate Strudel code from tracks
function generateCode(tracks) {
  return Object.entries(tracks)
    .filter(([_, t]) => !t.muted)
    .map(([name, t]) => `$: ${t.pattern} // ${name}`)
    .join('\n')
}

πŸ—ΊοΈ ROADMAP

Phase 1: Audio Bridge (v1.0)

[ ] Audio Input Node Server
[ ] FFT β†’ WebSocket
[ ] Live Mic to Hydra
[ ] File Playback (WAV/MP3)

Phase 2: MIDI Bridge (v1.1)

[ ] WebMIDI in Browser
[ ] Node.js MIDI Bridge
[ ] Controller Mapping UI
[ ] MIDI Out to DAW

Phase 3: Light Bridge (v1.2)

[ ] MQTT Integration
[ ] WLED Presets per Genre
[ ] DMX Bridge (Art-Net)
[ ] ESP32 Templates

Phase 4: Tracker UI (v1.3)

[ ] Scene Grid
[ ] Track Mute/Solo
[ ] Pattern Editor
[ ] Parameter Automation

Phase 5: Crumbforest Integration (v2.0)

[ ] QDRANT Scene Detection
[ ] Auto-Genre via Embeddings
[ ] AI Pattern Suggestions
[ ] Collaborative Jam Sessions

🐘 Hardware Corner (Dumbo's Domain)

Minimal Setup:

β”œβ”€β”€ Laptop + Browser
β”œβ”€β”€ Audio Interface (optional)
└── Internet fΓΌr strudel.cc

Pro Setup:

β”œβ”€β”€ Laptop + Local Strudel
β”œβ”€β”€ Audio Interface (4+ channels)
β”œβ”€β”€ MIDI Controller (Launchpad, APC)
β”œβ”€β”€ ESP32 + WLED Strip
β”œβ”€β”€ Beamer/LED Wall
β”œβ”€β”€ PA System
└── Crumbforest Server (optional)

DIY ESP32 WLED Box:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ”² ESP32 WLED Controller β”‚
β”‚                           β”‚
β”‚  [PWR] [USB] [LED OUT]    β”‚
β”‚                           β”‚
β”‚  β€’ WLAN: CrumbLive        β”‚
β”‚  β€’ MQTT: Enabled          β”‚
β”‚  β€’ Sync: UDP Multicast    β”‚
β”‚                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ™ Inspiration

  • Beardyman - One-Man-Band Live Looping
  • Strudel/TidalCycles - Live Coding
  • Hydra - Live Visual Coding
  • WLED - Open Source LED Control
  • Crumbforest - Open Knowledge Sharing

🌲 Crumbforest Spirit

Nullfeld           = Jede Frage willkommen
Wer fragt, wΓ€chst  = Neugier ist die WΓ€hrung
Codex              = Wissen gehΓΆrt allen

Atmen β†’ Wachsen β†’ Teilen β†’ Atmen...

Kindgerecht. Immer. 🌱

     🎀 IN β†’ 🎡 PROCESS β†’ πŸ‘οΈ VISUAL β†’ πŸ’‘ LIGHT β†’ πŸŽͺ STAGE

     Beardyman Style - aber Open Source!

     🌲 CRUMBLIVE - Where Sound Becomes Light 🌲

     Wuuuhuuuuu! πŸ¦‰βœ¨