Spotify Searching Returns Black Screen #36

Open
opened 2026-03-16 14:57:35 +00:00 by azazaazur · 2 comments

Describe the bug
When you try to search for anything after connecting your Spotify account, the webpage turns black and there is the log " Invalid limit, reason: None

2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}"

To Reproduce
Precise steps to reproduce the behavior (start from how you built your container):

  1. Search for anything
  2. The webpage goes black, this issue occurs on all of the search features and possible queries

Note: Sometimes, an error is specific to an album, track or playlist, so preferrably share the specific url of the album you downloaded

Expected behavior
The search button to not be rate limited(at least rate limiting is what I assume happened there), note this is my first time trying.

Screenshots
If applicable, add screenshots to help explain your problem.
Not really applicable.

Desktop (please complete the following information):

  • OS: Linux Mint
  • Browser: Firefox
  • This spotizerr instance is self-hosted on my TrueNAS machine deployed via Portainer.

docker-compose.yaml

# HEY, YOU! READ THE DOCS BEFORE YOU DO ANYTHING!
# https://spotizerr-phoenix.readthedocs.io

name: spotizerr-phoenix
services:
  spotizerr:
    image: spotizerrphoenix/spotizerr
    user: "568:568" # Spotizerr user:group ids
    volumes:
    # Ensure these directories and the .cache file exist and are writable by the container user
    - /mnt/DataStore/apps/spotizer/data:/app/data # data directory, contains config, creds, watch, history
    - /mnt/tank/medya/music:/app/downloads # downloads directory, contains downloaded files
    - /mnt/DataStore/apps/spotizer/logs:/app/logs # logs directory, contains logs
    - /mnt/DataStore/apps/spotizer/cache/.cache:/app/.cache # cache file
    ports:
    # Port to expose the app on
    - 7171:7171
    container_name: spotizerr-app
    restart: unless-stopped
    env_file:
    # Ensure you have a .env file in the root of the project, with the correct values
    - stack.env
    depends_on:
    - redis
  redis:
    image: redis:alpine
    container_name: spotizerr-redis
    restart: unless-stopped
    env_file:
    - stack.env
    volumes:
    - redis-data:/data
    command: sh -c 'redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes'
volumes:
  redis-data:
    driver: local

.env

###
### Main configuration file of the server. If you
### plan to have this only for personal use, you
### can leave the defaults as they are.
###
### If you plan on using for a server,
### see https://spotizerr.rtfd.io
###

# Interface to bind to. Unless you know what you're doing, don't change this
HOST=0.0.0.0

# Redis connection (external or internal).
# Host name 'redis' works with docker-compose.yml setup
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=REDACTED

# Set to true to filter out explicit content.
EXPLICIT_FILTER=false

# Optional: Sets the default file permissions for newly created files within the container.
UMASK=0022

# Whether to setup file permissions on startup. May improve performance on remote/slow filesystems
SKIP_SET_PERMISSIONS=false

###
### Multi-user settings, disabled by default.
###

# Enable authentication (i.e. multi-user mode).
ENABLE_AUTH=false

# Basic Authentication settings.
JWT_SECRET=REDACTED

# How much a session persists, in hours. 720h = 30 days.
JWT_EXPIRATION_HOURS=720

# Default admins creds, please change the password or delete this account after you create your own
DEFAULT_ADMIN_USERNAME=admin
DEFAULT_ADMIN_PASSWORD=admin123

# Whether to allow new users to register themselves or leave that only available for admins
DISABLE_REGISTRATION=false

# SSO Configuration
SSO_ENABLED=false
SSO_BASE_REDIRECT_URI=http://127.0.0.1:7171/api/auth/sso/callback
FRONTEND_URL=http://127.0.0.1:7171

# Google SSO (get from Google Cloud Console)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=

# GitHub SSO (get from GitHub Developer Settings)
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=

# Log level for application logging.
# Possible values: debug, info, warning, error, critical
# Set to 'info' or 'warning' for general use. Use 'debug' for troubleshooting.
LOG_LEVEL=info

Config

{
    "service": "spotify",
    "version": "3.3.1",
    "spotify": "asdd",
    "deezer": "",
    "fallback": false,
    "spotifyQuality": "NORMAL",
    "deezerQuality": "MP3_128",
    "realTime": false,
    "customDirFormat": "%ar_album%/%album%",
    "customTrackFormat": "%tracknum%. %music%",
    "tracknumPadding": true,
    "saveCover": true,
    "maxConcurrentDownloads": 3,
    "utilityConcurrency": 1,
    "librespotConcurrency": 2,
    "maxRetries": 3,
    "retryDelaySeconds": 5,
    "retryDelayIncrease": 5,
    "convertTo": null,
    "bitrate": null,
    "artistSeparator": "; ",
    "recursiveQuality": false,
    "spotifyMetadata": true,
    "separateTracksByUser": false,
    "watch": {
        "enabled": false,
        "watchPollIntervalSeconds": 3600,
        "maxTracksPerRun": 50,
        "watchedArtistAlbumGroup": [
            "album",
            "single",
            "appears_on"
        ],
        "delayBetweenPlaylistsSeconds": 2,
        "delayBetweenArtistsSeconds": 5,
        "useSnapshotIdChecking": true,
        "maxItemsPerRun": 5
    },
    "realTimeMultiplier": 0,
    "padNumberWidth": 3,
    "sseUpdateIntervalSeconds": 1,
    "explicitFilter": false
}

Logs

2026-03-16 14:27:42 [INFO] Logging system initialized
2026-03-16 14:27:42 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO
2026-03-16 14:27:42 [INFO] Configuration version 3.3.1 detected. Proceeding.
2026-03-16 14:27:42 [INFO] Migration validation completed (3.3.0 gate)
2026-03-16 14:27:42 [INFO] Database migrations executed (if needed) early in startup.
2026-03-16 14:27:42 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=0
2026-03-16 14:27:42 [INFO] Testing Redis connection to redis:6379...
2026-03-16 14:27:42 [INFO] Redis connection successful
2026-03-16 14:27:42 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1
2026-03-16 14:27:42 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork
2026-03-16 14:27:42 [INFO] Celery Download Worker (PID: 12) started with concurrency 3.
2026-03-16 14:27:42 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork
2026-03-16 14:27:42 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1.
2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes...
2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread started.
2026-03-16 14:27:42 [INFO] Celery workers started successfully
2026-03-16 14:27:42 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db
2026-03-16 14:27:42 [INFO] Artists database initialized/updated successfully at data/watch/artists.db
2026-03-16 14:27:42 [INFO] Successfully updated all existing tables schema in playlists database
2026-03-16 14:27:42 [INFO] Watch Manager: Successfully updated all existing tables schema
2026-03-16 14:27:42 [INFO] Watch Scheduler: Thread started.
2026-03-16 14:27:42 [INFO] Watch Manager: Background scheduler started (includes playlists and artists).
2026-03-16 14:27:42 [INFO] Watch Manager initialized and registered for shutdown.
2026-03-16 14:27:42 [INFO] Application startup complete.
2026-03-16 14:27:42 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks.
2026-03-16 14:27:42 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit)
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: absolutely not recommended!
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: absolutely not recommended!
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * ---
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- [config]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f0e12c34190
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- [queues]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> default          exchange=default(direct) key=default
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> utility_tasks    exchange=utility_tasks(direct) key=utility_tasks
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: [tasks]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_album
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_playlist
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_track
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * ---
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- [config]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f8d71644190
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- [queues]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: .> downloads        exchange=downloads(direct) key=downloads
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: [tasks]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_album
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_playlist
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_track
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:28:30 [WARNING] Global Spotify API credentials in data/creds/search.json are incomplete.
2026-03-16 14:28:51 [INFO] Global Spotify API credentials saved to data/creds/search.json
2026-03-16 14:31:19 [INFO] Created new session! device_id: aefeb3d3d7fca19b8faae2074f18329066727820, ap: ap-gae2.spotify.com:80
2026-03-16 14:31:20 [INFO] Connection successfully!
2026-03-16 14:31:20 [INFO] Closing session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820
2026-03-16 14:31:20 [INFO] Closed session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820
2026-03-16 14:31:20 [ERROR] Failed to initialize Spotify session: BadCredentials
2026-03-16 14:31:20 [ERROR] Validation for ads (spotify) failed on attempt 1 (non-retryable or max retries).
2026-03-16 14:31:20 [ERROR] Error creating credential ads for spotify: Invalid spotify credentials for ads. Verification failed: BadCredentials
Traceback (most recent call last):
  File "/app/routes/utils/credentials.py", line 521, in create_credential
    _validate_with_retry("spotify", name, validation_data)
  File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry
    raise ValueError(detailed_error_message)
ValueError: Invalid spotify credentials for ads. Verification failed: BadCredentials
2026-03-16 14:31:20 [WARNING] Client error in /spotify/ads: Could not create credential: Invalid spotify credentials for ads. Verification failed: BadCredentials
2026-03-16 14:32:29 [INFO] Created new session! device_id: 581cc2e7ca915124e987a703ba178d9965645439, ap: ap-gew4.spotify.com:443
2026-03-16 14:32:29 [ERROR] Failed to initialize Spotify session: unpack requires a buffer of 4 bytes
2026-03-16 14:32:29 [ERROR] Validation for spoti (spotify) failed on attempt 1 (non-retryable or max retries).
2026-03-16 14:32:29 [ERROR] Error creating credential spoti for spotify: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
Traceback (most recent call last):
  File "/app/routes/utils/credentials.py", line 521, in create_credential
    _validate_with_retry("spotify", name, validation_data)
  File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry
    raise ValueError(detailed_error_message)
ValueError: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
2026-03-16 14:32:29 [WARNING] Client error in /spotify/spoti: Could not create credential: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
2026-03-16 14:32:47 [WARNING] Client error in /spotify/spoti: No spotify credential found with name 'spoti'
2026-03-16 14:32:47 [WARNING] Invalid HTTP request received.
2026-03-16 14:32:47 [WARNING] Invalid HTTP request received.
2026-03-16 14:34:12 [INFO] Global Spotify API credentials saved to data/creds/search.json
2026-03-16 14:34:12 [INFO] Main configuration saved to data/config/main.json
2026-03-16 14:34:48 [INFO] Created new session! device_id: e4c30ea876415ec439cd52805fa0230ab2478708, ap: ap-gew4.spotify.com:4070
2026-03-16 14:34:49 [INFO] Connection successfully!
2026-03-16 14:34:49 [INFO] Session.Receiver started
2026-03-16 14:34:49 [INFO] Skipping 02
2026-03-16 14:34:49 [INFO] Received license_version: 0
2026-03-16 14:34:49 [INFO] Received country_code: TR
2026-03-16 14:34:49 [INFO] Skipping 1f
2026-03-16 14:34:49 [INFO] Skipping 69
2026-03-16 14:34:49 [INFO] Skipping unknown command cmd: 0x75, payload: b'\x00\x00\x01'
2026-03-16 14:34:50 [INFO] Login5 authentication successful, got access token
2026-03-16 14:34:50 [INFO] Authenticated as pihjcfin4qovrgv2vpfi3sye4!
2026-03-16 14:34:50 [INFO] Spotify credentials for asdd validated successfully (attempt 1).
2026-03-16 14:34:50 [INFO] Stored Spotify device info for 'asdd' (device_info: name=Living Room Speaker, type=4, id=e4c30ea876415ec439cd52805fa0230ab2478708, locale=tr)
2026-03-16 14:34:50 [INFO] Credential 'asdd' for spotify created successfully.
2026-03-16 14:34:50 [INFO] Main configuration saved to data/config/main.json
2026-03-16 14:35:33 [INFO] Search requested: query='ahmet', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:33 [INFO] Spotify client initialized/reinitialized for search
2026-03-16 14:35:33 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:33 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:33 [INFO] Search completed successfully for query: 'ahmet'
2026-03-16 14:35:37 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:37 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:37 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:37 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:37 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:37 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:35:39 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:39 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:39 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:39 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:39 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:39 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:35:45 [INFO] Search requested: query='ege', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:45 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:45 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:45 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:45 [ERROR] Error during Spotify search for query 'ege': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:45 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:38:15 [INFO] Search requested: query='420', type=track, limit=50, main_account_name=None
2026-03-16 14:38:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:38:15 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:38:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': '420', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:38:15 [ERROR] Error during Spotify search for query '420': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:38:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:42:51 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None
2026-03-16 14:42:51 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:42:51 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:42:51 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:42:51 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:42:51 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:43:36 [INFO] Watch configuration updated in main.json under 'watch'.
2026-03-16 14:43:48 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None
2026-03-16 14:43:48 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:43:48 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:43:48 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:43:48 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:43:48 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:44:27 [INFO] Watch configuration updated in main.json under 'watch'.
2026-03-16 14:44:35 [INFO] Shutting down
2026-03-16 14:44:35 [INFO] Waiting for connections to close. (CTRL+C to force quit)
2026-03-16 14:44:50 [INFO] Logging system initialized
2026-03-16 14:44:50 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO
2026-03-16 14:44:50 [INFO] Configuration version 3.3.1 detected. Proceeding.
2026-03-16 14:44:50 [INFO] Migration validation completed (3.3.0 gate)
2026-03-16 14:44:50 [INFO] Database migrations executed (if needed) early in startup.
2026-03-16 14:44:50 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=1
2026-03-16 14:44:50 [INFO] Testing Redis connection to redis:6379...
2026-03-16 14:44:50 [INFO] Redis connection successful
2026-03-16 14:44:50 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1
2026-03-16 14:44:50 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork
2026-03-16 14:44:50 [INFO] Celery Download Worker (PID: 12) started with concurrency 3.
2026-03-16 14:44:50 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork
2026-03-16 14:44:50 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1.
2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes...
2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread started.
2026-03-16 14:44:50 [INFO] Celery workers started successfully
2026-03-16 14:44:50 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db
2026-03-16 14:44:50 [INFO] Artists database initialized/updated successfully at data/watch/artists.db
2026-03-16 14:44:50 [INFO] Successfully updated all existing tables schema in playlists database
2026-03-16 14:44:50 [INFO] Watch Manage2026-03-16 14:27:42 [INFO] Logging system initialized
2026-03-16 14:27:42 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO
2026-03-16 14:27:42 [INFO] Configuration version 3.3.1 detected. Proceeding.
2026-03-16 14:27:42 [INFO] Migration validation completed (3.3.0 gate)
2026-03-16 14:27:42 [INFO] Database migrations executed (if needed) early in startup.
2026-03-16 14:27:42 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=0
2026-03-16 14:27:42 [INFO] Testing Redis connection to redis:6379...
2026-03-16 14:27:42 [INFO] Redis connection successful
2026-03-16 14:27:42 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1
2026-03-16 14:27:42 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork
2026-03-16 14:27:42 [INFO] Celery Download Worker (PID: 12) started with concurrency 3.
2026-03-16 14:27:42 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork
2026-03-16 14:27:42 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1.
2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes...
2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread started.
2026-03-16 14:27:42 [INFO] Celery workers started successfully
2026-03-16 14:27:42 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db
2026-03-16 14:27:42 [INFO] Artists database initialized/updated successfully at data/watch/artists.db
2026-03-16 14:27:42 [INFO] Successfully updated all existing tables schema in playlists database
2026-03-16 14:27:42 [INFO] Watch Manager: Successfully updated all existing tables schema
2026-03-16 14:27:42 [INFO] Watch Scheduler: Thread started.
2026-03-16 14:27:42 [INFO] Watch Manager: Background scheduler started (includes playlists and artists).
2026-03-16 14:27:42 [INFO] Watch Manager initialized and registered for shutdown.
2026-03-16 14:27:42 [INFO] Application startup complete.
2026-03-16 14:27:42 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks.
2026-03-16 14:27:42 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit)
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: absolutely not recommended!
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: absolutely not recommended!
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * ---
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- [config]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f0e12c34190
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- [queues]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> default          exchange=default(direct) key=default
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> utility_tasks    exchange=utility_tasks(direct) key=utility_tasks
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: [tasks]
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_album
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_playlist
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_track
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * ---
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- [config]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f8d71644190
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- [queues]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: .> downloads        exchange=downloads(direct) key=downloads
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: [tasks]
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_album
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_playlist
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_track
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:28:30 [WARNING] Global Spotify API credentials in data/creds/search.json are incomplete.
2026-03-16 14:28:51 [INFO] Global Spotify API credentials saved to data/creds/search.json
2026-03-16 14:31:19 [INFO] Created new session! device_id: aefeb3d3d7fca19b8faae2074f18329066727820, ap: ap-gae2.spotify.com:80
2026-03-16 14:31:20 [INFO] Connection successfully!
2026-03-16 14:31:20 [INFO] Closing session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820
2026-03-16 14:31:20 [INFO] Closed session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820
2026-03-16 14:31:20 [ERROR] Failed to initialize Spotify session: BadCredentials
2026-03-16 14:31:20 [ERROR] Validation for ads (spotify) failed on attempt 1 (non-retryable or max retries).
2026-03-16 14:31:20 [ERROR] Error creating credential ads for spotify: Invalid spotify credentials for ads. Verification failed: BadCredentials
Traceback (most recent call last):
  File "/app/routes/utils/credentials.py", line 521, in create_credential
    _validate_with_retry("spotify", name, validation_data)
  File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry
    raise ValueError(detailed_error_message)
