Add capture template system with in-memory defaults and split device settings UI
Some checks failed
Validate / validate (push) Failing after 8s

- Generate default templates (MSS, DXcam, WGC) in memory from EngineRegistry at startup
- Only persist user-created templates to JSON, skip defaults on load/save
- Add capture_template_id to Device model and DeviceCreate schema
- Remember last used template in localStorage, use it for new devices with fallback
- Split Device Settings dialog into General Settings and Capture Settings
- Add capture settings button (🎬) to device card
- Separate default and custom templates with visual separator in Templates tab
- Add capture engine integration to ProcessorManager
- Add CLAUDE.md with git commit/push policy and server restart instructions
- Add en/ru localization for all new UI elements

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-10 02:43:49 +03:00
parent b5545d3198
commit 5370d80466
15 changed files with 772 additions and 106 deletions

View File

@@ -15,6 +15,7 @@ from wled_controller.api.routes import init_dependencies
from wled_controller.config import get_config
from wled_controller.core.processor_manager import ProcessorManager
from wled_controller.storage import DeviceStore
from wled_controller.storage.template_store import TemplateStore
from wled_controller.utils import setup_logging, get_logger
# Initialize logging
@@ -26,6 +27,7 @@ config = get_config()
# Initialize storage and processing
device_store = DeviceStore(config.storage.devices_file)
template_store = TemplateStore(config.storage.templates_file)
processor_manager = ProcessorManager()
@@ -59,7 +61,7 @@ async def lifespan(app: FastAPI):
logger.info("All API requests require valid Bearer token authentication")
# Initialize API dependencies
init_dependencies(device_store, processor_manager)
init_dependencies(device_store, template_store, processor_manager)
# Load existing devices into processor manager
devices = device_store.get_all_devices()
@@ -71,6 +73,7 @@ async def lifespan(app: FastAPI):
led_count=device.led_count,
settings=device.settings,
calibration=device.calibration,
capture_template_id=device.capture_template_id,
)
logger.info(f"Loaded device: {device.name} ({device.id})")
except Exception as e:
@@ -165,5 +168,5 @@ if __name__ == "__main__":
host=config.server.host,
port=config.server.port,
log_level=config.server.log_level.lower(),
reload=True,
reload=False, # Disabled due to watchfiles infinite reload loop
)