spotDL/spotify-downloader

spotdl segmentation fault under CPython 3.13 on MacOS 14.6.1 (M2 chip)

Closed this issue · 3 comments

System OS

MacOS

Python Version

3.13 (CPython)

Install Source

pip / PyPi

Install version / commit hash

4.2.10

Expected Behavior vs Actual Behavior

Running spotdl/python -m spotdl yields a segmentation fault:

$ python --version
Python 3.13.0
$ python -m spotdl
Segmentation fault: 11

Python 3.12 works as expected:

$ python --version
Python 3.12.3
$ python -m spotdl
usage: spotdl [-h] [--audio [{youtube,youtube-music,soundcloud,bandcamp,piped} ...]] [--lyrics [{genius,musixmatch,azlyrics,synced} ...]] [--genius-access-token GENIUS_TOKEN] [--config]
              [--search-query SEARCH_QUERY] [--dont-filter-results] [--album-type {album,single}] [--only-verified-results] [--user-auth] [--client-id CLIENT_ID]
              [--client-secret CLIENT_SECRET] [--auth-token AUTH_TOKEN] [--cache-path CACHE_PATH] [--no-cache] [--max-retries MAX_RETRIES] [--headless] [--use-cache-file]
              [--ffmpeg FFMPEG] [--threads THREADS] [--bitrate {auto,disable,8k,16k,24k,32k,40k,48k,64k,80k,96k,112k,128k,160k,192k,224k,256k,320k,0,1,2,3,4,5,6,7,8,9}]
              [--ffmpeg-args FFMPEG_ARGS] [--format {mp3,flac,ogg,opus,m4a,wav}] [--save-file SAVE_FILE] [--preload] [--output OUTPUT] [--m3u [M3U]] [--cookie-file COOKIE_FILE]
              [--overwrite {skip,metadata,force}] [--restrict [{ascii,strict,none}]] [--print-errors] [--save-errors SAVE_ERRORS] [--sponsor-block] [--archive ARCHIVE]
              [--playlist-numbering] [--playlist-retain-track-cover] [--scan-for-songs] [--fetch-albums] [--id3-separator ID3_SEPARATOR] [--ytm-data] [--add-unavailable] [--generate-lrc]
              [--force-update-metadata] [--sync-without-deleting] [--max-filename-length MAX_FILENAME_LENGTH] [--yt-dlp-args YT_DLP_ARGS]
              [--detect-formats [{mp3,flac,ogg,opus,m4a,wav} ...]] [--redownload] [--skip-album-art] [--ignore-albums [IGNORE_ALBUMS ...]] [--skip-explicit] [--proxy PROXY]
              [--create-skip-file] [--respect-skip-file] [--sync-remove-lrc] [--host HOST] [--port PORT] [--keep-alive] [--allowed-origins [ALLOWED_ORIGINS ...]] [--web-use-output-dir]
              [--keep-sessions] [--force-update-gui] [--web-gui-repo WEB_GUI_REPO] [--web-gui-location WEB_GUI_LOCATION] [--enable-tls] [--cert-file CERT_FILE] [--key-file KEY_FILE]
              [--ca-file CA_FILE] [--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,MATCH,DEBUG,NOTSET}] [--simple-tui] [--log-format LOG_FORMAT] [--download-ffmpeg]
              [--generate-config] [--check-for-updates] [--profile] [--version]
              [{download,save,web,sync,meta,url}] query [query ...]
spotdl: error: the following arguments are required: query

3.13 on Linux seems to work (tested via Docker):

$ docker run --rm python:3.13-slim bash -c 'pip install spotdl && python -m spotdl'
Collecting spotdl
  Downloading spotdl-4.2.10-py3-none-any.whl.metadata (8.4 kB)
Collecting beautifulsoup4<5.0.0,>=4.12.3 (from spotdl)
  Downloading beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
Collecting fastapi<0.104.0,>=0.103.0 (from spotdl)
  Downloading fastapi-0.103.2-py3-none-any.whl.metadata (24 kB)
Collecting mutagen<2.0.0,>=1.47.0 (from spotdl)
  Downloading mutagen-1.47.0-py3-none-any.whl.metadata (1.7 kB)
Collecting platformdirs<5.0.0,>=4.3.6 (from spotdl)
  Downloading platformdirs-4.3.6-py3-none-any.whl.metadata (11 kB)
Collecting pydantic<3.0.0,>=2.9.2 (from spotdl)
  Downloading pydantic-2.10.0-py3-none-any.whl.metadata (167 kB)
Collecting pykakasi<3.0.0,>=2.3.0 (from spotdl)
  Downloading pykakasi-2.3.0-py3-none-any.whl.metadata (5.9 kB)
Collecting python-slugify<9.0.0,>=8.0.4 (from python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Downloading python_slugify-8.0.4-py2.py3-none-any.whl.metadata (8.5 kB)
Collecting pytube<16.0.0,>=15.0.0 (from spotdl)
  Downloading pytube-15.0.0-py3-none-any.whl.metadata (5.0 kB)
Collecting rapidfuzz<4.0.0,>=3.10.1 (from spotdl)
  Downloading rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (11 kB)
Collecting requests<3.0.0,>=2.32.3 (from spotdl)
  Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting rich<14.0.0,>=13.9.4 (from spotdl)
  Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)
Collecting soundcloud-v2<2.0.0,>=1.6.0 (from spotdl)
  Downloading soundcloud_v2-1.6.0-py3-none-any.whl.metadata (3.6 kB)
Collecting spotipy<3.0.0,>=2.24.0 (from spotdl)
  Downloading spotipy-2.24.0-py3-none-any.whl.metadata (4.9 kB)
Collecting syncedlyrics<2.0.0,>=1.0.1 (from spotdl)
  Downloading syncedlyrics-1.0.1-py3-none-any.whl.metadata (3.6 kB)
Collecting uvicorn<0.24.0,>=0.23.2 (from spotdl)
  Downloading uvicorn-0.23.2-py3-none-any.whl.metadata (6.2 kB)
Collecting websockets<15.0,>=14.1 (from spotdl)
  Downloading websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (6.7 kB)
Collecting yt-dlp<2025.0.0,>=2024.11.18 (from spotdl)
  Downloading yt_dlp-2024.11.18-py3-none-any.whl.metadata (172 kB)
Collecting ytmusicapi<2.0.0,>=1.4.1 (from spotdl)
  Downloading ytmusicapi-1.8.2-py3-none-any.whl.metadata (5.5 kB)
Collecting soupsieve>1.2 (from beautifulsoup4<5.0.0,>=4.12.3->spotdl)
  Downloading soupsieve-2.6-py3-none-any.whl.metadata (4.6 kB)
Collecting anyio<4.0.0,>=3.7.1 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading anyio-3.7.1-py3-none-any.whl.metadata (4.7 kB)
Collecting starlette<0.28.0,>=0.27.0 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading starlette-0.27.0-py3-none-any.whl.metadata (5.8 kB)
Collecting typing-extensions>=4.5.0 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting annotated-types>=0.6.0 (from pydantic<3.0.0,>=2.9.2->spotdl)
  Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.27.0 (from pydantic<3.0.0,>=2.9.2->spotdl)
  Downloading pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (6.6 kB)
Collecting jaconv (from pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading jaconv-0.4.0.tar.gz (17 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Preparing metadata (pyproject.toml): finished with status 'done'
Collecting deprecated (from pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading Deprecated-1.2.15-py2.py3-none-any.whl.metadata (5.5 kB)
Collecting text-unidecode>=1.3 (from python-slugify<9.0.0,>=8.0.4->python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Downloading text_unidecode-1.3-py2.py3-none-any.whl.metadata (2.4 kB)
Collecting Unidecode>=1.1.1 (from python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Downloading Unidecode-1.3.8-py3-none-any.whl.metadata (13 kB)
Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.32.3->spotdl)
  Downloading charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (34 kB)
Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.32.3->spotdl)
  Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests<3.0.0,>=2.32.3->spotdl)
  Downloading urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests<3.0.0,>=2.32.3->spotdl)
  Downloading certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
Collecting markdown-it-py>=2.2.0 (from rich<14.0.0,>=13.9.4->spotdl)
  Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting pygments<3.0.0,>=2.13.0 (from rich<14.0.0,>=13.9.4->spotdl)
  Downloading pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB)
