# Current Feature Inventory This inventory was collected from the current `app/` codebase and is the scope target for the clean rebuild. ## Core control flow - Mapping/project open, save, and save-as - Startup auto-load of sample mapping - Live scene and Next scene - FOH mode with `Go` and `Fade Go` - Tempo transport and transition time control - Utility modes such as blackout and single-tile white test ## Pattern system Current built-in patterns: - `solid` - `checker` - `row_gradient` - `column_gradient` - `center_pulse` - `sparkle` - `breathing` - `wave_line` - `scan` - `arrow` - `scan_dual` - `sweep` - `saw` - `two_dots` - `strobe` - `stopwatch` - `snake` Pattern parameter surface in the current app includes: - brightness - fade / smoothing - tempo multiplier - direction - checker mode - scan style and angle - on/off width - band thickness - flip horizontal / vertical - strobe mode and duty cycle - stopwatch mode - color mode - primary / secondary colors - palette - symmetry - center pulse mode - step size - block size - pixel group size - randomness ## Preview and UI - Main desktop Qt window - Pattern panel - Preset browser - Tile preview / technical preview / LEDs-only preview - Fullscreen preview window - Selected tile panel - Utility controls - Output diagnostics panel ## Mapping and editing - XML mapping load/save/validation - Tile table editing - Segment table editing - Raw XML editor - Calibration and enable flags per tile - Controller IP / host / name / MAC metadata persistence ## WLED-assisted mapping - Network scan for WLED devices - Device discovery via `/json/info` and `/json` - Per-device identify action - Tile assignment workflow inside Mapping Settings - Immediate persistence back to the mapping file ## Presets - JSON-backed preset storage - Seed presets on first run - Save, load, and delete presets ## Output - Preview backend - DDP backend for WLED - Art-Net backend seam - Output enable/disable - Output FPS target - Render FPS / Send FPS / Output health diagnostics - Controller-side FPS polling for WLED live mode ## Performance pain points in the current code - A lot of per-frame object churn: - `PreviewFrame` - `TileFrame` - `TilePatternSample` - many `RGBColor` instances - nested `dict[str, list[RGBColor]]` payloads - Per-frame rebuilding of LED pixel lists for each segment - Preview and output coordination still centered around one controller loop - Multiple render engines and transition helpers duplicating state - DDP payload generation starts from nested Python objects instead of a compact frame buffer ## Rebuild priorities for Infinity_Vis_1 - fixed-size runtime state - lower per-frame allocation - preview cadence separated from hardware output cadence - controller-first payload generation - shared-IP multi-tile controller topology as a first-class concept - clean feature layering so UI, preview, render, and output can scale independently