ERROR asyncio_0 - Traceback (most recent call last): progress_handler.py:358
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1645, in wrapper
return func(self, *args, **kwargs)
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1801, in
__extract_info
return self.process_ie_result(ie_result, download, extra_info)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1860, in
process_ie_result
ie_result = self.process_video_result(ie_result, download=download)
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 3000, in
process_video_result
raise ExtractorError(
'Requested format is not available. Use --list-formats for a list of available formats',
expected=True, video_id=info_dict['id'], ie=info_dict['extractor'])
yt_dlp.utils.ExtractorError: CXQM5sGNA6E: Requested format is not available. Use --list-formats for a list of
available formats
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py", line 391,
in get_download_metadata
data = self.audio_handler.extract_info(url, download=download)
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1634, in
extract_info
return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1663, in wrapper
self.report_error(str(e), e.format_traceback())
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1103, in
report_error
self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 1022, in trouble
self.to_stderr(message)
~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py", line 956, in to_stderr
self.params['logger'].error(message)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py", line 57, in
error
raise AudioProviderError(msg)
spotdl.providers.audio.base.AudioProviderError: ERROR: CXQM5sGNA6E: Requested format is not available. Use
--list-formats for a list of available formats
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/download/downloader.py", line 678, in
search_and_download
download_info = audio_downloader.get_download_metadata(
download_url, download=True
)
File "/Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py", line 397,
in get_download_metadata
raise AudioProviderError(f"YT-DLP download error - {url}") from exception
spotdl.providers.audio.base.AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=CXQM5sGNA6E
╭──────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1645 in wrapper │
│ │
│ 1642 │ │ def wrapper(self, *args, **kwargs): │
│ 1643 │ │ │ while True: │
│ 1644 │ │ │ │ try: │
│ ❱ 1645 │ │ │ │ │ return func(self, *args, **kwargs) │
│ 1646 │ │ │ │ except (CookieLoadError, DownloadCancelled, LazyList.IndexError, │
│ PagedList.IndexError): │
│ 1647 │ │ │ │ │ raise │
│ 1648 │ │ │ │ except ReExtractInfo as e: │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1801 in __extract_info │
│ │
│ 1798 │ │ self.add_default_extra_info(ie_result, ie, url) │
│ 1799 │ │ if process: │
│ 1800 │ │ │ self._wait_for_video(ie_result) │
│ ❱ 1801 │ │ │ return self.process_ie_result(ie_result, download, extra_info) │
│ 1802 │ │ else: │
│ 1803 │ │ │ return ie_result │
│ 1804 │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1860 in process_ie_result │
│ │
│ 1857 │ │ │
│ 1858 │ │ if result_type == 'video': │
│ 1859 │ │ │ self.add_extra_info(ie_result, extra_info) │
│ ❱ 1860 │ │ │ ie_result = self.process_video_result(ie_result, download=download) │
│ 1861 │ │ │ self._raise_pending_errors(ie_result) │
│ 1862 │ │ │ additional_urls = (ie_result or {}).get('additional_urls') │
│ 1863 │ │ │ if additional_urls: │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:3000 in process_video_result │
│ │
│ 2997 │ │ │
│ 2998 │ │ if not formats_to_download: │
│ 2999 │ │ │ if not self.params.get('ignore_no_formats_error'): │
│ ❱ 3000 │ │ │ │ raise ExtractorError( │
│ 3001 │ │ │ │ │ 'Requested format is not available. Use --list-formats for a list of │
│ available formats', │
│ 3002 │ │ │ │ │ expected=True, video_id=info_dict['id'], ie=info_dict['extractor']) │
│ 3003 │ │ │ self.report_warning('Requested format is not available') │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ExtractorError: [youtube] CXQM5sGNA6E: Requested format is not available. Use --list-formats for a list of available
formats
During handling of the above exception, another exception occurred:
╭──────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py:391 in │
│ get_download_metadata │
│ │
│ 388 │ │ """ │
│ 389 │ │ │
│ 390 │ │ try: │
│ ❱ 391 │ │ │ data = self.audio_handler.extract_info(url, download=download) │
│ 392 │ │ │ │
│ 393 │ │ │ if data: │
│ 394 │ │ │ │ return data │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1634 in extract_info │
│ │
│ 1631 │ │ │ │ if self.params.get('break_on_existing', False): │
│ 1632 │ │ │ │ │ raise ExistingVideoReached │
│ 1633 │ │ │ │ break │
│ ❱ 1634 │ │ │ return self.__extract_info(url, self.get_info_extractor(key), download, │
│ extra_info, process) │
│ 1635 │ │ else: │
│ 1636 │ │ │ extractors_restricted = self.params.get('allowed_extractors') not in (None, │
│ ['default']) │
│ 1637 │ │ │ self.report_error(f'No suitable extractor{format_field(ie_key, None, " │
│ (%s)")} found for URL {url}', │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1663 in wrapper │
│ │
│ 1660 │ │ │ │ │ msg += '\nYou might want to use a VPN or a proxy server (with │
│ --proxy) to workaround.' │
│ 1661 │ │ │ │ │ self.report_error(msg) │
│ 1662 │ │ │ │ except ExtractorError as e: # An error we somewhat expected │
│ ❱ 1663 │ │ │ │ │ self.report_error(str(e), e.format_traceback()) │
│ 1664 │ │ │ │ except Exception as e: │
│ 1665 │ │ │ │ │ if self.params.get('ignoreerrors'): │
│ 1666 │ │ │ │ │ │ self.report_error(str(e), │
│ tb=encode_compat_str(traceback.format_exc())) │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1103 in report_error │
│ │
│ 1100 │ │ Do the same as trouble, but prefixes the message with 'ERROR:', colored │
│ 1101 │ │ in red if stderr is a tty file. │
│ 1102 │ │ """ │
│ ❱ 1103 │ │ self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', │
│ *args, **kwargs) │
│ 1104 │ │
│ 1105 │ def write_debug(self, message, only_once=False): │
│ 1106 │ │ """Log debug message or Print message to stderr""" │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:1022 in trouble │
│ │
│ 1019 │ │ @param is_error Whether to raise error according to ignorerrors │
│ 1020 │ │ """ │
│ 1021 │ │ if message is not None: │
│ ❱ 1022 │ │ │ self.to_stderr(message) │
│ 1023 │ │ if self.params.get('verbose'): │
│ 1024 │ │ │ if tb is None: │
│ 1025 │ │ │ │ if sys.exc_info()[0]: # if .trouble has been called from an except │
│ block │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/yt_dlp/YoutubeDL.py:956 in to_stderr │
│ │
│ 953 │ │ """Print message to stderr""" │
│ 954 │ │ assert isinstance(message, str) │
│ 955 │ │ if self.params.get('logger'): │
│ ❱ 956 │ │ │ self.params['logger'].error(message) │
│ 957 │ │ else: │
│ 958 │ │ │ self._write_string(f'{self._bidi_workaround(message)}\n', │
│ self._out_files.error, only_once=only_once) │
│ 959 │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py:57 in error │
│ │
│ 54 │ │ YTDL uses this to print errors. │
│ 55 │ │ """ │
│ 56 │ │ │
│ ❱ 57 │ │ raise AudioProviderError(msg) │
│ 58 │
│ 59 │
│ 60 ISRC_REGEX = re.compile(r"^[A-Z]{2}-?\w{3}-?\d{2}-?\d{5}$") │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
AudioProviderError: ERROR: [youtube] CXQM5sGNA6E: Requested format is not available. Use --list-formats for a list of
available formats
The above exception was the direct cause of the following exception:
╭──────────────────────────────────────── Traceback (most recent call last) ─────────────────────────────────────────╮
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/download/downloader.py:678 in │
│ search_and_download │
│ │
│ 675 │ │ │ │ display_progress_tracker.yt_dlp_progress_hook │
│ 676 │ │ │ ) │
│ 677 │ │ │ │
│ ❱ 678 │ │ │ download_info = audio_downloader.get_download_metadata( │
│ 679 │ │ │ │ download_url, download=True │
│ 680 │ │ │ ) │
│ 681 │
│ │
│ /Users/jose/.local/pipx/venvs/spotdl/lib/python3.13/site-packages/spotdl/providers/audio/base.py:397 in │
│ get_download_metadata │
│ │
│ 394 │ │ │ │ return data │
│ 395 │ │ except Exception as exception: │
│ 396 │ │ │ logger.debug(exception) │
│ ❱ 397 │ │ │ raise AudioProviderError(f"YT-DLP download error - {url}") from exception │
│ 398 │ │ │
│ 399 │ │ raise AudioProviderError(f"No metadata found for the provided url {url}") │
│ 400 │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=CXQM5sGNA6E
System OS
MacOS
Python Version
3.13 (CPython)
Install Source
Other
Install version / commit hash
v4.4.3
Expected Behavior vs Actual Behavior
Expected Behavior:
The song should download successfully and be saved with metadata.
Actual Behavior:
The download fails with a format availability error, preventing any songs from being downloaded.
Steps to reproduce - Ensure to include actual links!
v2025.09.26spotdl download "https://open.spotify.com/track/<TRACK_ID>"Traceback
Other details
Issue seems to be fixed by updating yt-dlp to
v2026.3.3