Eden is a standalone groovebox application built around the PreSonus Atom SQ MIDI controller. It turns the controller into a self-contained instrument: step sequencer, drum sampler, synth voices, and FX — all driven from the pads and encoders, no DAW required. The name comes from Atom + Eve, and the aesthetic is straight jungle: palm greens, snakeskin patterns, sunset oranges, deep-canopy purples.
The Atom SQ operates in a native mode that exposes full RGB pad control and an OLED display over MIDI SysEx. Eden speaks that protocol directly. Every pad color, every screen line, every encoder response is Eden's — not PreSonus Studio One's. The controller stops being a peripheral and becomes the device.
- PreSonus Atom SQ (USB, connected before launch)
- macOS or Linux
- Python 3.11+
pip install -r requirements.txt
python eden/app.py
Session view launches by default. Top row = 16 instrument tracks. Bottom row = 16 loop slots for the selected track. Press a top-row pad to select a track. Press a bottom-row pad to toggle a loop playing. Ctrl-C to quit.
Optional flags:
python eden/app.py --bpm 140 --samples /path/to/samples
Debug window (requires pygame):
pip install pygame
python eden/debug_ui.py # standalone mirror window
| Key | Label | Action |
|---|---|---|
| SK1 | MUTE | Toggle mute on selected track |
| SK2 | SOLO | Toggle solo on selected track |
| SK3 | LOOPxN | Cycle loop count: inf → 1 → 2 → 4 → 8 → inf |
| SK4 | ARM1 | Arm selected track (32-step single-arm instrument view) |
| SK5 | ARM2 | Add to arm list; 2 tracks armed → dual-16 instrument view |
| Key | Label | Action |
|---|---|---|
| SK1 | STEPS | Step-grid mode (active) |
| SK2 | KEYS M3 | Placeholder (M3) |
| SK3 | PADS | Placeholder (M2) |
| SK4 | < BACK | Return to session view |
| SK5 | CLEAR | Clear all steps (hold Shift to confirm) |
probe.py is a low-level test harness for the Atom SQ protocol. Useful for diagnostics and verifying hardware behaviour without running the full app.
python probe.py list # show MIDI ports
python probe.py sniff # log all incoming MIDI
python probe.py main_daw_test # confirm OLED + pad RGB working
Legacy hardware feedback test:
python tests/test_feedback.py # interactive LED/OLED test (requires controller)
All five goals that prove the core tech stack works, no DAW required.
- Enter native mode on the Atom SQ
- Light pads in arbitrary RGB colors
- Write text to the OLED display
- Play a drum sample on pad press with low latency
- Run a 16-step sequencer with visible playhead on pads
Immutable-state architecture + session/instrument views.
- Frozen
AppStatedataclass — 16 tracks × 16 loops × 16/32 steps - Pure event/reducer/renderer pipeline (103 tests, zero hardware required)
- Session view — track select, loop play/stop, mute, solo, loop count
- Instrument view — 32-step single-arm, dual-16 dual-arm, step toggle
- Encoder 9 → BPM control
- Shift + SK5 (CLEAR) with hold confirm
- Audio step scheduler reads from AppState (lock-free, CPython atomic)
- Soft key dispatch (previously missing from v0 controller)
- Shift key dispatch (previously missing from v0 controller)
- Pygame debug mirror window (read-only, 30fps, tropical theme)
See ROADMAP.md.
Atom (the controller) + Eve = Eden. The tropical snake theme follows naturally — palm greens, sunset oranges, jungle teals, deep-canopy purples. The snake is in the garden. The garden runs on MIDI.