Busylight Core Implementation for Humans, presumably like you!
Project description
Busylight Core for Humans™
A unified Python library for controlling USB status lights from multiple vendors.
busylight-core provides a consistent interface to control USB LED status lights. If you want a command-line interface or HTTP API, see Busylight for Humans™.
Quick Start
from busylight_core import Light
light = Light.first_light()
light.on((0, 128, 0)) # green
light.off()
Installation
uv add busylight_core
pip install busylight_core
Features
- Multi-vendor support -- 26 devices from 9 vendors
- HID and serial -- multiple connection types
- Async effects -- blink, pulse, rainbow, spectrum
- Multi-LED targeting -- devices with 1-192 individual LEDs
- Input detection -- button press handling on interactive devices
- Extensible -- plugin architecture for adding new devices
Supported Hardware
| 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, Bluetooth |
| MuteMe | MuteMe Original, MuteMe Mini, MuteSync |
| Plantronics | Status Indicator |
| ThingM | Blink(1), Blink(1) mk2 |
Usage
Find and control all connected lights:
from busylight_core import Light
for light in Light.all_lights():
print(f"{light.name} by {light.vendor}")
light.on((255, 0, 0)) # red
Vendor-specific access:
from busylight_core import EmbravaLights, LuxaforLights
embrava = EmbravaLights.all_lights()
if embrava:
embrava[0].on((255, 0, 0))
luxafor = LuxaforLights.all_lights()
for light in luxafor:
light.on((0, 255, 0))
Async effects:
import asyncio
from busylight_core import Light
light = Light.first_light()
asyncio.run(light.blink(color=(0, 0, 255), speed=1))
Meeting status indicator:
from busylight_core import Light
light = Light.first_light()
light.on((0, 128, 0)) # available (green)
light.on((255, 0, 0)) # in meeting (red)
light.on((255, 255, 0)) # away (yellow)
light.off()
Platform Support
- macOS -- works out of the box
- Linux -- requires udev rules for USB access
- Windows -- may work, untested, patches welcome
Development
This project is part of a uv workspace monorepo.
Virtual environment activation is supported via direnv.
Development tasks (linting, testing) are automated with
Poe the Poet -- run poe for a list of tasks.
See CONTRIBUTING.md for development details.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file busylight_core-2.4.0.tar.gz.
File metadata
- Download URL: busylight_core-2.4.0.tar.gz
- Upload date:
- Size: 44.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f32e239c6aac51ed683f4aba8af0fc3403474d75ddb9dc93c148225a49125bf0
|
|
| MD5 |
199019bd454e788af372b9ec1b980722
|
|
| BLAKE2b-256 |
8191f0253561fff2ce4aafc109ac4e1b08326539df3a554b5398b1c434c7801e
|
Provenance
The following attestation bundles were made for busylight_core-2.4.0.tar.gz:
Publisher:
release-core.yaml on JnyJny/busylight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
busylight_core-2.4.0.tar.gz -
Subject digest:
f32e239c6aac51ed683f4aba8af0fc3403474d75ddb9dc93c148225a49125bf0 - Sigstore transparency entry: 1228414601
- Sigstore integration time:
-
Permalink:
JnyJny/busylight@263ce72fac1fc5ad36467528a24ed645a1e4a7dd -
Branch / Tag:
refs/tags/busylight-core/v2.4.0 - Owner: https://github.com/JnyJny
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-core.yaml@263ce72fac1fc5ad36467528a24ed645a1e4a7dd -
Trigger Event:
push
-
Statement type:
File details
Details for the file busylight_core-2.4.0-py3-none-any.whl.
File metadata
- Download URL: busylight_core-2.4.0-py3-none-any.whl
- Upload date:
- Size: 82.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9766f5afed8866a974ffb517924281ca97bb580f37482ada4f004c24ad93069
|
|
| MD5 |
bb6a4acc8f1e3f88db6a9ae825923b69
|
|
| BLAKE2b-256 |
ee0640a6d172eb2e42b1e49e580d5bec906d677fcbc7414af6b8910ceb27567b
|
Provenance
The following attestation bundles were made for busylight_core-2.4.0-py3-none-any.whl:
Publisher:
release-core.yaml on JnyJny/busylight
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
busylight_core-2.4.0-py3-none-any.whl -
Subject digest:
f9766f5afed8866a974ffb517924281ca97bb580f37482ada4f004c24ad93069 - Sigstore transparency entry: 1228414650
- Sigstore integration time:
-
Permalink:
JnyJny/busylight@263ce72fac1fc5ad36467528a24ed645a1e4a7dd -
Branch / Tag:
refs/tags/busylight-core/v2.4.0 - Owner: https://github.com/JnyJny
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-core.yaml@263ce72fac1fc5ad36467528a24ed645a1e4a7dd -
Trigger Event:
push
-
Statement type: