Scrobbling
Always to a private local log, and optionally to ListenBrainz and Last.fm, by real listening time.
#The local log
Every listen that counts is written to its own SQLite file, ~/.config/gooseneck/scrobbles.db. No account needed.
goose scrobbles -s today # recent listens
goose scrobbles top artist -s month # also: track, album
goose scrobbles stats -s year # listens, time, artists, days
goose scrobbles export --format listenbrainz > listens.json # importable later
goose scrobbles export --format csv > listens.csvPeriods: today, week, month, year, all, or durations like 7d / 12h. The TUI's History page has a Listens tab with the same data. Move it with scrobble_db, or turn it off with goose config set local_scrobble false.
#What counts as a listen
gooseneck uses Last.fm's rules, measured by actual listening:
- A track counts after half its length or 4 minutes, whichever comes first.
- Pauses and seeking don't count toward that.
- Tracks under 30 seconds never count.
- Playing a track on repeat counts each time through.
The TUI sidebar shows when the current track will scrobble.
#ListenBrainz
goose scrobble login listenbrainz # paste your token from listenbrainz.org/settings#Last.fm
Last.fm requires every app to use an API key. Create one at last.fm/api/account/create (free; the callback URL can stay empty), then:
goose scrobble login lastfm --key YOUR_KEY --secret YOUR_SECRETYour browser opens to approve gooseneck. After that, it's automatic.
#Managing it
goose scrobble # status: services, current track, queue
goose scrobble off | on
goose scrobble flush # send queued listens now
goose scrobble logout lastfm#The background daemon
A small daemon starts with playback, so scrobbling keeps working after you close the TUI. It polls the player every couple of seconds, queues listens in the database and sends them; when you're offline they wait and go out later. It exits on its own about 30 seconds after the player goes away. The same daemon keeps radio topped up.
Credentials live in the config file, which gooseneck writes with mode 0600 and masks in goose config output.