[GH-ISSUE #930] Using my newly created client_id causes blank UI (429 Too Many Requests) #1495

Open
opened 2026-03-14 15:15:28 +03:00 by kerem · 14 comments
Owner

Originally created by @kohane27 on GitHub (Feb 13, 2026).
Original GitHub issue: https://github.com/aome510/spotify-player/issues/930

Hello! Hope you're doing well.

Given https://developer.spotify.com/dashboard/create is finally opened again I immediately created an account.

Setting up the Account

  • In the APIs used I ticked all Web API, Web Playback SDK, Android, iOS and even Ads API.
  • Redirect URIs is http://127.0.0.1:8989/login

Usage

  1. rm -rf ~/.cache/spotify-player
  2. In app.toml I copied the new client_id client_id = "xxx".
  3. I cloned the project and compile with cargo run -p spotify_player --no-default-features --features pulseaudio-backend,streaming,media-control -j 2.
  4. Authenticated successfully
  5. The UI is blank
Image
  1. Log at ~/.cache/spotify-player/spotify-player-26-02-13-09-06.log:
2026-02-13T09:07:02.045549Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-13T09:07:02.045549Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-13T09:07:02.050178Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-13T09:07:02.053297Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-13T09:07:02.192502Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-13T09:07:02.248726Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests

If I removed client_id in app.toml spotify_player works correctly, but I prefer to use my own client_id.

I believe this is not spotify_player problem but another problem on spotify side. However, I don't understand why using ncspot's client id works but mine does not. I understand mine does not have "extended quote mode" but I'm the only user. Is there any problem with how I set up spotify app? Maybe we can use this issue to track when we can finally use our own client_id?

Any input is much appreciated. Thank you!

Originally created by @kohane27 on GitHub (Feb 13, 2026). Original GitHub issue: https://github.com/aome510/spotify-player/issues/930 Hello! Hope you're doing well. Given https://developer.spotify.com/dashboard/create is finally opened again I immediately created an account. ## Setting up the Account - In the `APIs used` I ticked all `Web API`, `Web Playback SDK`, `Android`, `iOS` and even `Ads API`. - `Redirect URIs` is `http://127.0.0.1:8989/login` ## Usage 1. `rm -rf ~/.cache/spotify-player` 2. In `app.toml` I copied the new client_id `client_id = "xxx"`. 3. I cloned the project and compile with `cargo run -p spotify_player --no-default-features --features pulseaudio-backend,streaming,media-control -j 2`. 4. Authenticated successfully 5. The UI is blank <img width="2878" height="1773" alt="Image" src="https://github.com/user-attachments/assets/e9db31bb-dda1-46e9-8387-3f3ea7505203" /> 6. Log at `~/.cache/spotify-player/spotify-player-26-02-13-09-06.log`: ``` 2026-02-13T09:07:02.045549Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-13T09:07:02.045549Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-13T09:07:02.050178Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-13T09:07:02.053297Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-13T09:07:02.192502Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-13T09:07:02.248726Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests ``` If I removed `client_id` in `app.toml` spotify_player works correctly, but I prefer to use my own client_id. I believe this is not spotify_player problem but another problem on spotify side. However, I don't understand why using [ncspot's client id](https://github.com/aome510/spotify-player/pull/918) works but mine does not. I understand mine does not have "extended quote mode" but I'm the only user. Is there any problem with how I set up spotify app? Maybe we can use this issue to track when we can finally use our own client_id? Any input is much appreciated. Thank you!
Author
Owner

@Spitfire1900 commented on GitHub (Feb 15, 2026):

I've been getting 429s even using the default client_id.

grep client_id ~/.config/spotify-player/app.toml; ls --zero ~/.cache/spotify-player/*.log | tail --zero -n -1 | xargs -I SUB sh -c 'grep -A 2 -B 2 429 SUB'
client_id = "65b708073fc0480ea92a077233ca87bd"
xargs: WARNING: a NUL character occurred in the input.  It cannot be passed through in the argument list.  Did you mean to use the --null option?
2026-02-15T04:43:49.857831Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/tracks: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-15T04:43:49.858845Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-15T04:43:49.865761Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/shows: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-15T04:43:49.870561Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-15T04:43:49.882396Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
--
2026-02-15T04:43:49.900355Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/albums: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-15T04:43:50.081780Z  INFO librespot_connect::spirc: active device is <9ce2999bee6ccf4cbea11e543e4ade01e4905513> with session <5P1DjVWwAmXRPfjQ4Diq0n>
2026-02-15T04:43:50.644126Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests
2026-02-15T04:43:50.644578Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests
<!-- gh-comment-id:3903278088 --> @Spitfire1900 commented on GitHub (Feb 15, 2026): I've been getting 429s even using the default client_id. ``` grep client_id ~/.config/spotify-player/app.toml; ls --zero ~/.cache/spotify-player/*.log | tail --zero -n -1 | xargs -I SUB sh -c 'grep -A 2 -B 2 429 SUB' client_id = "65b708073fc0480ea92a077233ca87bd" xargs: WARNING: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option? 2026-02-15T04:43:49.857831Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/tracks: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-15T04:43:49.858845Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-15T04:43:49.865761Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/shows: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-15T04:43:49.870561Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-15T04:43:49.882396Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: { "error": { "status": 429, "message": "API rate limit exceeded" } -- 2026-02-15T04:43:49.900355Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/albums: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-15T04:43:50.081780Z INFO librespot_connect::spirc: active device is <9ce2999bee6ccf4cbea11e543e4ade01e4905513> with session <5P1DjVWwAmXRPfjQ4Diq0n> 2026-02-15T04:43:50.644126Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests 2026-02-15T04:43:50.644578Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests ```
Author
Owner

@aome510 commented on GitHub (Feb 16, 2026):

I couldn't create a new app following the new change (even after deleting all my previous apps) so couldn't reproduce the issue myself

Image

To help investigate the issue, can you try to comment these lines

github.com/aome510/spotify-player@83fea36fc7/spotify_player/src/main.rs (L28-L34)

and run the app again to see if it fixes rate-limit issue?

I'm not sure if Spotify also applies a stricter rate-limit policy for new user-created app the same way that triggered the previous rate-limit issue with official webapp API

In a related note, I'm looking for a browser cookie integration for API interaction so users don't need to manually create an app or use NCSPOT_CLIENT to interact with Spotify APIs

<!-- gh-comment-id:3906099838 --> @aome510 commented on GitHub (Feb 16, 2026): I couldn't create a new app following the new change (even after deleting all my previous apps) so couldn't reproduce the issue myself <img width="503" height="161" alt="Image" src="https://github.com/user-attachments/assets/464002d2-1bab-4752-8844-e8a0758fb9fe" /> To help investigate the issue, can you try to comment these lines https://github.com/aome510/spotify-player/blob/83fea36fc74d83c542129c77c812ba4b9ee7b792/spotify_player/src/main.rs#L28-L34 and run the app again to see if it fixes rate-limit issue? I'm not sure if Spotify also applies a stricter rate-limit policy for new user-created app the same way that triggered [the previous rate-limit issue with official webapp API](https://github.com/aome510/spotify-player/issues/890) In a related note, I'm looking for a browser cookie integration for API interaction so users don't need to manually create an app or use NCSPOT_CLIENT to interact with Spotify APIs
Author
Owner

@klexas commented on GitHub (Feb 17, 2026):

Yeah this is still happening to me also, it's something to do with the Spotify API.

What's confusing is the aome510 are still making new releases when the application is not in a working state ?

<!-- gh-comment-id:3913287960 --> @klexas commented on GitHub (Feb 17, 2026): Yeah this is still happening to me also, it's something to do with the Spotify API. What's confusing is the aome510 are still making new releases when the application is not in a working state ?
Author
Owner

@aome510 commented on GitHub (Feb 17, 2026):

It works fine for me without any issues the past few days (with default NCSPOT_CLIENT)

<!-- gh-comment-id:3913374393 --> @aome510 commented on GitHub (Feb 17, 2026): It works fine for me without any issues the past few days (with default NCSPOT_CLIENT)
Author
Owner

@kohane27 commented on GitHub (Feb 17, 2026):

The default client_id works for me but using my own client_id still not working.

I'm on the latest commit 8009a68464 and have commented out the following:

 // request user data
 client_pub.send(client::ClientRequest::GetCurrentUser)?;
 client_pub.send(client::ClientRequest::GetUserPlaylists)?;
 client_pub.send(client::ClientRequest::GetUserFollowedArtists)?;
 client_pub.send(client::ClientRequest::GetUserSavedAlbums)?;
 client_pub.send(client::ClientRequest::GetUserSavedTracks)?;
 client_pub.send(client::ClientRequest::GetUserSavedShows)?;

I still have the blank UI with the following log:

spotify-player-26-02-17-09-55.log:

2026-02-17T09:55:25.245316Z  INFO spotify_player: Configurations: Configs { app_config: AppConfig { theme: "default2", client_id: Some("***"), client_id_command: None, client_port: 8080, login_redirect_uri: "http://127.0.0.1:8989/login", log_folder: Some("/home/username/.cache/spotify-player"), player_event_hook_command: None, playback_format: "{track} • {artists}\n{album}\n{metadata}", playback_metadata_fields: ["repeat", "shuffle", "volume", "device"], tracks_playback_limit: 999, proxy: None, ap_port: None, app_refresh_duration_in_ms: 32, playback_refresh_duration_in_ms: 0, page_size_in_rows: 20, play_icon: "\u{f04b} ", pause_icon: "\u{f04c} ", liked_icon: "♥", explicit_icon: "(E)", border_type: Rounded, progress_bar_type: Rectangle, progress_bar_position: Bottom, layout: LayoutConfig { library: LibraryLayoutConfig { playlist_percent: 40, album_percent: 40 }, playback_window_position: Top, playback_window_height: 6 }, genre_num: 2, enable_media_control: true, enable_streaming: Always, enable_cover_image_cache: false, default_device: "spotify-player", device: DeviceConfig { name: "laptop", device_type: "speaker", volume: 65, bitrate: 320, audio_cache: true, normalization: true, autoplay: false }, seek_duration_secs: 5, sort_artist_albums_by_type: false }, keymap_config: KeymapConfig { keymaps: [Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('q'))] }, command: Quit }, Keymap { key_sequence: KeySequence { keys: [Alt(Char('l'))] }, command: FocusNextWindow }, Keymap { key_sequence: KeySequence { keys: [Alt(Char('h'))] }, command: FocusPreviousWindow }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('h'))] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('z'))] }, command: Queue }, Keymap { key_sequence: KeySequence { keys: [None(Char('a'))] }, command: ShowActionsOnSelectedItem }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('a'))] }, command: ShowActionsOnCurrentTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('p'))] }, command: CurrentlyPlayingContextPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('m'))] }, command: Mute }, Keymap { key_sequence: KeySequence { keys: [None(Char('r'))] }, command: Repeat }, Keymap { key_sequence: KeySequence { keys: [None(Char('z'))] }, command: PlayRandom }, Keymap { key_sequence: KeySequence { keys: [None(Char('D'))] }, command: SwitchDevice }, Keymap { key_sequence: KeySequence { keys: [None(Char('x'))] }, command: Shuffle }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('r'))] }, command: RefreshPlayback }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('d'))] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('u'))] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('t'))] }, command: SortTrackByTitle }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('a'))] }, command: SortTrackByArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('A'))] }, command: SortTrackByAlbum }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('D'))] }, command: SortTrackByAddedDate }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('r'))] }, command: ReverseTrackOrder }, Keymap { key_sequence: KeySequence { keys: [None(PageUp)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(PageDown)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Home)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(End)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char(' '))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('c'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('q'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('T'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('D'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('O'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('n'))] }, command: NextTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('p'))] }, command: PreviousTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('.'))] }, command: PlayRandom }, Keymap { key_sequence: KeySequence { keys: [None(Char(' '))] }, command: ResumePause }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('s'))] }, command: Shuffle }, Keymap { key_sequence: KeySequence { keys: [None(Char('+'))] }, command: VolumeChange { offset: 5 } }, Keymap { key_sequence: KeySequence { keys: [None(Char('-'))] }, command: VolumeChange { offset: -5 } }, Keymap { key_sequence: KeySequence { keys: [None(Char('_'))] }, command: Mute }, Keymap { key_sequence: KeySequence { keys: [None(Char('^'))] }, command: SeekStart }, Keymap { key_sequence: KeySequence { keys: [None(Char('>'))] }, command: SeekForward { duration: None } }, Keymap { key_sequence: KeySequence { keys: [None(Char('<'))] }, command: SeekBackward { duration: None } }, Keymap { key_sequence: KeySequence { keys: [None(Enter)] }, command: ChooseSelected }, Keymap { key_sequence: KeySequence { keys: [None(Char('/'))] }, command: Search }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [None(Char('Z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('g'))] }, command: JumpToHighlightTrackInContext }, Keymap { key_sequence: KeySequence { keys: [None(Char('A'))] }, command: ShowActionsOnCurrentContext }, Keymap { key_sequence: KeySequence { keys: [None(Char('R'))] }, command: RestartIntegratedClient }, Keymap { key_sequence: KeySequence { keys: [None(Tab)] }, command: FocusNextWindow }, Keymap { key_sequence: KeySequence { keys: [None(BackTab)] }, command: FocusPreviousWindow }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('p'))] }, command: BrowseUserPlaylists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('a'))] }, command: BrowseUserFollowedArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('A'))] }, command: BrowseUserSavedAlbums }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char(' '))] }, command: CurrentlyPlayingContextPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('t'))] }, command: TopTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('r'))] }, command: RecentlyPlayedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('y'))] }, command: LikedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('L'))] }, command: LyricsPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('l'))] }, command: LyricsPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('l'))] }, command: LibraryPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('s'))] }, command: SearchPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('b'))] }, command: BrowsePage }, Keymap { key_sequence: KeySequence { keys: [None(Backspace)] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('?'))] }, command: OpenCommandHelp }, Keymap { key_sequence: KeySequence { keys: [None(Esc)] }, command: ClosePopup }, Keymap { key_sequence: KeySequence { keys: [None(Char('j'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('n'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Down)] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('k'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('p'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(Up)] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('b'))] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('f'))] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('g'))] }, command: SelectFirstOrScrollToTop }, Keymap { key_sequence: KeySequence { keys: [None(Char('G'))] }, command: SelectLastOrScrollToBottom }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('t'))] }, command: SortTrackByTitle }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('a'))] }, command: SortTrackByArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('A'))] }, command: SortTrackByAlbum }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('d'))] }, command: SortTrackByDuration }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('D'))] }, command: SortTrackByAddedDate }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('r'))] }, command: ReverseTrackOrder }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('l')), None(Char('a'))] }, command: SortLibraryAlphabetically }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('l')), None(Char('r'))] }, command: SortLibraryByRecent }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('k'))] }, command: MovePlaylistItemUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('j'))] }, command: MovePlaylistItemDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('N'))] }, command: CreatePlaylist }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('c'))] }, command: JumpToCurrentTrackInContext }], actions: [] }, theme_config: ThemeConfig { themes: [Theme { name: "default", palette: Palette { background: None, foreground: None, black: Color { color: Black }, blue: Color { color: Blue }, cyan: Color { color: Cyan }, green: Color { color: Green }, magenta: Color { color: Magenta }, red: Color { color: Red }, white: Color { color: Gray }, yellow: Color { color: Yellow }, bright_black: Color { color: DarkGray }, bright_white: Color { color: White }, bright_red: Color { color: LightRed }, bright_magenta: Color { color: LightMagenta }, bright_green: Color { color: LightGreen }, bright_cyan: Color { color: LightCyan }, bright_blue: Color { color: LightBlue }, bright_yellow: Color { color: LightYellow } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "default2", palette: Palette { background: None, foreground: None, black: Color { color: Black }, blue: Color { color: Blue }, cyan: Color { color: Cyan }, green: Color { color: Green }, magenta: Color { color: Magenta }, red: Color { color: Red }, white: Color { color: White }, yellow: Color { color: Yellow }, bright_black: Color { color: DarkGray }, bright_white: Color { color: White }, bright_red: Color { color: LightRed }, bright_magenta: Color { color: LightMagenta }, bright_green: Color { color: LightGreen }, bright_cyan: Color { color: LightCyan }, bright_blue: Color { color: LightBlue }, bright_yellow: Color { color: LightYellow } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "dracula", palette: Palette { background: Some(Color { color: Rgb(30, 31, 41) }), foreground: Some(Color { color: Rgb(248, 248, 242) }), black: Color { color: Rgb(0, 0, 0) }, blue: Color { color: Rgb(189, 147, 249) }, cyan: Color { color: Rgb(139, 233, 253) }, green: Color { color: Rgb(80, 250, 123) }, magenta: Color { color: Rgb(255, 121, 198) }, red: Color { color: Rgb(255, 85, 85) }, white: Color { color: Rgb(187, 187, 187) }, yellow: Color { color: Rgb(241, 250, 140) }, bright_black: Color { color: Rgb(85, 85, 85) }, bright_white: Color { color: Rgb(255, 255, 255) }, bright_red: Color { color: Rgb(255, 85, 85) }, bright_magenta: Color { color: Rgb(255, 121, 198) }, bright_green: Color { color: Rgb(80, 250, 123) }, bright_cyan: Color { color: Rgb(139, 233, 253) }, bright_blue: Color { color: Rgb(189, 147, 249) }, bright_yellow: Color { color: Rgb(241, 250, 140) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "solarized_dark", palette: Palette { background: Some(Color { color: Rgb(0, 43, 54) }), foreground: Some(Color { color: Rgb(131, 148, 150) }), black: Color { color: Rgb(7, 54, 66) }, blue: Color { color: Rgb(38, 139, 210) }, cyan: Color { color: Rgb(42, 161, 152) }, green: Color { color: Rgb(133, 153, 0) }, magenta: Color { color: Rgb(211, 54, 130) }, red: Color { color: Rgb(220, 50, 47) }, white: Color { color: Rgb(238, 232, 213) }, yellow: Color { color: Rgb(181, 137, 0) }, bright_black: Color { color: Rgb(0, 43, 54) }, bright_white: Color { color: Rgb(253, 246, 227) }, bright_red: Color { color: Rgb(203, 75, 22) }, bright_magenta: Color { color: Rgb(108, 113, 196) }, bright_green: Color { color: Rgb(88, 110, 117) }, bright_cyan: Color { color: Rgb(147, 161, 161) }, bright_blue: Color { color: Rgb(131, 148, 150) }, bright_yellow: Color { color: Rgb(101, 123, 131) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "tokyonight", palette: Palette { background: None, foreground: None, black: Color { color: Rgb(65, 72, 104) }, blue: Color { color: Rgb(38, 139, 210) }, cyan: Color { color: Rgb(125, 207, 255) }, green: Color { color: Green }, magenta: Color { color: Rgb(187, 154, 247) }, red: Color { color: Rgb(247, 118, 142) }, white: Color { color: Rgb(238, 232, 213) }, yellow: Color { color: Rgb(224, 175, 104) }, bright_black: Color { color: Rgb(36, 40, 59) }, bright_white: Color { color: Rgb(253, 246, 227) }, bright_red: Color { color: Rgb(255, 68, 153) }, bright_magenta: Color { color: Rgb(255, 0, 124) }, bright_green: Color { color: Rgb(115, 218, 202) }, bright_cyan: Color { color: Rgb(147, 161, 161) }, bright_blue: Color { color: Rgb(131, 148, 150) }, bright_yellow: Color { color: Rgb(101, 123, 131) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }] }, cache_folder: "/home/username/.cache/spotify-player" }
2026-02-17T09:55:25.306300Z  INFO spotify_player::auth: Using cached credentials
2026-02-17T09:55:25.306441Z  INFO spotify_player::streaming: Application's connect configurations: ConnectConfig { name: "laptop", device_type: Speaker, is_group: false, initial_volume: 42598, disable_volume: false, volume_steps: 64 }
2026-02-17T09:55:25.306481Z  INFO librespot_playback::mixer::softmixer: Mixing with softvol and volume control: Log(60.0)
2026-02-17T09:55:25.306522Z  INFO spotify_player::streaming: Initializing a new integrated player with device_id=***
2026-02-17T09:55:25.306640Z  INFO spotify_player::streaming: Starting an integrated Spotify player using librespot's spirc protocol
2026-02-17T09:55:25.306778Z  INFO librespot_playback::convert: Converting with ditherer: tpdf
2026-02-17T09:55:25.306811Z  INFO librespot_playback::audio_backend::pulseaudio: Using PulseAudioSink with format: S16
2026-02-17T09:55:26.753262Z  INFO librespot_core::session: Connecting to AP "***.spotify.com:4070"
2026-02-17T09:55:27.500355Z  INFO librespot_core::session: Authenticated as '***' !
2026-02-17T09:55:27.500704Z  INFO librespot_core::session: Country: "**"
2026-02-17T09:55:28.259035Z  INFO spotify_player::streaming: New streaming connection has been established!
2026-02-17T09:55:28.259134Z  INFO spotify_player::client: Used a new session for Spotify client.
2026-02-17T09:55:28.847976Z  INFO spotify_player::cli::client: Starting a client socket at 127.0.0.1:8080
2026-02-17T09:55:28.848437Z  INFO spotify_player::media_control: Initializing application's media control event watcher...
2026-02-17T09:55:29.257337Z  INFO librespot_core::spclient: Resolved "guc3-spclient.spotify.com:443" as spclient access point
2026-02-17T09:55:30.487777Z  INFO librespot_connect::spirc: active device is <> with session <a024fc5bef5d1a9fb78f76fa7c1c12c6>
2026-02-17T09:55:30.715040Z  INFO spotify_player::client: Available devices: [Device { id: Some("***"), is_active: false, is_private_session: false, is_restricted: false, name: "laptop", _type: Speaker, volume_percent: Some(65) }]
2026-02-17T09:55:30.715135Z  INFO spotify_player::client: Trying to connect to device (id=***)
2026-02-17T09:55:30.909967Z  INFO spotify_player::client: Available devices: [Device { id: Some("***"), is_active: false, is_private_session: false, is_restricted: false, name: "laptop", _type: Speaker, volume_percent: Some(65) }]
2026-02-17T09:55:30.910063Z  INFO spotify_player::client: Trying to connect to device (id=***)
2026-02-17T09:55:31.100209Z  WARN librespot_connect::state::context: couldn't load context info because: context is not available. type: Default
2026-02-17T09:55:31.508731Z  WARN librespot_connect::state::context: couldn't load context info because: context is not available. type: Default
2026-02-17T09:55:31.715908Z  INFO spotify_player::client: Connection succeeded (device_id=***)!
2026-02-17T09:55:31.716142Z  INFO librespot_playback::player: Loading <Fine> with Spotify URI <spotify:track:6CdUgvL597jWmW4w8P5kHs>
2026-02-17T09:55:31.921148Z  INFO librespot_playback::player: Loading <Fine> with Spotify URI <spotify:track:6CdUgvL597jWmW4w8P5kHs>
2026-02-17T09:55:32.259207Z  INFO spotify_player::client: Connection succeeded (device_id=***)!
2026-02-17T09:55:33.163465Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")}
2026-02-17T09:55:33.199868Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")}
2026-02-17T09:55:33.236305Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")}
2026-02-17T09:55:33.272645Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")}

Thanks again!

<!-- gh-comment-id:3913571858 --> @kohane27 commented on GitHub (Feb 17, 2026): The default `client_id` works for me but using my own `client_id` still not working. I'm on the latest commit 8009a684640d609acc8677d71c93548cce7e0e6f and have commented out the following: ``` // request user data client_pub.send(client::ClientRequest::GetCurrentUser)?; client_pub.send(client::ClientRequest::GetUserPlaylists)?; client_pub.send(client::ClientRequest::GetUserFollowedArtists)?; client_pub.send(client::ClientRequest::GetUserSavedAlbums)?; client_pub.send(client::ClientRequest::GetUserSavedTracks)?; client_pub.send(client::ClientRequest::GetUserSavedShows)?; ``` I still have the blank UI with the following log: `spotify-player-26-02-17-09-55.log`: ```log 2026-02-17T09:55:25.245316Z INFO spotify_player: Configurations: Configs { app_config: AppConfig { theme: "default2", client_id: Some("***"), client_id_command: None, client_port: 8080, login_redirect_uri: "http://127.0.0.1:8989/login", log_folder: Some("/home/username/.cache/spotify-player"), player_event_hook_command: None, playback_format: "{track} • {artists}\n{album}\n{metadata}", playback_metadata_fields: ["repeat", "shuffle", "volume", "device"], tracks_playback_limit: 999, proxy: None, ap_port: None, app_refresh_duration_in_ms: 32, playback_refresh_duration_in_ms: 0, page_size_in_rows: 20, play_icon: "\u{f04b} ", pause_icon: "\u{f04c} ", liked_icon: "♥", explicit_icon: "(E)", border_type: Rounded, progress_bar_type: Rectangle, progress_bar_position: Bottom, layout: LayoutConfig { library: LibraryLayoutConfig { playlist_percent: 40, album_percent: 40 }, playback_window_position: Top, playback_window_height: 6 }, genre_num: 2, enable_media_control: true, enable_streaming: Always, enable_cover_image_cache: false, default_device: "spotify-player", device: DeviceConfig { name: "laptop", device_type: "speaker", volume: 65, bitrate: 320, audio_cache: true, normalization: true, autoplay: false }, seek_duration_secs: 5, sort_artist_albums_by_type: false }, keymap_config: KeymapConfig { keymaps: [Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('q'))] }, command: Quit }, Keymap { key_sequence: KeySequence { keys: [Alt(Char('l'))] }, command: FocusNextWindow }, Keymap { key_sequence: KeySequence { keys: [Alt(Char('h'))] }, command: FocusPreviousWindow }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('h'))] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('z'))] }, command: Queue }, Keymap { key_sequence: KeySequence { keys: [None(Char('a'))] }, command: ShowActionsOnSelectedItem }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('a'))] }, command: ShowActionsOnCurrentTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('p'))] }, command: CurrentlyPlayingContextPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('m'))] }, command: Mute }, Keymap { key_sequence: KeySequence { keys: [None(Char('r'))] }, command: Repeat }, Keymap { key_sequence: KeySequence { keys: [None(Char('z'))] }, command: PlayRandom }, Keymap { key_sequence: KeySequence { keys: [None(Char('D'))] }, command: SwitchDevice }, Keymap { key_sequence: KeySequence { keys: [None(Char('x'))] }, command: Shuffle }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('r'))] }, command: RefreshPlayback }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('d'))] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('u'))] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('t'))] }, command: SortTrackByTitle }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('a'))] }, command: SortTrackByArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('A'))] }, command: SortTrackByAlbum }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('D'))] }, command: SortTrackByAddedDate }, Keymap { key_sequence: KeySequence { keys: [None(Char(',')), None(Char('r'))] }, command: ReverseTrackOrder }, Keymap { key_sequence: KeySequence { keys: [None(PageUp)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(PageDown)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Home)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(End)] }, command: None }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char(' '))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('c'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('q'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('T'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('D'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('O'))] }, command: None }, Keymap { key_sequence: KeySequence { keys: [None(Char('n'))] }, command: NextTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('p'))] }, command: PreviousTrack }, Keymap { key_sequence: KeySequence { keys: [None(Char('.'))] }, command: PlayRandom }, Keymap { key_sequence: KeySequence { keys: [None(Char(' '))] }, command: ResumePause }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('s'))] }, command: Shuffle }, Keymap { key_sequence: KeySequence { keys: [None(Char('+'))] }, command: VolumeChange { offset: 5 } }, Keymap { key_sequence: KeySequence { keys: [None(Char('-'))] }, command: VolumeChange { offset: -5 } }, Keymap { key_sequence: KeySequence { keys: [None(Char('_'))] }, command: Mute }, Keymap { key_sequence: KeySequence { keys: [None(Char('^'))] }, command: SeekStart }, Keymap { key_sequence: KeySequence { keys: [None(Char('>'))] }, command: SeekForward { duration: None } }, Keymap { key_sequence: KeySequence { keys: [None(Char('<'))] }, command: SeekBackward { duration: None } }, Keymap { key_sequence: KeySequence { keys: [None(Enter)] }, command: ChooseSelected }, Keymap { key_sequence: KeySequence { keys: [None(Char('/'))] }, command: Search }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [None(Char('Z'))] }, command: AddSelectedItemToQueue }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('g'))] }, command: JumpToHighlightTrackInContext }, Keymap { key_sequence: KeySequence { keys: [None(Char('A'))] }, command: ShowActionsOnCurrentContext }, Keymap { key_sequence: KeySequence { keys: [None(Char('R'))] }, command: RestartIntegratedClient }, Keymap { key_sequence: KeySequence { keys: [None(Tab)] }, command: FocusNextWindow }, Keymap { key_sequence: KeySequence { keys: [None(BackTab)] }, command: FocusPreviousWindow }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('p'))] }, command: BrowseUserPlaylists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('a'))] }, command: BrowseUserFollowedArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('u')), None(Char('A'))] }, command: BrowseUserSavedAlbums }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char(' '))] }, command: CurrentlyPlayingContextPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('t'))] }, command: TopTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('r'))] }, command: RecentlyPlayedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('y'))] }, command: LikedTrackPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('L'))] }, command: LyricsPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('l'))] }, command: LyricsPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('l'))] }, command: LibraryPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('s'))] }, command: SearchPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('b'))] }, command: BrowsePage }, Keymap { key_sequence: KeySequence { keys: [None(Backspace)] }, command: PreviousPage }, Keymap { key_sequence: KeySequence { keys: [None(Char('?'))] }, command: OpenCommandHelp }, Keymap { key_sequence: KeySequence { keys: [None(Esc)] }, command: ClosePopup }, Keymap { key_sequence: KeySequence { keys: [None(Char('j'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('n'))] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Down)] }, command: SelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('k'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('p'))] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [None(Up)] }, command: SelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('b'))] }, command: PageSelectPreviousOrScrollUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('f'))] }, command: PageSelectNextOrScrollDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('g'))] }, command: SelectFirstOrScrollToTop }, Keymap { key_sequence: KeySequence { keys: [None(Char('G'))] }, command: SelectLastOrScrollToBottom }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('t'))] }, command: SortTrackByTitle }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('a'))] }, command: SortTrackByArtists }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('A'))] }, command: SortTrackByAlbum }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('d'))] }, command: SortTrackByDuration }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('D'))] }, command: SortTrackByAddedDate }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('r'))] }, command: ReverseTrackOrder }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('l')), None(Char('a'))] }, command: SortLibraryAlphabetically }, Keymap { key_sequence: KeySequence { keys: [None(Char('s')), None(Char('l')), None(Char('r'))] }, command: SortLibraryByRecent }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('k'))] }, command: MovePlaylistItemUp }, Keymap { key_sequence: KeySequence { keys: [Ctrl(Char('j'))] }, command: MovePlaylistItemDown }, Keymap { key_sequence: KeySequence { keys: [None(Char('N'))] }, command: CreatePlaylist }, Keymap { key_sequence: KeySequence { keys: [None(Char('g')), None(Char('c'))] }, command: JumpToCurrentTrackInContext }], actions: [] }, theme_config: ThemeConfig { themes: [Theme { name: "default", palette: Palette { background: None, foreground: None, black: Color { color: Black }, blue: Color { color: Blue }, cyan: Color { color: Cyan }, green: Color { color: Green }, magenta: Color { color: Magenta }, red: Color { color: Red }, white: Color { color: Gray }, yellow: Color { color: Yellow }, bright_black: Color { color: DarkGray }, bright_white: Color { color: White }, bright_red: Color { color: LightRed }, bright_magenta: Color { color: LightMagenta }, bright_green: Color { color: LightGreen }, bright_cyan: Color { color: LightCyan }, bright_blue: Color { color: LightBlue }, bright_yellow: Color { color: LightYellow } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "default2", palette: Palette { background: None, foreground: None, black: Color { color: Black }, blue: Color { color: Blue }, cyan: Color { color: Cyan }, green: Color { color: Green }, magenta: Color { color: Magenta }, red: Color { color: Red }, white: Color { color: White }, yellow: Color { color: Yellow }, bright_black: Color { color: DarkGray }, bright_white: Color { color: White }, bright_red: Color { color: LightRed }, bright_magenta: Color { color: LightMagenta }, bright_green: Color { color: LightGreen }, bright_cyan: Color { color: LightCyan }, bright_blue: Color { color: LightBlue }, bright_yellow: Color { color: LightYellow } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "dracula", palette: Palette { background: Some(Color { color: Rgb(30, 31, 41) }), foreground: Some(Color { color: Rgb(248, 248, 242) }), black: Color { color: Rgb(0, 0, 0) }, blue: Color { color: Rgb(189, 147, 249) }, cyan: Color { color: Rgb(139, 233, 253) }, green: Color { color: Rgb(80, 250, 123) }, magenta: Color { color: Rgb(255, 121, 198) }, red: Color { color: Rgb(255, 85, 85) }, white: Color { color: Rgb(187, 187, 187) }, yellow: Color { color: Rgb(241, 250, 140) }, bright_black: Color { color: Rgb(85, 85, 85) }, bright_white: Color { color: Rgb(255, 255, 255) }, bright_red: Color { color: Rgb(255, 85, 85) }, bright_magenta: Color { color: Rgb(255, 121, 198) }, bright_green: Color { color: Rgb(80, 250, 123) }, bright_cyan: Color { color: Rgb(139, 233, 253) }, bright_blue: Color { color: Rgb(189, 147, 249) }, bright_yellow: Color { color: Rgb(241, 250, 140) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "solarized_dark", palette: Palette { background: Some(Color { color: Rgb(0, 43, 54) }), foreground: Some(Color { color: Rgb(131, 148, 150) }), black: Color { color: Rgb(7, 54, 66) }, blue: Color { color: Rgb(38, 139, 210) }, cyan: Color { color: Rgb(42, 161, 152) }, green: Color { color: Rgb(133, 153, 0) }, magenta: Color { color: Rgb(211, 54, 130) }, red: Color { color: Rgb(220, 50, 47) }, white: Color { color: Rgb(238, 232, 213) }, yellow: Color { color: Rgb(181, 137, 0) }, bright_black: Color { color: Rgb(0, 43, 54) }, bright_white: Color { color: Rgb(253, 246, 227) }, bright_red: Color { color: Rgb(203, 75, 22) }, bright_magenta: Color { color: Rgb(108, 113, 196) }, bright_green: Color { color: Rgb(88, 110, 117) }, bright_cyan: Color { color: Rgb(147, 161, 161) }, bright_blue: Color { color: Rgb(131, 148, 150) }, bright_yellow: Color { color: Rgb(101, 123, 131) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }, Theme { name: "tokyonight", palette: Palette { background: None, foreground: None, black: Color { color: Rgb(65, 72, 104) }, blue: Color { color: Rgb(38, 139, 210) }, cyan: Color { color: Rgb(125, 207, 255) }, green: Color { color: Green }, magenta: Color { color: Rgb(187, 154, 247) }, red: Color { color: Rgb(247, 118, 142) }, white: Color { color: Rgb(238, 232, 213) }, yellow: Color { color: Rgb(224, 175, 104) }, bright_black: Color { color: Rgb(36, 40, 59) }, bright_white: Color { color: Rgb(253, 246, 227) }, bright_red: Color { color: Rgb(255, 68, 153) }, bright_magenta: Color { color: Rgb(255, 0, 124) }, bright_green: Color { color: Rgb(115, 218, 202) }, bright_cyan: Color { color: Rgb(147, 161, 161) }, bright_blue: Color { color: Rgb(131, 148, 150) }, bright_yellow: Color { color: Rgb(101, 123, 131) } }, component_style: ComponentStyle { block_title: None, border: None, playback_status: None, playback_track: None, playback_artists: None, playback_album: None, playback_genres: None, playback_metadata: None, playback_progress_bar: None, playback_progress_bar_unfilled: None, current_playing: None, page_desc: None, playlist_desc: None, table_header: None, selection: None, secondary_row: None, like: None, lyrics_played: None, lyrics_playing: None } }] }, cache_folder: "/home/username/.cache/spotify-player" } 2026-02-17T09:55:25.306300Z INFO spotify_player::auth: Using cached credentials 2026-02-17T09:55:25.306441Z INFO spotify_player::streaming: Application's connect configurations: ConnectConfig { name: "laptop", device_type: Speaker, is_group: false, initial_volume: 42598, disable_volume: false, volume_steps: 64 } 2026-02-17T09:55:25.306481Z INFO librespot_playback::mixer::softmixer: Mixing with softvol and volume control: Log(60.0) 2026-02-17T09:55:25.306522Z INFO spotify_player::streaming: Initializing a new integrated player with device_id=*** 2026-02-17T09:55:25.306640Z INFO spotify_player::streaming: Starting an integrated Spotify player using librespot's spirc protocol 2026-02-17T09:55:25.306778Z INFO librespot_playback::convert: Converting with ditherer: tpdf 2026-02-17T09:55:25.306811Z INFO librespot_playback::audio_backend::pulseaudio: Using PulseAudioSink with format: S16 2026-02-17T09:55:26.753262Z INFO librespot_core::session: Connecting to AP "***.spotify.com:4070" 2026-02-17T09:55:27.500355Z INFO librespot_core::session: Authenticated as '***' ! 2026-02-17T09:55:27.500704Z INFO librespot_core::session: Country: "**" 2026-02-17T09:55:28.259035Z INFO spotify_player::streaming: New streaming connection has been established! 2026-02-17T09:55:28.259134Z INFO spotify_player::client: Used a new session for Spotify client. 2026-02-17T09:55:28.847976Z INFO spotify_player::cli::client: Starting a client socket at 127.0.0.1:8080 2026-02-17T09:55:28.848437Z INFO spotify_player::media_control: Initializing application's media control event watcher... 2026-02-17T09:55:29.257337Z INFO librespot_core::spclient: Resolved "guc3-spclient.spotify.com:443" as spclient access point 2026-02-17T09:55:30.487777Z INFO librespot_connect::spirc: active device is <> with session <a024fc5bef5d1a9fb78f76fa7c1c12c6> 2026-02-17T09:55:30.715040Z INFO spotify_player::client: Available devices: [Device { id: Some("***"), is_active: false, is_private_session: false, is_restricted: false, name: "laptop", _type: Speaker, volume_percent: Some(65) }] 2026-02-17T09:55:30.715135Z INFO spotify_player::client: Trying to connect to device (id=***) 2026-02-17T09:55:30.909967Z INFO spotify_player::client: Available devices: [Device { id: Some("***"), is_active: false, is_private_session: false, is_restricted: false, name: "laptop", _type: Speaker, volume_percent: Some(65) }] 2026-02-17T09:55:30.910063Z INFO spotify_player::client: Trying to connect to device (id=***) 2026-02-17T09:55:31.100209Z WARN librespot_connect::state::context: couldn't load context info because: context is not available. type: Default 2026-02-17T09:55:31.508731Z WARN librespot_connect::state::context: couldn't load context info because: context is not available. type: Default 2026-02-17T09:55:31.715908Z INFO spotify_player::client: Connection succeeded (device_id=***)! 2026-02-17T09:55:31.716142Z INFO librespot_playback::player: Loading <Fine> with Spotify URI <spotify:track:6CdUgvL597jWmW4w8P5kHs> 2026-02-17T09:55:31.921148Z INFO librespot_playback::player: Loading <Fine> with Spotify URI <spotify:track:6CdUgvL597jWmW4w8P5kHs> 2026-02-17T09:55:32.259207Z INFO spotify_player::client: Connection succeeded (device_id=***)! 2026-02-17T09:55:33.163465Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")} 2026-02-17T09:55:33.199868Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")} 2026-02-17T09:55:33.236305Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")} 2026-02-17T09:55:33.272645Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")} ``` Thanks again!
Author
Owner

@aome510 commented on GitHub (Feb 18, 2026):

2026-02-17T09:55:33.163465Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")}

this is the first time I encountered such error and not sure why it happened. Beside that, the log looks normal. Can you search or make any API calls without seeing any 429 error?

<!-- gh-comment-id:3918032516 --> @aome510 commented on GitHub (Feb 18, 2026): ``` 2026-02-17T09:55:33.163465Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/6DlCl3hBP1Gwhn0tgitGfN")}, "href": String("https://api.spotify.com/v1/albums/6DlCl3hBP1Gwhn0tgitGfN"), "id": String("6DlCl3hBP1Gwhn0tgitGfN"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b2738c7e7f435fdcc70772c5555e"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e028c7e7f435fdcc70772c5555e"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d000048518c7e7f435fdcc70772c5555e"), "width": Number(64)}], "name": String("My Voice - The 1st Album"), "release_date": String("2017-02-28"), "release_date_precision": String("day"), "total_tracks": Number(12), "type": String("album"), "uri": String("spotify:album:6DlCl3hBP1Gwhn0tgitGfN")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/3qNVuliS40BLgXGxhdBdqu")}, "href": String("https://api.spotify.com/v1/artists/3qNVuliS40BLgXGxhdBdqu"), "id": String("3qNVuliS40BLgXGxhdBdqu"), "name": String("TAEYEON"), "type": String("artist"), "uri": String("spotify:artist:3qNVuliS40BLgXGxhdBdqu")}], "disc_number": Number(1), "duration_ms": Number(209157), "explicit": Bool(false), "external_urls": Object {"spotify": String("https://open.spotify.com/track/6CdUgvL597jWmW4w8P5kHs")}, "href": String("https://api.spotify.com/v1/tracks/6CdUgvL597jWmW4w8P5kHs"), "id": String("6CdUgvL597jWmW4w8P5kHs"), "is_local": Bool(false), "name": String("Fine"), "preview_url": Null, "track_number": Number(1), "type": String("track"), "uri": String("spotify:track:6CdUgvL597jWmW4w8P5kHs")} ``` this is the first time I encountered such error and not sure why it happened. Beside that, the log looks normal. Can you search or make any API calls without seeing any 429 error?
Author
Owner

@Mcrtin commented on GitHub (Feb 19, 2026):

I've also been getting 429 lately (probably since summer last year ;D)

2026-02-19T15:53:36.697958Z  INFO spotify_player: Starting a client socket at 127.0.0.1:8080
2026-02-19T15:53:36.698035Z  WARN spotify_player: Failed to create a client socket for handling CLI commands: Address already in use (os error 98)
2026-02-19T15:53:36.698255Z  INFO spotify_player::media_control: Initializing application's media control event watcher...
2026-02-19T15:53:36.758269Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:36.759246Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:36.759256Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:36.760185Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:36.760195Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:36.760278Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-19T15:53:37.646016Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:53:37.700018Z  INFO spotify_player::client::handlers: Current context ID (None) is different from the expected ID (Some(Tracks(TracksId { uri: "tracks:user-liked-tracks", kind: "Liked Tracks" }))), update the context state
2026-02-19T15:53:37.722835Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests
2026-02-19T15:53:37.724729Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests

Before I deleted the cache:

2026-02-19T15:48:48.366292Z  INFO spotify_player: Starting a client socket at 127.0.0.1:8080
2026-02-19T15:48:48.366388Z  WARN spotify_player: Failed to create a client socket for handling CLI commands: Address already in use (os error 98)
2026-02-19T15:48:48.366680Z  INFO spotify_player::media_control: Initializing application's media control event watcher...
2026-02-19T15:48:48.423244Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:48:48.424484Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:48:48.424489Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:48:48.424541Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:48:48.431751Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests
2026-02-19T15:48:48.431881Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-19T15:48:49.399983Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests
2026-02-19T15:48:49.400016Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests
2026-02-19T15:48:51.370345Z  INFO spotify_player::client::handlers: Current context ID (None) is different from the expected ID (Some(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))), update the context state
2026-02-19T15:48:51.370544Z  INFO client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client: Get playlist context: spotify:playlist:6wWg7IiMFDq2W80POFkclm
2026-02-19T15:48:51.405023Z ERROR client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/playlists/6wWg7IiMFDq2W80POFkclm: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}
2026-02-19T15:48:56.376748Z  INFO client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client: Get playlist context: spotify:playlist:6wWg7IiMFDq2W80POFkclm
2026-02-19T15:48:56.477983Z ERROR client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/playlists/6wWg7IiMFDq2W80POFkclm: {
  "error": {
    "status": 429,
    "message": "API rate limit exceeded"
  }
}

Is there any way I could try and fix this? (maybe get a new api key?)

<!-- gh-comment-id:3928255265 --> @Mcrtin commented on GitHub (Feb 19, 2026): I've also been getting 429 lately (probably since summer last year ;D) ``` 2026-02-19T15:53:36.697958Z INFO spotify_player: Starting a client socket at 127.0.0.1:8080 2026-02-19T15:53:36.698035Z WARN spotify_player: Failed to create a client socket for handling CLI commands: Address already in use (os error 98) 2026-02-19T15:53:36.698255Z INFO spotify_player::media_control: Initializing application's media control event watcher... 2026-02-19T15:53:36.758269Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:36.759246Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:36.759256Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:36.760185Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:36.760195Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:36.760278Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-19T15:53:37.646016Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:53:37.700018Z INFO spotify_player::client::handlers: Current context ID (None) is different from the expected ID (Some(Tracks(TracksId { uri: "tracks:user-liked-tracks", kind: "Liked Tracks" }))), update the context state 2026-02-19T15:53:37.722835Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests 2026-02-19T15:53:37.724729Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests ``` Before I deleted the cache: ``` 2026-02-19T15:48:48.366292Z INFO spotify_player: Starting a client socket at 127.0.0.1:8080 2026-02-19T15:48:48.366388Z WARN spotify_player: Failed to create a client socket for handling CLI commands: Address already in use (os error 98) 2026-02-19T15:48:48.366680Z INFO spotify_player::media_control: Initializing application's media control event watcher... 2026-02-19T15:48:48.423244Z ERROR client_request{request=GetCurrentUser}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:48:48.424484Z ERROR client_request{request=GetUserSavedShows}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:48:48.424489Z ERROR client_request{request=GetUserSavedTracks}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:48:48.424541Z ERROR client_request{request=GetUserSavedAlbums}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:48:48.431751Z ERROR client_request{request=GetUserFollowedArtists}: spotify_player::client::handlers: Failed to handle client request: http error: status code 429 Too Many Requests 2026-02-19T15:48:48.431881Z ERROR client_request{request=GetUserPlaylists}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/me/playlists: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-19T15:48:49.399983Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests 2026-02-19T15:48:49.400016Z ERROR spotify_player::client: Failed to retrieve current playback: http error: status code 429 Too Many Requests 2026-02-19T15:48:51.370345Z INFO spotify_player::client::handlers: Current context ID (None) is different from the expected ID (Some(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))), update the context state 2026-02-19T15:48:51.370544Z INFO client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client: Get playlist context: spotify:playlist:6wWg7IiMFDq2W80POFkclm 2026-02-19T15:48:51.405023Z ERROR client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/playlists/6wWg7IiMFDq2W80POFkclm: { "error": { "status": 429, "message": "API rate limit exceeded" } } 2026-02-19T15:48:56.376748Z INFO client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client: Get playlist context: spotify:playlist:6wWg7IiMFDq2W80POFkclm 2026-02-19T15:48:56.477983Z ERROR client_request{request=GetContext(Playlist(PlaylistId("6wWg7IiMFDq2W80POFkclm")))}: spotify_player::client::handlers: Failed to handle client request: failed to send a Spotify API request https://api.spotify.com/v1/playlists/6wWg7IiMFDq2W80POFkclm: { "error": { "status": 429, "message": "API rate limit exceeded" } } ``` Is there any way I could try and fix this? (maybe get a new api key?)
Author
Owner

@aome510 commented on GitHub (Feb 26, 2026):

I've also been getting 429 lately (probably since summer last year ;D)

are you using the latest version of the app, check using spotify_player --version?

<!-- gh-comment-id:3966906357 --> @aome510 commented on GitHub (Feb 26, 2026): > I've also been getting 429 lately (probably since summer last year ;D) are you using the [latest version](https://github.com/aome510/spotify-player/releases/tag/v0.22.1) of the app, check using `spotify_player --version`?
Author
Owner

@Mcrtin commented on GitHub (Feb 26, 2026):

im using spotify_player 0.22.1 from nixpkgs

<!-- gh-comment-id:3966919544 --> @Mcrtin commented on GitHub (Feb 26, 2026): im using spotify_player 0.22.1 from nixpkgs
Author
Owner

@aome510 commented on GitHub (Feb 26, 2026):

hmmm, then I have no idea why you still see the 429 issues

<!-- gh-comment-id:3966947363 --> @aome510 commented on GitHub (Feb 26, 2026): hmmm, then I have no idea why you still see the 429 issues
Author
Owner

@kohane27 commented on GitHub (Feb 27, 2026):

Probably related: February 2026 Web API Dev Mode Changes - Migration Guide

<!-- gh-comment-id:3971506646 --> @kohane27 commented on GitHub (Feb 27, 2026): Probably related: [February 2026 Web API Dev Mode Changes - Migration Guide](https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide)
Author
Owner

@kohane27 commented on GitHub (Feb 27, 2026):

Can you search or make any API calls without seeing any 429 error?

Hello! Hope you're doing well.

https://github.com/user-attachments/assets/4095564b-c9a3-43b4-a183-0c7f76e3099d

Searching for anything and entering my playlist lead to infinite "loading" with the following log:

2026-02-27T08:30:42.357382Z  WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/250b0Wlc5Vk0CoUsaCY84M")}, "href": String("https://api.spotify.com/v1/artists/250b0Wlc5Vk0CoUsaCY84M"), "id": String("250b0Wlc5Vk0CoUsaCY84M"), "name": String("JENNIE"), "type": String("artist"), "uri": String("spotify:artist:250b0Wlc5Vk0CoUsaCY84M")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/1vWMw6pu3err6qqZzI3RhH")}, "href": String("https://api.spotify.com/v1/albums/1vWMw6pu3err6qqZzI3RhH"), "id": String("1vWMw6pu3err6qqZzI3RhH"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b273dcf27dec5e479b2e39c4c993"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e02dcf27dec5e479b2e39c4c993"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d00004851dcf27dec5e479b2e39c4c993"), "width": Number(64)}], "name": String("Ruby"), "release_date": String("2025-03-07"), "release_date_precision": String("day"), "total_tracks": Number(15), "type": String("album"), "uri": String("spotify:album:1vWMw6pu3err6qqZzI3RhH")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/250b0Wlc5Vk0CoUsaCY84M")}, "href": String("https://api.spotify.com/v1/artists/250b0Wlc5Vk0CoUsaCY84M"), "id": String("250b0Wlc5Vk0CoUsaCY84M"), "name": String("JENNIE"), "type": String("artist"), "uri": String("spotify:artist:250b0Wlc5Vk0CoUsaCY84M")}], "disc_number": Number(1), "duration_ms": Number(136627), "explicit": Bool(true), "external_urls": Object {"spotify": String("https://open.spotify.com/track/1kUyOJb3fzUo8r0OCz5SQk")}, "href": String("https://api.spotify.com/v1/tracks/1kUyOJb3fzUo8r0OCz5SQk"), "id": String("1kUyOJb3fzUo8r0OCz5SQk"), "is_local": Bool(false), "name": String("Mantra"), "preview_url": Null, "track_number": Number(7), "type": String("track"), "uri": String("spotify:track:1kUyOJb3fzUo8r0OCz5SQk")}

At this point I fully believe it's spotify side's problem that I think there is not much we can do.

<!-- gh-comment-id:3971573821 --> @kohane27 commented on GitHub (Feb 27, 2026): > Can you search or make any API calls without seeing any 429 error? Hello! Hope you're doing well. https://github.com/user-attachments/assets/4095564b-c9a3-43b4-a183-0c7f76e3099d Searching for anything and entering my playlist lead to infinite "loading" with the following log: ``` 2026-02-27T08:30:42.357382Z WARN spotify_player::ui::playback: Unknown playback item: Object {"album": Object {"album_type": String("album"), "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/250b0Wlc5Vk0CoUsaCY84M")}, "href": String("https://api.spotify.com/v1/artists/250b0Wlc5Vk0CoUsaCY84M"), "id": String("250b0Wlc5Vk0CoUsaCY84M"), "name": String("JENNIE"), "type": String("artist"), "uri": String("spotify:artist:250b0Wlc5Vk0CoUsaCY84M")}], "external_urls": Object {"spotify": String("https://open.spotify.com/album/1vWMw6pu3err6qqZzI3RhH")}, "href": String("https://api.spotify.com/v1/albums/1vWMw6pu3err6qqZzI3RhH"), "id": String("1vWMw6pu3err6qqZzI3RhH"), "images": Array [Object {"height": Number(640), "url": String("https://i.scdn.co/image/ab67616d0000b273dcf27dec5e479b2e39c4c993"), "width": Number(640)}, Object {"height": Number(300), "url": String("https://i.scdn.co/image/ab67616d00001e02dcf27dec5e479b2e39c4c993"), "width": Number(300)}, Object {"height": Number(64), "url": String("https://i.scdn.co/image/ab67616d00004851dcf27dec5e479b2e39c4c993"), "width": Number(64)}], "name": String("Ruby"), "release_date": String("2025-03-07"), "release_date_precision": String("day"), "total_tracks": Number(15), "type": String("album"), "uri": String("spotify:album:1vWMw6pu3err6qqZzI3RhH")}, "artists": Array [Object {"external_urls": Object {"spotify": String("https://open.spotify.com/artist/250b0Wlc5Vk0CoUsaCY84M")}, "href": String("https://api.spotify.com/v1/artists/250b0Wlc5Vk0CoUsaCY84M"), "id": String("250b0Wlc5Vk0CoUsaCY84M"), "name": String("JENNIE"), "type": String("artist"), "uri": String("spotify:artist:250b0Wlc5Vk0CoUsaCY84M")}], "disc_number": Number(1), "duration_ms": Number(136627), "explicit": Bool(true), "external_urls": Object {"spotify": String("https://open.spotify.com/track/1kUyOJb3fzUo8r0OCz5SQk")}, "href": String("https://api.spotify.com/v1/tracks/1kUyOJb3fzUo8r0OCz5SQk"), "id": String("1kUyOJb3fzUo8r0OCz5SQk"), "is_local": Bool(false), "name": String("Mantra"), "preview_url": Null, "track_number": Number(7), "type": String("track"), "uri": String("spotify:track:1kUyOJb3fzUo8r0OCz5SQk")} ``` At this point I fully believe it's [spotify side's problem](https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide) that I think there is not much we can do.
Author
Owner

@Knightsmarian commented on GitHub (Mar 2, 2026):

made a new fork to address the spotify api changes.
fork: https://github.com/Knightsmarian/spotify-player/tree/spotify-api-feb-2026-migration
Big features; rate limits and cleaned up aliases

spotify api changes if you wanna help: https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide

still broken as of this posting: artist pages, album pages, playlists, radios
you can use your liked list (g y) and search (g s) to get around these broken pages

<!-- gh-comment-id:3981372706 --> @Knightsmarian commented on GitHub (Mar 2, 2026): made a new fork to address the spotify api changes. fork: https://github.com/Knightsmarian/spotify-player/tree/spotify-api-feb-2026-migration Big features; rate limits and cleaned up aliases spotify api changes if you wanna help: https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide still broken as of this posting: artist pages, album pages, playlists, radios you can use your liked list (g y) and search (g s) to get around these broken pages
Author
Owner

@SirBrenton commented on GitHub (Mar 2, 2026):

This looks like WAIT (429 + Retry-After) more than anything Spotify-player-specific.
If someone can paste one redacted failure block including response headers (especially Retry-After) we can confirm timing semantics.
Fix shape: a global rate limiter + on-429 “sleep Retry-After (+jitter) then retry” and UI should degrade (render shell + “rate limited, retrying in Xs”) instead of blanking.

<!-- gh-comment-id:3985722009 --> @SirBrenton commented on GitHub (Mar 2, 2026): This looks like **WAIT** (429 + Retry-After) more than anything Spotify-player-specific. If someone can paste one redacted failure block including response headers (especially Retry-After) we can confirm timing semantics. Fix shape: a global rate limiter + on-429 “sleep Retry-After (+jitter) then retry” and UI should degrade (render shell + “rate limited, retrying in Xs”) instead of blanking.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/spotify-player#1495
No description provided.