A zero-dependency Ableton Live Remote Script that shows your current session on Discord via Rich Presence.
Tested on Ableton Live 12 Suite (Windows). No external bridge, no pypresence, no extra processes — the script runs inside Ableton's own Python interpreter and talks to Discord directly over its local IPC pipe.
Ableton Live 12 Suite
Project: my-track
128 BPM · Playing
00:01:23 elapsed
- Project name — parsed from Ableton's window title (the open
.alsfile) - Tempo — live from the Live API, updates instantly when you change it
- Play / Stop state — listens to transport events
- Elapsed timer — resets every time you hit play
- Ableton Live 11 or 12 (Windows)
- Discord desktop client running
- Nothing else — uses only Ableton's built-in Python stdlib
- Download the latest
DiscordRPC.zipfrom Releases. - Extract it so you end up with this folder structure:
%USERPROFILE%\Documents\Ableton\User Library\Remote Scripts\DiscordRPC\ __init__.py DiscordRPC.py - Fully quit Ableton (Remote Scripts are scanned only at launch).
- Launch Ableton → Settings → Link, Tempo & MIDI.
- In the first empty Control Surface row, pick DiscordRPC. Leave Input and Output as None.
- Close Settings. Presence should appear in Discord within a couple of seconds.
That's it. The script auto-runs whenever Ableton starts.
Edit DiscordRPC.py near the top:
| Constant | Default | Purpose |
|---|---|---|
CLIENT_ID |
1256769208704958464 |
Discord Application ID. The default is a public app named "Ableton Live 12 Suite" published by the DAWRPC project — replace with your own from the Discord Developer Portal if you want a custom name/icon. |
LARGE_IMAGE_KEY |
"icon" |
Asset image key uploaded to the Discord app. |
LARGE_IMAGE_TEXT |
"Ableton Live 12 Suite" |
Tooltip text for the image. |
POLL_INTERVAL_TICKS |
50 |
Refresh cadence (~5 s). One tick ≈ 100 ms. |
TITLE_REFRESH_EVERY_N_POLLS |
6 |
How often to re-check the window title for project-name changes (~30 s). |
┌─────────────────── Ableton process ────────────────────┐
│ │
│ Live API ──► listeners (tempo, is_playing) │
│ Window title ─► subprocess(powershell) ─► project │
│ │
│ Activity payload ─► background thread │
│ │ │
│ ▼ │
│ open(r'\\.\pipe\discord-ipc-N', 'r+b') │
│ │ │
└───────────────────────┼────────────────────────────────┘
▼
Discord desktop client
- The Live API gives tempo and playback state via listeners — instant updates, no polling for those.
- Project name comes from the Ableton window title, fetched once every ~30 s on a background thread via PowerShell (
Get-Process -Id $PID). The Live API itself does not expose the open.alsfile path. - Discord IPC is a framed binary protocol over a Windows named pipe (
\\.\pipe\discord-ipc-0through-9). The script opens the pipe with Python's built-inopen()and writesop + length + JSONframes — noctypes, nopypresence.
Ableton's embedded Python is stripped down — ctypes is not included, which rules out most off-the-shelf Discord RPC libraries. This script intentionally uses only modules Ableton ships: json, struct, socket-free pipe IO via open(), subprocess, threading, uuid, os, time.
The script is open source and short (~250 lines) — read it before running. Specifically:
- No network connections. The script never reaches the internet. The Discord pipe (
\\.\pipe\discord-ipc-N) is local-only, same-user IPC — the same channel Spotify, Steam, and games use for Rich Presence. - No data collection or telemetry. Rich Presence is one-way: the script sends "I'm working on X" to your local Discord client. Nothing comes back to anyone.
- No persistence. No registry keys, no startup entries, no scheduled tasks. The script only runs because Ableton loads it when you tick the box in Settings. Untick it and it's gone.
- No dynamic code. No downloads, no
eval, no remote imports. What's in the repo is exactly what runs. - No shell injection surface. The one
subprocesscall invokes PowerShell with a hardcoded command that interpolates onlyos.getpid()(a number) — not user input. - Discord Client ID is just an identifier. The default ID (
1256769208704958464) belongs to the DAWRPC project. The owner controls only the displayed name and icon — they cannot see who uses it, get any data, or run code on your machine. To eliminate even this minor third-party dependency, create your own Discord App and replaceCLIENT_IDinDiscordRPC.py.
If you find a security issue, please open an issue on this repo.
DiscordRPC doesn't appear in the Control Surface dropdown
Open Ableton's log:
"$env:APPDATA\Ableton\Live <version>\Preferences\Log.txt"Search for DiscordRPC or RemoteScriptError. The script logs Discord RPC: loaded (client_id=...) on a successful load. If you see an ImportError, something in the file got mangled — re-extract from the release zip.
Make sure you fully quit and relaunch Ableton — Remote Scripts are only scanned at launch.
Presence doesn't appear in Discord
- Confirm the Discord desktop app is running.
- Discord → Settings → Activity Privacy → Share your detected activities must be ON.
- Discord → Settings → Registered Games — you don't need Ableton listed for Rich Presence to work, but if you've added it as a non-game manually it's harmless.
- If you replaced
CLIENT_ID, make sure the Discord app is set to Public.
Project name shows "Live Set"
That's the fallback if subprocess / PowerShell isn't reachable. Check the log for Discord RPC update error. PowerShell needs to be on PATH.
- Public Discord Application ID
1256769208704958464("Ableton Live 12 Suite") is from Serena1432/DAWRPC — thanks for publishing it. - Discord IPC protocol reference: discord.com/developers/docs/topics/rpc.
This is an unofficial third-party tool. Not affiliated with, endorsed by, or sponsored by Ableton AG or Discord Inc. "Ableton" and "Live" are trademarks of Ableton AG. "Discord" is a trademark of Discord Inc.