Un descargador automático para Soulseek creado con Soulseek.NET. Acepta archivos CSV, así como URL de Spotify y YouTube.
Admite descargas de listas de reproducción y álbumes; selecciona los mejores archivos de acuerdo con las condiciones y heurísticas de los archivos configurados por el usuario.
Vea los ejemplos de uso.
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
También se aceptan acrónimos de banderas de dos y tres palabras, por ejemplo --twf. Si la opción contiene la palabra "max", entonces la m debe estar en mayúscula. 'bitrate', 'sameplerate' y 'bit Depth' deben tratarse como dos palabras separadas, por ejemplo --Mbr para --max-bitrate.
Las banderas se pueden desactivar explícitamente configurándolas en falso, por ejemplo, '--interactive false'
El tipo de entrada normalmente se determina automáticamente. Para forzar un tipo de entrada específico, configure --input-type [spotify|youtube|csv|string|bandcamp|list]. Están disponibles los siguientes tipos de entrada:
Ruta a un archivo CSV local: utilice un archivo csv que contenga información de la pista de las canciones que desea descargar. Los nombres de las columnas deben ser Artista, Título, Álbum, Duración, aunque normalmente también se detectan nombres alternativos. Sólo se requiere la columna de título o álbum, pero información adicional puede mejorar la clasificación de los resultados de búsqueda. Cada fila que no tenga un texto de columna de título se tratará como una descarga de álbum.
Una URL de lista de reproducción: descargue canciones de una lista de reproducción de YouTube. El método predeterminado para recuperar listas de reproducción no siempre devuelve todos los vídeos, especialmente los que no están disponibles. Para obtener todos los títulos de los vídeos, puede utilizar la API oficial proporcionando una clave con --youtube-key. Consíguelo aquí https://console.cloud.google.com. Cree un nuevo proyecto, haga clic en "Habilitar Api" y busque "datos de youtube", luego siga las instrucciones.
Una URL de lista de reproducción/álbum o 'me gusta de Spotify': descargue una lista de reproducción, un álbum o las canciones que le gusten de Spotify. Se requieren credenciales al descargar una lista de reproducción privada o la música que le gusta.
Cree una aplicación de Spotify en https://developer.spotify.com/dashboard/applications con una URL de redireccionamiento http://localhost:48721/callback. Obtenga un ID y un secreto de la aplicación desde el panel de la aplicación creada.
Inicie sldl con las credenciales obtenidas y una acción autorizada para activar el flujo de inicio de sesión de la aplicación Spotify:
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 -n 1 --print-tracks
sldl intentará abrir un navegador automáticamente pero recurrirá al registro de la URL del flujo de inicio de sesión para generar. Una vez completado el flujo de inicio de sesión, sldl generará un token, lo actualizará y terminará de ejecutar el comando actual.
Para omitir el flujo de inicio de sesión cada vez que se utiliza sldl, se puede proporcionar el token y el token de actualización a sldl (sugerencia: almacene esta información en el archivo de configuración para que los comandos sean menos detallados):
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 --spotify-refresh 123456 --spotify-token 123456 -n 1 --pt
El acceso al token de Spotify solo es válido por 1 hora. spotify-refresh permitirá que sldl renueve el acceso cada vez que se ejecute (y se puede usar sin incluir spotify-token)
Una URL de bandcamp: descargue una sola pista, un álbum o la discografía completa de un artista. Extrae el nombre del artista, el nombre del álbum y establece --album-track-count="n+", donde n es el número de pistas visibles en la página bandcamp.
Nombre de la pista, álbum o artista a buscar: puede ser cualquier cadena de búsqueda típica (como la que ingresarías en la barra de búsqueda de Soulseek) o una lista de propiedades separadas por comas como 'título=Nombre de la canción, artista= Nombre del artista, longitud = 215'.
Se aceptan las siguientes propiedades:
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
Entradas de ejemplo y sus interpretaciones:
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 |
Una ruta a un archivo de texto donde cada línea tiene el siguiente formato:
"some input" "conditions" "preferred conditions"
p.ej:
"artist=Artist, album=Album" "format=mp3; br > 128" "br >= 320"
Donde "alguna entrada" es cualquiera de los tipos de entrada anteriores. Las comillas se pueden omitir si el campo no contiene espacios. Los campos de condición se agregan encima de las condiciones configuradas y también se pueden omitir. La entrada de lista debe activarse manualmente con --input-type=list.
También acepta una abreviatura para descargas de álbumes: a:"Artist - Album"
. Tenga en cuenta que a:
debe aparecer fuera de las comillas.
El valor predeterminado. Descarga un único archivo para cada entrada de entrada.
sldl buscará el álbum y descargará una carpeta completa, incluidos los archivos que no son de audio. Se activa cuando la entrada es un enlace a un álbum de Spotify o Bandcamp, cuando la cadena de entrada o la fila csv no tiene título de pista, o cuando -a/--album está habilitado.
Con -g/--aggregate, sldl realiza una búsqueda normal de la entrada y luego intenta agrupar los resultados en distintas canciones y descargar una de cada tipo, empezando por la compartida por la mayoría de los usuarios.
Tenga en cuenta que --min-shares-aggregate es 2 de forma predeterminada, lo que significa que las canciones compartidas por un solo usuario serán ignoradas.
Se activa cuando tanto --album como --aggregate están habilitados. sldl agrupará los recursos compartidos y descargará uno de cada álbum distinto, comenzando con el compartido por la mayoría de los usuarios. Se recomienda emparejar esto con --interactive.
Tenga en cuenta que --min-shares-aggregate es 2 de forma predeterminada, lo que significa que se ignorarán los álbumes compartidos por un solo usuario.
La consulta de búsqueda se determina de la siguiente manera:
El servidor te prohibirá durante 30 minutos si se realizan demasiadas búsquedas en un corto período de tiempo. El programa tiene un limitador de búsqueda que se puede ajustar con --searches-per-time y --searches-renew-time (cuando se alcance el límite, el estado de las descargas será "En espera"). Por defecto está configurado para permitir hasta 34 búsquedas cada 220 segundos. Los valores predeterminados se determinaron mediante experimentación, por lo que pueden ser incorrectos.
Las siguientes opciones harán que sea más rápido, pero pueden disminuir la calidad de los resultados de búsqueda o causar inestabilidad:
Los archivos que no cumplan las condiciones requeridas no se descargarán. Se preferirán los archivos que cumplan las condiciones preferidas; configurar --pref-format "flac,wav" hará que descargue archivos sin pérdidas si están disponibles, y solo descargará archivos con pérdidas si no hay nada más.
No hay condiciones requeridas predeterminadas. Las condiciones preferidas predeterminadas son:
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
Por lo tanto, sldl preferirá archivos mp3 con una tasa de bits entre 200 y 2500 kbps y cuya longitud difiera de la longitud suministrada en no más de 3 segundos. También preferirá archivos cuyas rutas contengan el título y el álbum proporcionados (ignorando mayúsculas y minúsculas y delimitados por caracteres de límite) y que no tengan una longitud nula. No se recomienda cambiar las últimas tres condiciones preferidas.
Tenga en cuenta que los archivos que cumplan un subconjunto de las condiciones preferidas seguirán siendo preferidos sobre los archivos que no cumplan ninguna condición, pero algunas condiciones tienen prioridad sobre otras. Por ejemplo, un archivo que solo cumpla con el título estricto (si está habilitado) siempre será preferido a un archivo que solo cumpla con la condición de formato. Ejecute con --print "results-full" para revelar la lógica de clasificación.
Las condiciones también se pueden proporcionar como una cadena delimitada por punto y coma con --cond y --pref, por ejemplo --cond "br >= 320; format = mp3,ogg; sr < 96000".
Las opciones --strict-title, --strict-artist y --strict-album filtrarán cualquier archivo que no contenga el título/artista/álbum en el nombre del archivo (ignorando mayúsculas y minúsculas, delimitado por caracteres de límite).
Otra forma de evitar descargas falsas es configurar --length-tol en 3 o menos para que ignore cualquier canción que difiera de la entrada en más de 3 segundos. Sin embargo, las 4 opciones ya están habilitadas como condiciones "preferidas" de forma predeterminada, lo que significa que dichos archivos sólo se descargarán como último recurso de todos modos. Por lo tanto, sólo se recomienda habilitarlos si necesita minimizar las descargas falsas tanto como sea posible, o para casos especiales como pistas o álbumes cuyo nombre tiene solo uno o dos caracteres.
Es posible que parte de la información no esté disponible según el cliente utilizado por el par. Por ejemplo, el cliente Soulseek estándar no comparte la tasa de bits del archivo. Si (por ejemplo) se establece --min-bitrate, entonces sldl seguirá aceptando cualquier archivo con una tasa de bits desconocida. Puede configurarlo para rechazar todos los archivos donde una o más de las propiedades marcadas sean nulas (desconocidas) habilitando --strict-conditions.
Como consecuencia, si también se establece --min-bitrate, se ignorarán todos los archivos compartidos por los usuarios con el cliente predeterminado. También tenga en cuenta que las condiciones preferidas predeterminadas ya afectarán la clasificación con esta opción debido a las comprobaciones de tasa de bits y frecuencia de muestreo.
Las variables encerradas en {} serán reemplazadas por el valor de etiqueta de archivo correspondiente. El formato de nombre admite subdirectorios y expresiones condicionales como {etiqueta1|etiqueta2}. Si la etiqueta1 es nula, utilice la etiqueta2. Los literales de cadena entre paréntesis se ignoran en la verificación nula.
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 buscará un archivo llamado sldl.conf en las siguientes ubicaciones:
~/AppData/Roaming/sldl/sldl.conf
~/.config/sldl/sldl.conf
así como en el directorio del ejecutable.
Archivo de configuración de ejemplo:
username = your-username
password = your-password
pref-format = flac
fast-search = true
Se ignorarán las líneas que comiencen con hashtags (#). Las tildes en las rutas se expanden como directorio de usuario.
Se admiten perfiles:
[lossless]
pref-format = flac,wav
Para activar el perfil anterior, ejecute --profile "lossless". Para enumerar todos los perfiles disponibles, ejecute --profile "ayuda".
Los perfiles se pueden activar automáticamente según algunas condiciones 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
Los siguientes operadores son compatibles para su uso en perfil-cond: &&, ||, ==, !=, !{bool}.
Las siguientes variables están disponibles:
input-type ("youtube"|"csv"|"string"|"bandcamp"|"spotify")
download-mode ("normal"|"aggregate"|"album"|"album-aggregate")
interactive (bool)
Descargar pistas desde un archivo csv:
sldl test.csv
Descargar Me gusta de Spotify:
sldl spotify-likes
Descarga del álbum interactivo:
sldl "Some Album" -a -t
Descargue una canción específica por nombre, prefiriendo sin pérdidas:
sldl "MC MENTAL @ HIS BEST, length=242" --pref-format "flac,wav"
Descarga el álbum de cada canción en una lista de reproducción de Spotify:
sldl https://spotify/playlist/id -a
Recupere los nombres de los vídeos eliminados y luego descárguelos de una lista de reproducción de YouTube con respaldo a yt-dlp:
sldl https://www.youtube.com/playlist/id --get-deleted --yt-dlp
Imprime todas las canciones de un artista que no están en tu biblioteca:
sldl "artist=MC MENTAL" --aggregate --skip-music-dir "path/to/music" --print results-full
Descargue todos los álbumes de un artista encontrado en soulseek:
sldl "artist=MC MENTAL" -a -g -t
Cree un archivo llamado wishlist.txt
y agregue algunos elementos como se detalla en Tipos de entrada: Lista:
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 " " format=flac "
Agregue un perfil a su sldl.conf
:
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
Esto creará un archivo de índice global wishlist-index.sldl
que se escaneará cada vez que se ejecute sldl para omitir los elementos de la lista de deseos que ya se han descargado. Si desea continuar buscando hasta que se descargue una versión que cumpla con las condiciones preferidas, agregue también skip-check-pref-cond = true
(tenga en cuenta que esto requiere que los archivos permanezcan en el mismo lugar después de la descarga).
Finalmente, configure un trabajo cron (o una tarea programada en Windows) para ejecutar sldl periódicamente con la siguiente opción:
sldl --profile wishlist
chmod +x publish.sh && sh publish.sh
. Para Mac Intel, descomente el x64 y comente la sección arm64 en Publish.sh.--no-progress
en caso de problemas. Se puede crear un contenedor acoplable para ejecutar sldl
desde este repositorio. La imagen es compatible con Linux x86/ARM.
Para construir e iniciar el contenedor:
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
exec
en el contenedor para comenzar a usar sldl
:
docker compose exec sldl sh
sldl --help
La pila de redacción monta dos directorios relativos a donde se encuentra docker-compose.yml
que se pueden usar para la administración de archivos:
/config
(en ./config
en el host): coloque su configuración sldl.conf
en este directorio y luego use sldl -c /config ...
para usar su configuración en el contenedor/data
(en ./data
en el host): utilícelo como directorio de descarga IE sldl -p /data ...
Si está ejecutando Docker en un host Linux, debe especificar los permisos user:group
del usuario propietario del directorio de configuración y datos en el host para evitar problemas de permisos de archivos de Docker. Estos se pueden especificar utilizando las variables ambientales PUID y PGID .
Para obtener el UID y GID del usuario actual, ejecute estos comandos desde una terminal:
id -u
- imprime UIDid -g
-- imprime GID Reemplácelos con la variable correspondiente ( PUID
PGID
) en docker-compose.yml
.
Se pueden ejecutar uno o más comandos sldl
según una programación utilizando el cron integrado en el contenedor.
Para crear una programación, cree un nuevo archivo en el host ./config/crontabs/abc
y utilícelo con la sintaxis estándar de crontab.
Asegúrese de reiniciar el contenedor después de realizar cualquier cambio en el archivo cron.
Ejemplo => Ejecute sldl
todos los domingos a la 1 a. m., busque pistas faltantes en la lista de reproducción de Spotify especificada
# 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 podría usarse para ayudar con la expresión de programación.