GENERATOREN + MEDIEN-VERTEILUNG + AUTOSTART-SETTINGS (33/33 E2E)
1) MADRIX-artige Generator-Layer (15 prozedurale Quellen): - engine.GENERATORS: ball (animiert), gradient, pinwheel (animiert), zone-plate (animiert), checkers, snow (Rauschen animiert), circular, spokes, smpte, gamut, red/green/blue/black/white - alle per gst-launch verifiziert, kombinierbar mit FX1/FX2 (Generator+FX gerendert, 28 Frames im Test) - add_generator + Pattern-Wechsel zur Laufzeit (ball->snow) mit Rebuild, Katalog-Endpoint /api/generators, UI-Dropdown im Layer-Tab - Generatoren in Projekten speicher-/ladbar (gradient nach Load aktiv) - Ungueltige Generator-IDs werden mit 400 abgewiesen 2) Medien-Verteilung ueber mehrere Server: - hms_app/distribution.py: Server-Check (/api/health), Remote-Medien-Liste, Streaming-Import mit Upload-Sicherung - config.servers: Remote-Server registrieren (Name+URL, HTTP-only, Duplikat-Schutz), /api/servers (online/offline + Medien), servers/import: Datei von Remote ins lokale Archiv ziehen - UI: Remote-Server in Einstellungen verwalten, Remote-Medien im Medien-Tab mit 'Ins Archiv ziehen'-Button - run.py --data-root: mehrere Instanzen auf einer Maschine mit getrennten config/media/projects-Ordnern - E2E mit ZWEI echten Servern: A registriert B, sieht B-Medien, zieht clip byte-identisch (SHA verifiziert) und spielt ihn als Layer; Offline-Erkennung nach B-Stop; 404/400-Faelle 3) Autostart in den Einstellungen: - Einstellungen: Autostart-Projekt-Dropdown (aus Projektliste), abwaehlbar; Projekte-Tab weiterhin mit Autostart-Button - FIX Settings-Save-Merge: POST /api/settings merged jetzt auf die AKTUELLEN Settings - Autostart und registrierte Server gehen beim Speichern anderer Einstellungen nicht mehr verloren (E2E: Autostart ueberlebt Settings-Save, FPS uebernommen) E2E: 33/33 PASS (Verteilung/Generatoren) + Regressionen: Projekte 25/25, App 14/14, FX 16/16 - alle gruen
This commit is contained in:
@@ -48,6 +48,9 @@ def main() -> int:
|
||||
help="setup_windows.ps1 / setup_linux.sh erzeugen")
|
||||
ap.add_argument("--port", type=int, default=None,
|
||||
help="Web-Port ueberschreibt config.json")
|
||||
ap.add_argument("--data-root", type=str, default=None,
|
||||
help="Eigener Datenordner fuer mehrere Instanzen "
|
||||
"(config/media/projekte dort statt neben run.py)")
|
||||
args = ap.parse_args()
|
||||
|
||||
if args.generate_setup:
|
||||
@@ -60,7 +63,12 @@ def main() -> int:
|
||||
ok = setupmod.check_and_install_dependencies()
|
||||
return 0 if ok else 1
|
||||
|
||||
settings = cfgmod.load(ROOT)
|
||||
DATA_ROOT = (Path(args.data_root).expanduser().resolve()
|
||||
if args.data_root else ROOT)
|
||||
if DATA_ROOT != ROOT:
|
||||
DATA_ROOT.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
settings = cfgmod.load(DATA_ROOT)
|
||||
if args.port is not None:
|
||||
settings["web"]["port"] = args.port
|
||||
|
||||
@@ -69,13 +77,13 @@ def main() -> int:
|
||||
cfg = setupmod.run_setup(settings)
|
||||
settings["web"]["port"] = cfg["port"]
|
||||
settings["output"]["fullscreen"] = cfg["fullscreen"]
|
||||
cfgmod.save(ROOT, settings)
|
||||
cfgmod.save(DATA_ROOT, settings)
|
||||
|
||||
library = MediaLibrary(settings, ROOT)
|
||||
library = MediaLibrary(settings, DATA_ROOT)
|
||||
library.ensure_dirs()
|
||||
engine = MediaEngine(settings, library)
|
||||
artnet = ArtNetInput(engine, settings)
|
||||
server = EngineServer(engine, artnet, library, settings, ROOT)
|
||||
server = EngineServer(engine, artnet, library, settings, DATA_ROOT)
|
||||
|
||||
# CLI-Dateien importieren und als Layer aktivieren
|
||||
for f in args.files:
|
||||
@@ -93,7 +101,7 @@ def main() -> int:
|
||||
auto = settings["engine"].get("autostart_project")
|
||||
if auto:
|
||||
from hms_app.projects import ProjectStore
|
||||
doc = ProjectStore(ROOT).load(str(auto))
|
||||
doc = ProjectStore(DATA_ROOT).load(str(auto))
|
||||
if doc is not None:
|
||||
if engine.load_state(doc.get("state") or {}):
|
||||
print(f"[Start] Autostart-Projekt geladen: {auto}")
|
||||
|
||||
Reference in New Issue
Block a user