Skip to main content

openlamp-midi — Ableton Link / tempo for OpenLamp lamps

Flash your OpenLamp lamps on the beat, phase-accurate, from an Ableton Link session or a MIDI clock. 100 % local.

PyPI — openlamp-midi

pip install "openlamp-midi[link]"          # [link] adds Ableton Link (native build)
python3 beatsync.py --source link --action pulse --accent

beatsync.py follows the tempo source and drives the lamps via the engine's local API — pulsing on the beat, with latency anticipation (fires early so the light lands on the beat) and an accent on the downbeat (exact under Link, which shares the bar's phase). See --help for --source link | taplink | clock | tap.

Scope

This package is only the tempo/beat layer. The MIDI control path — notes → colours, CC → brightness/effects, Program Change → presets — moved into the engine and now lives in openlamp/engine → midi.py, the reference implementation of the wled-midi convention. (Before v0.2.0 this package also shipped a separate MIDI bridge; it was removed — use the engine's midi.py.)

Family

Layer Repo Role
convention wled-midi the MIDI↔WLED spec
engine engine drives the lamps + implements the convention (midi.py)
Ableton live Ableton Live frontend
tempo this repo Ableton Link / MIDI-clock beat pulse

Uses the engine's local API (127.0.0.1:8377). Requires the engine running.

Architecture & the Ableton Link / GPL boundary

OpenLamp is split so that the one component touching Ableton Link is a small, separate, auditable process — everything else is a separate program reached only over a local HTTP API. This keeps the GPL reach of Link/aalink confined to a single place.

How the pieces are wired

  • This package (openlamp-midi / beatsync.py) runs as its own process. It is a standalone CLI helper, launched independently — not embedded in, nor spawned by, the engine.
  • It talks to the engine only over the local HTTP API on 127.0.0.1:8377 (plain urllib requests to /cmd and /status). There is no in-process call, FFI, shared memory, or linking between the two — the engine owns the persistent device connections; this helper only POSTs commands to it.
  • Ableton Link is reached via aalink and is imported only here — a lazy, local from aalink import Link inside the Link source, gated behind the optional extra: pip install "openlamp-midi[link]". The engine and the frontends contain zero Link/aalink references.

What that means for licensing

Ableton Link (and therefore aalink) is GPLv2 — a component that loads it in the same process forms a combined program governed by the GPL. In OpenLamp:

  • The only process that ever combines with aalink is beatsync.py (this package). It is MIT; since MIT is one-way compatible with the GPL, combining it with Link at runtime is fine and the effective combined program honors the GPL.
  • The engine is a genuinely separate program that communicates only over the local HTTP API and carries no Link code, so it stays under its own (permissive) license — the GPL obligation does not propagate to it.
  • The frontends (Stream Deck plugin, etc.) likewise reach the engine only over that same local HTTP API and never combine with Link, so the GPL never reaches them.

Invariant: GPL (via aalink/Link) is confined to one process — beatsync.py. Every other OpenLamp component is a separate program reached only over local HTTP, so the GPL obligation never reaches the engine or the frontends.

Installing the [link] extra pulls in aalink (GPLv2); the resulting combined program (this helper + aalink + Link) is therefore governed by the GPL. Without the extra, openlamp-midi is a pure-Python MIT package that does not touch Link at all.

License

MIT — for this package's own source (beatsync.py).

Optional dependency: the [link] extra installs aalink (a Python binding to Ableton Link), which is GPLv2. When you install that extra, the running combination is governed by the GPL as described above. The MIT license covers this repository's code; it does not relicense aalink or Link.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openlamp_midi-0.2.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openlamp_midi-0.2.0-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file openlamp_midi-0.2.0.tar.gz.

File metadata

  • Download URL: openlamp_midi-0.2.0.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlamp_midi-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d94d64a6ac8848d737b06293a5643caec771333c0be38459fdfa438f2a4d3e6a
MD5 018e58aa66bd614a25a9a910ca67a619
BLAKE2b-256 5063ead05a6a84e96474897ac20cf57f6733d39e898231a780c761c7e31e008d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openlamp_midi-0.2.0.tar.gz:

Publisher: publish.yml on openlamp/midi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openlamp_midi-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: openlamp_midi-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlamp_midi-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4fa410065f316f77de41dfe71fe25d1c7ea4fa6296a8a00848c6342a34ba7465
MD5 a9ec96f7652000590087eafe7071ded9
BLAKE2b-256 e9c3aaac9f8df4d8d20c906e807f10d74d2a5c3fd86822d56f3814157fb52b78

See more details on using hashes here.

Provenance

The following attestation bundles were made for openlamp_midi-0.2.0-py3-none-any.whl:

Publisher: publish.yml on openlamp/midi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 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