Lighting Lab behaves like a small control runtime rather than a simple scene picker. The runtime continuously resolves what should be playing, whether anything should override it, and whether the resulting output needs safety treatment before it reaches the tower fixtures.
In scheduled mode, the active scene comes from the daily schedule. The UI shows:
- the current local schedule time
- the current scheduled scene
- the next scheduled scene
- minutes until the next handoff
Manual mode begins when an operator selects a scene directly from the library. The selected scene is held until the operator resumes the schedule.
Overrides are short-lived, higher-priority presets intended to supersede both scheduled and manual playback. Once an override expires or is cleared, the runtime returns to schedule behavior.
The scheduling model is intentionally simple for the public demo:
- schedule entries are defined by a start minute within the day
- the runtime finds the most recent entry whose start time is before the current local time
- the following entry becomes the next scheduled handoff
This keeps the demo easy to reason about while still demonstrating realistic runtime behavior.
Overrides are defined with:
- a target scene
- a duration
- a priority
If a new override has lower priority than the currently active override, it is ignored. This gives the runtime predictable precedence behavior even in a demo context.
Before computed fixture output reaches the renderer, the runtime applies several guardrails:
Scenes are checked for structural validity, such as:
- valid colors
- safe layer intensity bounds
- required layer content
If validation fails, the runtime can switch to a configured fallback scene.
Computed emissive intensity is capped to a configured upper bound. This keeps the demo visually stable and ensures every scene remains within the same rough operating envelope.
A smoothed blend is applied between consecutive frames so changes remain graceful even when schedules or overrides cause abrupt scene handoffs.
The sidebar surfaces the runtime in four complementary views:
Scene Library: selectable looks and current scene stateScene Details: active-scene metadata after mode and safety resolutionSystem State: high-level runtime snapshotControls: schedule controls, override triggers, and safety guardrails
This lets the demo feel understandable to a public viewer without exposing implementation details directly in the main rendering surface.