v2.10.0 — Web UI catches up · feature parity with MCP
Highlights
The web UI now exposes everything the MCP layer does. Until now the browser interface was built around the v2.2 surface (AI chat + scenes + console + read-only group drawer). Eight releases later the MCP layer shipped 48 tools — 35 of the underlying endpoints had no UI affordance. This release closes that gap.
If you can do it via Claude Desktop, you can now do it via http://lights.local:5000.
What's new
Always-visible header
- BLACKOUT button (top-right, red, pulsing) — calls
/api/blackout, zeros every channel including strobe/macro state. Distinct fromfade(0). No confirmation prompt — operators need this fast.
Tabs (was 2, now 6)
| Tab | What it does |
|---|---|
| AI Control | Unchanged for now — full agentic chat ships in v2.11 |
| Virtual Console | Existing per-fixture sliders + Identify button per fixture (pulses 2s × 4, restores prior state) |
| Cue Lists | List, builder modal, GO/STOP, live elapsed-time progress bar + cue counter |
| Chases | List, visual scene-picker builder with reorder / direction / run-order / fade timings, start/stop |
| Quick Tools | Kelvin slider (1800–10000K with gradient track), strobe rate slider (0–20Hz), palette assignment table per group |
| Diagnostics | Pi health cards (CPU temp / load / memory / disk / uptime / USB / services, color-coded), one-click test_dmx, journal tail for the four allowlisted services |
Groups drawer (read-only → CRUD)
- Inline + New Group form: name, fixture picker (chips), optional description
- Rename / Delete per group
- Target-group chips on AI tab + Quick Tools group selects refresh automatically
Scene grid affordances
- Each scene tile gains a
⋯hover menu: Rename / Duplicate / Delete
Implementation
- All vanilla JS, no build step. Template stays single-file (~2500 lines, was 1011)
- Same design vocabulary as v2.2 (
#0a0a0a/#111/#222panels, uppercase letter-spaced labels) - Lazy load: each tab fetches data only when first opened
- Cue Lists tab polls
/api/cue_lists/activeevery 1s while visible for elapsed-time updates; pauses on tab switch
Upgrade
```bash
git pull
./lightsctl.sh control-restart # serves the new template
```
No package dependency changes. No new endpoints. Pure frontend work consuming existing API.
Compatibility
- Zero backend changes
- Existing UI patterns preserved (the AI Control + Virtual Console tabs work identically to v2.9)
- New CSS classes are namespaced (
.btn-primary,.tool-panel,.modal-panel) — no collisions with existing styles - Local storage keys unchanged — command history persists across this upgrade
Documentation
- Wiki Control-Server page — feature list updated with the new tabs + drawer CRUD + BLACKOUT + scene affordances
- Marketing FAQ — new entry confirming web UI feature parity with the MCP layer
What's intentionally NOT in this release
Agentic chat — the "chat with the LLM, it calls MCP tools, reports back" experience ships as v2.11. The current AI Control tab is the one-shot natural-language interpreter that was there before; v2.11 replaces it with a proper conversational agent that has access to all 48 MCP tools.
Roadmap status
Web UI gap: closed. Tier 3 remaining: #10 (SSE event stream), #11 (multi-workspace), #12 (audio-reactive). Plus the agentic chat work tracked for v2.11.