From b5545d319878882b2b5a9efa46125e763d91d1d2 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Mon, 9 Feb 2026 19:25:45 +0300 Subject: [PATCH] Add auto-initialization to MSS and DXcam engines to fix WGC multi-monitor issue - MSS and DXcam now auto-initialize on first capture_display() call, matching WGC behavior - Remove engine.initialize() call from test endpoint to prevent WGC from initializing monitor 0 unnecessarily - This fixes the issue where testing WGC with secondary monitor would show borders on both displays Previously, calling engine.initialize() would initialize WGC's monitor 0 by default, then capture_display() would initialize the requested monitor, causing both to be active. Now all engines consistently auto-initialize only when needed. Co-Authored-By: Claude Sonnet 4.5 --- server/src/wled_controller/api/routes.py | 3 +-- .../src/wled_controller/core/capture_engines/dxcam_engine.py | 4 ++-- server/src/wled_controller/core/capture_engines/mss_engine.py | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/server/src/wled_controller/api/routes.py b/server/src/wled_controller/api/routes.py index 2070f06..036465f 100644 --- a/server/src/wled_controller/api/routes.py +++ b/server/src/wled_controller/api/routes.py @@ -930,9 +930,8 @@ async def test_template( ) ) - # Create and initialize engine + # Create engine (auto-initializes on first capture) engine = EngineRegistry.create_engine(test_request.engine_type, test_request.engine_config) - engine.initialize() # Run sustained capture test logger.info(f"Starting {test_request.capture_duration}s capture test with {test_request.engine_type}") diff --git a/server/src/wled_controller/core/capture_engines/dxcam_engine.py b/server/src/wled_controller/core/capture_engines/dxcam_engine.py index 4748925..7ab2927 100644 --- a/server/src/wled_controller/core/capture_engines/dxcam_engine.py +++ b/server/src/wled_controller/core/capture_engines/dxcam_engine.py @@ -168,12 +168,12 @@ class DXcamEngine(CaptureEngine): ScreenCapture object with image data Raises: - RuntimeError: If not initialized ValueError: If display_index doesn't match configured output RuntimeError: If capture fails """ + # Auto-initialize if not already initialized if not self._initialized: - raise RuntimeError("Engine not initialized") + self.initialize() # DXcam is configured for a specific output configured_output = self.config.get("output_idx", 0) diff --git a/server/src/wled_controller/core/capture_engines/mss_engine.py b/server/src/wled_controller/core/capture_engines/mss_engine.py index dc8fc28..1187f33 100644 --- a/server/src/wled_controller/core/capture_engines/mss_engine.py +++ b/server/src/wled_controller/core/capture_engines/mss_engine.py @@ -115,12 +115,12 @@ class MSSEngine(CaptureEngine): ScreenCapture object with image data Raises: - RuntimeError: If not initialized ValueError: If display_index is invalid RuntimeError: If capture fails """ + # Auto-initialize if not already initialized if not self._initialized: - raise RuntimeError("Engine not initialized") + self.initialize() try: # mss monitors[0] is the combined screen, monitors[1+] are individual displays