Using gooseneck

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.csv

Periods: 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:

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_SECRET

Your 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.

Edit these docs on GitHub