Skip to content

v2.7.0 — First-class strobe action

Choose a tag to compare

@gfargo gfargo released this 16 May 14:06
· 37 commits to main since this release
5c66919

Highlights

strobe(rate, intensity?, groups?) — first-class abstraction over each fixture's dedicated strobe channel. Agents no longer need to know per-fixture channel offsets or DMX value ranges.

Today an agent that wants to strobe has to find the strobe channel offset for each fixture model (different per fixture) and then use set_channel with a magic DMX value. With this, "strobe at 12 Hz" is one tool call across the whole rig. MCP catalog 33 → 34.

Closes #5.

API

strobe(rate, intensity?, groups?)
Arg Accepts Notes
rate 020 (Hz), "off", "5Hz", "0" Above 20Hz clamps to 20Hz
intensity optional, 0255 / "75%" / "+30" Drives the dimmer so the strobe is visible. If omitted, brightness is left alone.
groups optional list of group names Defaults to all fixtures with a strobe channel

Common rates

  • 1–3 Hz — slow heartbeat / breathing
  • 5–8 Hz — typical party strobe
  • 12–15 Hz — aggressive accent
  • 18–20 Hz — pulse-machine territory

Implementation

QLC+ fixtures with a dedicated strobe channel almost universally follow: DMX 0–9 = rest, DMX 10–255 = slow → fast. The action maps rate_hz linearly across 10–255. Approximate per fixture (some max at 25Hz, some have non-linear ramps) but produces correct behavior for typical stage fixtures.

Future work: parse <Capability> ranges from .qxf files for per-fixture-accurate Hz mappings.

Fixtures without a strobe channel

Listed in the response under skipped rather than failing silently:

{
  "success": true,
  "output": "Strobe at ~7.0Hz on 2 fixture(s), 1 skipped",
  "rate": "~7.0Hz",
  "dmx_value": 96,
  "fixtures": [
    {"id": 0, "name": "SlimPAR Pro W", "status": "applied",  "applied": {"strobe": 96}},
    {"id": 3, "name": "SlimPAR 56",    "status": "skipped",  "reason": "no dedicated strobe channel..."}
  ]
}

For brightness-cycled "strobe" effects on those fixtures, use batch_action with blackout and adjust_color.

Upgrade

git pull
./lightsctl.sh control-restart   # picks up the new action
./lightsctl.sh mcp-restart       # picks up the new MCP tool

No package dependency changes.

Documentation

  • docs/MCP_SERVER.md — strobe in the action table
  • docs/CONTROL_SERVER_ARCHITECTURE.md — valid actions list updated
  • mcp-server/README.md + root README.md — refreshed
  • Wiki MCP-Server.md updated
  • Marketing site: CueSheet adds cues 007 (strobe(12, ...)) + 008 (strobe("off", ...)), new FAQ entry on rate ranges, tool catalog renders 34

Tier 2 status

3 of 4 complete. Only #4 (chases) remains — the biggest single capability unlock left in the roadmap (time-based programming axis).

Remaining roadmap

  • Tier 2: #4 (chases)
  • Tier 3: #8 (scheduling), #10 (SSE event stream), #11 (multi-workspace), #12 (audio-reactive)