ValueError: Invalid spotify credentials for ads. Verification failed: BadCredentials
2026-03-16 14:31:20 [WARNING] Client error in /spotify/ads: Could not create credential: Invalid spotify credentials for ads. Verification failed: BadCredentials
2026-03-16 14:32:29 [INFO] Created new session! device_id: 581cc2e7ca915124e987a703ba178d9965645439, ap: ap-gew4.spotify.com:443
2026-03-16 14:32:29 [ERROR] Failed to initialize Spotify session: unpack requires a buffer of 4 bytes
2026-03-16 14:32:29 [ERROR] Validation for spoti (spotify) failed on attempt 1 (non-retryable or max retries).
2026-03-16 14:32:29 [ERROR] Error creating credential spoti for spotify: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
Traceback (most recent call last):
  File "/app/routes/utils/credentials.py", line 521, in create_credential
    _validate_with_retry("spotify", name, validation_data)
  File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry
    raise ValueError(detailed_error_message)
ValueError: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
2026-03-16 14:32:29 [WARNING] Client error in /spotify/spoti: Could not create credential: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes
2026-03-16 14:32:47 [WARNING] Client error in /spotify/spoti: No spotify credential found with name 'spoti'
2026-03-16 14:32:47 [WARNING] Invalid HTTP request received.
2026-03-16 14:32:47 [WARNING] Invalid HTTP request received.
2026-03-16 14:34:12 [INFO] Global Spotify API credentials saved to data/creds/search.json
2026-03-16 14:34:12 [INFO] Main configuration saved to data/config/main.json
2026-03-16 14:34:48 [INFO] Created new session! device_id: e4c30ea876415ec439cd52805fa0230ab2478708, ap: ap-gew4.spotify.com:4070
2026-03-16 14:34:49 [INFO] Connection successfully!
2026-03-16 14:34:49 [INFO] Session.Receiver started
2026-03-16 14:34:49 [INFO] Skipping 02
2026-03-16 14:34:49 [INFO] Received license_version: 0
2026-03-16 14:34:49 [INFO] Received country_code: TR
2026-03-16 14:34:49 [INFO] Skipping 1f
2026-03-16 14:34:49 [INFO] Skipping 69
2026-03-16 14:34:49 [INFO] Skipping unknown command cmd: 0x75, payload: b'\x00\x00\x01'
2026-03-16 14:34:50 [INFO] Login5 authentication successful, got access token
2026-03-16 14:34:50 [INFO] Authenticated as pihjcfin4qovrgv2vpfi3sye4!
2026-03-16 14:34:50 [INFO] Spotify credentials for asdd validated successfully (attempt 1).
2026-03-16 14:34:50 [INFO] Stored Spotify device info for 'asdd' (device_info: name=Living Room Speaker, type=4, id=e4c30ea876415ec439cd52805fa0230ab2478708, locale=tr)
2026-03-16 14:34:50 [INFO] Credential 'asdd' for spotify created successfully.
2026-03-16 14:34:50 [INFO] Main configuration saved to data/config/main.json
2026-03-16 14:35:33 [INFO] Search requested: query='ahmet', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:33 [INFO] Spotify client initialized/reinitialized for search
2026-03-16 14:35:33 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:33 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:33 [INFO] Search completed successfully for query: 'ahmet'
2026-03-16 14:35:37 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:37 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:37 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:37 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:37 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:37 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:35:39 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:39 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:39 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:39 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:39 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:39 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:35:45 [INFO] Search requested: query='ege', type=artist, limit=50, main_account_name=None
2026-03-16 14:35:45 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:35:45 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:35:45 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:35:45 [ERROR] Error during Spotify search for query 'ege': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:
 Invalid limit, reason: None
