Control USB LED status lights from Python.
26 devices · 9 vendors · CLI · HTTP API · Python library
Flag1, Busylight Alpha2, Blynclight Plus3, Blink(1)4, Mute5, Blynclight6, Orb7, BusyLight Omega8, BlinkStick Square9, Blynclight Mini10, MuteMe Original11, fit-statUSB12, MuteSync13, Status Indicator14
# Turn on a green light right now
uvx --from busylight-for-humans busylight on
# Red, blinking, then off
uvx --from busylight-for-humans busylight blink red
uvx --from busylight-for-humans busylight off# Or from Python
from busylight_core import Light
light = Light.first_light()
light.on((0, 128, 0)) # green
light.off()| Vendor | Models |
|---|---|
| Agile Innovative | BlinkStick, BlinkStick Pro, Square, Strip, Nano, Flex |
| CompuLab | fit-statUSB |
| EPOS | Busylight |
| Embrava | Blynclight, Blynclight Mini, Blynclight Plus, BLYNCUSB10, BLYNCUSB20 |
| Kuando | Busylight Alpha, Busylight Omega |
| Luxafor | Flag, Orb, Mute, Busy Tag, Bluetooth |
| MuteMe | MuteMe Original, MuteMe Mini, MuteSync |
| Plantronics | Status Indicator |
| ThingM | Blink(1), Blink(1) mk2 |
Multi-LED targeting supported on BlinkStick variants, Luxafor Flag, and Blink(1) mk2.
This repository contains two packages that work together:
Busylight for Humans™ — CLI & Web API
The user-facing tools. Install this if you want to control lights from the command line or expose an HTTP API for automation.
pip install busylight-for-humansCommand line:
busylight on red # solid red
busylight blink blue # blinking blue
busylight rainbow # cycle through colors
busylight on green --led 1 # target specific LED
busylight off # turn offWeb API:
pip install busylight-for-humans[webapi]
busyserve # starts on http://localhost:8000
curl "http://localhost:8000/light/0/on?color=red"
curl "http://localhost:8000/lights/off"Busylight Core for Humans™ — Python Library
The device communication layer you can use if you're building your own tools or integrating status lights into a larger system.
uv add busylight_corefrom busylight_core import Light
# Find and control lights
for light in Light.all_lights():
print(f"{light.name} by {light.vendor}")
light.on((255, 0, 0)) # red
# Async effects
import asyncio
light = Light.first_light()
asyncio.run(light.blink(color=(0, 0, 255), speed=1))Features: multi-vendor abstraction, HID and serial support, async effects, button/input detection, multi-LED targeting, plugin architecture for adding new devices.
- macOS — works out of the box
- Linux — requires udev rules for USB access:
busylight udev-rules -o 99-busylights.rules sudo cp 99-busylights.rules /etc/udev/rules.d/ sudo udevadm control -R
- Windows — may work, untested, patches welcome
Contributions welcome! See CONTRIBUTING.md for development setup, workflow, and guidelines. This is a uv workspace — one clone, one venv, both packages.
Thank you to @todbot and ThingM for gifting
blink(1) mk3 lights to support this project.
Both packages are licensed under the Apache License 2.0.

