Busylight Core Implementation for Humans, presumably like you!
Project description
Busylight Core for Humans™
A unified Python library for controlling USB status lights (busylights) from multiple vendors
busylight-core provides a consistent interface to control various USB-connected status lights, commonly used for indicating availability, meeting status, or system notifications.
Features
- Multi-Vendor Support - Control devices from nine vendors.
- Multiple Connection Types - HID and Serial device support.
- Python Library - Clean, object-oriented API for easy integration.
- Rich Light Control - Colors, brightness, flash patterns, fade effects.
- Audio Capabilities - Sound playback and mute/unmute on supported devices.
- Input Detection - Button press handling on interactive devices.
- Multi-LED Support - Control devices with 1-192 individual LEDs.
- Async Task Management - Built-in support for animations and effects.
- Extensible Architecture - Easy to add support for new devices.
Supported Hardware
| Vendor | Device Models |
|---|---|
| Agile Innovative | BlinkStick Square |
| CompuLab | fit-statUSB |
| EPOS | Busylight |
| Embrava | Blynclight, Blynclight Mini, Blynclight Plus |
| Kuando | Busylight Alpha, Busylight Omega, Mute |
| Luxafor | Flag, Mute, Orb, Bluetooth |
| MuteMe | MuteMe, MuteMe Mini, MuteSync |
| Plantronics | Status Indicator |
| ThingM | Blink(1) |
Installation
Install with uv
uv add busylight_core
Install with pip
python3 -m pip install busylight_core
Usage
from busylight_core import Light
# Find all connected lights
lights = Light.available()
print(f"Found {len(lights)} device(s)")
# Control a specific device
if lights:
light = lights[0]
light.on((255, 0, 0)) # Turn on red
light.off() # Turn off
Common Use Cases
Meeting Status Indicator:
from busylight_core import Light
light = Light.first_light()
# Available - green
light.on((0, 255, 0))
# In meeting - red
light.on((255, 0, 0))
# Away - yellow
light.on((255, 255, 0))
light.off()
Documentation
For detailed documentation including API reference, advanced usage examples, and device-specific information:
- Full Documentation: https://JnyJny.github.io/busylight_core/
- Quick Start Guide: Getting Started
- Examples: Usage Examples
- API Reference: API Docs
Development
This project and it's virtual environment is managed using uv and
is configured to support automatic activation of virtual environments
using direnv. Development activites such as linting and testing
are automated via [Poe The Poet][poethepoet], run poe after cloning
this repo for a list of tasks.
Clone
git clone https://github.com/JnyJny/busylight_core
cd busylight_core
Allow Direnv optional but recommended
direnv allow
Install Dependencies
uv sync --all-groups
Run poe
poe --help
Release Management
This project uses automated release management with GitHub Actions:
Version Bumping
poe publish_patch- Bump patch version, commit, tag, and pushpoe publish_minor- Bump minor version, commit, tag, and pushpoe publish_major- Bump major version, commit, tag, and push
Any of the publish tasks will trigger testing, publishing to PyPi, and a GitHub release.
Release Notes
poe changelog- Generate changelog since last tagpoe release-notes- Generate release notes file
Automatic Releases
When you push a version tag (e.g., v1.0.0), the unified GitHub Actions workflow will:
- Test - Run tests across all supported Python versions and OS combinations
- Publish - Build and publish to PyPI (only if tests pass)
- GitHub Release - Create GitHub release with auto-generated notes and artifacts (only if PyPI publish succeeds)
This ensures a complete release pipeline where each step depends on the previous step's success.
MkDocs Documentation
poe docs-serve- Serve documentation locallypoe docs-build- Build documentationpoe docs-deploy- Deploy to GitHub Pages
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-0.3.3.tar.gz.
File metadata
- Download URL: busylight_core-0.3.3.tar.gz
- Upload date:
- Size: 22.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65ca374867e978232d4943abe1042a102cf2736eb66862deb06badaa60014525
|
|
| MD5 |
dec23368c63a9ba99150169058703eff
|
|
| BLAKE2b-256 |
8657db3d506809e8aa922a8d07ffec4919220ee95c5166fbe7635ed0397a9e6c
|
Provenance
The following attestation bundles were made for busylight_core-0.3.3.tar.gz:
Publisher:
release.yaml on JnyJny/busylight-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
busylight_core-0.3.3.tar.gz -
Subject digest:
65ca374867e978232d4943abe1042a102cf2736eb66862deb06badaa60014525 - Sigstore transparency entry: 282563207
- Sigstore integration time:
-
Permalink:
JnyJny/busylight-core@e938e3f325e9ec02d8c047e6843d75a6b90ade91 -
Branch / Tag:
refs/tags/v0.3.3 - Owner: https://github.com/JnyJny
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@e938e3f325e9ec02d8c047e6843d75a6b90ade91 -
Trigger Event:
push
-
Statement type:
File details
Details for the file busylight_core-0.3.3-py3-none-any.whl.
File metadata
- Download URL: busylight_core-0.3.3-py3-none-any.whl
- Upload date:
- Size: 40.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ace44058165955c5e83321a3af072e25bf536466710c6294d542de65e592a116
|
|
| MD5 |
e647f8c46318c9bc94ba225d2f1485ef
|
|
| BLAKE2b-256 |
fbd0d81af7cb60cff0382db46d613ef6d8e5a746395059ba5ed374d5756e8432
|
Provenance
The following attestation bundles were made for busylight_core-0.3.3-py3-none-any.whl:
Publisher:
release.yaml on JnyJny/busylight-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
busylight_core-0.3.3-py3-none-any.whl -
Subject digest:
ace44058165955c5e83321a3af072e25bf536466710c6294d542de65e592a116 - Sigstore transparency entry: 282563244
- Sigstore integration time:
-
Permalink:
JnyJny/busylight-core@e938e3f325e9ec02d8c047e6843d75a6b90ade91 -
Branch / Tag:
refs/tags/v0.3.3 - Owner: https://github.com/JnyJny
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@e938e3f325e9ec02d8c047e6843d75a6b90ade91 -
Trigger Event:
push
-
Statement type: