Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found).
This report presents the forensic synthetic code analysis of spotDL/spotify-downloader, a Python project with 25,414 GitHub stars. SynthScan v2.0 examined 47,392 lines of code across 139 source files, recording 254 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 7.3 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 254 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spotdl/__init__.py | 20 | __all__ = ["Spotdl", "console_entry_point", "__version__"] | CODE |
| LOW | spotdl/__init__.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/types/options.py | 11 | __all__ = [ | CODE |
| LOW | spotdl/types/album.py | 11 | __all__ = ["Album", "AlbumError"] | CODE |
| LOW | spotdl/types/artist.py | 13 | __all__ = ["Artist", "ArtistError"] | CODE |
| LOW | spotdl/types/result.py | 10 | __all__ = ["Result"] | CODE |
| LOW | spotdl/types/playlist.py | 12 | __all__ = ["Playlist", "PlaylistError"] | CODE |
| LOW | spotdl/types/playlist.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/types/saved.py | 11 | __all__ = ["Saved", "SavedError"] | CODE |
| LOW | spotdl/types/song.py | 13 | __all__ = ["Song", "SongList", "SongError"] | CODE |
| LOW | spotdl/web/api.py | 33 | __all__ = [ | CODE |
| LOW | spotdl/web/routes.py | 27 | __all__ = ["router"] | CODE |
| LOW | spotdl/providers/lyrics/genius.py | 13 | __all__ = ["Genius"] | CODE |
| LOW | spotdl/providers/lyrics/musixmatch.py | 14 | __all__ = ["MusixMatch"] | CODE |
| LOW | spotdl/providers/lyrics/synced.py | 12 | __all__ = ["Synced"] | CODE |
| LOW | spotdl/providers/lyrics/__init__.py | 11 | __all__ = ["AzLyrics", "Genius", "MusixMatch", "Synced", "LyricsProvider"] | CODE |
| LOW | spotdl/providers/lyrics/base.py | 11 | __all__ = ["LyricsProvider"] | CODE |
| LOW | spotdl/providers/lyrics/base.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/lyrics/azlyrics.py | 13 | __all__ = ["AzLyrics"] | CODE |
| LOW | spotdl/providers/lyrics/azlyrics.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/bandcamp.py | 14 | __all__ = ["BandCamp"] | CODE |
| LOW | spotdl/providers/audio/bandcamp.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/youtube.py | 12 | __all__ = ["YouTube"] | CODE |
| LOW | spotdl/providers/audio/sliderkz.py | 14 | __all__ = ["SliderKZ"] | CODE |
| LOW | spotdl/providers/audio/sliderkz.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/__init__.py | 17 | __all__ = [ | CODE |
| LOW | spotdl/providers/audio/soundcloud.py | 16 | __all__ = ["SoundCloud"] | CODE |
| LOW | spotdl/providers/audio/soundcloud.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/ytmusic.py | 14 | __all__ = ["YouTubeMusic"] | CODE |
| LOW | spotdl/providers/audio/ytmusic.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/base.py | 23 | __all__ = ["AudioProviderError", "AudioProvider", "ISRC_REGEX", "YTDLLogger"] | CODE |
| LOW | spotdl/providers/audio/base.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/providers/audio/piped.py | 23 | __all__ = ["Piped"] | CODE |
| LOW | spotdl/providers/audio/piped.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/logging.py | 16 | __all__ = [ | CODE |
| LOW | spotdl/utils/console.py | 15 | __all__ = [ | CODE |
| LOW | spotdl/utils/formatter.py | 23 | __all__ = [ | CODE |
| LOW | spotdl/utils/formatter.py | 73 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/web.py | 23 | __all__ = [ | CODE |
| LOW | spotdl/utils/config.py | 22 | __all__ = [ | CODE |
| LOW | spotdl/utils/config.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/metadata.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/metadata.py | 51 | __all__ = [ | CODE |
| LOW | spotdl/utils/downloader.py | 7 | __all__ = ["check_ytmusic_connection"] | CODE |
| LOW | spotdl/utils/arguments.py | 17 | __all__ = ["OPERATIONS", "SmartFormatter", "parse_arguments"] | CODE |
| LOW | spotdl/utils/ffmpeg.py | 21 | __all__ = [ | CODE |
| LOW | spotdl/utils/matching.py | 20 | __all__ = [ | CODE |
| LOW | spotdl/utils/matching.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/m3u.py | 12 | __all__ = [ | CODE |
| LOW | spotdl/utils/m3u.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/static.py | 9 | __all__ = [ | CODE |
| LOW | spotdl/utils/archive.py | 8 | __all__ = ["Archive"] | CODE |
| LOW | spotdl/utils/search.py | 26 | __all__ = [ | CODE |
| LOW | spotdl/utils/search.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/deno.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/deno.py | 21 | __all__ = [ | CODE |
| LOW | spotdl/utils/github.py | 15 | __all__ = [ | CODE |
| LOW | spotdl/utils/spotify.py | 23 | __all__ = [ | CODE |
| LOW | spotdl/utils/spotify.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | spotdl/utils/lrc.py | 16 | logger = logging.getLogger(__name__) | CODE |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | spotdl/providers/lyrics/genius.py | 0 | returns the results for the given song. ### arguments - name: the name of the song. - artists: the artists of the song. | STRING |
| HIGH | spotdl/providers/lyrics/musixmatch.py | 0 | returns the results for the given song. ### arguments - name: the name of the song. - artists: the artists of the song. | STRING |
| HIGH | spotdl/providers/lyrics/synced.py | 0 | returns the results for the given song. ### arguments - name: the name of the song. - artists: the artists of the song. | STRING |
| HIGH | spotdl/providers/lyrics/base.py | 0 | returns the results for the given song. ### arguments - name: the name of the song. - artists: the artists of the song. | STRING |
| HIGH | spotdl/providers/lyrics/azlyrics.py | 0 | returns the results for the given song. ### arguments - name: the name of the song. - artists: the artists of the song. | STRING |
| HIGH | spotdl/providers/lyrics/genius.py | 0 | extracts the lyrics from the given url. ### arguments - url: the url to extract the lyrics from. - kwargs: additional ar | STRING |
| HIGH | spotdl/providers/lyrics/musixmatch.py | 0 | extracts the lyrics from the given url. ### arguments - url: the url to extract the lyrics from. - kwargs: additional ar | STRING |
| HIGH | spotdl/providers/lyrics/synced.py | 0 | extracts the lyrics from the given url. ### arguments - url: the url to extract the lyrics from. - kwargs: additional ar | STRING |
| HIGH | spotdl/providers/lyrics/base.py | 0 | extracts the lyrics from the given url. ### arguments - url: the url to extract the lyrics from. - kwargs: additional ar | STRING |
| HIGH | spotdl/providers/lyrics/azlyrics.py | 0 | extracts the lyrics from the given url. ### arguments - url: the url to extract the lyrics from. - kwargs: additional ar | STRING |
| HIGH | spotdl/providers/audio/bandcamp.py | 0 | get results from slider.kz ### arguments - search_term: the search term to search for. - args: unused. - kwargs: unused. | STRING |
| HIGH | spotdl/providers/audio/sliderkz.py | 0 | get results from slider.kz ### arguments - search_term: the search term to search for. - args: unused. - kwargs: unused. | STRING |
| HIGH | spotdl/providers/audio/soundcloud.py | 0 | get results from slider.kz ### arguments - search_term: the search term to search for. - args: unused. - kwargs: unused. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 76 | def fake_create_subprocess_exec(*args, stdout=None, stderr=None, **kwargs): | CODE |
| LOW | tests/types/test_song.py | 112 | # def test_song_from_search_term(): | COMMENT |
| LOW | tests/types/test_song.py | 197 | def test_song_from_data_dump_wrong_type(): | CODE |
| LOW | tests/types/test_playlist.py | 30 | def test_playlist_wrong_initget_results(): | CODE |
| LOW | tests/types/test_playlist.py | 61 | def test_playlist_from_string(): | CODE |
| LOW | tests/providers/lyrics/test_musixmatch.py | 7 | # def test_get_musixmatch_lyrics(): | COMMENT |
| LOW | tests/providers/audio/test_youtube.py | 84 | def test_yt_get_results_normalizes_null_metadata(mocker): | CODE |
| LOW | tests/providers/audio/test_ytmusic.py | 54 | def test_ytm_get_results_retries_with_new_client(mocker): | CODE |
| LOW | tests/utils/test_logging.py | 8 | def test_spotdl_formatter_format(): | CODE |
| LOW | tests/utils/test_github.py | 35 | def test_check_for_updates_fail(monkeypatch): | CODE |
| LOW | tests/utils/test_formatter.py | 104 | def test_create_file_name_restrict(): | CODE |
| LOW⚡ | tests/utils/test_config.py | 51 | def test_get_config_not_created(setup): | CODE |
| LOW⚡ | tests/utils/test_config.py | 60 | def test_use_official_api_default(): | CODE |
| LOW⚡ | tests/utils/test_config.py | 70 | def test_use_official_api_from_config(): | CODE |
| LOW | tests/utils/test_config.py | 84 | def test_use_official_api_argument_overrides_config(): | CODE |
| LOW | tests/utils/test_ffmpeg.py | 29 | def test_is_not_ffmpeg_installed(monkeypatch): | STRING |
| LOW | tests/utils/test_ffmpeg.py | 42 | def test_get_none_ffmpeg_path(monkeypatch): | STRING |
| LOW | tests/utils/test_ffmpeg.py | 55 | def test_get_none_ffmpeg_version(monkeypatch): | STRING |
| LOW | tests/utils/test_ffmpeg.py | 69 | def test_get_none_local_ffmpeg(monkeypatch): | STRING |
| LOW | tests/utils/test_downloader.py | 4 | def test_check_ytmusic_connection_suppresses_empty_search_log(mocker): | CODE |
| LOW | tests/utils/test_deno.py | 33 | def test_is_not_deno_installed(monkeypatch): | CODE |
| LOW | tests/utils/test_deno.py | 84 | def test_get_local_deno_yt_dlp_options(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_deno.py | 104 | def test_get_local_deno_yt_dlp_options_ignores_non_executable(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_deno.py | 118 | def test_get_local_deno_yt_dlp_options_ignores_missing_local(monkeypatch): | CODE |
| LOW | tests/utils/test_deno.py | 128 | def test_user_js_runtime_overrides_local_deno(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_deno.py | 147 | def test_audio_provider_uses_local_deno_yt_dlp_options(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_deno.py | 173 | def test_piped_uses_local_deno_yt_dlp_options(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_deno.py | 239 | def test_download_deno_unsupported_platform(monkeypatch): | CODE |
| LOW | tests/utils/test_deno.py | 251 | def test_download_deno_invalid_archive(monkeypatch, tmp_path): | CODE |
| LOW | tests/utils/test_spotify.py | 45 | def test_init_uses_free_client_by_default(monkeypatch): | CODE |
| LOW | tests/utils/test_spotify.py | 94 | def test_init_uses_official_client_when_requested(monkeypatch): | CODE |
| LOW | tests/utils/test_spotify.py | 144 | def test_init_uses_official_client_for_official_api_only_options(monkeypatch, caplog): | CODE |
| LOW | tests/utils/test_arguments.py | 11 | def test_parse_use_official_api(monkeypatch): | CODE |
| LOW | spotdl/web/routes.py | 152 | async def handle_get_client_downloads(datastar_signals: ReadSignals): | CODE |
| LOW | spotdl/web/routes.py | 182 | async def handle_get_client_settings(datastar_signals: ReadSignals): | CODE |
| LOW | spotdl/web/routes.py | 206 | async def handle_post_client_settings(datastar_signals: ReadSignals): | CODE |
| LOW | spotdl/web/routes.py | 280 | async def handle_post_client_download(datastar_signals: ReadSignals): | STRING |
| LOW | spotdl/web/routes.py | 347 | async def handle_get_client_component_settings(datastar_signals: ReadSignals): | STRING |
| LOW | spotdl/web/routes.py | 387 | async def handle_client_component_search_input_rotating_placeholder(): | CODE |
| LOW | spotdl/utils/search.py | 463 | def get_user_followed_artists() -> List[Artist]: | CODE |
| LOW | spotdl/utils/search.py | 573 | def get_song_from_file_metadata(file: Path, id3_separator: str = "/") -> Optional[Song]: | CODE |
| LOW | spotdl/utils/deno.py | 120 | def get_local_deno_yt_dlp_options() -> Dict[str, Dict[str, Dict[str, str]]]: | CODE |
| LOW | spotdl/utils/spotify.py | 152 | def _init_official_spotify_client(**kwargs) -> _OfficialSpotifyClient: | CODE |
| LOW | spotdl/utils/spotify.py | 160 | def _init_free_spotify_client(**kwargs) -> Any: | CODE |
| LOW | spotdl/download/progress_handler.py | 444 | def notify_conversion_complete(self, status="Embedding metadata") -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spotdl/web/routes.py | 92 | # Create a new client if not found | COMMENT |
| MEDIUM | spotdl/utils/logging.py | 187 | # Create a rich handler | COMMENT |
| MEDIUM | spotdl/utils/config.py | 62 | # Define the new, correct XDG config path (~/.config/spotdl) | COMMENT |
| MEDIUM | spotdl/utils/config.py | 65 | # Define the old path (~/.spotdl) for backward compatibility | COMMENT |
| MEDIUM | spotdl/utils/metadata.py | 299 | # Create the image object for the file type | COMMENT |
| MEDIUM | spotdl/utils/m3u.py | 145 | # Create a single m3u file for specified song list name | COMMENT |
| MEDIUM | spotdl/download/downloader.py | 473 | # Create the output file path | COMMENT |
| MEDIUM | spotdl/download/downloader.py | 490 | # Create the temp folder path | COMMENT |
| MEDIUM | spotdl/download/downloader.py | 650 | # Create the output directory if it doesn't exist | COMMENT |
| MEDIUM | spotdl/console/save.py | 88 | # The following function calls blocking code, which would block whole event loop. | COMMENT |
| MEDIUM | spotdl/console/web.py | 58 | # Create the event loop | COMMENT |
| MEDIUM | spotdl/console/url.py | 58 | # The following function calls blocking code, which would block whole event loop. | COMMENT |
| MEDIUM | spotdl/console/meta.py | 36 | # Create a list of all songs from all paths in query | COMMENT |
| MEDIUM | spotdl/console/meta.py | 152 | # The following function calls blocking code, which would block whole event loop. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spotdl/types/playlist.py | 85 | # Add tracks to the list | COMMENT |
| LOW | spotdl/providers/audio/sliderkz.py | 60 | # Check if the response is valid | COMMENT |
| LOW | spotdl/providers/audio/base.py | 254 | # Check if any of the search results is in the | COMMENT |
| LOW | spotdl/utils/formatter.py | 351 | # Check if the file name length is greater than the limit | COMMENT |
| LOW | spotdl/utils/web.py | 128 | # Add the connection to the list of connections | COMMENT |
| LOW | spotdl/utils/metadata.py | 357 | # Check if the lyrics are in lrc format | COMMENT |
| LOW | spotdl/utils/metadata.py | 613 | # Check if the lyrics are in lrc format | COMMENT |
| LOW | spotdl/utils/downloader.py | 19 | # Check if we are getting results from YouTube Music | COMMENT |
| LOW | spotdl/utils/ffmpeg.py | 115 | # Check if ffmpeg is installed | COMMENT |
| LOW | spotdl/utils/ffmpeg.py | 139 | # Check if ffmpeg is installed | COMMENT |
| LOW | spotdl/utils/ffmpeg.py | 320 | # Check if bitrate is an integer | COMMENT |
| LOW | spotdl/utils/matching.py | 489 | # # Check if the main artist is simlar | COMMENT |
| LOW | spotdl/utils/matching.py | 494 | # Check if other song artists are in the result name | COMMENT |
| LOW | spotdl/utils/matching.py | 735 | # Check if result contains forbidden words | COMMENT |
| LOW | spotdl/utils/m3u.py | 110 | # Check if the file name ends with .m3u or .m3u8 | COMMENT |
| LOW | spotdl/utils/github.py | 165 | # Check if the given url is a url to a GitHub repo. If it is, tell the | COMMENT |
| LOW | spotdl/download/downloader.py | 441 | # Check if song has name/artist and url/song_id | COMMENT |
| LOW | spotdl/download/downloader.py | 493 | # Check if there is an already existing song file, with the same spotify URL in its | COMMENT |
| LOW | spotdl/console/entry_point.py | 64 | # Check if sys.argv contains an action | COMMENT |
| LOW | spotdl/console/entry_point.py | 91 | # Check if ffmpeg is installed | COMMENT |
| LOW | spotdl/console/entry_point.py | 98 | # Check if we might be blocked by YouTube Music without stopping downloads. | COMMENT |
| LOW | spotdl/console/entry_point.py | 123 | # Check if save file is present and if it's valid | COMMENT |
| LOW | spotdl/console/entry_point.py | 130 | # Check if the user is logged in | COMMENT |
| LOW | spotdl/console/meta.py | 58 | # Check if song has metadata | COMMENT |
| LOW | spotdl/console/meta.py | 122 | # Check if the song has lyric | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_main.py | 3 | CODE | |
| LOW | tests/types/test_song.py | 3 | CODE | |
| LOW | tests/utils/test_logging.py | 3 | CODE | |
| LOW | tests/utils/test_archive.py | 1 | CODE | |
| LOW | tests/utils/test_formatter.py | 3 | CODE | |
| LOW | tests/utils/test_config.py | 7 | CODE | |
| LOW | tests/utils/test_m3u.py | 1 | CODE | |
| LOW | tests/utils/test_ffmpeg.py | 12 | CODE | |
| LOW | tests/utils/test_deno.py | 10 | CODE | |
| LOW | spotdl/__init__.py | 12 | CODE | |
| LOW | spotdl/__init__.py | 13 | CODE | |
| LOW | spotdl/__main__.py | 5 | CODE | |
| LOW | spotdl/web/utils.py | 7 | CODE | |
| LOW | spotdl/providers/lyrics/__init__.py | 5 | CODE | |
| LOW | spotdl/providers/lyrics/__init__.py | 6 | CODE | |
| LOW | spotdl/providers/lyrics/__init__.py | 7 | CODE | |
| LOW | spotdl/providers/lyrics/__init__.py | 8 | CODE | |
| LOW | spotdl/providers/lyrics/__init__.py | 9 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 5 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 6 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 6 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 6 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 6 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 12 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 13 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 14 | CODE | |
| LOW | spotdl/providers/audio/__init__.py | 15 | CODE | |
| LOW | spotdl/utils/logging.py | 9 | CODE | |
| LOW | spotdl/console/__init__.py | 5 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 61 | except Exception: | CODE |
| LOW | spotdl/__init__.py | 142 | except Exception as exc: | CODE |
| LOW | spotdl/web/api.py | 203 | except Exception as exception: | CODE |
| LOW | spotdl/web/routes.py | 338 | except Exception as exception: | STRING |
| LOW | spotdl/providers/lyrics/base.py | 82 | except Exception as exc: | CODE |
| LOW | spotdl/providers/lyrics/base.py | 120 | except Exception as exc: | CODE |
| LOW | spotdl/providers/audio/bandcamp.py | 188 | except Exception as exc: | CODE |
| LOW | spotdl/providers/audio/sliderkz.py | 66 | except Exception as exc: | CODE |
| LOW | spotdl/providers/audio/base.py | 398 | except Exception as exception: | CODE |
| LOW | spotdl/providers/audio/piped.py | 203 | except Exception as exception: | CODE |
| LOW | spotdl/utils/metadata.py | 195 | except Exception as exc: | CODE |
| LOW | spotdl/utils/metadata.py | 296 | except Exception: | CODE |
| LOW | spotdl/utils/metadata.py | 609 | except Exception: | CODE |
| LOW | spotdl/utils/search.py | 113 | except Exception as exc: | CODE |
| LOW | spotdl/utils/lrc.py | 35 | except Exception: | CODE |
| LOW | spotdl/download/downloader.py | 468 | except Exception as e: | CODE |
| LOW | spotdl/download/downloader.py | 580 | except Exception as exc: | CODE |
| LOW | spotdl/download/downloader.py | 837 | except Exception as exception: | CODE |
| LOW | spotdl/console/save.py | 64 | except Exception as exception: | CODE |
| LOW | spotdl/console/save.py | 81 | except Exception as exception: | CODE |
| LOW | spotdl/console/entry_point.py | 164 | except Exception as exc: | CODE |
| LOW | spotdl/console/url.py | 51 | except Exception as exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spotdl/providers/audio/base.py | 154 | CODE | |
| LOW | spotdl/utils/metadata.py | 277 | CODE | |
| LOW | spotdl/utils/metadata.py | 384 | CODE | |
| LOW | spotdl/utils/ffmpeg.py | 251 | CODE | |
| LOW | spotdl/utils/m3u.py | 21 | CODE | |
| LOW | spotdl/utils/search.py | 119 | CODE | |
| LOW | spotdl/download/downloader.py | 98 | CODE | |
| LOW | spotdl/download/downloader.py | 425 | CODE | |
| LOW | spotdl/console/sync.py | 21 | CODE | |
| LOW | spotdl/console/meta.py | 22 | CODE | |
| LOW | spotdl/console/meta.py | 54 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_matching.py | 261 | ), | COMMENT |
| LOW | tests/types/test_song.py | 121 | # assert song.album_name == "Ropes" | COMMENT |
| LOW | tests/providers/lyrics/test_azlyrics.py | 1 | # import pytest | COMMENT |
| LOW | tests/providers/lyrics/test_musixmatch.py | 1 | # import pytest | COMMENT |
| LOW | spotdl/web/api.py | 41 | router = APIRouter() | COMMENT |
| LOW | spotdl/web/api.py | 61 | # if ( | COMMENT |
| LOW | spotdl/providers/lyrics/azlyrics.py | 161 | js_code = None | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 46 | CODE | |
| LOW | spotdl/utils/formatter.py | 122 | CODE | |
| LOW | spotdl/utils/spotify.py | 209 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/types/test_song.py | 163 | "download_url": null, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spotdl/web/static/assets/tailwindcss/browser@4.js | 7 | "use strict";(()=>{var e=10;function t(t,i){let a=i?.from?{file:i.from,code:t}:null;"\ufeff"===t[0]&&(t=" "+t.slice(1)); | CODE |