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 stored OAuth credentials. Configure a Spotify Developer app
client_id first if the config does not have one yet.
403 on playlist writes
Section titled “403 on playlist writes”If playlist or library writes return 403, your Spotify app is probably
still in Development Mode. Apply for Extended Quota Mode in the Spotify
dashboard.
spotuify auth statusspotuify doctorPermissions out of date
Section titled “Permissions out of date”The TUI shows the banner “Spotify permissions out of date. Quit,
run spotuify logout && spotuify login, then restart.” when a 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 loginAuth file issues
Section titled “Auth file issues”spotuify stores OAuth credentials in the private auth directory:
<config_dir>/auth/token.json for the default dev-app flow and
<config_dir>/auth/first-party.json for first-party/keymaster auth.
Files are written with mode 0600 on Unix.
If auth looks wrong, inspect the current paths first:
spotuify config pathspotuify doctorReset the auth file by recreating the token:
spotuify daemon stopspotuify logoutspotuify loginspotuify daemon startFor local development and tests, use fake mode when you do not want live Spotify auth at all:
SPOTUIFY_FAKE_SPOTIFY=1 SPOTUIFY_CLIENT_ID=fake-client-id spotuifyLogin redirect fails with localhost
Section titled “Login redirect fails with localhost”Spotify’s November 2025 OAuth migration only accepts the literal
http://127.0.0.1:<port>/callback loopback redirect - localhost and
::1 are rejected. The default config already uses 127.0.0.1; if you
overrode redirect_uri, fix it and update the redirect URI registered
in your Spotify Developer app to match:
spotuify config set redirect_uri http://127.0.0.1:8888/callbackspotuify loginspotuify doctor flags a localhost/::1 redirect host as a warning.
No active device
Section titled “No active device”spotuify devices --format jsonspotuify transfer spotuify-humespotuify play "imagine dragons"The daemon should expose its embedded librespot device even when Spotify’s device registry lags. 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 localSearch index reports LockBusy
Section titled “Search index reports LockBusy”The daemon clears stale Tantivy lock files (.tantivy-*.lock) automatically
during startup preflight, so a restart fixes a stuck index lock:
spotuify daemon restartManual lock removal under the instance’s search_index directory is only
needed if the daemon itself refuses to start - and only after stopping that
instance’s daemon.
Cache 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 follow --lines 3spotuify lyrics fetch spotify:track:...spotuify refresh-mediaspotuify lyrics offset spotify:track:... +50msLyrics depend on configured providers and cache state. Spotify Web API itself does not guarantee lyrics.
lyrics follow requires an active track with synced lyric timestamps. If it
prints synced lyrics unavailable; use spotuify lyrics show, the track has
plain lyrics but no timing data for karaoke-style following.
In the TUI, press U to refetch the current track’s cover art and lyrics.
The current display is not cleared while the new fetch is running.
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.
Cover art doesn’t render in the terminal
Section titled “Cover art doesn’t render in the terminal”spotuify doctor (run in an interactive terminal) prints a terminal: line
showing your TERM, the cover-art image protocol it expects to use (kitty
graphics, iterm2 inline images, sixel, or unicode half-blocks), and whether
truecolor is available. If it says “unicode half-blocks”, your terminal
doesn’t advertise an inline-image protocol - switch to kitty, WezTerm, or
iTerm2 for real album art. The line is omitted when output is piped.
Windows notes
Section titled “Windows notes”Windows x64 release zips use the same daemon protocol over named pipes instead of Unix sockets. If the daemon looks unavailable, start with the same commands:
spotuify daemon statusspotuify daemon restartspotuify logs tail 200spotuify daemon install-service registers a user-level Task Scheduler logon trigger. Global media keys (SMTC) work headlessly: the daemon spawns a hidden message-only window to host the System Media Transport Controls, so play/pause/next from the keyboard and the Windows volume flyout reach spotuify even with no TUI open.
Bug report
Section titled “Bug report”spotuify bug-report --log-lines 500 --output spotuify-report.tar.gzThe bundle is local. Inspect it before sharing.