diff --git a/README.md b/README.md index aae2621..258683f 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,108 @@ # slsk-batchdl -A batch downloader for Soulseek using Soulseek.NET. Accepts CSV files, Spotify & YouTube urls. +A batch downloader for Soulseek using Soulseek.NET. Accepts CSV files and Spotify or YouTube urls. - Download tracks from a csv file: ``` -slsk-batchdl --csv test.csv --artist-col "Artist Name(s)" --track-col "Track Name" --length-col "Duration (ms)" --time-unit ms +slsk-batchdl -i test.csv ``` -You can omit the column names if they are named predictably (like in this example). Use `--print-tracks` before downloading to check if everything has been parsed correctly. +Use `--print tracks` before downloading to check if everything has been parsed correctly. The names of the columns should be: Artist, Title, Album, Length. Only the title column is required, but any additional info improves search. -- Download spotify likes while skipping existing songs, and create an m3u file: +- Download spotify likes while skipping existing songs and create an m3u file: ``` -slsk-batchdl --spotify likes --m3u --skip-existing +slsk-batchdl -i spotify-likes --m3u --skip-existing ``` You might need to provide an id and secret when using spotify (e.g when downloading a private playlist), which you can get here https://developer.spotify.com/dashboard/applications. Create an app, then select it and add `http://localhost:48721/callback` as a redirect url in the settings. - Download the first 10 songs of a youtube playlist: ``` -slsk-batchdl -n 10 --youtube "https://www.youtube.com/playlist?list=PLI_eFW8NAFzYAXZ5DrU6E6mQ_XfhaLBUX" +slsk-batchdl -n 10 -i "https://www.youtube.com/playlist?list=PLI_eFW8NAFzYAXZ5DrU6E6mQ_XfhaLBUX" ``` To include unavailable videos, you will need to provide an api key with `--youtube-key`. Get it here https://console.cloud.google.com. Create a new project, click "Enable Api" and search for "youtube data", then follow the prompts. -- Search & download a specific song, preferring flac and wav files: +- Search & download a specific song, preferring high quality: ``` -slsk-batchdl "title=MC MENTAL @ HIS BEST,duration=242" --pref-format "flac,wav" +slsk-batchdl -i "title=MC MENTAL @ HIS BEST,length=242" --pref-format "flac,wav" +``` + +- Find music by an artist which isn't in your library: +``` +slsk-batchdl -i "artist=MC MENTAL" -a --print tracks --skip-existing --music-dir "path\to\music" ``` ### Options: ``` -Usage: slsk-batchdl [OPTIONS] +Usage: slsk-batchdl -i [OPTIONS] + + -i --input is one of the following: + + Spotify playlist url or "spotify-likes": Download a spotify + playlist or your liked songs. --spotify-id and + --spotify-secret may be required in addition. + + Youtube playlist url: Download songs from a youtube playlist. + Provide a --youtube-key to include unavailabe uploads. + + Path to a local CSV file: Use a csv file containing track + info to download. The names of the columns should be Artist, + Title, Album, Length. Only the title column is required, but + any extra info improves search results. + + Search string for the track, album, or artist to search for: + Can either be any typical search text like "{artist} - {title}" + or a comma-separated list like + "title=Song Name,artist=Artist Name,length=215". Allowed + properties are; title, artist, album, length (in seconds). + Options: --user Soulseek username --pass Soulseek password - --spotify Download a spotify playlist ("likes" for liked music) - --spotify-id Your spotify client id (required for private playlists) - --spotify-secret Your spotify client secret (required for private playlists) + --spotify Input is a spotify url (override automatic parsing) + --spotify-id spotify client ID (required for private playlists) + --spotify-secret spotify client secret (required for private playlists) - --youtube Get tracks from a YouTube playlist - --youtube-key Provide an API key to include unavailable uploads + --youtube Input is a youtube url (override automatic parsing) + --youtube-key Youtube data API key - --csv Use a csv file containing track info to download - --artist-col Artist or uploader column name - --title-col Title or track name column name - --album-col Track album column name (optional for more results) - --length-col Track duration column name (optional for better accuracy) - --time-unit Time unit in track duration column, ms or s (default: s) - --yt-desc-col YT description column name (optional, use with --yt-parse) - --yt-id-col Youtube video ID column (optional, use with --yt-parse) - --yt-parse Enable if you have a csv file of YouTube video titles and - channel names; attempt to parse them into title and artist + --csv Input is a path to a local CSV (override automatic parsing) + --time-format Time format in Length column of the csv file (e.g h:m:s.ms + for durations like 1:04:35.123). Default: s + --yt-parse Enable if the csv file contains YouTube video titles and + channel names; attempt to parse them into proper title and + artist. If the the csv contains an "ID", "URL", or + "Description" column then they will be used for parsing too - -s --single Search & download a specific track. is a simple - search string, or a comma-separated list of properties: - "title=Song Name,artist=Artist Name,length=215" + --string Input is a search string (override automatic parsing) + -a --aggregate Instead of downloading a single track matching the search + string, find and download all distinct songs associated with + the provided artist, album, or track title. Search string must + be a list of properties. + --min-users-aggregate Minimum number of users sharing a track before it is + downloaded in aggregate mode. Setting it to 2 or more will + significantly reduce false positives, but may introduce false + negatives. Default: 1 - -p --path Place downloaded files in custom path - -f --folder Custom folder name (default: provided playlist name) - -n --number Download at most n tracks of a playlist + -p --path Download folder + -f --folder Subfolder name (default: playlist/csv name) + -n --number Download the first n tracks of a playlist -o --offset Skip a specified number of tracks --reverse Download tracks in reverse order - --remove-from-playlist Remove downloaded tracks from playlist (spotify only) + --remove-from-playlist Remove downloaded tracks from playlist (for spotify only) --name-format Name format for downloaded tracks, e.g "{artist} - {title}" --m3u Create an m3u8 playlist file + --format Accepted file format(s), comma-separated + --length-tol Length tolerance in seconds (default: 3) + --min-bitrate Minimum file bitrate + --max-bitrate Maximum file bitrate + --max-samplerate Maximum file sample rate + --strict-title Only download if filename contains track title + --strict-artist Only download if filepath contains track artist + --banned-users Comma-separated list of users to ignore + --danger-words Comma-separated list of words that must appear in either + both search result and track title or in neither of the + two. Case-insensitive. (default:"mix, edit, dj, cover") --pref-format Preferred file format(s), comma-separated (default: mp3) --pref-length-tol Preferred length tolerance in seconds (default: 3) --pref-min-bitrate Preferred minimum bitrate (default: 200) @@ -70,59 +110,54 @@ Options: --pref-max-samplerate Preferred maximum sample rate (default: 96000) --pref-strict-title Prefer download if filename contains track title --pref-strict-artist Prefer download if filepath contains track artist - --pref-danger-words Comma-separated list of words that must appear in either - both search result and track title, or in neither of the - two, case-insensitive (default:"mix, edit, dj, cover") - --nec-format Necessary file format(s), comma-separated - --nec-length-tol Necessary length tolerance in seconds (default: 3) - --nec-min-bitrate Necessary minimum bitrate - --nec-max-bitrate Necessary maximum bitrate - --nec-max-samplerate Necessary maximum sample rate - --nec-strict-title Only download if filename contains track title - --nec-strict-artist Only download if filepath contains track artist - --nec-danger-words Comma-separated list of words that must appear in either - both search result and track title, or in neither of the - two. Case-insensitive. (default:"mix, edit, dj, cover") + --pref-banned-users Comma-separated list of users to deprioritize + --pref-danger-words Comma-separated list of words that should appear in either + both search result and track title or in neither of the + two. - --skip-existing Skip if a track matching nec. conditions is found in the + -s --skip-existing Skip if a track matching file conditions is found in the output folder or your music library (if provided) - --skip-mode "name": Use only filenames to check if a track exists - "name-precise": Use filenames and check nec-cond (default) - "tag": Use tags (slower) - "tag-precise": Use tags and check all nec. cond. (slower) + --skip-mode name: Use only filenames to check if a track exists + name-precise (default): Use filenames and check conditions + tag: Use file tags (slower) + tag-precise: Use file tags and check file conditions --music-dir Specify to skip downloading tracks found in a music library Use with --skip-existing --skip-not-found Skip searching for tracks that weren't found on Soulseek - last run + during the last run. --remove-ft Remove "ft." or "feat." and everything after from the track names before searching. - --album-search Also search for album name before filtering for track name. - Sometimes helps to find more, but slower. - --artist-search Also search for artist, before filtering for track name. - Sometimes helps to find more, but slower. - --no-artist-search Also perform a search without artist name if nothing was - found. Only use if the source is imprecise - and the provided "artist" is possibly wrong (yt, sc) - --no-regex-search Also perform a search with a regex pattern removed from the - titles and artist names + --remove-brackets Remove text in square brackets from track names before + searching. + --no-artist-search Perform a search without artist name if nothing was + found. Only use for sources such as youtube or soundcloud + where the "artist" could just be an uploader. + --artist-search Also try to find track by searching for the artist only + --no-regex-search Also perform a search without a regex pattern --no-diacr-search Also perform a search without diacritics - -d --desperate Equivalent to enabling all additional searches + -d --desperate Equivalent to enabling all additional searches. Slower. --yt-dlp Use yt-dlp to download tracks that weren't found on Soulseek. yt-dlp must be available from the command line. - --search-timeout Maximal search time (ms, default: 6000) - --max-stale-time Maximal download time with no progress (ms, default: 50000) + --config Specify config file location + --search-timeout Max search time in ms (default: 6000) + --max-stale-time Max download time without progress in ms (default: 50000) --concurrent-processes Max concurrent searches & downloads (default: 2) - --display "single" (default): Show transfer state and percentage. - "double": Also show a progress bar. "simple": simple + --display