Control the PreSonus ATOM pad controller: RGB pad LEDs, per-pad pressure, knobs, buttons
Project description
atompad
python control of the presonus atom pad controller (the original, not the SQ): rgb pad leds, per-pad pressure, endless knobs, all buttons. no daw needed.
pip install atompad
import atompad
out, inp = atompad.open_atom() # finds the port, enters native control mode
atompad.pad_color(out, 0, 127, 0, 0) # pad 1 red
atompad.button_color(out, 109, 0, 0, 127) # play button blue
for msg in inp: # decoded raw midi via mido
if msg.type == "note_on" and msg.note in atompad.PADS:
print("pad", msg.note - 36 + 1, "velocity", msg.velocity)
see examples/ for an interactive playground (pressure painting, animations), a full input decoder, and a guided feature tour.
what the device can do
- 16 pads: full rgb (0-127 per channel), velocity in, per-pad polyphonic aftertouch in (see below)
- 4 endless knobs with acceleration (
atompad.knob_deltadecodes the cc values) - 20 side buttons, all send press/release; play, bank and preset +/- have rgb leds, the rest are fixed-color bright/dim
- multiple simultaneous pad presses, no banks in native control mode
per-pad pressure (one-time device setting)
out of the box the pads send channel pressure (one value for all held pads). for true per-pad pressure: hold the small Setup button (pads turn into a settings menu), tap pad 7 (row 2 = pressure type, 7 = polyphonic aftertouch), release. the setting survives power cycles.
protocol notes (reverse-engineered, fw 3.00)
two device modes: factory midi mode (banked pads, no led control) and native control mode — what studio one uses, and what this lib enables. mido 0-indexed channels below:
- enter native control:
note_off ch15 note=0 vel=127, exit withvel=0. persists until exit or usb replug - pads = notes 36–51. led on/off: ch0 note_on, velocity must be exactly 127 for on (1–126 = off — there is no hardware blink/breathe/brightness; animate in software). color: ch1/2/3 note_on velocity = r/g/b
- knobs = cc 14–17, relative: value 1–63 = +n steps, 65–127 = −n
- buttons = cc on ch0 (127 down, 0 up); leds via the same cc out (127 bright, 0 dim). rgb for cc 26/27/109 via ch1/2/3
- pad pressure: channel aftertouch by default, poly aftertouch / cc22 / off selectable in hardware quick setup
- pressing the tiny setup button makes the firmware flush note-offs for all 16 pads (stuck-note prevention, harmless)
protocol sources: kmitch95120/Reaper-ATOM-Integration, EMATech/AtomCtrl, plus device testing.
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 atompad-0.1.0.tar.gz.
File metadata
- Download URL: atompad-0.1.0.tar.gz
- Upload date:
- Size: 39.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
236b1bea2f776439762011465ff1124176a888e41f7beb460111da08c30de4cc
|
|
| MD5 |
441b38187fc71f3ee84913a30fdb60b6
|
|
| BLAKE2b-256 |
5de7244fd77aaea3e21cabf2087f316d8991d6995a2de50b258857153ea33085
|
Provenance
The following attestation bundles were made for atompad-0.1.0.tar.gz:
Publisher:
publish.yml on gregsadetsky/atompad
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atompad-0.1.0.tar.gz -
Subject digest:
236b1bea2f776439762011465ff1124176a888e41f7beb460111da08c30de4cc - Sigstore transparency entry: 2256752459
- Sigstore integration time:
-
Permalink:
gregsadetsky/atompad@66798e681b3c63c833971f964c8e5d43bd434596 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gregsadetsky
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66798e681b3c63c833971f964c8e5d43bd434596 -
Trigger Event:
push
-
Statement type:
File details
Details for the file atompad-0.1.0-py3-none-any.whl.
File metadata
- Download URL: atompad-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fff1d829c59d48db5295d60314010f389901989d86628c58e8794f469ccbbc48
|
|
| MD5 |
e216e819c770bacc6293c5aac91a8eec
|
|
| BLAKE2b-256 |
32114506ac9254a58d09c34abb32d5ead9e12238296b415db42a003282f45291
|
Provenance
The following attestation bundles were made for atompad-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on gregsadetsky/atompad
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atompad-0.1.0-py3-none-any.whl -
Subject digest:
fff1d829c59d48db5295d60314010f389901989d86628c58e8794f469ccbbc48 - Sigstore transparency entry: 2256752468
- Sigstore integration time:
-
Permalink:
gregsadetsky/atompad@66798e681b3c63c833971f964c8e5d43bd434596 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gregsadetsky
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66798e681b3c63c833971f964c8e5d43bd434596 -
Trigger Event:
push
-
Statement type: