spotDL / spotify-downloader

Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found).
https://spotdl.readthedocs.io/en/latest/
MIT License
17.53k stars 1.61k forks source link

Docker image broken? #2147

Closed FaNt4zMa closed 3 months ago

FaNt4zMa commented 3 months ago

System OS

Docker

Python Version

3.11 (CPython)

Install Source

Other

Install version / commit hash

v4.2.5

Expected Behavior vs Actual Behavior

When trying to download song through the web ui, I get "AudioProviderError: YT-DLP download error" I thought: lets update yt-dlp, but after I exec'd into the containers, trying to run "spotdl" or "yt-dlp", I get command not found. Tho I am able to manually install spotdl through pip, along with all dependencies, and download songs using the CLI... On my Windows PC, I was able to fix my install but resintalling python and spotdl as admin but this is a fresh install of Ubuntu server 24.04 LTS and the Docker image comes prepackaged with Python 3.12.2. Please help?

Steps to reproduce - Ensure to include actual links!

  1. Run the web ui using docker compose:

    services:
    spotdl:
        image: spotdl/spotify-downloader:latest
        container_name: spotdl
        env_file: stack.env
        volumes:
            - /home/fantaz/Tools/SpotDL/config.json:/root/.spotdl/config.json
            - /home/fantaz/media/music/Albums:/music
        ports:
            - 8098:8098
        restart: unless-stopped
        command: web --config
  2. Go to webui and try downloading a song (mine was: https://open.spotify.com/track/6591oPA9nKFawSWOcQcL8A?si=d3b1c96a39444b58)

  3. Watch the logs as it fails :(

Traceback

Updating web app                                                                

Files are stored in current directory to save them to temporary directory       
disable the `web_use_output_dir` option                                         
Starting web server                                                             

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8098 (Press CTRL+C to quit)
INFO:     192.168.2.55:58701 - "GET / HTTP/1.1" 200 OK
INFO:     192.168.2.55:58701 - "GET /assets/index-CqL-qAH-.js HTTP/1.1" 200 OK
INFO:     192.168.2.55:58702 - "GET /assets/index-DRB2_ZPb.css HTTP/1.1" 200 OK
INFO:     ('192.168.2.55', 58703) - "WebSocket /api/ws?client_id=8ade533f-1395-4408-aa1c-62f93fdf4bee" [accepted]
INFO:     Client 8ade533f-1395-4408-aa1c-62f93fdf4bee connected
INFO:     192.168.2.55:58702 - "GET /api/version HTTP/1.1" 200 OK
INFO:     connection open
INFO:     192.168.2.55:58701 - "GET /api/settings?client_id=8ade533f-1395-4408-aa1c-62f93fdf4bee HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 408, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/fastapi/applications.py", line 292, in __call__
    await super().__call__(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/middleware/cors.py", line 83, in __call__
    await self.app(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
    raise e
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/fastapi/routing.py", line 291, in app
    content = await serialize_response(
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.cache/pypoetry/virtualenvs/spotdl-il7asoJj-py3.12/lib/python3.12/site-packages/fastapi/routing.py", line 154, in serialize_response
    raise ResponseValidationError(
fastapi.exceptions.ResponseValidationError: 1 validation errors:
  {'type': 'string_type', 'loc': ('response', 'restrict'), 'msg': 'Input should be a valid string', 'input': False, 'url': 'https://errors.pydantic.dev/2.6/v/string_type'}
INFO:     192.168.2.55:58702 - "GET /api/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F4HMUrFl8y6rQCzEbaGEkcj%3Fsi%3Dee3d836796c0467e HTTP/1.1" 200 OK
Skipping Eminem - Somebody Save Me (file already exists) (duplicate)            
Eminem - Somebody Save Me: Skipped                                              
1/0 complete                                                                    
INFO:     192.168.2.55:58702 - "POST /api/download/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F4HMUrFl8y6rQCzEbaGEkcj&client_id=8ade533f-1395-4408-aa1c-62f93fdf4bee HTTP/1.1" 200 OK
INFO:     192.168.2.55:60352 - "GET /api/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F6591oPA9nKFawSWOcQcL8A%3Fsi%3Dd3b1c96a39444b58 HTTP/1.1" 200 OK
1/0 complete                                                                    
AudioProviderError: YT-DLP download error -                                     
https://music.youtube.com/watch?v=TvqIi7cf-H0                                   
ERROR:    Failure downloading EVIL EMPIRE (feat. DD Osama)
ERROR:    Error downloading! 
INFO:     192.168.2.55:60352 - "POST /api/download/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F6591oPA9nKFawSWOcQcL8A&client_id=8ade533f-1395-4408-aa1c-62f93fdf4bee HTTP/1.1" 500 Internal Server Error
INFO:     Shutting down
[11:52:20] INFO     MainThread - Updating web app                      web.py:66

[11:52:21] INFO     MainThread - Files are stored in current          web.py:126
                    directory to save them to temporary directory               
                    disable the `web_use_output_dir` option                     
[11:52:21] INFO     MainThread - Starting web server                  web.py:132

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8098 (Press CTRL+C to quit)
INFO:     192.168.2.55:56340 - "GET / HTTP/1.1" 200 OK
INFO:     192.168.2.55:56340 - "GET /assets/index-CqL-qAH-.js HTTP/1.1" 200 OK
INFO:     192.168.2.55:56341 - "GET /assets/index-DRB2_ZPb.css HTTP/1.1" 200 OK
DEBUG:    = connection is CONNECTING
DEBUG:    < GET /api/ws?client_id=4754ce5a-1d12-431d-968e-610399eac39d HTTP/1.1
DEBUG:    < host: 192.168.2.98:8098
DEBUG:    < connection: Upgrade
DEBUG:    < pragma: no-cache
DEBUG:    < cache-control: no-cache
DEBUG:    < upgrade: websocket
DEBUG:    < origin: http://192.168.2.98:8098
DEBUG:    < sec-websocket-version: 13
DEBUG:    < user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
DEBUG:    < accept-encoding: gzip, deflate
DEBUG:    < accept-language: en-CA,en-GB;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6
DEBUG:    < cookie: default-theme=ngax; i18n_redirected=en-US; mealie.auth.strategy=local; session-auth=SgMePrhmU38705unOt3AdNtu6j5jFGILaRa0FqHlHBc; XSRF-TOKEN=eyJpdiI6Imc0MlZYV2NiWG9oSG9QUGNlT0lSYVE9PSIsInZhbHVlIjoib3Y3R1czbFc3RUdDbGliM1JCRi90NHR0dDRkb082bVpVdERTYTR2Zi9vd0dUN05UKzZ5WVBPNXYxRGt5RnN6d2ZMM24zV0RHQkRDU2FXTjdDWTQwcFNVeXVlMDAvYitkZmh0UFJTV2hWRFB4a1YvWGNxb0lZMUNHMGVCL1NLeTEiLCJtYWMiOiI3MTBmNjZkMDcyYzBkMzNhZDVhY2IxZWMzMjgzNzhiYTVjMjhkYTI1YjA0YjZjNmJiMDU1NjhlMWY0YWVlMWY4IiwidGFnIjoiIn0%3D; heimdall_session=eyJpdiI6IndyMXhlNXM0em9CWU9YQ2lpZWpsdHc9PSIsInZhbHVlIjoiT3NmQlRHUlNsalJEN3VVcHp3U0tjKzNINDlNMGorbzB5Y1VsWFVVWlgyaUg2VjkxRkpMU21DZm5DTVVwelRzdTRLeHIrYitkTmZYeHc4NXFPYU1RTjNlRXJmdVkvYXlBaGc5YkJhMDcxbVFtdnlLd3pEd0hXbU5IaXVTbW9MRHEiLCJtYWMiOiIxMjJlODRjMTkwOWYwN2EwYjRjYWM5ODA1NDg2NzY0NzA1MTFlZjUyYWNjMjQxOWZkZWE1N2MwNDY3MjIzYTdiIiwidGFnIjoiIn0%3D; connect.sid=s%3Al0CwCqFAmVKW85lCGbJdSXcPHMa85BKh.OTMt2JXlyTAfevVxtml5AesVBpIX89r4CtWgQALQ32E; mealie.access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZTJiMDdhYy01NWEwLTQ3MjctYmMxYS0wZmFlNjcxMGVkYjIiLCJleHAiOjE3MjM0NjExNjAsImlzcyI6Im1lYWxpZSJ9.Gq9jvCEueoBffBd-c6t1f3Y7xnWiLBQKpB6AhWAo-iQ; mealie.auth._token.local=Bearer%20eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZTJiMDdhYy01NWEwLTQ3MjctYmMxYS0wZmFlNjcxMGVkYjIiLCJleHAiOjE3MjM0NjExNjAsImlzcyI6Im1lYWxpZSJ9.Gq9jvCEueoBffBd-c6t1f3Y7xnWiLBQKpB6AhWAo-iQ; mealie.auth._token_expiration.local=1723461160000; remember-me=bmF0aGFueWVsOTE2ZCU0MGdtYWlsLmNvbToxNzIyODU2MzY1MzE2OlNIQTI1NjpmMDkyNTQ5M2Y3ZTRlYTM4ODQ2Y2Y5OTM5ZWI5YmJhMTdkZjdlNjQ1ZGQwNmYwMTFlZTIwYzAwNmM3NGJmYjgz; SESSION=MGQ5ZDBmZWQtN2FkMC00NjlhLWI2ODUtMDc0ODU1NDMzY2Ri; session=MTcyMjI1MjY5MHxEdi1CQkFFQ180SUFBUkFCRUFBQVV2LUNBQUlHYzNSeWFXNW5EQVlBQkhScGJXVUZhVzUwTmpRRUJnRDh6VTc3SkFaemRISnBibWNNQmdBRWRYTmxjZ1p6ZEhKcGJtY01HUUFYYm1GMGFHRnVlV1ZzT1RFMlpFQm5iV0ZwYkM1amIyMD18ABLkH5w8s5AWU930lc_xQniKM5Xic9A9tjtJqXnKRxo=; puffer_auth=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwiYXVkIjpbInNlc3Npb24iXSwiZXhwIjoxNzIyMjU2Mjk2LCJpYXQiOjE3MjIyNTI2OTYsInB1ZmZlcnBhbmVsIjp7fX0.OGI0gNXpS4oxxIXRpoJxF9UQwhOcJTQcUyRr2PPne3BoPyzKl-ZYhzcnFTq-A7y5apJQ6Dju8Bno2rGMYXuMwQ
DEBUG:    < sec-gpc: 1
DEBUG:    < sec-websocket-key: +kXVP5tYaW+iX0Cu9GMtxQ==
DEBUG:    < sec-websocket-extensions: permessage-deflate; client_max_window_bits
ERROR:    Client 4754ce5a-1d12-431d-968e-610399eac39d not found
INFO:     192.168.2.55:56341 - "GET /api/version HTTP/1.1" 200 OK
[11:52:30] DEBUG    MainThread - Downloader settings:          downloader.py:131
                    {'audio_providers': ['youtube-music',                       
                    'slider-kz'], 'lyrics_providers':                           
                    ['synced', 'genius', 'azlyrics',                            
                    'musixmatch'], 'playlist_numbering':                        
                    False, 'scan_for_songs': False, 'm3u':                      
                    None, 'output': '{artist} -                                 
                    {album}//{artists} -                                        
                    {title}.{output-ext}', 'overwrite':                         
                    'skip', 'search_query': None, 'ffmpeg':                     
                    'ffmpeg', 'bitrate': 'disable',                             
                    'ffmpeg_args': None, 'format': 'opus',                      
                    'save_file': None, 'filter_results': True,                  
                    'album_type': None, 'threads': 4,                           
                    'cookie_file': 'cookies.txt', 'restrict':                   
                    False, 'print_errors': False,                               
                    'sponsor_block': False, 'preload': False,                   
                    'archive': None, 'load_config': True,                       
                    'log_level': 'DEBUG', 'simple_tui': True,                   
                    'fetch_albums': False, 'id3_separator':                     
                    '/', 'ytm_data': False, 'add_unavailable':                  
                    False, 'generate_lrc': False,                               
                    'force_update_metadata': False,                             
                    'only_verified_results': False,                             
                    'sync_without_deleting': False,                             
                    'max_filename_length': None,                                
                    'yt_dlp_args': None, 'detect_formats':                      
                    None, 'save_errors': None,                                  
                    'ignore_albums': None, 'proxy': None,                       
                    'skip_explicit': False, 'log_format':                       
                    None, 'redownload': False,                                  
                    'skip_album_art': False,                                    
                    'create_skip_file': False,                                  
                    'respect_skip_file': False}                                 
[11:52:30] DEBUG    MainThread - FFmpeg path: ffmpeg           downloader.py:149
[11:52:30] DEBUG    MainThread - Found 0 known songs           downloader.py:184
[11:52:32] DEBUG    MainThread - Archive: 0 urls               downloader.py:231
[11:52:32] DEBUG    MainThread - Downloader initialized        downloader.py:233
INFO:     ('192.168.2.55', 56342) - "WebSocket /api/ws?client_id=4754ce5a-1d12-431d-968e-610399eac39d" [accepted]
INFO:     Client 4754ce5a-1d12-431d-968e-610399eac39d connected
DEBUG:    > HTTP/1.1 101 Switching Protocols
DEBUG:    > Upgrade: websocket
DEBUG:    > Connection: Upgrade
DEBUG:    > Sec-WebSocket-Accept: gn31ZWL1AkHYTpqEgrSAXnVceKM=
DEBUG:    > Sec-WebSocket-Extensions: permessage-deflate
DEBUG:    > date: Mon, 29 Jul 2024 11:52:30 GMT
DEBUG:    > server: uvicorn
INFO:     connection open
DEBUG:    = connection is OPEN
INFO:     192.168.2.55:56340 - "GET /api/settings?client_id=4754ce5a-1d12-431d-968e-610399eac39d HTTP/1.1" 404 Not Found
INFO:     192.168.2.55:56340 - "GET /api/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F6591oPA9nKFawSWOcQcL8A%3Fsi%3Dd3b1c96a39444b58 HTTP/1.1" 200 OK
[11:52:35] DEBUG    asyncio_0 - Found lyrics for Lil Mabu -    downloader.py:400
                    EVIL EMPIRE (feat. DD Osama) on Synced                      
[11:52:35] DEBUG    asyncio_0 - [6591oPA9nKFawSWOcQcL8A] Searching   base.py:167
                    for lil mabu, dd osama - evil empire (feat. dd              
                    osama)                                                      
[11:52:36] DEBUG    asyncio_0 - [6591oPA9nKFawSWOcQcL8A] Found 1     base.py:180
                    results for ISRC USUYG1539670                               
[11:52:36] DEBUG    asyncio_0 - [6591oPA9nKFawSWOcQcL8A] Filtered to base.py:192
                    1 ISRC results                                              
[11:52:36] DEBUG    asyncio_0 - [6591oPA9nKFawSWOcQcL8A] Best ISRC   base.py:201
                    result is                                                   
                    https://music.youtube.com/watch?v=TvqIi7cf-H0               
                    with score 100.0                                            
[11:52:36] DEBUG    asyncio_0 - Downloading Lil Mabu - EVIL    downloader.py:654
                    EMPIRE (feat. DD Osama) using                               
                    https://music.youtube.com/watch?v=TvqIi7cf                  
                    -H0                                                         
[11:52:39] DEBUG    asyncio_0 - ERROR: unable to download video      base.py:374
                    data: HTTP Error 403: Forbidden                             
[11:52:39] INFO     asyncio_0 - 1/0 complete             progress_handler.py:221
DEBUG:    > TEXT '{"song":{"name":"EVIL EMPIRE (feat. DD Osama)",...s":0,"message":"Error"}' [5040 bytes]
[11:52:39] ERROR    asyncio_0 - Traceback (most recent   progress_handler.py:358
                    call last):                                                 
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 3434, in process_info                                 
                        success, real_download =                                
                    self.dl(temp_filename, info_dict)                           
                                                 ^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^                                  
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 3155, in dl                                           
                        return fd.download(name,                                
                    new_info, subtitle)                                         
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^                                                
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/downloader/com                        
                    mon.py", line 455, in download                              
                        ret =                                                   
                    self.real_download(filename,                                
                    info_dict)                                                  
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^                                               
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/downloader/htt                        
                    p.py", line 369, in real_download                           
                        establish_connection()                                  
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/downloader/htt                        
                    p.py", line 120, in                                         
                    establish_connection                                        
                        ctx.data =                                              
                    self.ydl.urlopen(request)                                   
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^                                                        
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 4101, in urlopen                                      
                        return                                                  
                    self._request_director.send(req)                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^                                                     
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/networking/com                        
                    mon.py", line 115, in send                                  
                        response = handler.send(request)                        
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/networking/_he                        
                    lper.py", line 204, in wrapper                              
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/networking/com                        
                    mon.py", line 326, in send                                  
                        return self._send(request)                              
                               ^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/networking/_re                        
                    quests.py", line 351, in _send                              
                        raise HTTPError(res,                                    
                    redirect_loop=max_redirects_exceeded                        
                    )                                                           
                    yt_dlp.networking.exceptions.HTTPErr                        
                    or: HTTP Error 403: Forbidden                               

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/spotdl/providers/audio/base.py",                          
                    line 369, in get_download_metadata                          
                        data =                                                  
                    self.audio_handler.extract_info(url,                        
                    download=download)                                          
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 1583, in extract_info                                 
                        return self.__extract_info(url,                         
                    self.get_info_extractor(key),                               
                    download, extra_info, process)                              
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 1594, in wrapper                                      
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 1750, in __extract_info                               
                        return                                                  
                    self.process_ie_result(ie_result,                           
                    download, extra_info)                                       
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 1809, in process_ie_result                            
                        ie_result =                                             
                    self.process_video_result(ie_result,                        
                    download=download)                                          
                                    ^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 2968, in process_video_result                         
                        self.process_info(new_info)                             
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 3443, in process_info                                 
                        self.report_error('unable to                            
                    download video data: %s' %                                  
ERROR:    Failure downloading EVIL EMPIRE (feat. DD Osama)
                    error_to_compat_str(err))                                   
                      File                                                      
ERROR:    Error downloading! 
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 1061, in report_error                                 
                        self.trouble(f'{self._format_err                        
                    ("ERROR:", self.Styles.ERROR)}                              
                    {message}', *args, **kwargs)                                
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 980, in trouble                                       
                        self.to_stderr(message)                                 
                      File                                                      
                    "/root/.cache/pypoetry/virtualenvs/s                        
                    potdl-il7asoJj-py3.12/lib/python3.12                        
                    /site-packages/yt_dlp/YoutubeDL.py",                        
                     line 920, in to_stderr                                     
                        self.params['logger'].error(mess                        
                    age)                                                        
                      File                                                      
                    "/spotdl/providers/audio/base.py",                          
                    line 57, in error                                           
                        raise AudioProviderError(msg)                           
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: ERROR: unable to                                
                    download video data: HTTP Error 403:                        
                    Forbidden                                                   

                    The above exception was the direct                          
                    cause of the following exception:                           

                    Traceback (most recent call last):                          
                      File                                                      
                    "/spotdl/download/downloader.py",                           
                    line 661, in search_and_download                            
                        download_info =                                         
                    audio_downloader.get_download_metada                        
                    ta(                                                         
                                        ^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^                                     
                      File                                                      
                    "/spotdl/providers/audio/base.py",                          
                    line 375, in get_download_metadata                          
                        raise                                                   
                    AudioProviderError(f"YT-DLP download                        
                    error - {url}") from exception                              
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: YT-DLP download error -                         
                    https://music.youtube.com/watch?v=Tv                        
                    qIi7cf-H0                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:3434 in process_info   │                        
                    │                                  │                        
                    │   3431 │   │   │   │   │   if dl │                        
                    │   3432 │   │   │   │   │   │   # │                        
                    │        partially downloaded with │                        
                    │   3433 │   │   │   │   │   │   # │                        
                    │ ❱ 3434 │   │   │   │   │   │   s │                        
                    │   3435 │   │   │   │   │   │   i │                        
                    │   3436 │   │   │   │   │   else: │                        
                    │   3437 │   │   │   │   │   │   s │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:3155 in dl             │                        
                    │                                  │                        
                    │   3152 │   │   new_info = self._ │                        
                    │   3153 │   │   if new_info.get(' │                        
                    │   3154 │   │   │   new_info['htt │                        
                    │ ❱ 3155 │   │   return fd.downloa │                        
                    │   3156 │                         │                        
                    │   3157 │   def existing_file(sel │                        
                    │   3158 │   │   existing_files =  │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/dow │                        
                    │ nloader/common.py:455 in         │                        
                    │ download                         │                        
                    │                                  │                        
                    │   452 │   │   │   self.to_screen │                        
                    │   453 │   │   │   time.sleep(sle │                        
                    │   454 │   │                      │                        
                    │ ❱ 455 │   │   ret = self.real_do │                        
                    │   456 │   │   self._finish_multi │                        
                    │   457 │   │   return ret, True   │                        
                    │   458                            │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/dow │                        
                    │ nloader/http.py:369 in           │                        
                    │ real_download                    │                        
                    │                                  │                        
                    │   366 │   │                      │                        
                    │   367 │   │   for retry in Retry │                        
                    │   368 │   │   │   try:           │                        
                    │ ❱ 369 │   │   │   │   establish_ │                        
                    │   370 │   │   │   │   return dow │                        
                    │   371 │   │   │   except RetryDo │                        
                    │   372 │   │   │   │   retry.erro │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/dow │                        
                    │ nloader/http.py:120 in           │                        
                    │ establish_connection             │                        
                    │                                  │                        
                    │   117 │   │   │   │   request.he │                        
                    │       f'bytes={int(range_start)} │                        
                    │   118 │   │   │   # Establish co │                        
                    │   119 │   │   │   try:           │                        
                    │ ❱ 120 │   │   │   │   ctx.data = │                        
                    │   121 │   │   │   │   # When try │                        
                    │       checked                    │                        
                    │   122 │   │   │   │   # to match │                        
                    │       webservers                 │                        
                    │   123 │   │   │   │   # that don │                        
                    │       Content-Range              │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:4101 in urlopen        │                        
                    │                                  │                        
                    │   4098 │   │   clean_headers(req │                        
                    │   4099 │   │                     │                        
                    │   4100 │   │   try:              │                        
                    │ ❱ 4101 │   │   │   return self._ │                        
                    │   4102 │   │   except NoSupporti │                        
                    │   4103 │   │   │   for ue in e.u │                        
                    │   4104 │   │   │   │   # FIXME:  │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/net │                        
                    │ working/common.py:115 in send    │                        
                    │                                  │                        
                    │   112 │   │   │                  │                        
                    │   113 │   │   │   self._print_ve │                        
                    │   114 │   │   │   try:           │                        
                    │ ❱ 115 │   │   │   │   response = │                        
                    │   116 │   │   │   except Request │                        
                    │   117 │   │   │   │   raise      │                        
                    │   118 │   │   │   except Excepti │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/net │                        
                    │ working/_helper.py:204 in        │                        
                    │ wrapper                          │                        
                    │                                  │                        
                    │   201 │   @functools.wraps(func) │                        
                    │   202 │   def wrapper(self, *arg │                        
                    │   203 │   │   try:               │                        
                    │ ❱ 204 │   │   │   return func(se │                        
                    │   205 │   │   except Unsupported │                        
                    │   206 │   │   │   if e.handler i │                        
                    │   207 │   │   │   │   e.handler  │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/net │                        
                    │ working/common.py:326 in send    │                        
                    │                                  │                        
                    │   323 │   def send(self, request │                        
                    │   324 │   │   if not isinstance( │                        
                    │   325 │   │   │   raise TypeErro │                        
                    │ ❱ 326 │   │   return self._send( │                        
                    │   327 │                          │                        
                    │   328 │   @abc.abstractmethod    │                        
                    │   329 │   def _send(self, reques │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/net │                        
                    │ working/_requests.py:351 in      │                        
                    │ _send                            │                        
                    │                                  │                        
                    │   348 │   │   res = RequestsResp │                        
                    │   349 │   │                      │                        
                    │   350 │   │   if not 200 <= res. │                        
                    │ ❱ 351 │   │   │   raise HTTPErro │                        
                    │   352 │   │                      │                        
                    │   353 │   │   return res         │                        
                    │   354                            │                        
                    ╰──────────────────────────────────╯                        
                    HTTPError: HTTP Error 403: Forbidden                        

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /spotdl/providers/audio/base.py: │                        
                    │ 369 in get_download_metadata     │                        
                    │                                  │                        
                    │   366 │   │   """                │                        
                    │   367 │   │                      │                        
                    │   368 │   │   try:               │                        
                    │ ❱ 369 │   │   │   data = self.au │                        
                    │   370 │   │   │                  │                        
                    │   371 │   │   │   if data:       │                        
                    │   372 │   │   │   │   return dat │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:1583 in extract_info   │                        
                    │                                  │                        
                    │   1580 │   │   │   │   if self.p │                        
                    │   1581 │   │   │   │   │   raise │                        
                    │   1582 │   │   │   │   break     │                        
                    │ ❱ 1583 │   │   │   return self._ │                        
                    │        extra_info, process)      │                        
                    │   1584 │   │   else:             │                        
                    │   1585 │   │   │   extractors_re │                        
                    │        ['default'])              │                        
                    │   1586 │   │   │   self.report_e │                        
                    │        (%s)")} found for URL {ur │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:1594 in wrapper        │                        
                    │                                  │                        
                    │   1591 │   │   def wrapper(self, │                        
                    │   1592 │   │   │   while True:   │                        
                    │   1593 │   │   │   │   try:      │                        
                    │ ❱ 1594 │   │   │   │   │   retur │                        
                    │   1595 │   │   │   │   except (D │                        
                    │   1596 │   │   │   │   │   raise │                        
                    │   1597 │   │   │   │   except Re │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:1750 in __extract_info │                        
                    │                                  │                        
                    │   1747 │   │   self.add_default_ │                        
                    │   1748 │   │   if process:       │                        
                    │   1749 │   │   │   self._wait_fo │                        
                    │ ❱ 1750 │   │   │   return self.p │                        
                    │   1751 │   │   else:             │                        
                    │   1752 │   │   │   return ie_res │                        
                    │   1753                           │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:1809 in                │                        
                    │ process_ie_result                │                        
                    │                                  │                        
                    │   1806 │   │                     │                        
                    │   1807 │   │   if result_type == │                        
                    │   1808 │   │   │   self.add_extr │                        
                    │ ❱ 1809 │   │   │   ie_result = s │                        
                    │   1810 │   │   │   self._raise_p │                        
                    │   1811 │   │   │   additional_ur │                        
                    │   1812 │   │   │   if additional │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:2968 in                │                        
                    │ process_video_result             │                        
                    │                                  │                        
                    │   2965 │   │   │   │   │   })    │                        
                    │   2966 │   │   │   │   downloade │                        
                    │   2967 │   │   │   │   try:      │                        
                    │ ❱ 2968 │   │   │   │   │   self. │                        
                    │   2969 │   │   │   │   except Ma │                        
                    │   2970 │   │   │   │   │   max_d │                        
                    │   2971 │   │   │   │   self._rai │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:3443 in process_info   │                        
                    │                                  │                        
                    │   3440 │   │   │   │   info_dict │                        
                    │        os.path.dirname(os.path.a │                        
                    │   3441 │   │   │                 │                        
                    │   3442 │   │   │   except networ │                        
                    │ ❱ 3443 │   │   │   │   self.repo │                        
                    │        error_to_compat_str(err)) │                        
                    │   3444 │   │   │   │   return    │                        
                    │   3445 │   │   │   except OSErro │                        
                    │   3446 │   │   │   │   raise Una │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:1061 in report_error   │                        
                    │                                  │                        
                    │   1058 │   │   Do the same as tr │                        
                    │   1059 │   │   in red if stderr  │                        
                    │   1060 │   │   '''               │                        
                    │ ❱ 1061 │   │   self.trouble(f'{s │                        
                    │        *args, **kwargs)          │                        
                    │   1062 │                         │                        
                    │   1063 │   def write_debug(self, │                        
                    │   1064 │   │   '''Log debug mess │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:980 in trouble         │                        
                    │                                  │                        
                    │    977 │   │   @param is_error   │                        
                    │    978 │   │   """               │                        
                    │    979 │   │   if message is not │                        
                    │ ❱  980 │   │   │   self.to_stder │                        
                    │    981 │   │   if self.params.ge │                        
                    │    982 │   │   │   if tb is None │                        
                    │    983 │   │   │   │   if sys.ex │                        
                    │        block                     │                        
                    │                                  │                        
                    │ /root/.cache/pypoetry/virtualenv │                        
                    │ s/spotdl-il7asoJj-py3.12/lib/pyt │                        
                    │ hon3.12/site-packages/yt_dlp/You │                        
                    │ tubeDL.py:920 in to_stderr       │                        
                    │                                  │                        
                    │    917 │   │   """Print message  │                        
                    │    918 │   │   assert isinstance │                        
                    │    919 │   │   if self.params.ge │                        
                    │ ❱  920 │   │   │   self.params[' │                        
                    │    921 │   │   else:             │                        
                    │    922 │   │   │   self._write_s │                        
                    │        self._out_files.error, on │                        
                    │    923                           │                        
                    │                                  │                        
                    │ /spotdl/providers/audio/base.py: │                        
                    │ 57 in error                      │                        
                    │                                  │                        
                    │    54 │   │   YTDL uses this to  │                        
                    │    55 │   │   """                │                        
                    │    56 │   │                      │                        
                    │ ❱  57 │   │   raise AudioProvide │                        
                    │    58                            │                        
                    │    59                            │                        
                    │    60 ISRC_REGEX = re.compile(r" │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: ERROR: unable to                        
                    download video data: HTTP Error 403:                        
                    Forbidden                                                   

                    The above exception was the direct                          
                    cause of the following exception:                           

                    ╭─ Traceback (most recent call las─╮                        
                    │ /spotdl/download/downloader.py:6 │                        
                    │ 61 in search_and_download        │                        
                    │                                  │                        
                    │   658 │   │   │   │   display_pr │                        
                    │   659 │   │   │   )              │                        
                    │   660 │   │   │                  │                        
                    │ ❱ 661 │   │   │   download_info  │                        
                    │   662 │   │   │   │   download_u │                        
                    │   663 │   │   │   )              │                        
                    │   664                            │                        
                    │                                  │                        
                    │ /spotdl/providers/audio/base.py: │                        
                    │ 375 in get_download_metadata     │                        
                    │                                  │                        
                    │   372 │   │   │   │   return dat │                        
                    │   373 │   │   except Exception a │                        
                    │   374 │   │   │   logger.debug(e │                        
                    │ ❱ 375 │   │   │   raise AudioPro │                        
                    │   376 │   │                      │                        
                    │   377 │   │   raise AudioProvide │                        
                    │   378                            │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: YT-DLP download                         
                    error -                                                     
                    https://music.youtube.com/watch?v=Tv                        
                    qIi7cf-H0                                                   
INFO:     192.168.2.55:56340 - "POST /api/download/url?url=https:%2F%2Fopen.spotify.com%2Ftrack%2F6591oPA9nKFawSWOcQcL8A&client_id=4754ce5a-1d12-431d-968e-610399eac39d HTTP/1.1" 500 Internal Server Error

Other details

No response

xnetcat commented 3 months ago

Looks like the outdated yt-dlp verison is causing problems. new version soon

FaNt4zMa commented 3 months ago

Ok, I'll be waiting :) Thank you!! 🙏🙏🙏