Troubleshooting
Start with doctor. It is the shortest path to useful failure data.
Run doctor
Section titled “Run doctor”spotuify doctorspotuify doctor --format jsonDaemon unavailable
Section titled “Daemon unavailable”spotuify daemon statusspotuify daemon startspotuify logs tail 200If a script must fail instead of starting the daemon:
spotuify --no-daemon-start statusAuth failure
Section titled “Auth failure”If you see not logged in; run spotuify login, do exactly that:
spotuify loginspotuify doctorspotuify login opens the browser, and the daemon mints a Web API token
from your session. No Client ID or redirect URI to configure.
403 on playlist writes
Section titled “403 on playlist writes”If you set SPOTUIFY_CLIENT_ID to use your own Spotify app and creating
a playlist returns 403, that app is in Spotify’s Development Mode,
which blocks playlist and library writes. Unset it to fall back to the
first-party login, which can write:
unset SPOTUIFY_CLIENT_IDspotuify loginPermissions out of date
Section titled “Permissions out of date”This banner only applies to the legacy dev-app login (when you set
SPOTUIFY_CLIENT_ID). The default first-party login always grants the
full scope set, so it never fires there.
The TUI shows the banner “Spotify permissions out of date. Quit,
run spotuify logout && spotuify login, then restart.” when a dev-app
token was issued before a scope that newer features require (like
follow/unfollow or playlist add). The fix is exactly what the banner
says:
spotuify logoutspotuify loginmacOS keychain prompt storm
Section titled “macOS keychain prompt storm”Each cold start of spotuify (or spotuify daemon) reads your Spotify
OAuth token from the macOS Keychain. On a fresh binary the system
prompts for approval; the in-memory token cache only deduplicates
within a single process.
To kill the prompts on a binary you trust:
- Click Always Allow the next time macOS prompts for that exact binary. The grant is bound to the binary identity, so it survives daemon restarts but resets when you rebuild from source.
If you’ve run unsigned dev builds repeatedly, each one is a new identity that Always Allow can’t pin, so the clicks pile up and can corrupt the token item’s access list, after which even the trusted installed binary prompts on every ~20s read. Reset it by recreating the token from a trusted binary:
spotuify daemon stopspotuify logout # deletes the token + its corrupted access listspotuify login # recreates a clean item, trusting the installed binaryspotuify daemon startFor local development and tests:
# Skip the proactive scope-drift check at startup (one fewer# keychain hit per cold start; the first real API call still# reads the token).SPOTUIFY_SKIP_KEYCHAIN_ON_START=1 spotuify daemon startSPOTUIFY_FAKE_SPOTIFY=1 already implies the skip. Fake-mode runs
never touch the keychain.
No active device
Section titled “No active device”spotuify devicesspotuify transfer spotuify-humespotuify play "imagine dragons"If the device list is empty, start the daemon and reconnect:
spotuify daemon restartspotuify reconnectspotuify devicesCan’t transfer to an Echo / Alexa speaker
Section titled “Can’t transfer to an Echo / Alexa speaker”Amazon Echo and other Alexa-controlled speakers appear in spotuify devices,
but Spotify’s Web API routinely refuses to start playback on them from a
third-party client, so transfer returns 404 Not found. Wake the device via
Alexa (or the Spotify app) first, then transfer while it’s in an active
session:
# Start anything on the Echo via Alexa, then:spotuify transfer "Office Echo"Search looks empty
Section titled “Search looks empty”spotuify sync libraryspotuify cache status --format jsonspotuify reindexspotuify search "test" --source localCache looks broken
Section titled “Cache looks broken”spotuify cache repairspotuify cache statusLast resort:
spotuify cache reset --confirmspotuify sync allLyrics are missing
Section titled “Lyrics are missing”spotuify lyrics showspotuify lyrics fetch spotify:track:...spotuify lyrics offset spotify:track:... +50msLyrics depend on configured providers and cache state. Spotify Web API itself does not guarantee lyrics.
Visualizer is blank
Section titled “Visualizer is blank”spotuify viz status --format jsonspotuify viz source autospotuify viz enableOn macOS loopback capture needs a virtual device such as BlackHole unless the embedded sink tap is active.
Bug report
Section titled “Bug report”spotuify bug-report --log-lines 500 --output spotuify-report.tar.gzThe bundle is local. Inspect it before sharing.