45 lines
1.5 KiB
Markdown
45 lines
1.5 KiB
Markdown
# Infinity_Vis_1 Architecture
|
|
|
|
## Design goal
|
|
|
|
Make the render path cheaper than the current application by replacing
|
|
object-heavy frame construction with a compact, controller-oriented runtime.
|
|
|
|
## High-level layers
|
|
|
|
1. `mapping_xml.py`
|
|
Parses and writes the existing XML mapping format.
|
|
2. `models.py`
|
|
Small `slots=True` dataclasses for tiles, segments, controllers, scenes, and frames.
|
|
3. `patterns.py`
|
|
Stateless pattern functions that return tile colors only.
|
|
4. `renderer.py`
|
|
Owns precomputed controller routes and reusable `bytearray` payloads.
|
|
5. `engine.py`
|
|
Separates output cadence from preview cadence and handles delta sending.
|
|
6. `output/ddp.py`
|
|
Sends already-built payloads as DDP packets.
|
|
7. `presets.py`
|
|
JSON preset persistence.
|
|
8. `benchmark.py`
|
|
Simple measurable entry point for render throughput.
|
|
|
|
## Main performance choices
|
|
|
|
- Render tile colors first, not rich nested preview objects.
|
|
- Reuse controller payload buffers every frame.
|
|
- Precompute segment byte offsets once at startup.
|
|
- Keep the runtime pure-stdlib for the new core.
|
|
- Keep preview as a consumer of a compact frame snapshot, not as the center of the engine.
|
|
- Decouple preview timing from hardware output timing so UI cost cannot directly cap live output.
|
|
- Skip unchanged controller payloads while still sending periodic keepalives.
|
|
|
|
## What is intentionally not in phase 1
|
|
|
|
- Full Qt UI parity
|
|
- Full preview painter parity
|
|
- WLED discovery UI port
|
|
- Advanced transition compositing parity
|
|
|
|
Those belong in phase 2, after the faster runtime is proven and benchmarked.
|