Автоматический загрузчик Soulseek, созданный с помощью Soulseek.NET. Принимает файлы CSV, а также URL-адреса Spotify и YouTube. Поддерживает загрузку плейлистов и альбомов; выбирает лучшие файлы в соответствии с настроенными пользователем условиями файлов и эвристикой.
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
--user Soulseek username
--pass Soulseek password
Общие параметры
Max concurrent downloads (default: 2)
--write-playlist Create an m3u playlist file in the output directory
--playlist-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 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 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 for incoming connections (default: 49998)
--on-complete 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:' will only run the command if the file is
downloaded successfully. Prepend 's:' to use the system
shell to execute the command.
--print
Параметры поиска
Number of fails to downrank a user's shares (default: 1)
--fails-to-ignore 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 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 Max search time in ms (default: 6000)
--max-stale-time Max download time without progress in ms (default: 50000)
--searches-per-time Max searches per time interval. Higher values may cause
30-minute bans, see --help "search". (default: 34)
--searches-renew-time Controls how often available searches are replenished.
See --help "search". (default: 220)">
--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 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 Number of fails to downrank a user's shares (default: 1)
--fails-to-ignore 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 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 Max search time in ms (default: 6000)
--max-stale-time Max download time without progress in ms (default: 50000)
--searches-per-time Max searches per time interval. Higher values may cause
30-minute bans, see --help "search". (default: 34)
--searches-renew-time Controls how often available searches are replenished.
See --help "search". (default: 220)
--youtube-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.
Параметры CSV-файла
--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 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 Accepted file format(s), comma-separated, without periods
--length-tol Length tolerance in seconds
--min-bitrate Minimum file bitrate
--max-bitrate Maximum file bitrate
--min-samplerate Minimum file sample rate
--max-samplerate Maximum file sample rate
--min-bitdepth Minimum bit depth
--max-bitdepth 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 Comma-separated list of users to ignore
--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)
--pref-max-bitrate Preferred maximum bitrate (default: 2500)
--pref-min-samplerate Preferred minimum sample rate
--pref-max-samplerate Preferred maximum sample rate (default: 48000)
--pref-min-bitdepth Preferred minimum bit depth
--pref-max-bitdepth Preferred maximum bit depth
--pref-banned-users 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 Specify the exact number of tracks in the album. Add a + or
- for inequalities, e.g '5+' for five or more tracks.
--album-art
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 Max length tolerance in seconds to consider two tracks or
albums equal. (Default: 3)
--min-shares-aggregate 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: используйте файл 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 попытается открыть браузер автоматически, но вернется к регистрации URL-адреса потока входа в систему для вывода. После завершения процесса входа в систему sldl выведет токен, обновит токен и завершит выполнение текущей команды.
Чтобы пропустить необходимость входа в систему каждый раз, когда используется sldl, sldl можно предоставить токен и токен обновления (подсказка: сохраните эту информацию в файле конфигурации, чтобы сделать команды менее многословными):
Доступ к 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 |
Список
Путь к текстовому файлу, где каждая строка имеет следующий вид:
Где «некоторые входные данные» — это любой из вышеуказанных типов входных данных. Кавычки можно опустить, если поле не содержит пробелов. Поля условий добавляются поверх настроенных условий и также могут быть опущены. Ввод списка должен быть активирован вручную с помощью --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, что означает, что альбомы, которыми поделился только один пользователь, будут игнорироваться.
Идет поиск
Поисковый запрос
Поисковый запрос определяется следующим образом:
Для загрузки альбомов: если поле альбома не пусто, найдите «Альбом исполнителя». В противном случае найдите «Название исполнителя».
Для всех других типов загрузки: если поле названия не пусто, найдите «Название исполнителя». В противном случае найдите «Альбом исполнителя».
Ограничения скорости Soulseek
Сервер забанит вас на 30 минут, если за короткий промежуток времени будет выполнено слишком много поисков. В программе имеется ограничитель поиска, который можно настроить с помощью --searches-per-time и --searches-renew-time (при достижении лимита статус загрузок будет «Ожидание»). По умолчанию он настроен на разрешение до 34 поисков каждые 220 секунд. Значения по умолчанию были определены экспериментальным путем, поэтому они могут быть неверными.
Ускорение событий
Следующие параметры ускорят работу, но могут снизить качество результатов поиска или вызвать нестабильность:
--fast-search пропускает ожидание завершения поиска и загружает, как только будет найден файл, соответствующий предпочтительным условиям.
--concurrent-downloads — установите значение 4 или более
По умолчанию --max-stale-time установлено на 50 секунд, поэтому он будет долго ждать, прежде чем отказаться от файла.
--searches-per-time — увеличение риска банов.
Условия файла
Файлы, не соответствующие необходимым условиям, скачиваться не будут. Предпочтение будут отдаваться файлам, удовлетворяющим предварительным условиям; установка --pref-format "flac,wav" заставит его загружать файлы без потерь, если они доступны, и загружать файлы с потерями только в том случае, если больше ничего нет.
Обязательных условий по умолчанию нет. Предпочтительные условия по умолчанию:
Поэтому 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. Строковые литералы, заключенные в круглые скобки, игнорируются при проверке нуля.
Примеры:
"{исполнитель} – {title}" Всегда называйте его «Исполнитель – Название». Поскольку некоторые файлы в Soulseek не имеют тегов, обычно предпочтительнее следующее:
"{артист( - )название|имя файла}" Если исполнитель и название не равны нулю, назовите его «Исполнитель - Название», в противном случае используйте исходное имя файла.
"{альбомартист(/)альбом(/)дорожка(. )название|(отсутствующие теги/)имя папки(/)имя файла}" Отсортируйте файлы по папкам исполнителей/альбомов, если все теги присутствуют, в противном случае поместите их в папку «отсутствующие теги».
Доступные переменные:
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 в следующих местах:
Строки, начинающиеся с хэштегов (#), будут игнорироваться. Тильды в путях раскрываются как каталог пользователя.
Профили конфигурации:
Поддерживаются профили:
[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}. Доступны следующие переменные:
Создайте файл с 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
Примечания
Для сборок macOS вы можете использоватьPublish.sh для сборки приложения. Загрузите dotnet с https://dotnet.microsoft.com/en-us/download/dotnet/6.0, затем запустите chmod +x publish.sh && sh publish.sh . Для компьютеров Intel Mac раскомментируйте x64 и прокомментируйте раздел Arm64 в файлеPublish.sh.
Вывод на печать может дублироваться, перекрываться или не обновляться в некоторых конфигурациях (новый терминал Windows, git bash). В случае проблем используйте другой терминал или --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 -- печатает UID
id -g -- печатает GID
Замените их соответствующей переменной ( PUIDPGID ) в docker-compose.yml .
Крон
Одну или несколько команд sldl можно запускать по расписанию с помощью cron, встроенного в контейнер.
Чтобы создать расписание, создайте новый файл на хосте ./config/crontabs/abc и используйте его со стандартным синтаксисом crontab.
Обязательно перезапустите контейнер после внесения любых изменений в файл cron.
Пример => Запускать sldl каждое воскресенье в 1 час ночи, искать недостающие треки в указанном плейлисте Spotify.