Collecting dacite>=1.8.1 (from soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Downloading dacite-1.8.1-py3-none-any.whl.metadata (15 kB)
Collecting python-dateutil>=2.8.2 (from soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting redis>=3.5.3 (from spotipy<3.0.0,>=2.24.0->spotdl)
  Downloading redis-5.2.0-py3-none-any.whl.metadata (9.1 kB)
Collecting click>=7.0 (from uvicorn<0.24.0,>=0.23.2->spotdl)
  Downloading click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting h11>=0.8 (from uvicorn<0.24.0,>=0.23.2->spotdl)
  Downloading h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Collecting sniffio>=1.1 (from anyio<4.0.0,>=3.7.1->fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich<14.0.0,>=13.9.4->spotdl)
  Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting six>=1.5 (from python-dateutil>=2.8.2->soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Downloading six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
Collecting wrapt<2,>=1.10 (from deprecated->pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading wrapt-1.16.0-py3-none-any.whl.metadata (6.6 kB)
Downloading spotdl-4.2.10-py3-none-any.whl (116 kB)
Downloading beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
Downloading fastapi-0.103.2-py3-none-any.whl (66 kB)
Downloading mutagen-1.47.0-py3-none-any.whl (194 kB)
Downloading platformdirs-4.3.6-py3-none-any.whl (18 kB)
Downloading pydantic-2.10.0-py3-none-any.whl (454 kB)
Downloading pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 21.3 MB/s eta 0:00:00
Downloading pykakasi-2.3.0-py3-none-any.whl (2.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 23.0 MB/s eta 0:00:00
Downloading python_slugify-8.0.4-py2.py3-none-any.whl (10 kB)
Downloading pytube-15.0.0-py3-none-any.whl (57 kB)
Downloading rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 19.7 MB/s eta 0:00:00
Downloading requests-2.32.3-py3-none-any.whl (64 kB)
Downloading rich-13.9.4-py3-none-any.whl (242 kB)
Downloading soundcloud_v2-1.6.0-py3-none-any.whl (20 kB)
Downloading spotipy-2.24.0-py3-none-any.whl (30 kB)
Downloading syncedlyrics-1.0.1-py3-none-any.whl (17 kB)
Downloading uvicorn-0.23.2-py3-none-any.whl (59 kB)
Downloading websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (169 kB)
Downloading yt_dlp-2024.11.18-py3-none-any.whl (3.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 23.1 MB/s eta 0:00:00
Downloading ytmusicapi-1.8.2-py3-none-any.whl (87 kB)
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading anyio-3.7.1-py3-none-any.whl (80 kB)
Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
Downloading charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (139 kB)
Downloading click-8.1.7-py3-none-any.whl (97 kB)
Downloading dacite-1.8.1-py3-none-any.whl (14 kB)
Downloading h11-0.14.0-py3-none-any.whl (58 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Downloading pygments-2.18.0-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 15.9 MB/s eta 0:00:00
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading redis-5.2.0-py3-none-any.whl (261 kB)
Downloading soupsieve-2.6-py3-none-any.whl (36 kB)
Downloading starlette-0.27.0-py3-none-any.whl (66 kB)
Downloading text_unidecode-1.3-py2.py3-none-any.whl (78 kB)
Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Downloading Unidecode-1.3.8-py3-none-any.whl (235 kB)
Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
Downloading Deprecated-1.2.15-py2.py3-none-any.whl (9.9 kB)
Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Downloading wrapt-1.16.0-py3-none-any.whl (23 kB)
Building wheels for collected packages: jaconv
  Building wheel for jaconv (pyproject.toml): started
  Building wheel for jaconv (pyproject.toml): finished with status 'done'
  Created wheel for jaconv: filename=jaconv-0.4.0-py3-none-any.whl size=18227 sha256=3f1614403509f493c9c220e39ab68dc8bb3b54826b598eeadfddce06e8443163
  Stored in directory: /root/.cache/pip/wheels/68/1e/ec/091544e17cb3d92e216dac6d07ccbc5b782c06b98d40829c0a
Successfully built jaconv
Installing collected packages: text-unidecode, jaconv, yt-dlp, wrapt, websockets, urllib3, Unidecode, typing-extensions, soupsieve, sniffio, six, redis, rapidfuzz, pytube, python-slugify, pygments, platformdirs, mutagen, mdurl, idna, h11, dacite, click, charset-normalizer, certifi, annotated-types, uvicorn, requests, python-dateutil, pydantic-core, markdown-it-py, deprecated, beautifulsoup4, anyio, ytmusicapi, syncedlyrics, starlette, spotipy, soundcloud-v2, rich, pykakasi, pydantic, fastapi, spotdl
Successfully installed Unidecode-1.3.8 annotated-types-0.7.0 anyio-3.7.1 beautifulsoup4-4.12.3 certifi-2024.8.30 charset-normalizer-3.4.0 click-8.1.7 dacite-1.8.1 deprecated-1.2.15 fastapi-0.103.2 h11-0.14.0 idna-3.10 jaconv-0.4.0 markdown-it-py-3.0.0 mdurl-0.1.2 mutagen-1.47.0 platformdirs-4.3.6 pydantic-2.10.0 pydantic-core-2.27.0 pygments-2.18.0 pykakasi-2.3.0 python-dateutil-2.9.0.post0 python-slugify-8.0.4 pytube-15.0.0 rapidfuzz-3.10.1 redis-5.2.0 requests-2.32.3 rich-13.9.4 six-1.16.0 sniffio-1.3.1 soundcloud-v2-1.6.0 soupsieve-2.6 spotdl-4.2.10 spotipy-2.24.0 starlette-0.27.0 syncedlyrics-1.0.1 text-unidecode-1.3 typing-extensions-4.12.2 urllib3-2.2.3 uvicorn-0.23.2 websockets-14.1 wrapt-1.16.0 yt-dlp-2024.11.18 ytmusicapi-1.8.2
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.

[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
usage: spotdl [-h]
              [--audio [{youtube,youtube-music,soundcloud,bandcamp,piped} ...]]
              [--lyrics [{genius,musixmatch,azlyrics,synced} ...]]
              [--genius-access-token GENIUS_TOKEN] [--config]
              [--search-query SEARCH_QUERY] [--dont-filter-results]
              [--album-type {album,single}] [--only-verified-results]
              [--user-auth] [--client-id CLIENT_ID]
              [--client-secret CLIENT_SECRET] [--auth-token AUTH_TOKEN]
              [--cache-path CACHE_PATH] [--no-cache]
              [--max-retries MAX_RETRIES] [--headless] [--use-cache-file]
              [--ffmpeg FFMPEG] [--threads THREADS]
              [--bitrate {auto,disable,8k,16k,24k,32k,40k,48k,64k,80k,96k,112k,128k,160k,192k,224k,256k,320k,0,1,2,3,4,5,6,7,8,9}]
              [--ffmpeg-args FFMPEG_ARGS]
              [--format {mp3,flac,ogg,opus,m4a,wav}] [--save-file SAVE_FILE]
              [--preload] [--output OUTPUT] [--m3u [M3U]]
              [--cookie-file COOKIE_FILE] [--overwrite {force,skip,metadata}]
              [--restrict [{strict,ascii,none}]] [--print-errors]
              [--save-errors SAVE_ERRORS] [--sponsor-block]
              [--archive ARCHIVE] [--playlist-numbering]
              [--playlist-retain-track-cover] [--scan-for-songs]
              [--fetch-albums] [--id3-separator ID3_SEPARATOR] [--ytm-data]
              [--add-unavailable] [--generate-lrc] [--force-update-metadata]
              [--sync-without-deleting]
              [--max-filename-length MAX_FILENAME_LENGTH]
              [--yt-dlp-args YT_DLP_ARGS]
              [--detect-formats [{mp3,flac,ogg,opus,m4a,wav} ...]]
              [--redownload] [--skip-album-art]
              [--ignore-albums [IGNORE_ALBUMS ...]] [--skip-explicit]
              [--proxy PROXY] [--create-skip-file] [--respect-skip-file]
              [--sync-remove-lrc] [--host HOST] [--port PORT] [--keep-alive]
              [--allowed-origins [ALLOWED_ORIGINS ...]] [--web-use-output-dir]
              [--keep-sessions] [--force-update-gui]
              [--web-gui-repo WEB_GUI_REPO]
              [--web-gui-location WEB_GUI_LOCATION] [--enable-tls]
              [--cert-file CERT_FILE] [--key-file KEY_FILE]
              [--ca-file CA_FILE]
              [--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,MATCH,DEBUG,NOTSET}]
              [--simple-tui] [--log-format LOG_FORMAT] [--download-ffmpeg]
              [--generate-config] [--check-for-updates] [--profile]
              [--version]
              [{download,save,web,sync,meta,url}] query [query ...]
spotdl: error: the following arguments are required: query

Steps to reproduce - Ensure to include actual links!

  1. Get CPython 3.13; e.g. using rye: rye toolchain fetch 3.13
  2. Make sure to use python 3.13 (e.g. rye pin 3.13, and confirm with python --version)
  3. Install spotdl, e.g. rye add spotdl
  4. Run spotdl/python -m spotdl

Traceback

Segmentation fault: 11

Other details

M2 Mac
MacOS version: 14.6.1

Oddly, Python 3.13 installed via Homebrew seems to work:

$ /opt/homebrew/bin/python3.13 -m venv .venv
$ . .venv/bin/ac
activate       activate.csh   activate.fish
$ . .venv/bin/activate
(.venv) $ pip install spotdl
Collecting spotdl
  Downloading spotdl-4.2.10-py3-none-any.whl.metadata (8.4 kB)
Collecting beautifulsoup4<5.0.0,>=4.12.3 (from spotdl)
  Using cached beautifulsoup4-4.12.3-py3-none-any.whl.metadata (3.8 kB)
Collecting fastapi<0.104.0,>=0.103.0 (from spotdl)
  Downloading fastapi-0.103.2-py3-none-any.whl.metadata (24 kB)
Collecting mutagen<2.0.0,>=1.47.0 (from spotdl)
  Using cached mutagen-1.47.0-py3-none-any.whl.metadata (1.7 kB)
Collecting platformdirs<5.0.0,>=4.3.6 (from spotdl)
  Using cached platformdirs-4.3.6-py3-none-any.whl.metadata (11 kB)
Collecting pydantic<3.0.0,>=2.9.2 (from spotdl)
  Downloading pydantic-2.10.0-py3-none-any.whl.metadata (167 kB)
Collecting pykakasi<3.0.0,>=2.3.0 (from spotdl)
  Downloading pykakasi-2.3.0-py3-none-any.whl.metadata (5.9 kB)
Collecting python-slugify<9.0.0,>=8.0.4 (from python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Downloading python_slugify-8.0.4-py2.py3-none-any.whl.metadata (8.5 kB)
Collecting pytube<16.0.0,>=15.0.0 (from spotdl)
  Downloading pytube-15.0.0-py3-none-any.whl.metadata (5.0 kB)
Collecting rapidfuzz<4.0.0,>=3.10.1 (from spotdl)
  Downloading rapidfuzz-3.10.1-cp313-cp313-macosx_11_0_arm64.whl.metadata (11 kB)
Collecting requests<3.0.0,>=2.32.3 (from spotdl)
  Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting rich<14.0.0,>=13.9.4 (from spotdl)
  Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB)
Collecting soundcloud-v2<2.0.0,>=1.6.0 (from spotdl)
  Downloading soundcloud_v2-1.6.0-py3-none-any.whl.metadata (3.6 kB)
Collecting spotipy<3.0.0,>=2.24.0 (from spotdl)
  Downloading spotipy-2.24.0-py3-none-any.whl.metadata (4.9 kB)
Collecting syncedlyrics<2.0.0,>=1.0.1 (from spotdl)
  Downloading syncedlyrics-1.0.1-py3-none-any.whl.metadata (3.6 kB)
Collecting uvicorn<0.24.0,>=0.23.2 (from spotdl)
  Downloading uvicorn-0.23.2-py3-none-any.whl.metadata (6.2 kB)
Collecting websockets<15.0,>=14.1 (from spotdl)
  Downloading websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl.metadata (6.7 kB)
Collecting yt-dlp<2025.0.0,>=2024.11.18 (from spotdl)
  Downloading yt_dlp-2024.11.18-py3-none-any.whl.metadata (172 kB)
Collecting ytmusicapi<2.0.0,>=1.4.1 (from spotdl)
  Downloading ytmusicapi-1.8.2-py3-none-any.whl.metadata (5.5 kB)
Collecting soupsieve>1.2 (from beautifulsoup4<5.0.0,>=4.12.3->spotdl)
  Downloading soupsieve-2.6-py3-none-any.whl.metadata (4.6 kB)
Collecting anyio<4.0.0,>=3.7.1 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading anyio-3.7.1-py3-none-any.whl.metadata (4.7 kB)
Collecting starlette<0.28.0,>=0.27.0 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Downloading starlette-0.27.0-py3-none-any.whl.metadata (5.8 kB)
Collecting typing-extensions>=4.5.0 (from fastapi<0.104.0,>=0.103.0->spotdl)
  Using cached typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB)
Collecting annotated-types>=0.6.0 (from pydantic<3.0.0,>=2.9.2->spotdl)
  Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.27.0 (from pydantic<3.0.0,>=2.9.2->spotdl)
  Downloading pydantic_core-2.27.0-cp313-cp313-macosx_11_0_arm64.whl.metadata (6.6 kB)
Collecting jaconv (from pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading jaconv-0.4.0.tar.gz (17 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting deprecated (from pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading Deprecated-1.2.15-py2.py3-none-any.whl.metadata (5.5 kB)
Collecting text-unidecode>=1.3 (from python-slugify<9.0.0,>=8.0.4->python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Using cached text_unidecode-1.3-py2.py3-none-any.whl.metadata (2.4 kB)
Collecting Unidecode>=1.1.1 (from python-slugify[unidecode]<9.0.0,>=8.0.4->spotdl)
  Using cached Unidecode-1.3.8-py3-none-any.whl.metadata (13 kB)
Collecting charset-normalizer<4,>=2 (from requests<3.0.0,>=2.32.3->spotdl)
  Downloading charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl.metadata (34 kB)
Collecting idna<4,>=2.5 (from requests<3.0.0,>=2.32.3->spotdl)
  Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests<3.0.0,>=2.32.3->spotdl)
  Using cached urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests<3.0.0,>=2.32.3->spotdl)
  Using cached certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
Collecting markdown-it-py>=2.2.0 (from rich<14.0.0,>=13.9.4->spotdl)
  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting pygments<3.0.0,>=2.13.0 (from rich<14.0.0,>=13.9.4->spotdl)
  Using cached pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB)
Collecting dacite>=1.8.1 (from soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Downloading dacite-1.8.1-py3-none-any.whl.metadata (15 kB)
Collecting python-dateutil>=2.8.2 (from soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting redis>=3.5.3 (from spotipy<3.0.0,>=2.24.0->spotdl)
  Downloading redis-5.2.0-py3-none-any.whl.metadata (9.1 kB)
Collecting click>=7.0 (from uvicorn<0.24.0,>=0.23.2->spotdl)
  Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting h11>=0.8 (from uvicorn<0.24.0,>=0.23.2->spotdl)
  Using cached h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Collecting sniffio>=1.1 (from anyio<4.0.0,>=3.7.1->fastapi<0.104.0,>=0.103.0->spotdl)
  Using cached sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich<14.0.0,>=13.9.4->spotdl)
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Collecting six>=1.5 (from python-dateutil>=2.8.2->soundcloud-v2<2.0.0,>=1.6.0->spotdl)
  Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
Collecting wrapt<2,>=1.10 (from deprecated->pykakasi<3.0.0,>=2.3.0->spotdl)
  Downloading wrapt-1.16.0-py3-none-any.whl.metadata (6.6 kB)
Downloading spotdl-4.2.10-py3-none-any.whl (116 kB)
Using cached beautifulsoup4-4.12.3-py3-none-any.whl (147 kB)
Downloading fastapi-0.103.2-py3-none-any.whl (66 kB)
Using cached mutagen-1.47.0-py3-none-any.whl (194 kB)
Using cached platformdirs-4.3.6-py3-none-any.whl (18 kB)
Downloading pydantic-2.10.0-py3-none-any.whl (454 kB)
Downloading pydantic_core-2.27.0-cp313-cp313-macosx_11_0_arm64.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 6.8 MB/s eta 0:00:00
Downloading pykakasi-2.3.0-py3-none-any.whl (2.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 21.6 MB/s eta 0:00:00
Downloading python_slugify-8.0.4-py2.py3-none-any.whl (10 kB)
Downloading pytube-15.0.0-py3-none-any.whl (57 kB)
Downloading rapidfuzz-3.10.1-cp313-cp313-macosx_11_0_arm64.whl (1.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 23.8 MB/s eta 0:00:00
Using cached requests-2.32.3-py3-none-any.whl (64 kB)
Downloading rich-13.9.4-py3-none-any.whl (242 kB)
Downloading soundcloud_v2-1.6.0-py3-none-any.whl (20 kB)
Downloading spotipy-2.24.0-py3-none-any.whl (30 kB)
Downloading syncedlyrics-1.0.1-py3-none-any.whl (17 kB)
Downloading uvicorn-0.23.2-py3-none-any.whl (59 kB)
Downloading websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl (159 kB)
Downloading yt_dlp-2024.11.18-py3-none-any.whl (3.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 16.0 MB/s eta 0:00:00
Downloading ytmusicapi-1.8.2-py3-none-any.whl (87 kB)
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading anyio-3.7.1-py3-none-any.whl (80 kB)
Using cached certifi-2024.8.30-py3-none-any.whl (167 kB)
Downloading charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl (119 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Downloading dacite-1.8.1-py3-none-any.whl (14 kB)
Using cached h11-0.14.0-py3-none-any.whl (58 kB)
Using cached idna-3.10-py3-none-any.whl (70 kB)
Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Using cached pygments-2.18.0-py3-none-any.whl (1.2 MB)
Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading redis-5.2.0-py3-none-any.whl (261 kB)
Downloading soupsieve-2.6-py3-none-any.whl (36 kB)
Downloading starlette-0.27.0-py3-none-any.whl (66 kB)
Using cached text_unidecode-1.3-py2.py3-none-any.whl (78 kB)
Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Using cached Unidecode-1.3.8-py3-none-any.whl (235 kB)
Using cached urllib3-2.2.3-py3-none-any.whl (126 kB)
Downloading Deprecated-1.2.15-py2.py3-none-any.whl (9.9 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Downloading wrapt-1.16.0-py3-none-any.whl (23 kB)
Building wheels for collected packages: jaconv
  Building wheel for jaconv (pyproject.toml) ... done
  Created wheel for jaconv: filename=jaconv-0.4.0-py3-none-any.whl size=18227 sha256=9e611ec1b4cebc629823a90b43cdf57d32f4e43ef7197a77802494640d6b13fb
  Stored in directory: /Users/alexis/Library/Caches/pip/wheels/68/1e/ec/091544e17cb3d92e216dac6d07ccbc5b782c06b98d40829c0a
Successfully built jaconv
Installing collected packages: text-unidecode, jaconv, yt-dlp, wrapt, websockets, urllib3, Unidecode, typing-extensions, soupsieve, sniffio, six, redis, rapidfuzz, pytube, python-slugify, pygments, platformdirs, mutagen, mdurl, idna, h11, dacite, click, charset-normalizer, certifi, annotated-types, uvicorn, requests, python-dateutil, pydantic-core, markdown-it-py, deprecated, beautifulsoup4, anyio, ytmusicapi, syncedlyrics, starlette, spotipy, soundcloud-v2, rich, pykakasi, pydantic, fastapi, spotdl
Successfully installed Unidecode-1.3.8 annotated-types-0.7.0 anyio-3.7.1 beautifulsoup4-4.12.3 certifi-2024.8.30 charset-normalizer-3.4.0 click-8.1.7 dacite-1.8.1 deprecated-1.2.15 fastapi-0.103.2 h11-0.14.0 idna-3.10 jaconv-0.4.0 markdown-it-py-3.0.0 mdurl-0.1.2 mutagen-1.47.0 platformdirs-4.3.6 pydantic-2.10.0 pydantic-core-2.27.0 pygments-2.18.0 pykakasi-2.3.0 python-dateutil-2.9.0.post0 python-slugify-8.0.4 pytube-15.0.0 rapidfuzz-3.10.1 redis-5.2.0 requests-2.32.3 rich-13.9.4 six-1.16.0 sniffio-1.3.1 soundcloud-v2-1.6.0 soupsieve-2.6 spotdl-4.2.10 spotipy-2.24.0 starlette-0.27.0 syncedlyrics-1.0.1 text-unidecode-1.3 typing-extensions-4.12.2 urllib3-2.2.3 uvicorn-0.23.2 websockets-14.1 wrapt-1.16.0 yt-dlp-2024.11.18 ytmusicapi-1.8.2

[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
(.venv) $ spotdl
usage: spotdl [-h] [--audio [{youtube,youtube-music,soundcloud,bandcamp,piped} ...]] [--lyrics [{genius,musixmatch,azlyrics,synced} ...]] [--genius-access-token GENIUS_TOKEN] [--config]
              [--search-query SEARCH_QUERY] [--dont-filter-results] [--album-type {album,single}] [--only-verified-results] [--user-auth] [--client-id CLIENT_ID]
              [--client-secret CLIENT_SECRET] [--auth-token AUTH_TOKEN] [--cache-path CACHE_PATH] [--no-cache] [--max-retries MAX_RETRIES] [--headless] [--use-cache-file]
              [--ffmpeg FFMPEG] [--threads THREADS] [--bitrate {auto,disable,8k,16k,24k,32k,40k,48k,64k,80k,96k,112k,128k,160k,192k,224k,256k,320k,0,1,2,3,4,5,6,7,8,9}]
              [--ffmpeg-args FFMPEG_ARGS] [--format {mp3,flac,ogg,opus,m4a,wav}] [--save-file SAVE_FILE] [--preload] [--output OUTPUT] [--m3u [M3U]] [--cookie-file COOKIE_FILE]
              [--overwrite {force,metadata,skip}] [--restrict [{none,strict,ascii}]] [--print-errors] [--save-errors SAVE_ERRORS] [--sponsor-block] [--archive ARCHIVE]
              [--playlist-numbering] [--playlist-retain-track-cover] [--scan-for-songs] [--fetch-albums] [--id3-separator ID3_SEPARATOR] [--ytm-data] [--add-unavailable] [--generate-lrc]
              [--force-update-metadata] [--sync-without-deleting] [--max-filename-length MAX_FILENAME_LENGTH] [--yt-dlp-args YT_DLP_ARGS]
              [--detect-formats [{mp3,flac,ogg,opus,m4a,wav} ...]] [--redownload] [--skip-album-art] [--ignore-albums [IGNORE_ALBUMS ...]] [--skip-explicit] [--proxy PROXY]
              [--create-skip-file] [--respect-skip-file] [--sync-remove-lrc] [--host HOST] [--port PORT] [--keep-alive] [--allowed-origins [ALLOWED_ORIGINS ...]] [--web-use-output-dir]
              [--keep-sessions] [--force-update-gui] [--web-gui-repo WEB_GUI_REPO] [--web-gui-location WEB_GUI_LOCATION] [--enable-tls] [--cert-file CERT_FILE] [--key-file KEY_FILE]
              [--ca-file CA_FILE] [--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,MATCH,DEBUG,NOTSET}] [--simple-tui] [--log-format LOG_FORMAT] [--download-ffmpeg]
              [--generate-config] [--check-for-updates] [--profile] [--version]
              [{download,save,web,sync,meta,url}] query [query ...]
spotdl: error: the following arguments are required: query
(.venv) $ python --version
Python 3.13.0

I wonder if the issues boils down the the CPython builds provided by https://github.com/indygreg/python-build-standalone (which is what rye uses) while I assume Homebrew uses official builds.

Edit:

Homebrew's Python is:

3.13.0 experimental free-threading build (main, Oct 16 2024, 08:24:33) [Clang 18.1.8 ]

While rye/indygreg's is:

3.13.0 (main, Oct  7 2024, 05:02:14) [Clang 15.0.0 (clang-1500.3.9.4)]

Edit 2:

segfault happens regardless of whether 3.13 is running with or witthout the gil:

 $ python -X gil=0 -m spotdl
Segmentation fault: 11
$ python -X gil=1 -m spotdl
Segmentation fault: 11
$ python -X faulthandler -m spotdl
Fatal Python error: Segmentation fault

Current thread 0x00000001f83e8f40 (most recent call first):
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1316 in create_module
  File "<frozen importlib._bootstrap>", line 813 in module_from_spec
  File "<frozen importlib._bootstrap>", line 921 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/pydantic_core/__init__.py", line 6 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/pydantic/main.py", line 29 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "<frozen importlib._bootstrap>", line 1387 in _gcd_import
  File "/Users/alexis/.rye/py/cpython@3.13.0/lib/python3.13t/importlib/__init__.py", line 88 in import_module
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/pydantic/__init__.py", line 418 in __getattr__
  File "<frozen importlib._bootstrap>", line 1412 in _handle_fromlist
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/exceptions.py", line 3 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/_compat.py", line 20 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/openapi/models.py", line 4 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/params.py", line 5 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1415 in _handle_fromlist
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/routing.py", line 22 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1415 in _handle_fromlist
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/applications.py", line 16 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/fastapi/__init__.py", line 7 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/spotdl/console/web.py", line 12 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/spotdl/console/entry_point.py", line 17 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/spotdl/console/__init__.py", line 5 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "/private/var/folders/9t/vvzpk1ws65s3hxp59zl1twv80000gn/T/tmp.MR4a1soAW9/wat/.venv/lib/python3.13t/site-packages/spotdl/__init__.py", line 13 in <module>
  File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 1022 in exec_module
  File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
  File "<frozen runpy>", line 112 in _get_module_details
  File "<frozen runpy>", line 148 in _get_module_details
  File "<frozen runpy>", line 189 in _run_module_as_main
Segmentation fault: 11

This is not a spotdl issue:

$ python
Python 3.13.0 experimental free-threading build (main, Oct 16 2024, 08:24:33) [Clang 18.1.8 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pydantic_core
Segmentation fault: 11