Автоматический загрузчик Soulseek, созданный с помощью Soulseek.NET. Принимает файлы CSV, а также URL-адреса Spotify и YouTube.
Поддерживает загрузку плейлистов и альбомов; выбирает лучшие файлы в соответствии с настроенными пользователем условиями файлов и эвристикой.
Посмотрите примеры использования.
Usage: sldl <input> [OPTIONS]
<input> A url, search string, or path to a local CSV file.
Run --help "input" to view the accepted inputs.
Can also be passed with -i, --input <input>
--user <username> Soulseek username
--pass <password> Soulseek password
-p, --path <path> Download directory
--input-type <type> [csv|youtube|spotify|bandcamp|string|list]
--name-format <format> Name format for downloaded tracks. See --help name-format
-n, --number <maxtracks> Download the first n tracks of a playlist
-o, --offset <offset> Skip a specified number of tracks
-r, --reverse Download tracks in reverse order
-c, --config <path> Set config file location. Set to 'none' to ignore config
--profile <names> Configuration profile(s) to use. See --help ""config"".
--concurrent-downloads <num> Max concurrent downloads (default: 2)
--write-playlist Create an m3u playlist file in the output directory
--playlist-path <path> Override default path for m3u playlist file
--no-skip-existing Do not skip downloaded tracks
--no-write-index Do not create a file indexing all downloaded tracks
--index-path <path> Override default path for sldl index
--skip-check-cond Check file conditions when skipping existing files
--skip-check-pref-cond Check preferred conditions when skipping existing files
--skip-music-dir <path> Also skip downloading tracks found in a music library by
comparing filenames. Not 100% reliable.
--skip-not-found Skip searching for tracks that weren't found on Soulseek
during the last run.
--listen-port <port> Port for incoming connections (default: 49998)
--on-complete <command> Run a command whenever a file is downloaded.
Available placeholders: {path} (local save path), {title},
{artist},{album},{uri},{length},{failure-reason},{state}.
Prepend a state number to only run in specific cases:
1:, 2:, 3:, 4: for the Downloaded, Failed, Exists, and
NotFoundLastTime states respectively.
E.g: '1:<cmd>' will only run the command if the file is
downloaded successfully. Prepend 's:' to use the system
shell to execute the command.
--print <option> Print tracks or search results instead of downloading:
'tracks': Print all tracks to be downloaded
'tracks-full': Print extended information about all tracks
'results': Print search results satisfying file conditions
'results-full': Print search results including full paths.
--no-progress Disable progress bars/percentages, only simple printing
--debug Print extra debug info
--fast-search Begin downloading as soon as a file satisfying the preferred
conditions is found. Only for normal download mode.
--remove-ft Remove 'feat.' and everything after before searching
--no-remove-special-chars Do not remove special characters before searching
--remove-brackets Remove square brackets and their contents before searching
--regex <regex> Remove a regexp from all track titles and artist names.
Optionally specify a replacement regex after a semicolon.
Add 'T:', 'A:' or 'L:' at the start to only apply this to
the track title, artist, or album respectively.
--artist-maybe-wrong Performs an additional search without the artist name.
Useful for sources like SoundCloud where the "artist"
could just be an uploader. Note that when downloading a
YouTube playlist via url, this option is set automatically
on a per-track basis, so it is best kept off in that case.
-d, --desperate Tries harder to find the desired track by searching for the
artist/album/title only, then filtering. (slower search)
--fails-to-downrank <num> Number of fails to downrank a user's shares (default: 1)
--fails-to-ignore <num> Number of fails to ban/ignore a user's shares (default: 2)
--yt-dlp Use yt-dlp to download tracks that weren't found on
Soulseek. yt-dlp must be available from the command line.
--yt-dlp-argument <str> The command line arguments when running yt-dlp. Default:
"{id}" -f bestaudio/best -cix -o "{savepath}.%(ext)s"
Available vars are: {id}, {savedir}, {savepath} (w/o ext).
Note that -x causes yt-dlp to download webms in case ffmpeg
is unavailable.
--search-timeout <ms> Max search time in ms (default: 6000)
--max-stale-time <ms> Max download time without progress in ms (default: 50000)
--searches-per-time <num> Max searches per time interval. Higher values may cause
30-minute bans, see --help "search". (default: 34)
--searches-renew-time <sec> Controls how often available searches are replenished.
See --help "search". (default: 220)
--spotify-id <id> Spotify client ID
--spotify-secret <secret> Spotify client secret
--spotify-token <token> Spotify access token
--spotify-refresh <token> Spotify refresh token
--remove-from-source Remove downloaded tracks from source playlist
--youtube-key <key> Youtube data API key
--get-deleted Attempt to retrieve titles of deleted videos from wayback
machine. Requires yt-dlp.
--deleted-only Only retrieve & download deleted music.
--artist-col Artist column name
--title-col Track title column name
--album-col Album column name
--length-col Track length column name
--album-track-count-col Album track count column name (sets --album-track-count)
--yt-desc-col Youtube description column (improves --yt-parse)
--yt-id-col Youtube video id column (improves --yt-parse)
--time-format <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 contains YouTube video titles and channel
names; attempt to parse them into title and artist names.
--remove-from-source Remove downloaded tracks from source CSV file
--format <formats> Accepted file format(s), comma-separated, without periods
--length-tol <sec> Length tolerance in seconds
--min-bitrate <rate> Minimum file bitrate
--max-bitrate <rate> Maximum file bitrate
--min-samplerate <rate> Minimum file sample rate
--max-samplerate <rate> Maximum file sample rate
--min-bitdepth <depth> Minimum bit depth
--max-bitdepth <depth> Maximum bit depth
--strict-title File name must contain title
--strict-artist File path must contain artist name
--strict-album File path must contain album name
--banned-users <list> Comma-separated list of users to ignore
--pref-format <formats> Preferred file format(s), comma-separated (default: mp3)
--pref-length-tol <sec> Preferred length tolerance in seconds (default: 3)
--pref-min-bitrate <rate> Preferred minimum bitrate (default: 200)
--pref-max-bitrate <rate> Preferred maximum bitrate (default: 2500)
--pref-min-samplerate <rate> Preferred minimum sample rate
--pref-max-samplerate <rate> Preferred maximum sample rate (default: 48000)
--pref-min-bitdepth <depth> Preferred minimum bit depth
--pref-max-bitdepth <depth> Preferred maximum bit depth
--pref-banned-users <list> Comma-separated list of users to downrank
--strict-conditions Skip files with missing properties instead of accepting by
default; if --min-bitrate is set, ignores any files with
unknown bitrate.
-a, --album Album download mode: Download a folder
-t, --interactive Interactive mode, allows to select the folder and images
--album-track-count <num> Specify the exact number of tracks in the album. Add a + or
- for inequalities, e.g '5+' for five or more tracks.
--album-art <option> Retrieve additional images after downloading the album:
'default': No additional images
'largest': Download from the folder with the largest image
'most': Download from the folder containing the most images
--album-art-only Only download album art for the provided album
--no-browse-folder Do not automatically browse user shares to get all files in
in the folder
--failed-album-path Path to move all album files to when one of the items from
the directory fails to download. Set to 'delete' to delete
the files instead. Set to 'disable' keep it where it is.
Default: {configured output dir}/failed
-g, --aggregate Aggregate download mode: Find and download all distinct
songs associated with the provided artist, album, or title.
--aggregate-length-tol <tol> Max length tolerance in seconds to consider two tracks or
albums equal. (Default: 3)
--min-shares-aggregate <num> Minimum number of shares of a track or album for it to be
downloaded in aggregate mode. (Default: 2)
--relax-filtering Slightly relax file filtering in aggregate mode to include
more results
Также принимаются акронимы флагов из двух и --трех слов, например --twf. Если опция содержит слово «max», то m должна быть в верхнем регистре. «битрейт», «самплерат» и «битовая глубина» следует рассматривать как два отдельных слова, например --Mbr для --max-bitrate.
Флаги можно явно отключить, установив для них значение false, например, «--interactive false».
Тип ввода обычно определяется автоматически. Чтобы принудительно указать определенный тип ввода, установите --input-type [spotify|youtube|csv|string|bandcamp|list]. Доступны следующие типы ввода:
Путь к локальному файлу CSV: используйте файл CSV, содержащий информацию о дорожках песен для загрузки. Имена столбцов должны быть «Исполнитель», «Название», «Альбом», «Длина», хотя обычно обнаруживаются и альтернативные имена. Требуется только столбец названия или альбома, но дополнительная информация может улучшить рейтинг результатов поиска. Каждая строка, не содержащая текста столбца заголовка, будет рассматриваться как загрузка альбома.
URL-адрес плейлиста: загрузка песен из плейлиста YouTube. Метод по умолчанию для получения плейлистов не всегда возвращает все видео, особенно те, которые недоступны. Чтобы получить все заголовки видео, вы можете использовать официальный API, предоставив ключ с --youtube-key. Загрузите его здесь https://console.cloud.google.com. Создайте новый проект, нажмите «Включить API» и найдите «данные YouTube», затем следуйте подсказкам.
URL-адрес плейлиста/альбома или «лайки Spotify». Загрузите плейлист, альбом или понравившиеся песни Spotify. Учетные данные необходимы при загрузке частного плейлиста или понравившейся музыки.
Создайте приложение Spotify по адресу https://developer.spotify.com/dashboard/applications с URL-адресом перенаправления http://localhost:48721/callback. Получите идентификатор и секрет приложения из созданной информационной панели приложения.
Запустите sldl с полученными учетными данными и авторизованным действием, чтобы запустить процесс входа в приложение Spotify:
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 -n 1 --print-tracks
sldl попытается открыть браузер автоматически, но вернется к регистрации URL-адреса потока входа в систему для вывода. После завершения процесса входа в систему sldl выведет токен, обновит токен и завершит выполнение текущей команды.
Чтобы пропустить необходимость входа в систему каждый раз, когда используется sldl, sldl можно предоставить токен и токен обновления (подсказка: сохраните эту информацию в файле конфигурации, чтобы сделать команды менее многословными):
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 --spotify-refresh 123456 --spotify-token 123456 -n 1 --pt
Доступ к Spotify-Token действителен только в течение 1 часа. Spotify-refresh позволит sldl обновлять доступ каждый раз при запуске (и может использоваться без включения Spotify-токена)
URL-адрес Bandcamp: Загрузите отдельный трек, альбом или всю дискографию исполнителя. Извлекает имя исполнителя, название альбома и устанавливает --album-track-count="n+", где n — количество видимых треков на странице Bandcamp.
Название трека, альбома или исполнителя для поиска: может быть любой типичной строкой поиска (например, той, которую вы вводите в панель поиска Soulseek), или списком свойств, разделенных запятыми, например 'title=Song Name, Artist= Имя исполнителя, длина = 215 футов.
Принимаются следующие свойства:
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
Пример входных данных и их интерпретация:
Input String | Artist | Title | Album | Length
---------------------------------------------------------------------------------
'Foo Bar' (without any hyphens) | | Foo Bar | |
'Foo - Bar' | Foo | Bar | |
'Foo - Bar' (with --album enabled) | Foo | | Bar |
'Artist - Title, length=42' | Artist | Title | | 42
'artist=AR, title=T, album=AL' | AR | T | AL |
Путь к текстовому файлу, где каждая строка имеет следующий вид:
"some input" "conditions" "preferred conditions"
например:
"artist=Artist, album=Album" "format=mp3; br > 128" "br >= 320"
Где «некоторые входные данные» — это любой из вышеуказанных типов входных данных. Кавычки можно опустить, если поле не содержит пробелов. Поля условий добавляются поверх настроенных условий и также могут быть опущены. Ввод списка должен быть активирован вручную с помощью --input-type=list.
Он также принимает сокращение для загрузки альбомов: a:"Artist - Album"
. Обратите внимание, что знак a:
должен находиться вне кавычек.
Значение по умолчанию. Загружает один файл для каждой входной записи.
sldl выполнит поиск альбома и загрузит всю папку, включая неаудиофайлы. Активируется, когда входные данные являются ссылкой на альбом Spotify или Bandcamp, когда входная строка или строка CSV не имеют названия трека или когда включен параметр -a/--album.
С помощью -g/--aggregate sldl выполняет обычный поиск входных данных, затем пытается сгруппировать результаты в отдельные песни и загрузить по одной каждого типа, начиная с той, которой пользуется большинство пользователей.
Обратите внимание, что --min-shares-aggregate по умолчанию равен 2, что означает, что песни, которыми поделился только один пользователь, будут игнорироваться.
Активируется, когда включены оба --album и --aggregate. sldl сгруппирует общие ресурсы и загрузит по одному альбому каждого отдельного альбома, начиная с того, которым поделилось большинство пользователей. Рекомендуется объединить это с --interactive.
Обратите внимание, что --min-shares-aggregate по умолчанию имеет значение 2, что означает, что альбомы, которыми поделился только один пользователь, будут игнорироваться.
Поисковый запрос определяется следующим образом:
Сервер забанит вас на 30 минут, если за короткий промежуток времени будет выполнено слишком много поисков. В программе имеется ограничитель поиска, который можно настроить с помощью --searches-per-time и --searches-renew-time (при достижении лимита статус загрузок будет «Ожидание»). По умолчанию он настроен на разрешение до 34 поисков каждые 220 секунд. Значения по умолчанию были определены экспериментальным путем, поэтому они могут быть неверными.
Следующие параметры ускорят работу, но могут снизить качество результатов поиска или вызвать нестабильность:
Файлы, не соответствующие необходимым условиям, скачиваться не будут. Предпочтение будут отдаваться файлам, удовлетворяющим предварительным условиям; установка --pref-format "flac,wav" заставит его загружать файлы без потерь, если они доступны, и загружать файлы с потерями только в том случае, если больше ничего нет.
Обязательных условий по умолчанию нет. Предпочтительные условия по умолчанию:
pref-format = mp3
pref-length-tol = 3
pref-min-bitrate = 200
pref-max-bitrate = 2500
pref-max-samplerate = 48000
pref-strict-title = true
pref-strict-album = true
pref-accept-no-length = false
Поэтому sldl отдает предпочтение mp3-файлам с битрейтом от 200 до 2500 кбит/с, длина которых отличается от предоставленной длины не более чем на 3 секунды. Он также будет отдавать предпочтение файлам, пути которых содержат указанное название и альбом (без учета регистра и ограничены граничными символами) и длина которых не равна нулю. Изменять последние три предпочтительных условия не рекомендуется.
Обратите внимание, что файлы, удовлетворяющие подмножеству предпочтительных условий, по-прежнему будут иметь преимущество перед файлами, которые не удовлетворяют никаким условиям, но некоторые условия имеют приоритет над другими. Например, файл, который удовлетворяет только строгому заголовку (если он включен), всегда будет предпочтительнее файла, который удовлетворяет только условию формата. Запустите с --print «results-full», чтобы раскрыть логику сортировки.
Условия также могут быть заданы в виде строки, разделенной точкой с запятой, с --cond и --pref, например --cond "br >= 320; format = mp3,ogg; sr < 96000".
Опции --strict-title, --strict-artist и --strict-album будут фильтровать любой файл, который не содержит название/исполнителя/альбома в имени файла (игнорируя регистр, ограниченный граничными символами).
Другой способ предотвратить ложные загрузки — установить для --length-tol значение 3 или меньше, чтобы он игнорировал любые песни, которые отличаются от входных более чем на 3 секунды. Однако все 4 параметра уже включены как «предпочтительные» условия по умолчанию, а это означает, что такие файлы в любом случае будут загружаться только в крайнем случае. Следовательно, рекомендуется включать их только в том случае, если вам нужно максимально свести к минимуму ложные загрузки или в особых случаях, например, для треков или альбомов, название которых состоит всего из одного или двух символов.
Некоторая информация может быть недоступна в зависимости от клиента, используемого узлом. Например, стандартный клиент Soulseek не разделяет битрейт файла. Если (например) установлен --min-bitrate, то sldl все равно будет принимать любые файлы с неизвестным битрейтом. Вы можете настроить его на отклонение всех файлов, в которых одно или несколько проверенных свойств имеют значение null (неизвестно), включив --strict-conditions.
Как следствие, если также установлен параметр --min-bitrate, любые файлы, которыми поделились пользователи с клиентом по умолчанию, будут игнорироваться. Также обратите внимание, что предпочтительные условия по умолчанию уже влияют на ранжирование с помощью этой опции из-за проверок битрейта и частоты дискретизации.
Переменные, заключенные в {}, будут заменены соответствующим значением тега файла. Формат имени поддерживает подкаталоги, а также условные выражения, такие как {tag1|tag2}. Если tag1 имеет значение null, используйте tag2. Строковые литералы, заключенные в круглые скобки, игнорируются при проверке нуля.
artist First artist (from the file tags)
sartist Source artist (as on CSV/Spotify/YouTube/etc)
artists Artists, joined with '&'
albumartist First album artist
albumartists Album artists, joined with '&'
title Track title
stitle Source track title
album Album name
salbum Source album name
year Track year or date
track Track number
disc Disc number
filename Soulseek filename without extension
foldername Soulseek folder name
extractor Name of the extractor used (CSV/Spotify/YouTube/etc)
default-folder Default sldl folder name (usually the playlist name)
sldl будет искать файл с именем sldl.conf в следующих местах:
~/AppData/Roaming/sldl/sldl.conf
~/.config/sldl/sldl.conf
а также в каталоге исполняемого файла.
Пример файла конфигурации:
username = your-username
password = your-password
pref-format = flac
fast-search = true
Строки, начинающиеся с хэштегов (#), будут игнорироваться. Тильды в путях раскрываются как каталог пользователя.
Поддерживаются профили:
[lossless]
pref-format = flac,wav
Чтобы активировать вышеуказанный профиль, запустите --profile «lossless». Чтобы просмотреть все доступные профили, запустите --profile «help».
Профили можно активировать автоматически при выполнении нескольких простых условий:
[no-stale]
profile-cond = interactive && download-mode == "album"
max-stale-time = 999999
# album downloads will never be automatically cancelled in interactive mode
[youtube]
profile-cond = input-type == "youtube"
path = ~/downloads/sldl-youtube
# download to another location for youtube
В профиле-cond поддерживаются следующие операторы: &&, ||, ==, !=, !{bool}.
Доступны следующие переменные:
input-type ("youtube"|"csv"|"string"|"bandcamp"|"spotify")
download-mode ("normal"|"aggregate"|"album"|"album-aggregate")
interactive (bool)
Скачать треки из csv-файла:
sldl test.csv
Скачать лайки Spotify:
sldl spotify-likes
Интерактивная загрузка альбома:
sldl "Some Album" -a -t
Загрузите конкретную песню по названию, отдавая предпочтение lossless:
sldl "MC MENTAL @ HIS BEST, length=242" --pref-format "flac,wav"
Загрузите альбом каждой песни из плейлиста Spotify:
sldl https://spotify/playlist/id -a
Получите названия удаленных видео, а затем загрузите их из плейлиста YouTube с резервным вариантом yt-dlp:
sldl https://www.youtube.com/playlist/id --get-deleted --yt-dlp
Распечатайте все песни исполнителя, которых нет в вашей фонотеке:
sldl "artist=MC MENTAL" --aggregate --skip-music-dir "path/to/music" --print results-full
Скачать все альбомы исполнителя, найденные на Soulseek:
sldl "artist=MC MENTAL" -a -g -t
Создайте файл с wishlist.txt
и добавьте несколько элементов, как описано в разделе «Типы ввода»: Список:
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 " " format=flac "
Добавьте профиль в свой sldl.conf
:
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
Это создаст глобальный индексный wishlist-index.sldl
, который будет сканироваться каждый раз при запуске sldl, чтобы пропустить уже загруженные элементы списка желаний. Если вы хотите продолжать поиск до тех пор, пока не будет загружена версия, удовлетворяющая предпочтительным условиям, также добавьтеskip skip-check-pref-cond = true
(обратите внимание, что для этого необходимо, чтобы файлы оставались на том же месте после загрузки).
Наконец, настройте задание cron (или запланированное задание в Windows) для периодического запуска sldl со следующей опцией:
sldl --profile wishlist
chmod +x publish.sh && sh publish.sh
. Для компьютеров Intel Mac раскомментируйте x64 и прокомментируйте раздел Arm64 в файлеPublish.sh.--no-progress
. Из этого репозитория можно собрать докер-контейнер для запуска sldl
. Образ поддерживает Linux x86/ARM.
Чтобы собрать и запустить контейнер:
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
exec
в контейнер, чтобы начать использовать sldl
:
docker compose exec sldl sh
sldl --help
Стек Compose монтирует два каталога относительно места расположения docker-compose.yml
которые можно использовать для управления файлами:
/config
(в ./config
на хосте) — поместите конфигурацию sldl.conf
в этот каталог, а затем используйте sldl -c /config ...
для использования вашей конфигурации в контейнере./data
(по адресу ./data
на хосте) — использовать в качестве каталога загрузки IE sldl -p /data ...
Если вы используете Docker на хосте Linux, вам следует указать права user:group
пользователя, которому принадлежит каталог конфигурации и данных на хосте, чтобы избежать проблем с разрешениями файлов Docker. Их можно указать с помощью переменных среды PUID и PGID .
Чтобы получить UID и GID текущего пользователя, выполните эти команды из терминала:
id -u
-- печатает UIDid -g
-- печатает GID Замените их соответствующей переменной ( PUID
PGID
) в docker-compose.yml
.
Одну или несколько команд sldl
можно запускать по расписанию с помощью cron, встроенного в контейнер.
Чтобы создать расписание, создайте новый файл на хосте ./config/crontabs/abc
и используйте его со стандартным синтаксисом crontab.
Обязательно перезапустите контейнер после внесения любых изменений в файл cron.
Пример => Запускать sldl
каждое воскресенье в 1 час ночи, искать недостающие треки в указанном плейлисте Spotify.
# min hour day month weekday command
0 1 * * 0 sldl https://open.spotify.com/playlist/6sf1WR5grXGJ6dET -c /config -p /data --skip-existing --m3u-path /data/index.sldl"
crontab.guru можно использовать для помощи с выражением планирования.