✧・゚: *✧ every song, remembered ✧*:・゚✧

♪✦

Kanade

か な で ・ 奏

a tiny menu bar friend who writes down the songs you actually listen to ♪

about ABOUT.TXT
elysia@pink: ~/Developer/Kanade · zsh

elysia@pink:~/Kanade $ cat about.txt

a little scrobbler for the native apple music app.
she sits in the menu bar, listens quietly, and sends
every play to last.fm. no window, no fuss. ♪

elysia@pink:~/Kanade $ ./kanade --status

♪ watching apple music via system notifications
♡ scrobbles at half the song or 4 minutes, like the rules say
✦ discord: "listening to apple music" · with art

elysia@pink:~/Kanade $

no kanade account, no server of mine in the middle: just you, apple music & last.fm.

what she does FEATURES.TXT
♪real scrobblinghalf the song or 4 minutes, the proper last.fm rules.
✦now playingyour profile updates the moment a track starts.
♡discord presence"listening to apple music" with album art & a live bar. one toggle turns it off.
⏸little controlsplay, pause, skip & a seekable bar right in the popover.
⌕love buttonthe heart shows your real last.fm loved state & flips it.
☽offline queueno wifi? scrobbles wait on your mac & go out later.
✧album artfetched per song, shown in the popover & on discord.
✗artist renameswhen apple music & last.fm spell a band differently, you pick.

swift 6 strict concurrency, zero dependencies: the mac app is about a dozen little files.

the popover MENUBAR.APP
♪
listening...somewheresoftly
--:----:--
iv4angel · scrobblingquit

this one is css, but it's showing my real last.fm right now · the length is real, the position is her best guess ♡

on discord PRESENCE.IPC

Listening to Apple Music

♪
listening...somewheresoftly
--:----:--

spoken over discord's local socket, by hand: frames, opcodes & a little nonce. no library.

how she listens NOTIFY.LOG
com.apple.Music.playerInfo

Player State → Playing ♪
Name → your song
Artist → your artist
Total Time → 254000ms

apple music announces every change,
kanade just listens politely.

system notifications, not polling · one small position check every 15 seconds while a song plays, so scrubbing can't fool her.

the rules SCROBBLE.TXT
1.a song must be longer than 30 seconds. tiny songs rest.
2.you must hear half of it, or 4 minutes. whichever is first.
3.pausing stops the clock. seeking doesn't cheat it.
4.then, and only then: scrobble ♪

last.fm's rules, not hers · seeking to the end won't fake a scrobble.

get kanade INSTALL.SH

free on the mac app store, macOS 15+ ♪
that build has no discord card: the sandbox can't reach discord's socket.

全部の歌を、覚えていてね

← back to main page ♡ privacy policy ✧