# StudioLights

Controls Aputure and amaran studio lights via the amaran Desktop WebSocket API: named...

- Repository: https://github.com/danielmiessler/LifeOS (19669 stars)
- Category: Media
- License: MIT
- Last updated: 2026-10-28
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add danielmiessler/LifeOS --skill StudioLights -g -a claude-code -y`
Codex: `npx skills add danielmiessler/LifeOS --skill StudioLights -g -a codex -y`
Cursor: `npx skills add danielmiessler/LifeOS --skill StudioLights -g -a cursor -y`
Gemini CLI: `npx skills add danielmiessler/LifeOS --skill StudioLights -g -a gemini-cli -y`

## Description

Controls Aputure and amaran studio lights via the amaran Desktop WebSocket API: named scenes, per-light brightness and color temp, save the current state. USE WHEN lights recording, lights normal, recording lights, set lights for recording, studio lights, light scene, dim the key light, set the lights, lights too bright, save this lighting, green screen lights. NOT FOR house/Hue lights or thermostat (a home-control skill), studio audio, or video editing.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# StudioLights

Deterministic control of a studio lighting rig through amaran Desktop's local WebSocket API (`ws://127.0.0.1:33782/ws`, protocol v2, the same local API the official Bitfocus Companion module uses). The tool auto-launches amaran Desktop if it isn't running.

## Ideal State

- Every lighting change runs through `Tools/Lights.ts` against the rig the USER tree's `devices.json` and `scenes.json` define; no fixture, name or level is assumed from this skill.
- Done is said only when the lights themselves read back the requested state.
- A saved scene restores exactly the levels saved under its name, whether "recording", "normal" or any later caller asks for it.

## Intent Routing

| Intent | Trigger | File |
|----------|---------|------|
| **Control** | "recording", "set the lights", "light scene", "dim X", "save this lighting" | `Intents/Control.md` |

| File | Read when |
|------|-----------|
| `Setup.md` | first-time setup: amaran Desktop, finding node IDs, and writing `devices.json` and `scenes.json` |

## Data & Config

The rig lives in the USER tree, never in this skill: `LIFEOS/USER/CUSTOMIZATIONS/SKILLS/StudioLights/devices.json` holds each fixture's name, node ID, model and whether it has color temperature, and `scenes.json` holds the saved scenes. Free-form notes about the rig (where each light stands, what each scene is for, which Shortcut or macro calls a scene by name) go in `Config.md` in the same folder; the tool never reads it. First-time setup, including how to find node IDs and a worked example of a voice trigger, is in [Setup.md](Setup.md).

`Tools/Lights.ts` exits with an error pointing at Setup.md when `devices.json` is missing; `Lights.ts devices` lists the node IDs to put in it and runs before the file exists. The tool finds that folder from its own skill folder's name, so the skill folder and its USER folder must share a name.

## Gotchas

The rest: https://github.com/danielmiessler/LifeOS/blob/HEAD/LifeOS/install/skills/StudioLights/SKILL.md