2026-03-16 14:35:45 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'}
2026-03-16 14:38:15 [INFO] Search requested: query='420', type=track, limit=50, main_account_name=None
2026-03-16 14:38:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:38:15 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:38:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': '420', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:38:15 [ERROR] Error during Spotify search for query '420': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:38:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:42:51 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None
2026-03-16 14:42:51 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:42:51 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:42:51 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:42:51 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:42:51 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:43:36 [INFO] Watch configuration updated in main.json under 'watch'.
2026-03-16 14:43:48 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None
2026-03-16 14:43:48 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:43:48 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:43:48 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:43:48 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:43:48 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:44:27 [INFO] Watch configuration updated in main.json under 'watch'.
2026-03-16 14:44:35 [INFO] Shutting down
2026-03-16 14:44:35 [INFO] Waiting for connections to close. (CTRL+C to force quit)
2026-03-16 14:44:50 [INFO] Logging system initialized
2026-03-16 14:44:50 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO
2026-03-16 14:44:50 [INFO] Configuration version 3.3.1 detected. Proceeding.
2026-03-16 14:44:50 [INFO] Migration validation completed (3.3.0 gate)
2026-03-16 14:44:50 [INFO] Database migrations executed (if needed) early in startup.
2026-03-16 14:44:50 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=1
2026-03-16 14:44:50 [INFO] Testing Redis connection to redis:6379...
2026-03-16 14:44:50 [INFO] Redis connection successful
2026-03-16 14:44:50 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1
2026-03-16 14:44:50 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork
2026-03-16 14:44:50 [INFO] Celery Download Worker (PID: 12) started with concurrency 3.
2026-03-16 14:44:50 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork
2026-03-16 14:44:50 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1.
2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes...
2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread started.
2026-03-16 14:44:50 [INFO] Celery workers started successfully
2026-03-16 14:44:50 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db
2026-03-16 14:44:50 [INFO] Artists database initialized/updated successfully at data/watch/artists.db
2026-03-16 14:44:50 [INFO] Successfully updated all existing tables schema in playlists database
2026-03-16 14:44:50 [INFO] Watch Manager: Successfully updated all existing tables schema
2026-03-16 14:44:50 [INFO] Watch Scheduler: Thread started.
2026-03-16 14:44:50 [INFO] Watch Manager: Background scheduler started (includes playlists and artists).
2026-03-16 14:44:50 [INFO] Watch Manager initialized and registered for shutdown.
2026-03-16 14:44:50 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks.
2026-03-16 14:44:50 [INFO] Application startup complete.
2026-03-16 14:44:50 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit)
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: absolutely not recommended!
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: absolutely not recommended!
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * ---
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- [config]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f1659a34150
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * ---
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- [queues]
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: .> downloads        exchange=downloads(direct) key=downloads
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: [tasks]
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_album
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_playlist
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_track
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- [config]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f136ae14510
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork)
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- [queues]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> default          exchange=default(direct) key=default
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> utility_tasks    exchange=utility_tasks(direct) key=utility_tasks
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: [tasks]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_album
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_playlist
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_track
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:45:55 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:55 [INFO] Spotify client initialized/reinitialized for search
2026-03-16 14:45:55 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:55 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:56 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:56 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:56 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:08 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:08 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:08 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:08 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:08 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:08 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:11 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:11 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:11 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:11 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:11 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:11 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:14 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:14 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:14 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:14 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:14 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:14 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:15 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:15 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:16 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:16 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:16 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}r: Successfully updated all existing tables schema
2026-03-16 14:44:50 [INFO] Watch Scheduler: Thread started.
2026-03-16 14:44:50 [INFO] Watch Manager: Background scheduler started (includes playlists and artists).
2026-03-16 14:44:50 [INFO] Watch Manager initialized and registered for shutdown.
2026-03-16 14:44:50 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks.
2026-03-16 14:44:50 [INFO] Application startup complete.
2026-03-16 14:44:50 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit)
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT))
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: absolutely not recommended!
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: absolutely not recommended!
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option.
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * ---
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- [config]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f1659a34150
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * ---
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- [queues]
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: .> downloads        exchange=downloads(direct) key=downloads
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: [tasks]
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_album
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_playlist
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_track
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- [config]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app:         routes.utils.celery_tasks:0x7f136ae14510
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport:   redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results:     redis://:**@redis:6379/0
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork)
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** -----
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- [queues]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> default          exchange=default(direct) key=default
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> utility_tasks    exchange=utility_tasks(direct) key=utility_tasks
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: [tasks]
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_album
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_playlist
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_track
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task
2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 
2026-03-16 14:45:55 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:55 [INFO] Spotify client initialized/reinitialized for search
2026-03-16 14:45:55 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:55 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:56 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:56 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:56 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None
2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:08 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:08 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:08 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:08 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:08 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:08 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:11 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:11 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:11 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:11 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:11 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:11 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:14 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:14 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:14 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:14 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:14 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:14 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:15 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:15 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}
2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None
2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache
2026-03-16 14:46:16 [WARNING] Couldn't write token to cache at: .cache
2026-03-16 14:46:16 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit
2026-03-16 14:46:16 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
Traceback (most recent call last):
  File "/python/spotipy/client.py", line 274, in _internal_call
    response.raise_for_status()
  File "/python/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app/routes/utils/search.py", line 92, in search
    spotify_response = client.search(
                       ^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 604, in search
    return self._get(
           ^^^^^^^^^^
  File "/python/spotipy/client.py", line 324, in _get
    return self._internal_call("GET", url, payload, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/python/spotipy/client.py", line 294, in _internal_call
    raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:
 Invalid limit, reason: None
2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n  File "/python/spotipy/client.py", line 274, in _internal_call\n    response.raise_for_status()\n  File "/python/requests/models.py", line 1024, in raise_for_status\n    raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "/app/routes/core/search.py", line 37, in handle_search\n    result = search(\n             ^^^^^^^\n  File "/app/routes/utils/search.py", line 92, in search\n    spotify_response = client.search(\n                       ^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 604, in search\n    return self._get(\n           ^^^^^^^^^^\n  File "/python/spotipy/client.py", line 324, in _get\n    return self._internal_call("GET", url, payload, kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/python/spotipy/client.py", line 294, in _internal_call\n    raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}

Version:
3.3.1

**Describe the bug** When you try to search for anything after connecting your Spotify account, the webpage turns black and there is the log " Invalid limit, reason: None 2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}" **To Reproduce** Precise steps to reproduce the behavior (start from how you built your container): 1. Search for anything 2. The webpage goes black, this issue occurs on all of the search features and possible queries *Note: Sometimes, an error is specific to an album, track or playlist, so preferrably share the specific url of the album you downloaded* **Expected behavior** The search button to not be rate limited(at least rate limiting is what I assume happened there), note this is my first time trying. **Screenshots** If applicable, add screenshots to help explain your problem. Not really applicable. **Desktop (please complete the following information):** - OS: Linux Mint - Browser: Firefox - This spotizerr instance is self-hosted on my TrueNAS machine deployed via Portainer. **docker-compose.yaml** ``` # HEY, YOU! READ THE DOCS BEFORE YOU DO ANYTHING! # https://spotizerr-phoenix.readthedocs.io name: spotizerr-phoenix services: spotizerr: image: spotizerrphoenix/spotizerr user: "568:568" # Spotizerr user:group ids volumes: # Ensure these directories and the .cache file exist and are writable by the container user - /mnt/DataStore/apps/spotizer/data:/app/data # data directory, contains config, creds, watch, history - /mnt/tank/medya/music:/app/downloads # downloads directory, contains downloaded files - /mnt/DataStore/apps/spotizer/logs:/app/logs # logs directory, contains logs - /mnt/DataStore/apps/spotizer/cache/.cache:/app/.cache # cache file ports: # Port to expose the app on - 7171:7171 container_name: spotizerr-app restart: unless-stopped env_file: # Ensure you have a .env file in the root of the project, with the correct values - stack.env depends_on: - redis redis: image: redis:alpine container_name: spotizerr-redis restart: unless-stopped env_file: - stack.env volumes: - redis-data:/data command: sh -c 'redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes' volumes: redis-data: driver: local ``` **.env** ``` ### ### Main configuration file of the server. If you ### plan to have this only for personal use, you ### can leave the defaults as they are. ### ### If you plan on using for a server, ### see https://spotizerr.rtfd.io ### # Interface to bind to. Unless you know what you're doing, don't change this HOST=0.0.0.0 # Redis connection (external or internal). # Host name 'redis' works with docker-compose.yml setup REDIS_HOST=redis REDIS_PORT=6379 REDIS_DB=0 REDIS_PASSWORD=REDACTED # Set to true to filter out explicit content. EXPLICIT_FILTER=false # Optional: Sets the default file permissions for newly created files within the container. UMASK=0022 # Whether to setup file permissions on startup. May improve performance on remote/slow filesystems SKIP_SET_PERMISSIONS=false ### ### Multi-user settings, disabled by default. ### # Enable authentication (i.e. multi-user mode). ENABLE_AUTH=false # Basic Authentication settings. JWT_SECRET=REDACTED # How much a session persists, in hours. 720h = 30 days. JWT_EXPIRATION_HOURS=720 # Default admins creds, please change the password or delete this account after you create your own DEFAULT_ADMIN_USERNAME=admin DEFAULT_ADMIN_PASSWORD=admin123 # Whether to allow new users to register themselves or leave that only available for admins DISABLE_REGISTRATION=false # SSO Configuration SSO_ENABLED=false SSO_BASE_REDIRECT_URI=http://127.0.0.1:7171/api/auth/sso/callback FRONTEND_URL=http://127.0.0.1:7171 # Google SSO (get from Google Cloud Console) GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= # GitHub SSO (get from GitHub Developer Settings) GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= # Log level for application logging. # Possible values: debug, info, warning, error, critical # Set to 'info' or 'warning' for general use. Use 'debug' for troubleshooting. LOG_LEVEL=info ``` **Config** ``` { "service": "spotify", "version": "3.3.1", "spotify": "asdd", "deezer": "", "fallback": false, "spotifyQuality": "NORMAL", "deezerQuality": "MP3_128", "realTime": false, "customDirFormat": "%ar_album%/%album%", "customTrackFormat": "%tracknum%. %music%", "tracknumPadding": true, "saveCover": true, "maxConcurrentDownloads": 3, "utilityConcurrency": 1, "librespotConcurrency": 2, "maxRetries": 3, "retryDelaySeconds": 5, "retryDelayIncrease": 5, "convertTo": null, "bitrate": null, "artistSeparator": "; ", "recursiveQuality": false, "spotifyMetadata": true, "separateTracksByUser": false, "watch": { "enabled": false, "watchPollIntervalSeconds": 3600, "maxTracksPerRun": 50, "watchedArtistAlbumGroup": [ "album", "single", "appears_on" ], "delayBetweenPlaylistsSeconds": 2, "delayBetweenArtistsSeconds": 5, "useSnapshotIdChecking": true, "maxItemsPerRun": 5 }, "realTimeMultiplier": 0, "padNumberWidth": 3, "sseUpdateIntervalSeconds": 1, "explicitFilter": false } ``` **Logs** ``` 2026-03-16 14:27:42 [INFO] Logging system initialized 2026-03-16 14:27:42 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO 2026-03-16 14:27:42 [INFO] Configuration version 3.3.1 detected. Proceeding. 2026-03-16 14:27:42 [INFO] Migration validation completed (3.3.0 gate) 2026-03-16 14:27:42 [INFO] Database migrations executed (if needed) early in startup. 2026-03-16 14:27:42 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=0 2026-03-16 14:27:42 [INFO] Testing Redis connection to redis:6379... 2026-03-16 14:27:42 [INFO] Redis connection successful 2026-03-16 14:27:42 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1 2026-03-16 14:27:42 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork 2026-03-16 14:27:42 [INFO] Celery Download Worker (PID: 12) started with concurrency 3. 2026-03-16 14:27:42 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork 2026-03-16 14:27:42 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1. 2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes... 2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread started. 2026-03-16 14:27:42 [INFO] Celery workers started successfully 2026-03-16 14:27:42 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db 2026-03-16 14:27:42 [INFO] Artists database initialized/updated successfully at data/watch/artists.db 2026-03-16 14:27:42 [INFO] Successfully updated all existing tables schema in playlists database 2026-03-16 14:27:42 [INFO] Watch Manager: Successfully updated all existing tables schema 2026-03-16 14:27:42 [INFO] Watch Scheduler: Thread started. 2026-03-16 14:27:42 [INFO] Watch Manager: Background scheduler started (includes playlists and artists). 2026-03-16 14:27:42 [INFO] Watch Manager initialized and registered for shutdown. 2026-03-16 14:27:42 [INFO] Application startup complete. 2026-03-16 14:27:42 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks. 2026-03-16 14:27:42 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit) 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: absolutely not recommended! 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: absolutely not recommended! 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- [config] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f0e12c34190 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- [queues] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> default exchange=default(direct) key=default 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> utility_tasks exchange=utility_tasks(direct) key=utility_tasks 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: [tasks] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_album 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_playlist 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_track 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- [config] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f8d71644190 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- [queues] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: .> downloads exchange=downloads(direct) key=downloads 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: [tasks] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_album 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_playlist 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_track 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:28:30 [WARNING] Global Spotify API credentials in data/creds/search.json are incomplete. 2026-03-16 14:28:51 [INFO] Global Spotify API credentials saved to data/creds/search.json 2026-03-16 14:31:19 [INFO] Created new session! device_id: aefeb3d3d7fca19b8faae2074f18329066727820, ap: ap-gae2.spotify.com:80 2026-03-16 14:31:20 [INFO] Connection successfully! 2026-03-16 14:31:20 [INFO] Closing session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820 2026-03-16 14:31:20 [INFO] Closed session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820 2026-03-16 14:31:20 [ERROR] Failed to initialize Spotify session: BadCredentials 2026-03-16 14:31:20 [ERROR] Validation for ads (spotify) failed on attempt 1 (non-retryable or max retries). 2026-03-16 14:31:20 [ERROR] Error creating credential ads for spotify: Invalid spotify credentials for ads. Verification failed: BadCredentials Traceback (most recent call last): File "/app/routes/utils/credentials.py", line 521, in create_credential _validate_with_retry("spotify", name, validation_data) File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry raise ValueError(detailed_error_message) ValueError: Invalid spotify credentials for ads. Verification failed: BadCredentials 2026-03-16 14:31:20 [WARNING] Client error in /spotify/ads: Could not create credential: Invalid spotify credentials for ads. Verification failed: BadCredentials 2026-03-16 14:32:29 [INFO] Created new session! device_id: 581cc2e7ca915124e987a703ba178d9965645439, ap: ap-gew4.spotify.com:443 2026-03-16 14:32:29 [ERROR] Failed to initialize Spotify session: unpack requires a buffer of 4 bytes 2026-03-16 14:32:29 [ERROR] Validation for spoti (spotify) failed on attempt 1 (non-retryable or max retries). 2026-03-16 14:32:29 [ERROR] Error creating credential spoti for spotify: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes Traceback (most recent call last): File "/app/routes/utils/credentials.py", line 521, in create_credential _validate_with_retry("spotify", name, validation_data) File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry raise ValueError(detailed_error_message) ValueError: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes 2026-03-16 14:32:29 [WARNING] Client error in /spotify/spoti: Could not create credential: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes 2026-03-16 14:32:47 [WARNING] Client error in /spotify/spoti: No spotify credential found with name 'spoti' 2026-03-16 14:32:47 [WARNING] Invalid HTTP request received. 2026-03-16 14:32:47 [WARNING] Invalid HTTP request received. 2026-03-16 14:34:12 [INFO] Global Spotify API credentials saved to data/creds/search.json 2026-03-16 14:34:12 [INFO] Main configuration saved to data/config/main.json 2026-03-16 14:34:48 [INFO] Created new session! device_id: e4c30ea876415ec439cd52805fa0230ab2478708, ap: ap-gew4.spotify.com:4070 2026-03-16 14:34:49 [INFO] Connection successfully! 2026-03-16 14:34:49 [INFO] Session.Receiver started 2026-03-16 14:34:49 [INFO] Skipping 02 2026-03-16 14:34:49 [INFO] Received license_version: 0 2026-03-16 14:34:49 [INFO] Received country_code: TR 2026-03-16 14:34:49 [INFO] Skipping 1f 2026-03-16 14:34:49 [INFO] Skipping 69 2026-03-16 14:34:49 [INFO] Skipping unknown command cmd: 0x75, payload: b'\x00\x00\x01' 2026-03-16 14:34:50 [INFO] Login5 authentication successful, got access token 2026-03-16 14:34:50 [INFO] Authenticated as pihjcfin4qovrgv2vpfi3sye4! 2026-03-16 14:34:50 [INFO] Spotify credentials for asdd validated successfully (attempt 1). 2026-03-16 14:34:50 [INFO] Stored Spotify device info for 'asdd' (device_info: name=Living Room Speaker, type=4, id=e4c30ea876415ec439cd52805fa0230ab2478708, locale=tr) 2026-03-16 14:34:50 [INFO] Credential 'asdd' for spotify created successfully. 2026-03-16 14:34:50 [INFO] Main configuration saved to data/config/main.json 2026-03-16 14:35:33 [INFO] Search requested: query='ahmet', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:33 [INFO] Spotify client initialized/reinitialized for search 2026-03-16 14:35:33 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:33 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:33 [INFO] Search completed successfully for query: 'ahmet' 2026-03-16 14:35:37 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:37 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:37 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:37 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:37 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:37 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:35:39 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:39 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:39 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:39 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:39 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:39 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:35:45 [INFO] Search requested: query='ege', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:45 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:45 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:45 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:45 [ERROR] Error during Spotify search for query 'ege': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:45 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:38:15 [INFO] Search requested: query='420', type=track, limit=50, main_account_name=None 2026-03-16 14:38:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:38:15 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:38:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': '420', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:38:15 [ERROR] Error during Spotify search for query '420': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:38:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:42:51 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None 2026-03-16 14:42:51 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:42:51 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:42:51 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:42:51 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:42:51 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:43:36 [INFO] Watch configuration updated in main.json under 'watch'. 2026-03-16 14:43:48 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None 2026-03-16 14:43:48 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:43:48 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:43:48 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:43:48 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:43:48 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:44:27 [INFO] Watch configuration updated in main.json under 'watch'. 2026-03-16 14:44:35 [INFO] Shutting down 2026-03-16 14:44:35 [INFO] Waiting for connections to close. (CTRL+C to force quit) 2026-03-16 14:44:50 [INFO] Logging system initialized 2026-03-16 14:44:50 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO 2026-03-16 14:44:50 [INFO] Configuration version 3.3.1 detected. Proceeding. 2026-03-16 14:44:50 [INFO] Migration validation completed (3.3.0 gate) 2026-03-16 14:44:50 [INFO] Database migrations executed (if needed) early in startup. 2026-03-16 14:44:50 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=1 2026-03-16 14:44:50 [INFO] Testing Redis connection to redis:6379... 2026-03-16 14:44:50 [INFO] Redis connection successful 2026-03-16 14:44:50 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1 2026-03-16 14:44:50 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork 2026-03-16 14:44:50 [INFO] Celery Download Worker (PID: 12) started with concurrency 3. 2026-03-16 14:44:50 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork 2026-03-16 14:44:50 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1. 2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes... 2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread started. 2026-03-16 14:44:50 [INFO] Celery workers started successfully 2026-03-16 14:44:50 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db 2026-03-16 14:44:50 [INFO] Artists database initialized/updated successfully at data/watch/artists.db 2026-03-16 14:44:50 [INFO] Successfully updated all existing tables schema in playlists database 2026-03-16 14:44:50 [INFO] Watch Manage2026-03-16 14:27:42 [INFO] Logging system initialized 2026-03-16 14:27:42 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO 2026-03-16 14:27:42 [INFO] Configuration version 3.3.1 detected. Proceeding. 2026-03-16 14:27:42 [INFO] Migration validation completed (3.3.0 gate) 2026-03-16 14:27:42 [INFO] Database migrations executed (if needed) early in startup. 2026-03-16 14:27:42 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=0 2026-03-16 14:27:42 [INFO] Testing Redis connection to redis:6379... 2026-03-16 14:27:42 [INFO] Redis connection successful 2026-03-16 14:27:42 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1 2026-03-16 14:27:42 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork 2026-03-16 14:27:42 [INFO] Celery Download Worker (PID: 12) started with concurrency 3. 2026-03-16 14:27:42 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork 2026-03-16 14:27:42 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1. 2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes... 2026-03-16 14:27:42 [INFO] CeleryManager: Config monitor thread started. 2026-03-16 14:27:42 [INFO] Celery workers started successfully 2026-03-16 14:27:42 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db 2026-03-16 14:27:42 [INFO] Artists database initialized/updated successfully at data/watch/artists.db 2026-03-16 14:27:42 [INFO] Successfully updated all existing tables schema in playlists database 2026-03-16 14:27:42 [INFO] Watch Manager: Successfully updated all existing tables schema 2026-03-16 14:27:42 [INFO] Watch Scheduler: Thread started. 2026-03-16 14:27:42 [INFO] Watch Manager: Background scheduler started (includes playlists and artists). 2026-03-16 14:27:42 [INFO] Watch Manager initialized and registered for shutdown. 2026-03-16 14:27:42 [INFO] Application startup complete. 2026-03-16 14:27:42 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks. 2026-03-16 14:27:42 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit) 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: absolutely not recommended! 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: absolutely not recommended! 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- [config] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f0e12c34190 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: -------------- [queues] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> default exchange=default(direct) key=default 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: .> utility_tasks exchange=utility_tasks(direct) key=utility_tasks 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: [tasks] 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_album 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_playlist 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . download_track 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:27:44 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:27:44 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- [config] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f8d71644190 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: -------------- [queues] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: .> downloads exchange=downloads(direct) key=downloads 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: [tasks] 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_album 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_playlist 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . download_track 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:27:44 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:28:30 [WARNING] Global Spotify API credentials in data/creds/search.json are incomplete. 2026-03-16 14:28:51 [INFO] Global Spotify API credentials saved to data/creds/search.json 2026-03-16 14:31:19 [INFO] Created new session! device_id: aefeb3d3d7fca19b8faae2074f18329066727820, ap: ap-gae2.spotify.com:80 2026-03-16 14:31:20 [INFO] Connection successfully! 2026-03-16 14:31:20 [INFO] Closing session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820 2026-03-16 14:31:20 [INFO] Closed session. device_id: aefeb3d3d7fca19b8faae2074f18329066727820 2026-03-16 14:31:20 [ERROR] Failed to initialize Spotify session: BadCredentials 2026-03-16 14:31:20 [ERROR] Validation for ads (spotify) failed on attempt 1 (non-retryable or max retries). 2026-03-16 14:31:20 [ERROR] Error creating credential ads for spotify: Invalid spotify credentials for ads. Verification failed: BadCredentials Traceback (most recent call last): File "/app/routes/utils/credentials.py", line 521, in create_credential _validate_with_retry("spotify", name, validation_data) File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry raise ValueError(detailed_error_message) ValueError: Invalid spotify credentials for ads. Verification failed: BadCredentials 2026-03-16 14:31:20 [WARNING] Client error in /spotify/ads: Could not create credential: Invalid spotify credentials for ads. Verification failed: BadCredentials 2026-03-16 14:32:29 [INFO] Created new session! device_id: 581cc2e7ca915124e987a703ba178d9965645439, ap: ap-gew4.spotify.com:443 2026-03-16 14:32:29 [ERROR] Failed to initialize Spotify session: unpack requires a buffer of 4 bytes 2026-03-16 14:32:29 [ERROR] Validation for spoti (spotify) failed on attempt 1 (non-retryable or max retries). 2026-03-16 14:32:29 [ERROR] Error creating credential spoti for spotify: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes Traceback (most recent call last): File "/app/routes/utils/credentials.py", line 521, in create_credential _validate_with_retry("spotify", name, validation_data) File "/app/routes/utils/credentials.py", line 466, in _validate_with_retry raise ValueError(detailed_error_message) ValueError: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes 2026-03-16 14:32:29 [WARNING] Client error in /spotify/spoti: Could not create credential: Invalid spotify credentials for spoti. Verification failed: unpack requires a buffer of 4 bytes 2026-03-16 14:32:47 [WARNING] Client error in /spotify/spoti: No spotify credential found with name 'spoti' 2026-03-16 14:32:47 [WARNING] Invalid HTTP request received. 2026-03-16 14:32:47 [WARNING] Invalid HTTP request received. 2026-03-16 14:34:12 [INFO] Global Spotify API credentials saved to data/creds/search.json 2026-03-16 14:34:12 [INFO] Main configuration saved to data/config/main.json 2026-03-16 14:34:48 [INFO] Created new session! device_id: e4c30ea876415ec439cd52805fa0230ab2478708, ap: ap-gew4.spotify.com:4070 2026-03-16 14:34:49 [INFO] Connection successfully! 2026-03-16 14:34:49 [INFO] Session.Receiver started 2026-03-16 14:34:49 [INFO] Skipping 02 2026-03-16 14:34:49 [INFO] Received license_version: 0 2026-03-16 14:34:49 [INFO] Received country_code: TR 2026-03-16 14:34:49 [INFO] Skipping 1f 2026-03-16 14:34:49 [INFO] Skipping 69 2026-03-16 14:34:49 [INFO] Skipping unknown command cmd: 0x75, payload: b'\x00\x00\x01' 2026-03-16 14:34:50 [INFO] Login5 authentication successful, got access token 2026-03-16 14:34:50 [INFO] Authenticated as pihjcfin4qovrgv2vpfi3sye4! 2026-03-16 14:34:50 [INFO] Spotify credentials for asdd validated successfully (attempt 1). 2026-03-16 14:34:50 [INFO] Stored Spotify device info for 'asdd' (device_info: name=Living Room Speaker, type=4, id=e4c30ea876415ec439cd52805fa0230ab2478708, locale=tr) 2026-03-16 14:34:50 [INFO] Credential 'asdd' for spotify created successfully. 2026-03-16 14:34:50 [INFO] Main configuration saved to data/config/main.json 2026-03-16 14:35:33 [INFO] Search requested: query='ahmet', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:33 [INFO] Spotify client initialized/reinitialized for search 2026-03-16 14:35:33 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:33 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:33 [INFO] Search completed successfully for query: 'ahmet' 2026-03-16 14:35:37 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:37 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:37 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:37 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:37 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:37 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:35:39 [INFO] Search requested: query='ege!', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:39 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:39 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:39 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege!', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:39 [ERROR] Error during Spotify search for query 'ege!': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:39 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege%21&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:35:45 [INFO] Search requested: query='ege', type=artist, limit=50, main_account_name=None 2026-03-16 14:35:45 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:35:45 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:35:45 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'ege', 'limit': 50, 'offset': 0, 'type': 'artist', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:35:45 [ERROR] Error during Spotify search for query 'ege': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist: Invalid limit, reason: None 2026-03-16 14:35:45 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=ege&limit=50&offset=0&type=artist:\n Invalid limit, reason: None\n'} 2026-03-16 14:38:15 [INFO] Search requested: query='420', type=track, limit=50, main_account_name=None 2026-03-16 14:38:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:38:15 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:38:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': '420', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:38:15 [ERROR] Error during Spotify search for query '420': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:38:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=420&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:42:51 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None 2026-03-16 14:42:51 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:42:51 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:42:51 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:42:51 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:42:51 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:43:36 [INFO] Watch configuration updated in main.json under 'watch'. 2026-03-16 14:43:48 [INFO] Search requested: query='tophaneli killa', type=track, limit=50, main_account_name=None 2026-03-16 14:43:48 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:43:48 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:43:48 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'tophaneli killa', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:43:48 [ERROR] Error during Spotify search for query 'tophaneli killa': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:43:48 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=tophaneli+killa&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:44:27 [INFO] Watch configuration updated in main.json under 'watch'. 2026-03-16 14:44:35 [INFO] Shutting down 2026-03-16 14:44:35 [INFO] Waiting for connections to close. (CTRL+C to force quit) 2026-03-16 14:44:50 [INFO] Logging system initialized 2026-03-16 14:44:50 [INFO] Logging system fully initialized (lifespan startup). Effective log level: INFO 2026-03-16 14:44:50 [INFO] Configuration version 3.3.1 detected. Proceeding. 2026-03-16 14:44:50 [INFO] Migration validation completed (3.3.0 gate) 2026-03-16 14:44:50 [INFO] Database migrations executed (if needed) early in startup. 2026-03-16 14:44:50 [INFO] Spotify device info backfill complete: created=0 updated=0 skipped=1 2026-03-16 14:44:50 [INFO] Testing Redis connection to redis:6379... 2026-03-16 14:44:50 [INFO] Redis connection successful 2026-03-16 14:44:50 [INFO] CeleryManager initialized. Download concurrency set to: 3 | Utility concurrency: 1 2026-03-16 14:44:50 [INFO] Starting Celery Download Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q downloads -c 3 --hostname=worker_dlw@%h --pool=prefork 2026-03-16 14:44:50 [INFO] Celery Download Worker (PID: 12) started with concurrency 3. 2026-03-16 14:44:50 [INFO] Starting Celery Utility Worker with command: /usr/bin/python3 -m celery -A routes.utils.celery_tasks worker --loglevel=INFO -Q utility_tasks,default -c 1 --hostname=worker_utw@%h --pool=prefork 2026-03-16 14:44:50 [INFO] Celery Utility Worker (PID: 15) started with concurrency 1. 2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread active, monitoring configuration changes... 2026-03-16 14:44:50 [INFO] CeleryManager: Config monitor thread started. 2026-03-16 14:44:50 [INFO] Celery workers started successfully 2026-03-16 14:44:50 [INFO] Playlists database initialized/updated successfully at data/watch/playlists.db 2026-03-16 14:44:50 [INFO] Artists database initialized/updated successfully at data/watch/artists.db 2026-03-16 14:44:50 [INFO] Successfully updated all existing tables schema in playlists database 2026-03-16 14:44:50 [INFO] Watch Manager: Successfully updated all existing tables schema 2026-03-16 14:44:50 [INFO] Watch Scheduler: Thread started. 2026-03-16 14:44:50 [INFO] Watch Manager: Background scheduler started (includes playlists and artists). 2026-03-16 14:44:50 [INFO] Watch Manager initialized and registered for shutdown. 2026-03-16 14:44:50 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks. 2026-03-16 14:44:50 [INFO] Application startup complete. 2026-03-16 14:44:50 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit) 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: absolutely not recommended! 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: absolutely not recommended! 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- [config] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f1659a34150 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- [queues] 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: .> downloads exchange=downloads(direct) key=downloads 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: [tasks] 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_album 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_playlist 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_track 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- [config] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f136ae14510 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork) 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- [queues] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> default exchange=default(direct) key=default 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> utility_tasks exchange=utility_tasks(direct) key=utility_tasks 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: [tasks] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_album 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_playlist 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_track 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:45:55 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:55 [INFO] Spotify client initialized/reinitialized for search 2026-03-16 14:45:55 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:55 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:56 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:56 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:56 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:08 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:08 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:08 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:08 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:08 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:08 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:11 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:11 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:11 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:11 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:11 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:11 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:14 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:14 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:14 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:14 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:14 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:14 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:15 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:15 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:16 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:16 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:16 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'}r: Successfully updated all existing tables schema 2026-03-16 14:44:50 [INFO] Watch Scheduler: Thread started. 2026-03-16 14:44:50 [INFO] Watch Manager: Background scheduler started (includes playlists and artists). 2026-03-16 14:44:50 [INFO] Watch Manager initialized and registered for shutdown. 2026-03-16 14:44:50 [INFO] Watch Scheduler: Watch feature is disabled in config. Skipping checks. 2026-03-16 14:44:50 [INFO] Application startup complete. 2026-03-16 14:44:50 [INFO] Uvicorn running on http://0.0.0.0:7171 (Press CTRL+C to quit) 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:811: SecurityWarning: An entry for the specified gid or egid was not found. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: We're assuming this is a potential security issue. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ASSUMING_ROOT)) 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: /python/celery/platforms.py:841: SecurityWarning: You're running the worker with superuser privileges: this is 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: absolutely not recommended! 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: absolutely not recommended! 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: Please specify a different user using the --uid option. 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: User information: uid=568 euid=568 gid=568 egid=568 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDERR]: warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format( 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- worker_dlw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- worker_utw@fa0c08f88293 v5.5.3 (immunity) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- [config] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- Linux-6.12.15-production+truenas-x86_64-with-glibc2.36 2026-03-16 14:44:51 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f1659a34150 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: - *** --- * --- .> concurrency: 3 (prefork) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: -------------- [queues] 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: .> downloads exchange=downloads(direct) key=downloads 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: [tasks] 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_album 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_playlist 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . download_track 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:44:51 [INFO] Celery[DW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- [config] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> app: routes.utils.celery_tasks:0x7f136ae14510 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> transport: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - ** ---------- .> results: redis://:**@redis:6379/0 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: - *** --- * --- .> concurrency: 1 (prefork) 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: --- ***** ----- 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: -------------- [queues] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> default exchange=default(direct) key=default 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: .> utility_tasks exchange=utility_tasks(direct) key=utility_tasks 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: [tasks] 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . cleanup_stale_errors 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . delayed_delete_task_data 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_album 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_playlist 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . download_track 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: . trigger_sse_update_task 2026-03-16 14:44:51 [INFO] Celery[UW-STDOUT]: 2026-03-16 14:45:55 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:55 [INFO] Spotify client initialized/reinitialized for search 2026-03-16 14:45:55 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:55 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:56 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:56 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:56 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:45:59 [INFO] Search requested: query='sicko ', type=track, limit=50, main_account_name=None 2026-03-16 14:45:59 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:45:59 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:45:59 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko ', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:45:59 [ERROR] Error during Spotify search for query 'sicko ': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:45:59 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:08 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:08 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:08 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:08 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:08 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:08 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:11 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:11 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:11 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:11 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:11 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:11 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:13 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:13 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:13 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:13 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:13 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:13 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:14 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:14 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:14 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:14 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:14 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:14 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:15 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:15 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:15 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:15 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} 2026-03-16 14:46:15 [INFO] Search requested: query='sicko mode', type=track, limit=50, main_account_name=None 2026-03-16 14:46:15 [WARNING] Couldn't decode JSON from cache at: .cache 2026-03-16 14:46:16 [WARNING] Couldn't write token to cache at: .cache 2026-03-16 14:46:16 [ERROR] HTTP Error for GET to https://api.spotify.com/v1/search with Params: {'q': 'sicko mode', 'limit': 50, 'offset': 0, 'type': 'track', 'market': None} returned 400 due to Invalid limit 2026-03-16 14:46:16 [ERROR] Error during Spotify search for query 'sicko mode': http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None Traceback (most recent call last): File "/python/spotipy/client.py", line 274, in _internal_call response.raise_for_status() File "/python/requests/models.py", line 1024, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/app/routes/utils/search.py", line 92, in search spotify_response = client.search( ^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 604, in search return self._get( ^^^^^^^^^^ File "/python/spotipy/client.py", line 324, in _get return self._internal_call("GET", url, payload, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/python/spotipy/client.py", line 294, in _internal_call raise SpotifyException( spotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track: Invalid limit, reason: None 2026-03-16 14:46:16 [ERROR] Error in search: {'error': 'http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None', 'traceback': 'Traceback (most recent call last):\n File "/python/spotipy/client.py", line 274, in _internal_call\n response.raise_for_status()\n File "/python/requests/models.py", line 1024, in raise_for_status\n raise HTTPError(http_error_msg, response=self)\nrequests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/app/routes/core/search.py", line 37, in handle_search\n result = search(\n ^^^^^^^\n File "/app/routes/utils/search.py", line 92, in search\n spotify_response = client.search(\n ^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 604, in search\n return self._get(\n ^^^^^^^^^^\n File "/python/spotipy/client.py", line 324, in _get\n return self._internal_call("GET", url, payload, kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/python/spotipy/client.py", line 294, in _internal_call\n raise SpotifyException(\nspotipy.exceptions.SpotifyException: http status: 400, code: -1 - https://api.spotify.com/v1/search?q=sicko+mode&limit=50&offset=0&type=track:\n Invalid limit, reason: None\n'} ``` **Version:** 3.3.1

perhaps related to the spotify api changes?

perhaps related to the spotify api changes?

You need a Spotify Premium account to use the Spotify Web API, so your Spotizerr will no longer work without a Spotify Premium account.

You can read more about the update here.

[You need a Spotify Premium account to use the Spotify Web API](https://developer.spotify.com/documentation/web-api#:~:text=You%20need%20a%20Spotify%20Premium%20account%20to%20use%20the%20Web%20API), so your Spotizerr will no longer work without a Spotify Premium account. You can read more about the update [here](https://developer.spotify.com/blog/2026-02-06-update-on-developer-access-and-platform-security).
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
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
spotizerrphoenix/spotizerr-phoenix#36
No description provided.