yanpresence

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

Listening to Apple Music
Be Her
1:04
yanxu Listening to Be Her status line
someone else Listening to Ella Langley spotify

What you get

Built to match Discord's own integration, then go past it.

THE STATUS LINE

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.

ARTWORK

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.

LINKS

Three clickable fields

Song, artist and album each link back to Apple Music. Hovering the cover shows the album; clicking opens it.

PLAYBACK

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
On Windows it also runs as an app. A Start menu entry so Windows Search finds it, and a notification-area icon whose menu has Quit — which clears your presence with Discord on the way out rather than leaving a stale status behind.

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.

FormatSizeOutput
AVIF crf201024px3.7 MB
AVIF crf262160px8.4 MB
AVIF crf202160px12.2 MB
AVIF crf142160px18.8 MB
WebP q922160px88.3 MB
GIF1000px~128 MB
The encode can go to the GPU. On Windows with an AMD card it does by default — AMF produces AVIF that Discord renders, measured faster and smaller than the CPU encoder. On Linux it deliberately doesn't: the same silicon through VAAPI produces files Chromium refuses to decode, and Discord is Chromium.

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.