Un téléchargeur automatique pour Soulseek construit avec Soulseek.NET. Accepte les fichiers CSV ainsi que les URL Spotify et YouTube.
Prend en charge les téléchargements de listes de lecture et d'albums ; sélectionne les meilleurs fichiers en fonction des conditions de fichiers et des heuristiques configurées par l'utilisateur.
Voir les exemples d'utilisation.
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
Les acronymes de deux ou trois mots-indicateurs sont également acceptés, par exemple --twf. Si l'option contient le mot « max », alors le m doit être en majuscule. 'bitrate', 'sameplerate' et 'bitdegree' doivent tous être traités comme deux mots distincts, par exemple --Mbr pour --max-bitrate.
Les indicateurs peuvent être explicitement désactivés en les définissant sur false, par exemple « --interactive false »
Le type d'entrée est généralement déterminé automatiquement. Pour forcer un type d'entrée spécifique, définissez --input-type [spotify|youtube|csv|string|bandcamp|list]. Les types d'entrée suivants sont disponibles :
Chemin d'accès à un fichier CSV local : utilisez un fichier CSV contenant les informations sur les pistes des chansons à télécharger. Les noms des colonnes doivent être Artiste, Titre, Album, Durée, bien que des noms alternatifs soient généralement également détectés. Seule la colonne du titre ou de l'album est requise, mais des informations supplémentaires peuvent améliorer le classement des résultats de recherche. Chaque ligne qui n'a pas de texte dans la colonne de titre sera traitée comme un téléchargement d'album.
Une URL de playlist : téléchargez des chansons à partir d’une playlist YouTube. La méthode par défaut pour récupérer les listes de lecture ne renvoie pas toujours toutes les vidéos, surtout celles qui ne sont pas disponibles. Pour obtenir tous les titres vidéo, vous pouvez utiliser l'API officielle en fournissant une clé avec --youtube-key. Obtenez-le ici https://console.cloud.google.com. Créez un nouveau projet, cliquez sur « Activer l'API » et recherchez « données YouTube », puis suivez les instructions.
Une URL de playlist/album ou « j'aime Spotify » : téléchargez une liste de lecture Spotify, un album ou vos chansons préférées. Des informations d'identification sont requises lors du téléchargement d'une liste de lecture privée ou d'une musique appréciée.
Créez une application Spotify sur https://developer.spotify.com/dashboard/applications avec une URL de redirection http://localhost:48721/callback. Obtenez un ID d'application et un secret à partir du tableau de bord d'application créé.
Démarrez sldl avec les informations d'identification obtenues et une action autorisée pour déclencher le flux de connexion à l'application Spotify :
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 -n 1 --print-tracks
sldl essaiera d'ouvrir un navigateur automatiquement, mais se contentera de consigner l'URL du flux de connexion à afficher. Une fois le flux de connexion terminé, sldl générera un jeton et un jeton d'actualisation et terminera l'exécution de la commande en cours.
Pour éviter d'exiger un flux de connexion à chaque fois que sldl est utilisé, le jeton et le jeton d'actualisation peuvent être fournis à sldl (indice : stockez ces informations dans le fichier de configuration pour rendre les commandes moins verbeuses) :
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 --spotify-refresh 123456 --spotify-token 123456 -n 1 --pt
L’accès au jeton Spotify n’est valable que pendant 1 heure. spotify-refresh permettra à sldl de renouveler l'accès à chaque exécution (et peut être utilisé sans inclure le jeton spotify)
Une URL de bandcamp : téléchargez un seul morceau, un album ou la discographie complète d'un artiste. Extrait le nom de l'artiste, le nom de l'album et définit --album-track-count="n+", où n est le nombre de pistes visibles sur la page bandcamp.
Nom du morceau, de l'album ou de l'artiste à rechercher : il peut s'agir de n'importe quelle chaîne de recherche typique (comme celle que vous saisiriez dans la barre de recherche de soulseek), ou d'une liste de propriétés séparées par des virgules, comme "titre = Nom de la chanson, artiste = Nom de l'artiste, longueur = 215'.
Les propriétés suivantes sont acceptées :
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
Exemples d'entrées et leurs interprétations :
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 |
Un chemin vers un fichier texte où chaque ligne a la forme suivante :
"some input" "conditions" "preferred conditions"
par exemple :
"artist=Artist, album=Album" "format=mp3; br > 128" "br >= 320"
Où « une entrée » correspond à l’un des types d’entrée ci-dessus. Les guillemets peuvent être omis si le champ ne contient aucun espace. Les champs de condition sont ajoutés au-dessus des conditions configurées et peuvent également être omis. La saisie de liste doit être activée manuellement avec --input-type=list.
Il accepte également un raccourci pour les téléchargements d'albums : a:"Artist - Album"
. Notez que le a:
doit apparaître en dehors des guillemets.
La valeur par défaut. Télécharge un seul fichier pour chaque entrée d’entrée.
sldl recherchera l'album et téléchargera un dossier entier comprenant des fichiers non audio. Activé lorsque l'entrée est un lien vers un album Spotify ou Bandcamp, lorsque la chaîne d'entrée ou la ligne CSV n'a pas de titre de piste, ou lorsque -a/--album est activé.
Avec -g/--aggregate, sldl effectue une recherche ordinaire de l'entrée, puis tente de regrouper les résultats en chansons distinctes et d'en télécharger une de chaque type, en commençant par celle partagée par le plus grand nombre d'utilisateurs.
Notez que --min-shares-aggregate vaut 2 par défaut, ce qui signifie que les chansons partagées par un seul utilisateur seront ignorées.
Activé lorsque --album et --aggregate sont activés. sldl regroupera les partages et téléchargera un de chaque album distinct, en commençant par celui partagé par le plus grand nombre d'utilisateurs. Il est recommandé de l'associer à --interactive.
Notez que --min-shares-aggregate vaut 2 par défaut, ce qui signifie que les albums partagés par un seul utilisateur seront ignorés.
La requête de recherche est déterminée comme suit :
Le serveur vous bannira pendant 30 minutes si trop de recherches sont effectuées dans un court laps de temps. Le programme dispose d'un limiteur de recherche qui peut être ajusté avec --searches-per-time et --searches-renew-time (lorsque la limite est atteinte, l'état des téléchargements sera "En attente"). Par défaut, il est configuré pour autoriser jusqu'à 34 recherches toutes les 220 secondes. Les valeurs par défaut ont été déterminées par expérimentation ; elles peuvent donc être incorrectes.
Les options suivantes accéléreront le processus, mais peuvent diminuer la qualité des résultats de recherche ou provoquer une instabilité :
Les fichiers ne répondant pas aux conditions requises ne seront pas téléchargés. Les fichiers satisfaisant aux conditions de préférence seront privilégiés ; le paramètre --pref-format "flac,wav" lui permettra de télécharger des fichiers sans perte s'ils sont disponibles, et de télécharger uniquement des fichiers avec perte s'il n'y a rien d'autre.
Il n’y a aucune condition requise par défaut. Les conditions préférées par défaut sont :
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 privilégiera donc les fichiers mp3 avec un débit compris entre 200 et 2500 kbps, et dont la longueur ne diffère pas de plus de 3 secondes de la longueur fournie. Il préférera également les fichiers dont les chemins contiennent le titre et l'album fournis (en ignorant la casse et délimités par des caractères de limite) et qui ont une longueur non nulle. Il n'est pas recommandé de modifier les trois dernières conditions préférées.
Notez que les fichiers satisfaisant un sous-ensemble des conditions préférées seront toujours préférés aux fichiers qui ne satisfont à aucune condition, mais certaines conditions ont priorité sur d'autres. Par exemple, un fichier qui satisfait uniquement au titre strict (si activé) sera toujours préféré à un fichier qui satisfait uniquement à la condition de format. Exécutez avec --print "results-full" pour révéler la logique de tri.
Les conditions peuvent également être fournies sous forme de chaîne délimitée par des points-virgules avec --cond et --pref, par exemple --cond "br >= 320; format = mp3,ogg; sr < 96000".
Les options --strict-title, --strict-artist et --strict-album filtreront tout fichier qui ne contient pas le titre/artiste/album dans le nom de fichier (en ignorant la casse, délimité par les caractères de limite).
Une autre façon d'éviter les faux téléchargements consiste à définir --length-tol sur 3 ou moins pour qu'il ignore toutes les chansons qui diffèrent de l'entrée de plus de 3 secondes. Cependant, les 4 options sont déjà activées par défaut en tant que conditions « préférées », ce qui signifie que ces fichiers ne seront de toute façon téléchargés qu’en dernier recours. Par conséquent, il est recommandé de les activer uniquement si vous devez minimiser autant que possible les faux téléchargements, ou pour des cas particuliers comme les pistes ou les albums dont le nom ne comporte qu'un ou deux caractères.
Certaines informations peuvent être indisponibles selon le client utilisé par le homologue. Par exemple, le client Soulseek standard ne partage pas le débit binaire du fichier. Si (par exemple) --min-bitrate est défini, alors sldl acceptera toujours tout fichier avec un débit binaire inconnu. Vous pouvez le configurer pour rejeter tous les fichiers dont une ou plusieurs des propriétés vérifiées sont nulles (inconnues) en activant --strict-conditions.
Par conséquent, si --min-bitrate est également défini, tous les fichiers partagés par les utilisateurs avec le client par défaut seront ignorés. Notez également que les conditions préférées par défaut affecteront déjà le classement avec cette option en raison des vérifications du débit binaire et du taux d'échantillonnage.
Les variables entourées de {} seront remplacées par la valeur de balise de fichier correspondante. Le format de nom prend en charge les sous-répertoires ainsi que les expressions conditionnelles telles que {tag1|tag2} - Si tag1 est nul, utilisez tag2. Les littéraux de chaîne entre parenthèses sont ignorés lors de la vérification nulle.
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 recherchera un fichier nommé sldl.conf aux emplacements suivants :
~/AppData/Roaming/sldl/sldl.conf
~/.config/sldl/sldl.conf
ainsi que dans le répertoire de l'exécutable.
Exemple de fichier de configuration :
username = your-username
password = your-password
pref-format = flac
fast-search = true
Les lignes commençant par des hashtags (#) seront ignorées. Les tildes dans les chemins sont développés en tant que répertoire utilisateur.
Les profils sont pris en charge :
[lossless]
pref-format = flac,wav
Pour activer le profil ci-dessus, exécutez --profile "lossless". Pour répertorier tous les profils disponibles, exécutez --profile "help".
Les profils peuvent être activés automatiquement en fonction de quelques conditions simples :
[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
Les opérateurs suivants sont pris en charge pour une utilisation dans profile-cond : &&, ||, ==, !=, !{bool}.
Les variables suivantes sont disponibles :
input-type ("youtube"|"csv"|"string"|"bandcamp"|"spotify")
download-mode ("normal"|"aggregate"|"album"|"album-aggregate")
interactive (bool)
Téléchargez des pistes à partir d'un fichier CSV :
sldl test.csv
Téléchargez les likes Spotify :
sldl spotify-likes
Téléchargement d'album interactif :
sldl "Some Album" -a -t
Téléchargez une chanson spécifique par son nom, en préférant le sans perte :
sldl "MC MENTAL @ HIS BEST, length=242" --pref-format "flac,wav"
Téléchargez l'album de chaque chanson d'une playlist Spotify :
sldl https://spotify/playlist/id -a
Récupérez les noms des vidéos supprimées, puis téléchargez-les à partir d'une playlist YouTube avec le recours à yt-dlp :
sldl https://www.youtube.com/playlist/id --get-deleted --yt-dlp
Imprimez toutes les chansons d'un artiste qui ne sont pas dans votre bibliothèque :
sldl "artist=MC MENTAL" --aggregate --skip-music-dir "path/to/music" --print results-full
Téléchargez tous les albums d'un artiste trouvés sur soulseek :
sldl "artist=MC MENTAL" -a -g -t
Créez un fichier nommé wishlist.txt
et ajoutez quelques éléments comme détaillé dans Types d'entrée : Liste :
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 " " format=flac "
Ajoutez un profil à votre sldl.conf
:
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
Cela créera un fichier d'index global wishlist-index.sldl
qui sera analysé à chaque fois que sldl sera exécuté pour ignorer les éléments de la liste de souhaits déjà téléchargés. Si vous souhaitez continuer la recherche jusqu'à ce qu'une version satisfaisant les conditions préférées soit téléchargée, ajoutez également skip-check-pref-cond = true
(notez que cela nécessite que les fichiers restent au même endroit après avoir été téléchargés).
Enfin, configurez une tâche cron (ou une tâche planifiée sous Windows) pour exécuter périodiquement sldl avec l'option suivante :
sldl --profile wishlist
chmod +x publish.sh && sh publish.sh
. Pour les Mac Intel, décommentez le x64 et commentez la section arm64 dans publier.sh.--no-progress
en cas de problème. Un conteneur Docker pour exécuter sldl
peut être construit à partir de ce référentiel. L'image prend en charge Linux x86/ARM.
Pour créer et démarrer le conteneur :
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
exec
dans le conteneur pour commencer à utiliser sldl
:
docker compose exec sldl sh
sldl --help
La pile de composition monte deux répertoires par rapport à l'emplacement docker-compose.yml
qui peuvent être utilisés pour la gestion des fichiers :
/config
(sur ./config
sur l'hôte) - placez votre configuration sldl.conf
dans ce répertoire, puis utilisez sldl -c /config ...
pour utiliser votre configuration dans le conteneur/data
(à ./data
sur l'hôte) - utiliser comme répertoire de téléchargement IE sldl -p /data ...
Si vous exécutez Docker sur un hôte Linux, vous devez spécifier les autorisations user:group
de l'utilisateur qui possède le répertoire de configuration et de données sur l'hôte pour éviter les problèmes d'autorisation des fichiers Docker. Ceux-ci peuvent être spécifiés à l'aide des variables d'environnement PUID et PGID .
Pour obtenir l'UID et le GID de l'utilisateur actuel, exécutez ces commandes depuis un terminal :
id -u
-- affiche l'UIDid -g
-- affiche le GID Remplacez-les par la variable correspondante ( PUID
PGID
) dans docker-compose.yml
.
Une ou plusieurs commandes sldl
peuvent être exécutées selon un planning à l'aide de cron intégré au conteneur.
Pour créer une planification, créez un nouveau fichier sur l'hôte ./config/crontabs/abc
et utilisez-le avec la syntaxe crontab standard.
Assurez-vous de redémarrer le conteneur après toute modification apportée au fichier cron.
Exemple => Exécutez sldl
tous les dimanches à 1h du matin, recherchez les pistes manquantes dans la playlist Spotify spécifiée
# 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 pourrait être utilisé pour aider avec l'expression de planification.