Apple Music → Discord
Your status line says the song.
yanpresence mirrors what you're playing into Discord — laid out like Discord's own Spotify integration, but with the track name where everyone can read it, album art at full size, and the song, artist and album all clickable straight back to Apple Music.
MIT licensed · zero npm dependencies · macOS, Windows and Linux
What you get
Built to match Discord's own integration, then go past it.
The song, not the artist
Discord picks one field for the one-line status under your name. Spotify points it at the artist; yanpresence points it at the track, so your status reads the way people expect.
1024×1024 covers
Pulled from Apple's artwork CDN at the full square size Discord's own docs recommend — not the thumbnail a media notification would hand over.
Three clickable fields
Song, artist and album each link back to Apple Music. Hovering the cover shows the album; clicking opens it.
A live progress bar
With seek detection — scrub the track and the bar follows. Pause and the status disappears, the same way Discord's Spotify integration behaves.
Three platforms
Three completely different ways in. One pipeline.
Apple gives up playback state differently on every platform — and on Windows, differently for each of its two apps. Every source hands back an identical snapshot, so catalog lookups, links, artwork and the card itself never know which one they're serving.
macOS
Apple Events
Music.app and TV.app are scripted through the same iTunes-descended dictionary, read by a resident osascript rather than one spawn per poll.
- Apple Music
- Music.app
- Apple TV
- TV.app
Windows
Media session + UI Automation
Apple Music publishes a media session — the record behind the flyout over the volume overlay. Apple TV publishes none at all, so it's read off the player's own accessibility tree.
- Apple Music
- SMTC session
- Apple TV
- UI Automation
Linux
Browser web player
Apple ships no Linux app, so playback comes from music.apple.com — over a companion extension, over MPRIS on the session bus, or both at once.
- Apple Music
- Extension / MPRIS
- Apple TV
- Not available
Animated artwork
The whole loop. Full resolution. 3.7 MB.
Apple publishes motion covers for a lot of albums, but ships them as HLS video, which Discord can't render. Transcoding to GIF is why full-length motion art looked impossible — it lands around 128 MB. AVIF changes the arithmetic completely, so nothing has to be cut, shrunk or degraded.
Measured on a real Apple motion master — the full 20.6s loop at source framerate.
| Format | Size | Output |
|---|---|---|
| AVIF crf20 | 1024px | 3.7 MB |
| AVIF crf26 | 2160px | 8.4 MB |
| AVIF crf20 | 2160px | 12.2 MB |
| AVIF crf14 | 2160px | 18.8 MB |
| WebP q92 | 2160px | 88.3 MB |
| GIF | 1000px | ~128 MB |
Download
Get it running.
It runs from source on Node — there's nothing to compile and no dependencies to install. Setup is mostly telling Discord who you are.
Requirements
- Node.js 18+ — the whole thing is plain JavaScript with zero npm dependencies.
- The Discord desktop app, running. The web client has no local IPC socket to speak to.
- A Discord application of your own, named
Apple Music— Discord builds the "Listening to…" header from the application's name, so it has to be yours. - ffmpeg, only if you want animated artwork. The static path needs nothing extra.