Pengunduh otomatis untuk Soulseek yang dibuat dengan Soulseek.NET. Menerima file CSV serta url Spotify dan YouTube.
Mendukung pengunduhan daftar putar dan album; memilih file terbaik sesuai dengan kondisi file dan heuristik yang dikonfigurasi pengguna.
Lihat contoh penggunaan.
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
Akronim dari bendera dua dan --tiga kata juga diterima, misalnya --twf. Jika opsi berisi kata 'max' maka m harus huruf besar. 'bitrate', 'sameplerate' dan 'bit depth' harus diperlakukan sebagai dua kata yang terpisah, misalnya --Mbr untuk --max-bitrate.
Bendera dapat dinonaktifkan secara eksplisit dengan menyetelnya ke false, misalnya '--interactive false'
Jenis masukan biasanya ditentukan secara otomatis. Untuk memaksakan jenis masukan tertentu, setel --input-type [spotify|youtube|csv|string|bandcamp|list]. Jenis masukan berikut tersedia:
Jalur ke file CSV lokal: Gunakan file csv yang berisi info trek dari lagu yang akan diunduh. Nama kolomnya harus Artis, Judul, Album, Panjang, meskipun nama alternatif biasanya juga terdeteksi. Hanya kolom judul atau album yang diperlukan, namun informasi tambahan dapat meningkatkan peringkat hasil pencarian. Setiap baris yang tidak memiliki teks kolom judul akan diperlakukan sebagai unduhan album.
Url daftar putar: Unduh lagu dari daftar putar youtube. Metode default untuk mengambil daftar putar tidak selalu mengembalikan semua video, terutama yang tidak tersedia. Untuk mendapatkan semua judul video, Anda dapat menggunakan API resmi dengan memberikan kunci --youtube-key. Dapatkan di sini https://console.cloud.google.com. Buat proyek baru, klik "Aktifkan Api" dan cari "data youtube", lalu ikuti petunjuknya.
Url playlist/album atau 'spotify-likes': Unduh playlist spotify, album, atau lagu kesukaan Anda. Kredensial diperlukan saat mengunduh daftar putar pribadi atau musik yang disukai.
Buat aplikasi Spotify di https://developer.spotify.com/dashboard/applications dengan url pengalihan http://localhost:48721/callback. Dapatkan ID aplikasi dan rahasia dari dashboard aplikasi yang dibuat.
Mulai sldl dengan kredensial yang diperoleh dan tindakan resmi untuk memicu alur login aplikasi Spotify:
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 -n 1 --print-tracks
sldl akan mencoba membuka browser secara otomatis tetapi akan kembali mencatat URL alur login ke output. Setelah alur login selesai, sldl akan menampilkan token dan menyegarkan token dan menyelesaikan menjalankan perintah saat ini.
Untuk melewati proses login yang memerlukan setiap kali sldl digunakan, token dan token penyegaran dapat diberikan ke sldl (petunjuk: simpan info ini di file konfigurasi untuk membuat perintah lebih sedikit bertele-tele):
sldl spotify-likes --spotify-id 123456 --spotify-secret 123456 --spotify-refresh 123456 --spotify-token 123456 -n 1 --pt
akses spotify-token hanya berlaku selama 1 jam. spotify-refresh akan memungkinkan sldl memperbarui akses setiap kali dijalankan (dan dapat digunakan tanpa menyertakan spotify-token)
Url bandcamp: Unduh satu lagu, album, atau seluruh diskografi artis. Mengekstrak nama artis, nama album, dan set --album-track-count="n+", dengan n adalah jumlah lagu yang terlihat di halaman bandcamp.
Nama lagu, album, atau artis yang ingin dicari: Bisa berupa string pencarian biasa (seperti apa yang akan Anda masukkan ke dalam bilah pencarian pencarian jiwa), atau daftar properti yang dipisahkan koma seperti 'judul=Nama Lagu, artis= Nama Artis, panjang=215'.
Properti berikut diterima:
title
artist
album
length (in seconds)
artist-maybe-wrong
album-track-count
Contoh masukan dan interpretasinya:
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 |
Jalur ke file teks yang setiap barisnya memiliki bentuk berikut:
"some input" "conditions" "preferred conditions"
misalnya:
"artist=Artist, album=Album" "format=mp3; br > 128" "br >= 320"
Dimana "beberapa masukan" adalah salah satu jenis masukan di atas. Tanda kutip dapat dihilangkan jika kolom tidak berisi spasi. Bidang ketentuan ditambahkan di atas ketentuan yang dikonfigurasi dan juga dapat dihilangkan. Input daftar harus diaktifkan secara manual dengan --input-type=list.
Ia juga menerima singkatan untuk pengunduhan album: a:"Artist - Album"
. Perhatikan bahwa a:
harus muncul di luar tanda kutip.
Standarnya. Mengunduh satu file untuk setiap entri masukan.
sldl akan mencari album dan mengunduh seluruh folder termasuk file non-audio. Diaktifkan ketika inputnya berupa tautan ke album spotify atau bandcamp, ketika string input atau baris csv tidak memiliki judul lagu, atau ketika -a/--album diaktifkan.
Dengan -g/--aggregate, sldl melakukan pencarian biasa untuk masukan kemudian mencoba mengelompokkan hasilnya ke dalam lagu-lagu berbeda dan mengunduh salah satu dari setiap jenis, dimulai dengan yang dibagikan oleh sebagian besar pengguna.
Perhatikan bahwa --min-shares-aggregate adalah 2 secara default, yang berarti lagu yang dibagikan hanya oleh satu pengguna akan diabaikan.
Diaktifkan ketika --album dan --aggregate diaktifkan. sldl akan mengelompokkan pembagian dan mengunduh salah satu dari setiap album berbeda, dimulai dengan album yang dibagikan oleh sebagian besar pengguna. Disarankan untuk memasangkannya dengan --interactive.
Perhatikan bahwa --min-shares-aggregate adalah 2 secara default, yang berarti album yang dibagikan hanya oleh satu pengguna akan diabaikan.
Permintaan pencarian ditentukan sebagai berikut:
Server akan melarang Anda selama 30 menit jika terlalu banyak pencarian yang dilakukan dalam jangka waktu singkat. Program ini memiliki pembatas pencarian yang dapat disesuaikan dengan --searches-per-time dan --searches-renew-time (bila batas tersebut tercapai, status unduhan akan menjadi "Menunggu"). Secara default dikonfigurasi untuk mengizinkan hingga 34 pencarian setiap 220 detik. Nilai default ditentukan melalui eksperimen, jadi mungkin saja salah.
Opsi berikut akan mempercepat proses, namun dapat menurunkan kualitas hasil penelusuran atau menyebabkan ketidakstabilan:
File yang tidak memenuhi persyaratan yang diperlukan tidak akan diunduh. File yang memenuhi kondisi awal akan lebih diutamakan; pengaturan --pref-format "flac,wav" akan membuatnya mengunduh file lossless jika tersedia, dan hanya mengunduh file lossy jika tidak ada yang lain.
Tidak ada kondisi default yang diperlukan. Kondisi pilihan default adalah:
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
Oleh karena itu, sldl akan lebih memilih file mp3 dengan bitrate antara 200 dan 2500 kbps, dan yang panjangnya berbeda dari panjang yang disediakan tidak lebih dari 3 detik. Ia juga akan memilih file yang jalurnya berisi judul dan album yang disediakan (mengabaikan huruf besar/kecil, dan dibatasi oleh karakter batas) dan yang panjangnya bukan nol. Mengubah tiga kondisi pilihan terakhir tidak disarankan.
Perhatikan bahwa file yang memenuhi sebagian kondisi yang diinginkan akan tetap lebih disukai dibandingkan file yang tidak memenuhi kondisi apa pun, namun beberapa kondisi lebih diutamakan dibandingkan kondisi lainnya. Misalnya, file yang hanya memenuhi judul ketat (jika diaktifkan) akan selalu lebih disukai daripada file yang hanya memenuhi kondisi format. Jalankan dengan --print "results-full" untuk menampilkan logika pengurutan.
Kondisi juga dapat diberikan sebagai string yang dipisahkan titik koma dengan --cond dan --pref, misalnya --cond "br >= 320; format = mp3,ogg; sr < 96000".
Opsi --strict-title, --strict-artist dan --strict-album akan memfilter file apa pun yang tidak berisi judul/artis/album dalam nama file (mengabaikan huruf besar/kecil, dibatasi oleh karakter batas).
Cara lain untuk mencegah download palsu adalah dengan menyetel --length-tol ke 3 atau kurang untuk mengabaikan lagu apa pun yang berbeda dari input lebih dari 3 detik. Namun, keempat opsi tersebut telah diaktifkan sebagai kondisi 'pilihan' secara default, artinya file tersebut hanya akan diunduh sebagai upaya terakhir. Oleh karena itu, disarankan untuk mengaktifkannya hanya jika Anda perlu meminimalkan unduhan palsu sebanyak mungkin, atau untuk kasus khusus seperti trek atau album yang namanya hanya terdiri dari satu atau dua karakter.
Beberapa info mungkin tidak tersedia tergantung pada klien yang digunakan oleh rekan. Misalnya, klien Soulseek standar tidak membagikan bitrate file. Jika (misalnya) --min-bitrate disetel, maka sldl akan tetap menerima file apa pun dengan bitrate yang tidak diketahui. Anda dapat mengonfigurasinya untuk menolak semua file yang satu atau lebih properti yang diperiksa adalah null (tidak diketahui) dengan mengaktifkan --strict-conditions.
Sebagai konsekuensinya, jika --min-bitrate juga disetel maka file apa pun yang dibagikan oleh pengguna dengan klien default akan diabaikan. Perhatikan juga bahwa kondisi pilihan default sudah akan memengaruhi peringkat dengan opsi ini karena pemeriksaan bitrate dan samplerate.
Variabel yang diapit {} akan diganti dengan nilai tag file yang sesuai. Format nama mendukung subdirektori serta ekspresi kondisional seperti {tag1|tag2} - Jika tag1 adalah null, gunakan tag2. Literal string yang diapit tanda kurung diabaikan dalam pemeriksaan nol.
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 akan mencari file bernama sldl.conf di lokasi berikut:
~/AppData/Roaming/sldl/sldl.conf
~/.config/sldl/sldl.conf
serta di direktori yang dapat dieksekusi.
Contoh file konfigurasi:
username = your-username
password = your-password
pref-format = flac
fast-search = true
Baris yang dimulai dengan hashtag (#) akan diabaikan. Tilde di jalur diperluas sebagai direktori pengguna.
Profil didukung:
[lossless]
pref-format = flac,wav
Untuk mengaktifkan profil di atas, jalankan --profile "lossless". Untuk membuat daftar semua profil yang tersedia, jalankan --profile "help".
Profil dapat diaktifkan secara otomatis berdasarkan beberapa kondisi sederhana:
[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
Operator berikut didukung untuk digunakan dalam profile-cond: &&, ||, ==, !=, !{bool}.
Variabel berikut tersedia:
input-type ("youtube"|"csv"|"string"|"bandcamp"|"spotify")
download-mode ("normal"|"aggregate"|"album"|"album-aggregate")
interactive (bool)
Unduh trek dari file csv:
sldl test.csv
Unduh suka Spotify:
sldl spotify-likes
Pengunduhan album interaktif:
sldl "Some Album" -a -t
Unduh lagu tertentu berdasarkan nama, lebih memilih lagu lossless:
sldl "MC MENTAL @ HIS BEST, length=242" --pref-format "flac,wav"
Unduh album setiap lagu di playlist Spotify:
sldl https://spotify/playlist/id -a
Ambil nama video yang dihapus, lalu unduh dari playlist youtube dengan fallback ke yt-dlp:
sldl https://www.youtube.com/playlist/id --get-deleted --yt-dlp
Cetak semua lagu dari artis yang tidak ada di perpustakaan Anda:
sldl "artist=MC MENTAL" --aggregate --skip-music-dir "path/to/music" --print results-full
Unduh semua album artis yang ditemukan di soulseek:
sldl "artist=MC MENTAL" -a -g -t
Buat file bernama wishlist.txt
, dan tambahkan beberapa item seperti yang dirinci di Jenis input: Daftar:
" Artist - My Favorite Song "
a: " Artist - Some Album, album-track-count=5 " " format=flac "
Tambahkan profil ke sldl.conf
Anda:
[wishlist]
input = ~/sldl/wishlist.txt
input-type = list
index-path = ~/sldl/wishlist-index.sldl
Ini akan membuat file indeks global wishlist-index.sldl
yang akan dipindai setiap kali sldl dijalankan untuk melewati item wishlist yang telah diunduh. Jika Anda ingin melanjutkan pencarian hingga versi yang memenuhi kondisi pilihan diunduh, tambahkan juga skip-check-pref-cond = true
(perhatikan bahwa ini mengharuskan file tetap berada di tempat yang sama setelah diunduh).
Terakhir, atur tugas cron (atau tugas terjadwal di windows) untuk menjalankan sldl secara berkala dengan opsi berikut:
sldl --profile wishlist
chmod +x publish.sh && sh publish.sh
. Untuk intel mac, batalkan komentar pada x64 dan beri komentar pada bagian arm64 di terbitkan.sh.--no-progress
jika terjadi masalah. Kontainer buruh pelabuhan untuk menjalankan sldl
dapat dibuat dari repositori ini. Gambar mendukung linux x86/ARM.
Untuk membangun dan memulai penampung:
clone https://github.com/fiso64/slsk-batchdl
cd slsk-batchdl
docker compose up -d
exec
ke dalam wadah untuk mulai menggunakan sldl
:
docker compose exec sldl sh
sldl --help
Tumpukan penulisan memasang dua direktori relatif terhadap lokasi docker-compose.yml
yang dapat digunakan untuk manajemen file:
/config
(di ./config
di host) - letakkan konfigurasi sldl.conf
Anda di direktori ini dan kemudian gunakan sldl -c /config ...
untuk menggunakan konfigurasi Anda di dalam container/data
(di ./data
di host) - gunakan sebagai direktori unduhan IE sldl -p /data ...
Jika Anda menjalankan Docker di Host Linux, Anda harus menentukan izin user:group
dari pengguna yang memiliki konfigurasi dan direktori data di Host untuk menghindari masalah izin file buruh pelabuhan. Ini dapat ditentukan menggunakan variabel lingkungan PUID dan PGID .
Untuk mendapatkan UID dan GID untuk pengguna saat ini, jalankan perintah berikut dari terminal:
id -u
-- mencetak UIDid -g
-- mencetak GID Ganti ini dengan variabel yang sesuai ( PUID
PGID
) di docker-compose.yml
.
Satu atau lebih perintah sldl
dapat dijalankan sesuai jadwal menggunakan cron yang ada di dalam container.
Untuk membuat jadwal, buatlah file baru di host ./config/crontabs/abc
dan gunakan dengan sintaks crontab standar.
Pastikan untuk memulai ulang container setelah ada perubahan apa pun pada file cron dilakukan.
Contoh => Jalankan sldl
setiap hari Minggu jam 1 pagi, cari lagu yang hilang dari playlist Spotify yang ditentukan
# 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 dapat digunakan untuk membantu ekspresi penjadwalan.