An unofficial extensible hack framework for Ableton Push 3 Standalone. Deploys additional services to Push via SSH without touching the system partition or the built-in software.
This project was inspired by the work done in the Move Anything and Schwung projects.
- 📕 Read the Manual
- 💬 Join the Discord Community to discuss this project.
- 🎥 Watch the demo video on YouTube
Warning
This project is NOT approved, endorsed or supported by Ableton. Use at your own risk.
Push Hack installs additional software on your Ableton Push 3 Standalone. Back up important sets, files and samples before installing the hack and familiarize yourself with the official recovery methods for Push 3 Standalone in case you need to restore your device.
This Push Hack is a more of a prototype than a finished product. It's been built using AI-assisted coding tools (see the AI Disclosure below) as a fun technical experiment. While it works, it's not intended for everyday or production use, especially in professional contexts and environments. Keep this in mind if and when you're using it.
Caution
Push Hack must be uninstalled an reinstalled after any Push's software update. Because of that, make sure that your Push is on the latest version available before installing the hack. When a Push Software update is available: uninstall Push Hack with ./scripts/uninstall.sh, install the Push update, then reinstall the hack with ./scripts/install.sh. You can read more about this in the manual.
With the hack installed, a Push update freezes the device mid-update (blank screen, unresponsive buttons/pads). This is usually recoverable only by holding the power button to force the shut down.
This project and much of its codebase were generated by coding agents, mainly Claude Code, under human supervision. If that makes you uneasy or you're not on board with that approach, no worries at all. Either way, thanks a lot for taking the time to check this project.
Inspired by the "Move Manager" web app available for Move. Push Manager is a mobile-friendly web app running on Push itself and accessible from any device on the same network (or Push's Wi-Fi hotspot).
With Push Manager you can:
- File management:
- Browse, upload, download, rename, delete, copy files and folders on Push
- USB drive support. Plug in a FAT32/NTFS drive on the USB-A port, then copy files from/to Push
- Preset browser — Push's library is accessible in the browser: fast keyboard search, filter by category / device / source / favourites, free-form tags and ★ favourites, and one-click Load onto the selected track.
⚠️ LOADING presets requires Push 2.4+ and the installation of the PushHackBrowser Remote Script.
- Display controls:
- Take over Push 3's screen. You can load images and videos
- Draw — draw in the browser with mouse or finger; strokes stream to Push display in real time (~10fps)
- MIDI:
- MIDI Monitor — live stream of all MIDI events via SSE; filterable by type; Intercept toggle blocks events from reaching Live while still receiving them
- Hardware chords — hold two Push buttons simultaneously to trigger actions (e.g. Intercept toggle); shows OSD feedback on Push display for 2 seconds
- LED control — set any button or pad LED color
- Other:
- System stats — CPU, memory, disk, IP addresses, hotspot password
Port: 7701 → http://push.local:7701
Hardware-driven on-device interface rendered directly on Push 3's screen; no computer needed. Same features as Push Manager. Navigate with jog wheel and D-pad.
Use Shift + Preference to open/close the Shadow UI.
C shared library injected into Push 3's process via LD_PRELOAD. Intercepts libusb_bulk_transfer calls to the XMOS co-processor and overlays custom pixels on every display frame.
- Mode 0 — passthrough (Ableton Live UI shows normally)
- Mode 1 aka Debug mode — orange bar overlay at top of screen
- Mode 2 — full frame takeover (push-manager writes any image here)
- Startup splash — "Push Hack loaded..." text shown a few seconds into each Push boot, then passthrough is restored. The hook stays passive during the USB/hub bring-up window (8s), then briefly takes over to show the splash
Draw CC automation curves in a web UI. The hack loops them in real time and sends MIDI CC to Live for recording or live control.
- Sends MIDI CC to Live's internal ALSA input port — map parameters in Live's MIDI Learn like a hardware controller.
- BPM sync — derives BPM from Live's MIDI clock (24 PPQN) received from Push 3 hardware. Accurate to the current tempo; updates in real time.
- Sync to Live — the Push Play button (CC85) toggles transport: press to start, press again to stop.
- Timing modes — Sync (loop length in beats) or Free (own BPM + seconds). Per lane.
- Catmull-Rom smooth or linear interpolation. Per lane.
- Up to 8 lanes.
Port: 7703 → http://push.local:7703
An Ableton Live MIDI Remote Script (PushHackBrowser) that loads .adv/.adg presets onto the selected track via the Live browser API — powering the Shadow UI's BROWSE tab and Push Manager. Only Live's engine can instantiate a preset, so push-manager hands the request to this script over a localhost socket (port 7704); it calls browser.load_item() on Live's engine thread.
Requirements: Push 2.4+ installed on your Push and some additional setup.
- Ableton Push 3 Standalone with SSH access enabled (
http://push.local/ssh) - Go 1.21+ (for building hacks locally)
- Docker (for building
push_hook.so— cross-compiles linux/amd64 viagcc:12-bullseye) - macOS or Linux development machine
# 1. Build and deploy all hacks
# The installer will guide you through SSH key setup if needed,
# then ask you to accept a disclaimer before proceeding.
./scripts/install.sh
# 2. Open Push Manager in browser
open http://push.local:7701| Script | Purpose |
|---|---|
./scripts/discover.sh |
Probe Push OS — init system, paths, processes, ports |
./scripts/install.sh |
Build + deploy all (or one) hack, register service |
./scripts/uninstall.sh |
Remove all hacks and services cleanly |
./scripts/discover.sh --host 192.168.1.67 # use IP instead of hostname
./scripts/install.sh --hack push-manager # deploy one hack only
./scripts/install.sh --build # build from source (default: use pre-built)
./scripts/install.sh --dry-run # print actions without executing
./scripts/uninstall.sh --purge # also delete /data/push-hack data
./scripts/uninstall.sh --yes # skip confirmation promptpush-display is handled by ./scripts/install.sh — its service.initd copies push_hook.so, patches LD_PRELOAD into Push3's init script, and restarts push3 automatically. For standalone re-deploys:
hacks/push-display/deploy.sh # build + deploy + restart
hacks/push-display/deploy.sh --no-build # deploy pre-built .so onlymkdir -p hacks/my-hack/srcCreate hacks/my-hack/hack.json:
{
"id": "my-hack",
"name": "My Hack",
"port": 7705,
"binary": "my-hack",
"enabled": true,
"allowed_roots": [],
"settings": {}
}Create hacks/my-hack/Makefile:
all:
cd src && GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ../my-hack .Write your service in hacks/my-hack/src/, then:
./scripts/install.sh --hack my-hackThe framework auto-generates a sysvinit init.d script and registers it with update-rc.d. Your hack survives reboots. For no-binary hacks (shell scripts, udev rules), set "binary": "" and provide a service.initd template. Ports: start from 7705 (7701 = push-manager, 7703 = automation, 7704 = browser-bridge).
# Remove services + binaries, keep /data/push-hack directory
./scripts/uninstall.sh
# Full removal including all data
./scripts/uninstall.sh --purge --yesdocs/ = Push hardware/OS references; each hack documents itself in its folder README.
Push hardware / OS (docs/):
docs/push3-internals.md— OS, filesystem, XMOS USB protocol, display, MIDI routingdocs/push3-button-map.md— Push 3 button/encoder MIDI mapdocs/push3-led-colors.md— full 128-entry LED color palettedocs/push3-assets.md— Push UI image assets (/api/assets/<path>)
Per-hack (folder README):
hacks/push-manager/README.md— full API reference, features, display control, MIDI monitorhacks/automation/README.md— API, lane types, BPM sync, transport synchacks/browser-bridge/README.md— how preset loading works (PushHackBrowser remote script)hacks/push-display/README.md— LD_PRELOAD display/MIDI hook, shared-memory layout, build/deploy
MIT - See LICENSE
