A local web console for running TP-Link Kasa smart bulbs as studio lighting: auto-discovery, per-light and group control (power, intensity, color temperature, hue/saturation), typed-in precise intensities, labeling, identify-blink, and a full set of Aputure/amaran-style FX effects. Mobile-friendly with large touch targets, so it works from a phone on the same network.
Everything runs locally — the browser UI talks to a small Node server on your machine, and that server talks directly to the bulbs over your LAN (TP-Link's local protocol, port 9999/UDP+TCP). No cloud account, no internet dependency.
Run it
npm install
npm start
Then open http://localhost:4173. The startup log also prints a LAN address (e.g. http://192.168.0.2:4173) — open that from a phone or tablet on the same Wi-Fi network to control the lights from anywhere in the studio.
Bulbs are discovered automatically via UDP broadcast and should appear within a few seconds. If nothing shows up:
- Confirm this machine and the bulbs are on the same subnet/VLAN (discovery relies on broadcast, which doesn't cross subnets or most guest-network isolation).
- Check that a firewall isn't blocking UDP port 9999.
- Click "Rescan Network" to force an immediate re-broadcast.
What it does
- Discovery — continuous background scan (via
tplink-smarthome-api), no manual IP entry needed. - Per-light control — power, brightness/intensity (slider + type-in numeric %, plus quick preset buttons for common stops), color temperature (for tunable-white bulbs), hue/saturation (for color bulbs, with a White/Color tab when a bulb supports both).
- Groups — create named groups (Key, Fill, Rim, Background, whatever fits your set), assign lights via the pill buttons on each card, and drive a whole group's power/intensity/temperature from one master control bar. "All Lights" is a standing virtual group.
- Identify — the ◎ button blinks a bulb a few times, then restores its exact prior state, so you can find which physical fixture a card corresponds to.
- Labels — click any light's name to rename it (e.g. "Softbox Camera Left").
- Effects — Kasa bulbs don't expose their scene presets over the local protocol, so these are driven directly by the server sending timed commands, modeled after the FX library on Aputure/amaran lights (Sidus Link). Each has 1-3 tunable parameters. Starting an effect snapshots the light's prior state and restores it on stop; any manual control action (power/brightness/color/temp) automatically stops a running effect on that light.
- Classic FX (any dimmable/tunable bulb): Strobe, Pulsing, Candle, Fire, Paparazzi, Fireworks, Faulty Bulb, Lightning, TV, Explosion, Welding.
- Color FX (needs a color bulb): Colors Chase, Cop Car, Party Lights, Club Lights.
Notes / limits
- Only tested against Kasa bulbs (KL-series); Kasa plugs are also discovered and get basic power/dimmer/identify support, but no color controls.
- Effects are software-timed over the network, not firmware presets — expect Strobe to look more like a fast attention-flash than a precise photographic strobe; Wi-Fi round-trip and bulb processing time limit how fast state changes can land.
- Labels and group membership are stored locally in
data/store.json.
Comments