Echte GPU-nahe GStreamer-Effekte, zur Laufzeit pro Layer schaltbar: - FX_CATALOG: 21 verfuegbare Effekte (gst-inspect verifiziert): blur, sharpen, color, contrast, brightness, gamma, pixelate, solarize, vertigo, edge, ripple, radioactv, revtv, quark, op, burn, dilate, warp, streak, aging, exclusion - FX1 + FX2 pro Layer (Kette: videoconvert ! FX1 ! videoconvert ! FX2 ! videoconvert - Muster gegen gst-launch verifiziert) - Intensitaet je FX live regelbar OHNE Rebuild (Property-Update direkt am Element, Frames laufen weiter 118->120) - Strukturwechsel (FX waehlen/entfernen) -> atomarer Rebuild mit Rollback; Intensitaeten werden auf neue Pipeline uebertragen - DMX: fx1_channel/fx2_channel optional konfigurierbar -> steuert FX-Intensitaet live (E2E: Kanal 20 = 255 -> Intensitaet 1.0) - UI: Layer-Editor mit FX1/FX2-Dropdown (Katalog via /api/fx) + Intensitaets-Slider je FX - /api/fx: Effekt-Katalog mit Label/Bereich fuer die UI - config.py: fx1_channel/fx2_channel in Validierung (optional, 1-512) - Ungueltige FX-IDs werden abgewiesen (fallback None) E2E-BEWEIS (16/16 PASS, im Container): 1 Health · 2 Katalog 21 Effekte · 3-8 alle Kern-FX enthalten · 9 Layer · 10 FX1 blur -> Rebuild laeuft (118 Frames) · 11 Intensitaet live ohne Ruckler · 12 FX2 color dazu (161 Frames) · 13 FX entfernen ok (180 Frames) · 14 fx1_channel konfiguriert · 15 DMX steuert FX-Intensitaet auf 1.0 · 16 ungueltiger FX abgewiesen Regression: kompletter App-E2E weiterhin 14/14 PASS (app=0 fx=0)
HMS MediaEngine
Arbeitstitel – der Produktname kann später ohne technische Auswirkung geändert werden.
Modularer Medienserver, VJ-System und generativer Licht-/Pixeleffekt-Server.
- Primärplattform: Windows 11 x64, portabel ohne Installation
- Weitere Zielplattformen: Linux x64, Raspberry Pi 5 / Linux ARM64
- Steuerung: lokale Webanwendung (Browser), Art-Net/DMX, spätere Timeline/Audio/KI
Leitsatz
Python steuert. Native Bibliotheken decodieren. Die GPU rendert. Der Browser bedient.
Projektstatus
Das Projekt befindet sich in Phase 0 – technischer Spike und Go/No-Go.
Aktueller Stand, Gates und nächste Aufgaben: STATUS.md
Fehlerverfolgung: ERRORS.md
Messergebnisse: TEST_REPORT.md
Bauplan (normativ): PLAN.md
Repository-Struktur (Eigentumsgrenzen)
/
├─ apps/ launcher, control_server, renderer, web
├─ native/ render_bridge (Rust oder C++, Entscheidung per ADR)
├─ packages/ domain, protocol, parameter_engine, render_backend,
│ capabilities, adaptive_quality, plugin_sdk, artnet,
│ cluster, content_sync, timeline, audio_analysis,
│ persistence
├─ plugins/ builtin (generators, filters, transitions, outputs), examples
├─ schemas/ project, plugin, ipc, cluster, api
├─ fixture_profiles/ master32, layer64
├─ tests/ unit, integration, rendering, cluster, visual,
│ performance, portability, e2e
├─ tools/ media_probe, shader_validate, artnet_emulator,
│ capability_probe, cluster_test_node, fixture_generator
├─ build/ windows, linux, raspberry_pi
└─ docs/ architecture, adr, plugin-sdk, api, fixture,
performance, operator
Code darf nicht beliebig zwischen Paketen quer importiert werden.
Entwicklung
# Python-Umgebung
uv sync
# Tests
uv run pytest
# Lint + Typprüfung
uv run ruff check .
Frontend (ab Phase 5): pnpm mit Lockfile, Vite-Build, siehe apps/web.
Phasenmodell
Die Entwicklung folgt strikt dem Phasenmodell aus PLAN.md Abschnitt 31.
Jede Phase endet mit einem Gate; keine neue Phase ohne grünes Gate.
| Phase | Inhalt | Gate |
|---|---|---|
| 0 | Technischer Spike, Machbarkeitsnachweis, ADRs | Gate 0: D3D11-HW-Decode, GPU-Compositing, Adaptive Quality, Art-Net-Latenz, portable Auslieferung reproduzierbar grün |
| 1 | Fundament: Supervisor, Control Core, Renderer, IPC, Node-Identität, Discovery, Paarung | Gate 1 |
| 2 | Medien-, Layer-, Basissync-Engine | Gate 2 |
| 3 | Plugin-SDK, Starterpaket Generatoren + Filter | Gate 3 |
| 4 | Art-Net-Fixtures Master32/Layer64 | Gate 4 |
| 5 | Vollständige Browser-Liveoberfläche | Gate 5 / V1.0-Kernrelease |
| 6+ | Cue/Timeline, Audio, Mapping, Pixel-Ausgabe, KI, Pi 5, Härtung | eigene Gates |
Verbindliche Regeln (Auszug)
- Keine Pixelverarbeitung in Python-Schleifen.
- Kein CPU-Readback im normalen HDMI-Renderpfad (Windows: D3D11Memory durchgängig).
- Kein Mock als fertige Funktion gemeldet; Hardwaretests nur auf echter Hardware.
- Jede Architekturabweichung braucht ein ADR und Freigabe.
- Projektschema versioniert, Migrationen getestet.
Dokumentation
- Architektur:
docs/architecture/ - ADRs:
docs/adr/(Vorlage:docs/adr/_template.md) - Plugin-SDK:
docs/plugin-sdk/(ab Phase 3) - Fixture-Handbücher:
docs/fixture/(ab Phase 4)
Lizenz
TBD – wird mit dem ersten Release entschieden (SBOM und Lizenzverzeichnis sind Teil der Release-Anforderungen, PLAN.md Abschnitt 30).