BEWEISE (alle im Container verifiziert, System-Python 3.14 + GStreamer 1.28.4): - 2 Layer echtes Video gemischt (Ball + SMPTE), 300 Frames gerendert - MJPEG-Browser-Stream: 74 JPEG-Frames / 1.4MB in 5s - ECHTES ArtDMX-Paket (Spec-konform, 512 Kanäle): steuert Master 0.502, Layer1 0.502, Layer2 0.126 - sichtbar im Status - REST-API: Master/Layer-Alpha/Blackout/Playback live steuerbar - Blackout: effektives Alpha 0.0 run.py (903 Zeilen, Single-File, keine weiteren Abhängigkeiten): - MediaEngine: compositor-Mixing bis 4 Layer mit xpos/ypos/zorder, alpha je Pad (Laufzeit), Loop (EOS-Seek), BGRA, optionaler Fullscreen-Zweig (Windows d3d11videosink / Linux autovideosink) - ArtNetInput: ArtDMX auf UDP 6454, OpCode/ProtVer validiert - EngineServer: ThreadingHTTPServer mit /stream.mjpg, /api/status, /api/health, POST /api/master|layers|blackout|playback - Web-UI: dunkles Layout, Live-Preview, Master/Layer-Slider, Play/Pause/BLK, DMX-Paket-Counter, FPS-Zähler, Diagnose-Tabelle - DMX-Map Demo: Ch1=Master Ch2-5=Layer Ch6=Play Ch8=Blackout - Setup-Dialog (--setup, tkinter): Video-Auswahl, Port, Fullscreen - Bootstrap (--bootstrap): GStreamer-Install Linux/Windows - setup_windows.ps1 + setup_linux.sh: einmalige Erstinstallation (GStreamer MSI/Python auf Windows; apt/dnf auf Linux) Fixes: Compositor-Pads zuerst definieren (parse_launch-Reihenfolge), Content-Length als bytes (Binär-Stream), Blackout dimmt nur (pausiert nicht), JS-Slider-Template korrigiert Nutzung: python3 run.py [videos] [--port N] [--output] [--setup]
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).