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.
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
Options générales
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
Options de recherche
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.
Options de fichier 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
Options de condition de fichier
--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.
Options de téléchargement d'albums
-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
Options de téléchargement globales
-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
Remarques
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 »
Types d'entrée
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 :
Fichier CSV
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 sans texte de colonne de titre sera traitée comme un téléchargement d'album.
YouTube
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.
Spotify
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.
Utilisation des informations d'identification
Cliquez pour agrandir
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 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) :
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)
Camp de bande
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.
Chaîne de recherche
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 |
Liste
Un chemin vers un fichier texte où chaque ligne a la forme suivante :
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.
Modes de téléchargement
Normale
La valeur par défaut. Télécharge un seul fichier pour chaque entrée d’entrée.
Album
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é.
Agrégat
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.
Agrégat d'album
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.
Recherche
Requête de recherche
La requête de recherche est déterminée comme suit :
Pour les téléchargements d'albums : si le champ de l'album n'est pas vide, recherchez « Album d'artiste ». Sinon, recherchez « Titre de l'artiste »
Pour tous les autres types de téléchargement : si le champ du titre n'est pas vide, recherchez « Titre de l'artiste ». Sinon, recherchez « Album d'artiste »
Limites de débit de Soulseek
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.
Accélérer les choses
Les options suivantes accéléreront le processus, mais peuvent diminuer la qualité des résultats de recherche ou provoquer une instabilité :
--fast-search ignore l'attente jusqu'à la fin de la recherche et se télécharge dès qu'un fichier correspondant aux conditions préférées est trouvé
--concurrent-downloads - définissez-le sur 4 ou plus
--max-stale-time est défini sur 50 secondes par défaut, il attendra donc longtemps avant d'abandonner un fichier
--recherches par heure - augmentent avec le risque d'interdictions.
Conditions du dossier
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 :
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 délimitation) 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".
Filtrage des résultats non pertinents
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.
Remarque importante
Certaines informations peuvent être indisponibles en fonction du 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.
Format du nom
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.
Exemples :
"{artiste} - {titre}" Nommez-le toujours « Artiste – Titre ». Étant donné que certains fichiers sur Soulseek ne sont pas balisés, les éléments suivants sont généralement préférés :
"{artiste( - )titre|nom de fichier}" Si l'artiste et le titre ne sont pas nuls, nommez-le « Artiste - Titre », sinon utilisez le nom de fichier original.
"{albumartist(/)album(/)track(. )title|(missing-tags/)foldername(/)filename}" Triez les fichiers dans les dossiers artiste/album si toutes les balises sont présentes, sinon placez-les dans le dossier « balises manquantes ».
Variables disponibles :
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)
Configuration
Emplacement de configuration :
sldl recherchera un fichier nommé sldl.conf aux emplacements suivants :
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.
Profils de configuration :
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 :
Téléchargez tous les albums d'un artiste trouvés sur soulseek :
sldl "artist=MC MENTAL" -a -g -t
Exemple avancé : téléchargeur automatique de liste de souhaits
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
Remarques
Pour les versions macOS, vous pouvez utiliser submit.sh pour créer l'application. Téléchargez dotnet depuis https://dotnet.microsoft.com/en-us/download/dotnet/6.0, puis exécutez chmod +x publish.sh && sh publish.sh . Pour les Mac Intel, décommentez le x64 et commentez la section arm64 dans publier.sh.
La sortie imprimée peut apparaître dupliquée, se chevaucher ou ne pas être mise à jour sur certaines configurations (nouveau terminal Windows, git bash). Utilisez un autre terminal ou --no-progress en cas de problème.
Docker
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 (à ./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 ...
Autorisations de fichiers
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'UID
id -g -- affiche le GID
Remplacez-les par la variable correspondante ( PUIDPGID ) dans docker-compose.yml .
Cron
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