Demo mode provides a complete sandbox environment with: - Virtual capture engine (radial rainbow test pattern on 3 displays) - Virtual audio engine (synthetic music-like audio on 2 devices) - Virtual LED device provider (strip/60, matrix/256, ring/24 LEDs) - Isolated data directory (data/demo/) with auto-seeded sample entities - Dedicated config (config/demo_config.yaml) with pre-configured API key - Frontend indicator (DEMO badge + dismissible banner) - Engine filtering (only demo engines visible in demo mode) - Separate entry point: python -m wled_controller.demo (port 8081) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
47 lines
2.4 KiB
Markdown
47 lines
2.4 KiB
Markdown
# Phase 6: Demo-only Engine Resolution
|
|
|
|
**Status:** ⬜ Not Started
|
|
**Parent plan:** [PLAN.md](./PLAN.md)
|
|
**Domain:** backend
|
|
|
|
## Objective
|
|
Ensure demo engines are the primary/preferred engines in demo mode, and are hidden when not in demo mode. This makes demo mode act as a "virtual platform" where only demo engines resolve.
|
|
|
|
## Tasks
|
|
|
|
- [ ] Task 1: Modify `EngineRegistry.get_available_engines()` to filter out engines with `ENGINE_TYPE == "demo"` when not in demo mode (they report `is_available()=False` anyway, but belt-and-suspenders)
|
|
- [ ] Task 2: Modify `AudioEngineRegistry.get_available_engines()` similarly
|
|
- [ ] Task 3: In demo mode, `get_best_available_engine()` should return the demo engine (already handled by priority=1000, but verify)
|
|
- [ ] Task 4: Modify the `GET /api/v1/config/displays` endpoint: in demo mode, default to demo engine displays if no engine_type specified
|
|
- [ ] Task 5: Modify the audio engine listing endpoint similarly
|
|
- [ ] Task 6: Ensure `DemoDeviceProvider.discover()` only returns devices when in demo mode
|
|
- [ ] Task 7: End-to-end verification: start server in demo mode, verify only demo engines/devices appear in API responses
|
|
|
|
## Files to Modify/Create
|
|
- `server/src/wled_controller/core/capture_engines/factory.py` — Filter demo engines
|
|
- `server/src/wled_controller/core/audio/factory.py` — Filter demo engines
|
|
- `server/src/wled_controller/api/routes/system.py` — Display endpoint defaults
|
|
- `server/src/wled_controller/api/routes/audio_templates.py` — Audio engine listing
|
|
- `server/src/wled_controller/core/devices/demo_provider.py` — Guard discover()
|
|
|
|
## Acceptance Criteria
|
|
- In demo mode: demo engines are primary, real engines may also be listed but demo is default
|
|
- Not in demo mode: demo engines are completely hidden from all API responses
|
|
- Display list defaults to demo displays in demo mode
|
|
- Audio device list defaults to demo devices in demo mode
|
|
|
|
## Notes
|
|
- This is the "demo OS identifier" concept — demo mode acts as a virtual platform
|
|
- Be careful not to break existing behavior when demo=False (default)
|
|
- The demo engines already have `is_available() = is_demo_mode()`, so the main concern is UI defaults
|
|
|
|
## Review Checklist
|
|
- [ ] All tasks completed
|
|
- [ ] Code follows project conventions
|
|
- [ ] No unintended side effects
|
|
- [ ] Build passes
|
|
- [ ] Tests pass (new + existing)
|
|
|
|
## Handoff to Next Phase
|
|
<!-- Filled in after completion -->
|