Skip to main content

Release Version Python Version License Monthly Downloads

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 -- 28 devices from 10 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
VT DND Alpha, DND Omega

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

Apache License 2.0

Metadata

Release files for busylight-core 2.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for busylight-core 2.5.0
File Size Uploaded
busylight_core-2.5.0.tar.gz 53.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for busylight-core 2.5.0
File Interpreter ABI Platform
busylight_core-2.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 141.7 kB

Release files / busylight_core-2.5.0.tar.gz

Download URL busylight_core-2.5.0.tar.gz
Size 53.1 kB
Tags Source
SHA-256 checksum
How to use checksums
2cbe19a2db957163959d1bfc3703e6d06fbee592550fade742353a1e5f4639a8
BLAKE2b-256 checksum
How to use checksums
824d871cb68529e3e9331dd792d23d960a14c2b1b6c13d9c8e202b8f2832dec8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / busylight_core-2.5.0-py3-none-any.whl

Download URL busylight_core-2.5.0-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
548d2602be736f2ec9f6b3d0ce3a8b3298390c7731dbce2e553245c847634acd
BLAKE2b-256 checksum
How to use checksums
9281795d7de0f188f730f136302640f3e96fe778e115bb007f400896f777ee16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.5.0 This release

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.15.4

2 release files

0.15.3

2 release files

0.15.2

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.10.1

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.8.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page