Um downloader automático para Soulseek desenvolvido com Soulseek.NET. Aceita arquivos CSV, bem como URLs do Spotify e do YouTube. Suporta downloads de playlists e álbuns; seleciona os melhores arquivos de acordo com as condições e heurísticas de arquivo configuradas pelo usuário.
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
Opções Gerais
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
Opções de pesquisa
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.
Opções de arquivo 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
Opções de condição de arquivo
--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.
Opções de download de álbum
-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
Opções agregadas de download
-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
Notas
Acrônimos de sinalizadores de duas e três palavras também são aceitos, por exemplo, --twf. Se a opção contiver a palavra 'max', o m deverá estar em maiúscula. 'taxa de bits', 'sameplerate' e 'profundidade de bits' devem ser tratados como duas palavras separadas, por exemplo, --Mbr para --max-bitrate.
Os sinalizadores podem ser explicitamente desabilitados definindo-os como falsos, por exemplo, '--interactive false'
Tipos de entrada
O tipo de entrada geralmente é determinado automaticamente. Para forçar um tipo de entrada específico, defina --input-type [spotify|youtube|csv|string|bandcamp|list]. Os seguintes tipos de entrada estão disponíveis:
Arquivo CSV
Caminho para um arquivo CSV local: Use um arquivo CSV contendo informações da faixa das músicas para download. Os nomes das colunas devem ser Artista, Título, Álbum, Duração, embora nomes alternativos também sejam geralmente detectados. Apenas a coluna do título ou do álbum é obrigatória, mas informações extras podem melhorar a classificação dos resultados de pesquisa. Cada linha que não tiver um texto na coluna de título será tratada como um download de álbum.
YouTube
URL da playlist: Baixe músicas de uma playlist do YouTube. O método padrão para recuperar playlists nem sempre retorna todos os vídeos, especialmente aqueles que não estão disponíveis. Para obter todos os títulos de vídeo, você pode usar a API oficial fornecendo uma chave com --youtube-key. Obtenha aqui https://console.cloud.google.com. Crie um novo projeto, clique em "Ativar API" e pesquise "dados do YouTube" e siga as instruções.
Spotify
Um URL de lista de reprodução/álbum ou 'spotify-likes': baixe uma lista de reprodução, um álbum do Spotify ou suas músicas favoritas. As credenciais são necessárias ao baixar uma lista de reprodução privada ou músicas favoritas.
Usando credenciais
Clique para expandir
Crie um aplicativo Spotify em https://developer.spotify.com/dashboard/applications com um URL de redirecionamento http://localhost:48721/callback. Obtenha um ID e um segredo do aplicativo no painel do aplicativo criado.
Inicie o sldl com as credenciais obtidas e uma ação autorizada para acionar o fluxo de login do aplicativo Spotify:
sldl tentará abrir um navegador automaticamente, mas retornará ao registro da URL do fluxo de login para saída. Após a conclusão do fluxo de login, o sldl gerará um token e um token de atualização e concluirá a execução do comando atual.
Para ignorar a necessidade de fluxo de login sempre que o sldl for usado, o token e o token de atualização podem ser fornecidos ao sldl (dica: armazene essas informações no arquivo de configuração para tornar os comandos menos detalhados):
O acesso ao token spotify é válido apenas por 1 hora. spotify-refresh permitirá que o sldl renove o acesso sempre que for executado (e pode ser usado sem incluir o spotify-token)
Bandcamp
URL do bandcamp: baixe uma única faixa, um álbum ou a discografia completa de um artista. Extrai o nome do artista, o nome do álbum e define --album-track-count="n+", onde n é o número de faixas visíveis na página do bandcamp.
Sequência de pesquisa
Nome da faixa, álbum ou artista a ser pesquisado: pode ser qualquer string de pesquisa típica (como a que você inseriria na barra de pesquisa do soulseek) ou uma lista de propriedades separadas por vírgulas, como 'title=Nome da música, artista= Nome do artista, comprimento=215'.
As seguintes propriedades são aceitas:
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
Exemplos de entradas e suas interpretações:
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 |
Lista
Um caminho para um arquivo de texto onde cada linha tem o seguinte formato:
Onde "alguma entrada" é qualquer um dos tipos de entrada acima. As aspas podem ser omitidas se o campo não contiver espaços. Os campos de condição são adicionados às condições configuradas e também podem ser omitidos. A entrada da lista deve ser ativada manualmente com --input-type=list. Ele também aceita uma abreviatura para downloads de álbuns: a:"Artist - Album" . Observe que o a: deve aparecer fora das aspas.
Modos de download
Normal
O padrão. Baixa um único arquivo para cada entrada de entrada.
Álbum
sldl irá procurar o álbum e baixar uma pasta inteira, incluindo arquivos que não sejam de áudio. Ativado quando a entrada é um link para um álbum do Spotify ou Bandcamp, quando a string de entrada ou linha CSV não tem título de faixa ou quando -a/--album está habilitado.
Agregar
Com -g/--gregate, o sldl realiza uma pesquisa comum pela entrada e depois tenta agrupar os resultados em músicas distintas e baixar uma de cada tipo, começando pela compartilhada pela maioria dos usuários. Observe que --min-shares-gregate é 2 por padrão, o que significa que as músicas compartilhadas por apenas um usuário serão ignoradas.
Agregado de Álbum
Ativado quando --album e --agregate estão habilitados. sldl agrupará compartilhamentos e baixará um de cada álbum distinto, começando pelo compartilhado pelo maior número de usuários. É recomendado emparelhar isso com --interactive. Observe que --min-shares-gregate é 2 por padrão, o que significa que os álbuns compartilhados por apenas um usuário serão ignorados.
Procurando
Consulta de pesquisa
A consulta de pesquisa é determinada da seguinte forma:
Para downloads de álbuns: Se o campo do álbum não estiver vazio, procure por 'Álbum do Artista'. Caso contrário, procure por 'Título do Artista'
Para todos os outros tipos de download: Se o campo do título não estiver vazio, procure por 'Título do Artista'. Caso contrário, procure por 'Álbum do Artista'
Limites de taxa do Soulseek
O servidor irá bani-lo por 30 minutos se muitas pesquisas forem realizadas em um curto espaço de tempo. O programa possui um limitador de pesquisa que pode ser ajustado com --searches-per-time e --searches-renew-time (quando o limite for atingido, o status dos downloads será "Aguardando"). Por padrão, ele está configurado para permitir até 34 pesquisas a cada 220 segundos. Os valores padrão foram determinados através de experimentação, portanto podem estar incorretos.
Acelerando as coisas
As opções a seguir tornarão o processo mais rápido, mas poderão diminuir a qualidade dos resultados da pesquisa ou causar instabilidade:
--fast-search ignora a espera até que a pesquisa seja concluída e faz o download assim que um arquivo que corresponda às condições preferidas for encontrado
--concurrent-downloads - defina como 4 ou mais
--max-stale-time é definido como 50 segundos por padrão, então ele irá esperar muito tempo antes de desistir de um arquivo
--searches-per-time - aumenta o risco de banimentos.
Condições do arquivo
Os arquivos que não atenderem às condições exigidas não serão baixados. Arquivos que satisfaçam as pré-condições serão preferidos; a configuração --pref-format "flac,wav" fará com que ele baixe arquivos sem perdas, se disponíveis, e só baixe arquivos com perdas se não houver mais nada.
Não há condições obrigatórias padrão. As condições preferenciais padrão são:
O sldl irá, portanto, preferir arquivos mp3 com taxa de bits entre 200 e 2500 kbps e cujo comprimento difere do comprimento fornecido em não mais que 3 segundos. Ele também preferirá arquivos cujos caminhos contenham o título e o álbum fornecidos (ignorando maiúsculas e minúsculas e delimitados por caracteres de limite) e que tenham comprimento não nulo. Não é recomendado alterar as três últimas condições preferidas. Observe que os arquivos que satisfazem um subconjunto das condições preferenciais ainda serão preferidos aos arquivos que não satisfazem nenhuma condição, mas algumas condições têm precedência sobre outras. Por exemplo, um arquivo que satisfaça apenas o título estrito (se habilitado) sempre terá preferência sobre um arquivo que satisfaça apenas a condição de formato. Execute com --print "resultados completos" para revelar a lógica de classificação.
As condições também podem ser fornecidas como uma string delimitada por ponto e vírgula com --cond e --pref, por exemplo --cond "br >= 320; format = mp3,ogg; sr < 96000".
Filtrando resultados irrelevantes
As opções --strict-title, --strict-artist e --strict-album irão filtrar qualquer arquivo que não contenha o título/artista/álbum no nome do arquivo (ignorando maiúsculas e minúsculas, delimitado por caracteres de limite). Outra maneira de evitar downloads falsos é definir --length-tol como 3 ou menos para ignorar qualquer música que difira da entrada em mais de 3 segundos. No entanto, todas as 4 opções já estão habilitadas como condições 'preferenciais' por padrão, o que significa que tais arquivos só serão baixados como último recurso. Portanto, só é recomendado ativá-los se você precisar minimizar ao máximo os downloads falsos, ou para casos especiais como faixas ou álbuns cujo nome tenha apenas um ou dois caracteres.
Nota importante
Algumas informações podem estar indisponíveis dependendo do cliente usado pelo peer. Por exemplo, o cliente Soulseek padrão não compartilha a taxa de bits do arquivo. Se (por exemplo) --min-bitrate estiver definido, então o sldl ainda aceitará qualquer arquivo com taxa de bits desconhecida. Você pode configurá-lo para rejeitar todos os arquivos onde uma ou mais das propriedades verificadas são nulas (desconhecidas) habilitando --strict-conditions. Como consequência, se --min-bitrate também estiver definido, todos os arquivos compartilhados pelos usuários com o cliente padrão serão ignorados. Observe também que as condições preferenciais padrão já afetarão a classificação com esta opção devido às verificações de taxa de bits e taxa de amostragem.
Formato do nome
As variáveis entre {} serão substituídas pelo valor da tag de arquivo correspondente. O formato do nome suporta subdiretórios, bem como expressões condicionais como {tag1|tag2} - Se tag1 for nulo, use tag2. Literais de string entre parênteses são ignorados na verificação de nulos.
Exemplos:
"{artista} - {título}" Sempre nomeie-o como 'Artista - Título'. Como alguns arquivos no Soulseek não estão marcados, geralmente é preferível o seguinte:
"{artista( - )título|nome do arquivo}" Se o artista e o título não forem nulos, nomeie-o como 'Artista - Título', caso contrário, use o nome do arquivo original.
"{albumartist(/)álbum(/)faixa(. )título|(missing-tags/)nome da pasta(/)nome do arquivo}" Classifique os arquivos em pastas de artista/álbum se todas as tags estiverem presentes, caso contrário, coloque-os na pasta 'missing-tags'.
Variáveis disponíveis:
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)
Configuração
Local de configuração:
sldl procurará um arquivo chamado sldl.conf nos seguintes locais:
Linhas que começam com hashtags (#) serão ignoradas. Os tils nos caminhos são expandidos como o diretório do usuário.
Perfis de configuração:
Perfis são suportados:
[lossless]
pref-format = flac,wav
Para ativar o perfil acima, execute --profile "lossless". Para listar todos os perfis disponíveis, execute --profile "help". Os perfis podem ser ativados automaticamente com base em algumas condições 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
Os seguintes operadores são suportados para uso em profile-cond: &&, ||, ==, !=, !{bool}. As seguintes variáveis estão disponíveis:
Baixe todos os álbuns de um artista encontrado no soulseek:
sldl "artist=MC MENTAL" -a -g -t
Exemplo avançado: downloader automático de lista de desejos
Crie um arquivo chamado wishlist.txt e adicione alguns itens conforme detalhado em Tipos de entrada: Lista:
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 "" format=flac "
Adicione um perfil ao seu sldl.conf :
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
Isso criará um arquivo de índice global wishlist-index.sldl que será verificado toda vez que o sldl for executado para ignorar os itens da lista de desejos que já foram baixados. Se você quiser continuar pesquisando até que uma versão que atenda às condições preferidas seja baixada, adicione também skip-check-pref-cond = true (observe que isso requer que os arquivos permaneçam no mesmo local após o download). Por fim, configure um cron job (ou uma tarefa agendada no Windows) para executar periodicamente o sldl com a seguinte opção:
sldl --profile wishlist
Notas
Para compilações do macOS, você pode usar subscribe.sh para compilar o aplicativo. Baixe dotnet em https://dotnet.microsoft.com/en-us/download/dotnet/6.0 e execute chmod +x publish.sh && sh publish.sh . Para Macs Intel, remova o comentário do x64 e comente a seção arm64 em subscribe.sh.
A saída impressa pode parecer duplicada, sobreposta ou não atualizada em algumas configurações (novo terminal Windows, git bash). Use outro terminal ou --no-progress em caso de problemas.
Docker
Um contêiner docker para executar sldl pode ser construído a partir deste repositório. A imagem suporta Linux x86/ARM.
Para construir e iniciar o contêiner:
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
exec no contêiner para começar a usar sldl :
docker compose exec sldl sh
sldl --help
A pilha de composição monta dois diretórios relativos ao local onde docker-compose.yml está localizado, que podem ser usados para gerenciamento de arquivos:
/config (em ./config no host) - coloque sua configuração sldl.conf neste diretório e então use sldl -c /config ... para usar sua configuração no contêiner
/data (em ./data no host) - use como diretório de download IE sldl -p /data ...
Permissões de arquivo
Se você estiver executando o Docker em um host Linux, deverá especificar as permissões user:group do usuário que possui o diretório de configuração e dados no host para evitar problemas de permissão de arquivo do docker. Estes podem ser especificados usando as variáveis ambientais PUID e PGID .
Para obter o UID e o GID do usuário atual, execute estes comandos em um terminal:
id -u – imprime UID
id -g – imprime GID
Substitua-os pela variável correspondente ( PUIDPGID ) em docker-compose.yml .
Cron
Um ou mais comandos sldl podem ser executados de acordo com uma programação usando o cron integrado ao contêiner.
Para criar um agendamento, crie um novo arquivo no host ./config/crontabs/abc e use-o com a sintaxe padrão do crontab.
Certifique-se de reiniciar o contêiner após fazer quaisquer alterações no arquivo cron.
Exemplo => Execute sldl todos os domingos à 1h, procure por faixas ausentes na lista de reprodução especificada do Spotify