Lidarr는 음악 라이브러리를 관리하는 도구입니다. 아티스트별로 정리하여 각 앨범을 관리할 수 있어 매우 편한데, 공개 토렌트에서 구할 수 있는 자료의 한계가 명확하다는 단점이 있습니다.
Soulseek을 도커로 사용할 수 있는 Slskd와 자동화 스크립트인 Soularr를 함께 사용하겠습니다.
Contents
Lidarr
초기 설정
Docker Compose와 .env
는 아래 부분입니다.
torrent_lidarr:
image: linuxserver/lidarr:latest
container_name: torrent_lidarr
environment:
- PUID=${UID}
- PGID=${GID}
- TZ=${TZ}
volumes:
- ${CONFIG}/lidarr/config:/config
- ${LIBRARY}/music:/mnt/music
- ${DOWNLOADS}:${DOWNLOADSMOUNT}
restart: unless-stopped
depends_on:
- gluetun
network_mode: "service:gluetun"
CONFIG=/mnt/RN428/arr
DOWNLOADS=/mnt/RN428/torrent
DOWNLOADSMOUNT=/mnt/torrent
LIBRARY=/mnt/RN428/media
UID=3001
GID=0
TZ=Asia/Seoul
CAPTCHA_SOLVER=hcaptcha-solver
USER="3001:0"
VPN_PROVIDER=mullvad
FIREWALL_OUTBOUND_SUBNETS=192.168.0.1/24
TrueNAS IP:8686
으로 접속하면 Lidarr의 초기 설정 화면을 만날 수 있습니다. Prowlarr, Sonarr, Radarr 때와 동일합니다.

이전 글과 마찬가지로 Root Folders를 먼저 지정해 줍니다.


Quality Profile과 Metadata Profile은 추후 더 상세하게 지정할 수 있습니다.


Root Folder를 추가하고 나면 왼쪽 하단에서 라이브러리를 구성하기 위한 진행도를 확인할 수 있습니다.

Sonarr나 Radarr처럼 직접 Import를 해야 하는 게 아니라, Root Folder에 있는 모든 음악 파일은 자동적으로 라이브러리에 포함되도록 되어 있기 때문에, 진행이 끝나면 아래 예시처럼 직접 Import를 해야 하는 게 아니라, Root Folder에 있는 모든 음악 파일은 자동적으로 라이브러리에 포함되도록 되어 있기 때문에, 진행이 끝나면 아래 예시처럼 아티스트별로 정리된 라이브러리가 나타나게 됩니다(태그 정리여부에 따라 다름).

이후, 이전 글을 참고해 Prowlarr에 API Key를 등록하고 qBittorrent등 다운로드 클라이언트를 연동하시면 됩니다.
Quality Profiles & Metadata Profiles
Settings – Profiles 탭으로 이동하면 아래처럼 Quality Profiles와 Metadata Profiles를 확인할 수 있습니다.

최대 WAV파일까지 지정할 수 있고, Sonarr나 Radarr처럼 파일을 지속적으로 모니터링하고 업그레이드 할 수 있는 옵션을 갖추고 있습니다.

Metadata Profile의 경우 옵션을 세세하게 나누어 두고 있어, 여러 개의 프로필을 생성한 후 경우에 맞게 지정할 수 있습니다.
예를 들어, 앨범을 내기 전 계속해서 싱글 앨범을 먼저 릴리즈하는 경우라면 Primary Types에서 Single을 체크해줄 필요가 있습니다.
Gorilaz같은 밴드의 경우 Interview앨범이 있는데, 이런 앨범까지 원하는 경우는 Secondary Types에서 Interview가 체크되어야 하겠죠.

각 옵션에 대한 설명은 퍼플렉시티 Pro를 이용해 아래 표로 정리해 놓았으니, 읽어보신 후 필요로 하는 프로필을 생성하여 사용하시면 됩니다.
Primary Type | 설명 |
---|---|
Album | 여러 곡이 수록된 정규 음반. 일반적으로 아티스트의 주요 작품으로 간주됨. |
Broadcast | 라디오, TV 등 방송을 통해 공개된 음원이나 공연을 수록한 음반. |
EP | Extended Play의 약자. 싱글보다는 길고, 정규 앨범보다는 짧은 소규모 음반(보통 3~6곡 수록). |
Other | 기타 분류에 속하지 않는 음반. 특수하거나 독립적인 형태의 릴리즈. |
Single | 한두 곡만 수록된 단일 음반. 주로 대표곡(타이틀곡) 위주로 발매됨. |
Secondary Type | 설명 |
---|---|
Studio | 스튜디오에서 녹음된 정규 음반. 오리지널 트랙이 수록된 가장 표준적인 앨범. |
Spokenword | 음악이 아닌 낭독, 시, 스토리텔링 등 말로 이루어진 콘텐츠 중심의 앨범. |
Soundtrack | 영화, 드라마, 게임 등 특정 미디어의 배경음악이나 삽입곡을 모은 앨범. |
Remix | 기존 곡을 새로운 스타일이나 편곡으로 재구성한 트랙을 모은 앨범. |
Mixtape/Street | 비공식적으로 배포되는 믹스테이프나 스트리트 앨범. 프로모션, DJ 믹스 등이 포함. |
Live | 콘서트, 공연 등 현장에서 실황 녹음된 앨범. 현장감과 관객 반응이 포함됨. |
Interview | 아티스트, 밴드, 관계자의 인터뷰가 수록된 앨범. 대화, 질의응답 중심. |
DJ-mix | DJ가 여러 곡을 이어붙여 만든 연속 믹스 앨범. 클럽/파티 분위기 연출. |
Demo | 공식 발매 전, 곡의 초안이나 데모 버전이 담긴 앨범. |
Compilation | 여러 아티스트 또는 한 아티스트의 다양한 곡을 모은 모음집 앨범. |
Audio Drama | 연극적 요소(대사, 효과음 등)로 구성된 오디오 드라마 앨범. 스토리텔링 중심. |
Release Status | 설명 |
---|---|
Official | 아티스트 또는 레코드 회사에서 공식적으로 승인하고 발매한 음반. |
Promotion | 홍보 목적으로 배포되는 음반. 예: 라디오, 잡지 부록, 샘플 CD 등. |
Bootleg | 아티스트나 레코드 회사의 허가 없이 비공식적으로 유통되는 음반. 해적판, 무단 라이브 녹음 등. |
Pseudo-Release | 원본 음반의 대체 트랙리스트(다른 언어, 표기 등)를 제공하는 비공식 형태. 실제 녹음물은 동일. |
Wanted
라이브러리 스캔 및 아티스트별 프로필을 적용하면, Lidarr는 기본적으로 MusicBrainz의 메타데이터를 활용해 앨범을 나열하고 수록곡을 정리한 뒤, 없는 파일을 리스트로 정렬합니다.
그 리스트가 바로 Wanted이며, 좌측 메뉴에서 확인할 수 있습니다.

Missing은 현재 없는 곡, Cutoff Unmet은 음원은 있지만 지정한 음질에 미달하는 경우입니다. 이 리스트는 기본적으로 Lidarr가 모니터링하며 토렌트를 검색하는 리스트이고, 추후 Slskd와 Soularr를 연동할 때 유용하게 쓰입니다.
다운로드
좌측의 Add New를 클릭해 아티스트를 검색하고 추가하면 끝입니다. 아티스트가 추가되는 즉시 Lidarr는 아티스트의 앨범데이터를 이용해 Wanted에 곡을 추가하고 검색을 시작합니다.


앨범을 검색해도 됩니다(그 앨범의 아티스트가 추가됨).
라이브러리 관리하기
Metadata 및 파일명 규칙 설정하기
Radarr, Sonarr와 마찬가지로 Lidarr도 qBittorrent를 직접 감시하고 다운로드가 완료된 파일을 직접 가져와 라이브러리를 구성할 수 있습니다. 그런데, 앞의 둘은 파일명과 폴더명에 크게 구애받지 않습니다. 프로그램 및 사람이 모두 인식할 정도면 이용하는 데 큰 불편함이 없고, Plex나 Jellyfin 등에서도 무리없이 이용할 수 있습니다.
그러나 음반의 경우, 같은 음원이어도 동시에 여러 앨범에 중복적으로 속하는 경우 그 메타데이터가 모두 다 다르고, 같은 곡이지만 서로 다른 가수가 불러(리메이크 등) 또 메타데이터가 다른 경우가 있습니다. 그래서 음원관리도구들은 기본적으로 태그를 읽도록 구성되어 있습니다. 아무리 폴더와 파일명을 자신의 규칙에 맞게 잘 관리하고 있었다 한들, 태그정리가 잘 되어있지 않다면 이런 자동화도구를 사용할 때 많은 에로사항이 따라오기 때문에, 태그정리를 하는 것이 반필수적입니다.
다행히, Lidarr는 관리되고 있는 파일 및 폴더명 수정 외에도 MusicBrainz의 태그를 자동으로 쓰도록 지정할 수 있습니다.
먼저, Settings – Metadata로 이동한 뒤, Tag Audio Files with Metadata 옵션을 활성화합니다.

메타데이터 쓰기 옵션에는 3가지(Never 제외)가 있는데, 항상 MusicBrainz의 것과 동기화하기, 맨 처음 파일을 읽어들일 때만, 새로 다운로드하는 파일만, 이렇게 3가지입니다.
저는 첫 번째로 사용중입니다.

Embed Cover Art in Audio Files를 체크하면 앨범 아트도 같이 태그에 넣어줍니다.
Scrub Exisiting Tags는 MusicBrainz에 없는 항목의 태그가 이미 파일에 쓰여있을 경우 해당 항목을 남겨둘 것인가 말 것인가를 정하는 옵션입니다. 한국 음원 중에는 MusicBrainz에 메타데이터가 없거나 빈약한 것들도 많기 때문에 저는 비활성화해 놓았습니다.
이후 Settings – Media Management로 이동해 파일 및 폴더명 규칙을 정의합니다.

물음표를 클릭하면 파일명 규칙에 필요한 옵션을 확인할 수 있습니다.

제가 현재 사용하는 폴더 및 파일명 규칙은 아래와 같습니다.
단일 디스크 음원일 경우 : {Album Title} ({Release Year})/{Artist Name} - {Album Title} - {track:00} - {Track Title}
멀티 디스크 음원일 경우 : {Album Title} ({Release Year})/CD {medium:00}/{Artist Name} - {Album Title} - {track:00} - {Track Title}
이후 Rename Tracks를 활성화하면 Lidarr가 알아서 새로 Import되는 음원 모두에 대해 메타데이터를 입히고 폴더와 파일 이름을 정렬해 줍니다.
Manual Import
태그가 제대로 기록되어 있지 않거나 파일명이 이상한 경우 Lidarr가 파일 정보를 제대로 파악하지 못한 경우 Unmapped Files로 분류됩니다. 이러한 파일들을 제대로 된 앨범에 매칭시키는 것을 Manual Import라고 합니다. 해당 파일들은 Library – Unmapped Files 탭에서 확인할 수 있습니다.
각 리스트의 오른쪽에 있는 사람모양의 아이콘을 클릭해서 매칭작업을 진행할 수 있고, 비슷한 파일명이 있을 경우 동일한 앨범으로 인식해 묶어서 매칭할 수 있게 됩니다.

예를 들어, 아래의 파일은 일반적으로 Various Artists로 분류해버리지만, MusicBrainz에서는 T-ARA의 앨범으로 분류가 되어 있습니다.
따라서 아래처럼, Artist에 T-ARA, Album에 진통제를 클릭해서 Manual Import를 진행할 수 있으며, Import하는 즉시 설정한 파일명 규칙대로 변경됩니다.

메타데이터 동기화 옵션을 사용하지 않았을 경우 Manual Import 이후 해당 아티스트의 탭으로 들어가 Preview Retag을 클릭해 메타데이터를 입혀줘야 합니다.
그렇지 않을 경우 Lidarr가 Rescan을 수행하며 해당 파일을 다시 Unmapped Files로 빼버리기 때문입니다(태그가 일치하지 않으므로).

라이브러리 일괄 적용하기
위의 Metadata와 파일명 규칙을 모두 설정한 이후에는, 일관성을 위해 이미 존재했던 파일들에 일괄적으로 적용할 필요가 있습니다.
일괄 작업을 할 때는 우선 Lidarr의 메인 페이지에서 Select Artists를 클릭해 다중 선택모드로 변경한 후,

Select All을 클릭해 일괄 선택하여 하단의 Rename Files와 Write Metadata Tags를 진행해주면 됩니다.
초기 라이브러리 규모가 클 경우 꽤 오랜 시간이 소요되므로 느긋하게 기다리셔야 합니다.

알람 설정
이전 글의 Radarr, Sonarr와 동일합니다.
Slskd
초기 설정
Docker Compose와 .env
는 아래 부분입니다.
slskd:
image: slskd/slskd:latest
container_name: slskd
restart: unless-stopped
user: ${USER}
environment:
- SLSKD_REMOTE_CONFIGURATION=true
- "SLSKD_SHARED_DIR=/mnt/music"
volumes:
- ${CONFIG}/slskd:/app
- ${LIBRARY}/music:/mnt/music
- ${DOWNLOADS}:${DOWNLOADSMOUNT}
depends_on:
- gluetun
network_mode: "service:gluetun"
CONFIG=/mnt/RN428/arr
DOWNLOADS=/mnt/RN428/torrent
DOWNLOADSMOUNT=/mnt/torrent
LIBRARY=/mnt/RN428/media
UID=3001
GID=0
TZ=Asia/Seoul
CAPTCHA_SOLVER=hcaptcha-solver
USER="3001:0"
VPN_PROVIDER=mullvad
FIREWALL_OUTBOUND_SUBNETS=192.168.0.1/24
Slskd는 Soulseek네트워크를 이용할 수 있는 도커 이미지입니다. Soulseek의 자체 바이너리 프로그램도 있지만, 우리는 TrueNAS환경에서 도커로 세팅하고 있으므로 Slskd가 좀 더 유용합니다. 접속 주소는 TrueNAS IP:5030
이며, 초기 Web UI의 Username/Password는 slskd/slskd입니다.

이를 변경하기 위해서, 우측 상단의 System을 클릭한 뒤 Options탭에서 Edit버튼을 클릭합니다.

136번째 줄의 web.authetnication.username과 password의 주석을 삭제하고 Web UI 로그인에 사용할 계정을 설정합니다.

Info탭을 클릭한 뒤, Restart를 클릭해 재실행해줍니다.

아래와 같이 연결이 끊기면, 잠시 기다렸다가 새로고침을 해 줍니다.

그럼 다시 로그인 창이 나오고, 위에서 변경했던 계정으로 로그인할 수 있게 됩니다.
이제 Soulseek네트워크에 로그인할 계정을 생성해야 합니다.
다시 System – Options 탭으로 이동한 뒤 Edit을 클릭한 후, 이번엔 188, 191, 192번째 줄의 soulseek.username과 soulseek.password를 설정합니다.
Soulseek은 별도의 회원가입 등의 절차가 없고, 사용하려는 계정이 사용가능할 경우(없을 경우) 자동으로 계정이 생성됩니다.

Save를 클릭한 뒤, 우측 상단의 Disconnected를 클릭해보면, Connected로 변경되는 것을 보실 수 있습니다.


이러면 로그인은 잘 수행된 것입니다.
이 글대로 docker compose를 구성했다면, Shares탭에 자동으로 음악 라이브러리가 등록되어 있을텐데요.

공유해주기 싫어도 이대로 놔두는 것이 좋습니다.업로드 트래픽과 다운로드 트래픽의 불균형이 심할 경우 Soulseek에서 밴되는 경우도 있고, 쿼터가 지나치게 낮은 유저는 다운받지 못하도록 차단하고 있는 유저도 있기 때문입니다. 추후 Soularr를 통해 자동화 구성을 하기 위해서라도 공유는 열어두는 것이 좋으며, 가끔 라이브러리 변동사항을 반영 못하는 경우가 있으니 주기적으로 Rescan Shares를 클릭해 주면 좋습니다.

본래 slskd는 Web UI에서 slskd.yml
의 설정을 변경할 수 없도록 막아두고 있으나, docker compose의 environment값인 SLSKD_REMOTE_CONFIGURATION=true
를 통해 설정을 편집할 수 있는 것임을 알아두시면 좋습니다.
원래는 아래처럼 쉘에서 변경해야 합니다.
fentablog@rn428:/mnt/RN428/arr/slskd$ sudo nano slskd.yml

다운로드
다운로드는 쉽습니다. 상단의 Search탭에서 원하는 검색어를 입력하고, 출력된 결과에서 원하는 걸 골라 다운받으면 됩니다.



직관적인 P2P기반의 프로그램이기 때문에, 사용법이 어렵지 않습니다.
이제 Soularr와 Lidarr를 연동해 Slskd를 자동화시키면 됩니다.
Soularr
초기 설정
Docker Compose와 .env
는 아래 부분입니다.
soularr:
image: mrusse08/soularr:latest
container_name: soularr
user: ${USER}
environment:
- TZ=${TZ}
- SCRIPT_INTERVAL=600
volumes:
- ${DOWNLOADS}/soulseek:${DOWNLOADSMOUNT}/soulseek
- ${CONFIG}/soularr:/data
restart: unless-stopped
depends_on:
- gluetun
- torrent_lidarr
- slskd
network_mode: "service:gluetun"
CONFIG=/mnt/RN428/arr
DOWNLOADS=/mnt/RN428/torrent
DOWNLOADSMOUNT=/mnt/torrent
LIBRARY=/mnt/RN428/media
UID=3001
GID=0
TZ=Asia/Seoul
CAPTCHA_SOLVER=hcaptcha-solver
USER="3001:0"
VPN_PROVIDER=mullvad
FIREWALL_OUTBOUND_SUBNETS=192.168.0.1/24
Soularr는 Lidarr의 Wanted리스트를 읽어 Slskd에서 검색 후 다운로드 완료된 파일을 다시 Lidarr에 Import시켜주는 파이썬 스크립트입니다. 이 기능이 정상적으로 작동하기 위해서는, Slskd, Soularr, Lidarr 모두 동일한 경로의 다운로드 폴더를 바라볼 수 있어야 합니다. Slskd는 지정된 다운로드 경로 하위에 soulseek과 incomplete라는 폴더를 생성하고 다운중인 파일은 incomplete에, 완료된 파일은 soulseek폴더에 저장하기 때문에 volumes
에서 soulseek폴더를 직접 지정해줬습니다.
Soularr는 매핑된 볼륨에 직접 config.ini를 생성해줘야 합니다. 이 글에서 컨테이너 내부의 /data
에 매핑된 폴더는 /mnt/RN428/arr/soularr
이므로 해당 위치로 이동합니다.
그리고 아래와 같이 입력해서 config.ini의 편집을 시작합니다.
fentablog@rn428:/mnt/RN428/arr/soularr$ nano config.ini
config.ini의 기본 양식은 아래와 같습니다. 여기서 해당하는 것들을 하나하나 수정해야 합니다.
[Lidarr]
api_key = yourlidarrapikeygoeshere
host_url = http://lidarr:8686
download_dir = /data/slskd_downloads
disable_sync = False
[Slskd]
api_key = yourslskdapikeygoeshere
host_url = http://slskd:5030
url_base = /
download_dir = /downloads
delete_searches = False
stalled_timeout = 3600
[Release Settings]
use_most_common_tracknum = True
allow_multi_disc = True
accepted_countries = Europe,Japan,United Kingdom,United States,[Worldwide],Australia,Canada
accepted_formats = CD,Digital Media,Vinyl
[Search Settings]
search_timeout = 5000
maximum_peer_queue = 50
minimum_peer_upload_speed = 0
minimum_filename_match_ratio = 0.8
allowed_filetypes = flac 24/192,flac 16/44.1,flac,mp3 320,mp3
ignored_users = User1,User2,Fred,Bob
search_for_tracks = True
album_prepend_artist = False
track_prepend_artist = True
search_type = incrementing_page
number_of_albums_to_grab = 10
remove_wanted_on_failure = False
title_blacklist = BlacklistWord1,blacklistword2
search_source = missing
[Logging]
level = INFO
# https://docs.python.org/3/library/logging.html#logrecord-attributes
format = [%(levelname)s|%(module)s|L%(lineno)d] %(asctime)s: %(message)s
# https://docs.python.org/3/library/time.html#time.strftime
datefmt = %Y-%m-%dT%H:%M:%S%z
config.ini의 옵션 설명은 공식 레포를 참조하시면 됩니다. 이 글에서는 주요한 부분만 말씀드리겠습니다.
먼저 Lidarr부분입니다.
- api_key : Lidarr와 Prowlarr를 연동할 때 사용했던 API KEY
- host_url : http://localhost:8686
- download_dir = /mnt/torrent/soulseek (compose의
volumes
와.env
파일의${DOWNLOADSMOUNT}
참조) - disable_sync = False (이걸 True로 할 경우 Lidarr가 자동으로 Import하지 않음)
[Lidarr]
api_key = yourlidarrapikeygoeshere
host_url = http://lidarr:8686
download_dir = /data/slskd_downloads
disable_sync = False
다음 Slskd 설정입니다.
- api_key : Slskd API KEY. 하단에서 생성방법 설명
- host_url : http://localhost:5030
- url_base : / (별도 서브폴더 주소가 있다면 이를 입력)
- download_dir : /mnt/torrent/soulseek (이 글을 그대로 따라했다면 Lidarr와 동일)
- delete_searches : True (곡 다운 후 검색 리스트를 삭제할 지를 물어보는 것, False로 놔둘 경우 나중에 엄청난 로딩이 걸릴 정도로 리스트가 불어남)
- stalled_timeout : 다운로드 이후 지정한 시간(초)만큼 경과 후 다운로드 대기열 삭제
[Slskd]
api_key = yourslskdapikeygoeshere
host_url = http://slskd:5030
url_base = /
download_dir = /downloads
delete_searches = False
stalled_timeout = 3600
api_key의 경우 slskd.yml의 155~159 행에서 설정할 수 있습니다.
Soularr에 모든 역할을 부여해야 하기 때문에 158번쨰 행의 주석은 해제하지 않으셔도 됩니다.

key에 사용할 문자열은 최대 255자까지 지원하는데, 리눅스에서 아래와 같이 입력해서 base64기반의 임의의 문자열을 출력해서 복사 붙여넣기 하는 것을 추천합니다.
글자수는 맨 마지막의 255를 조정하면 됩니다.
head -c 192 /dev/urandom | base64 | head -c 255
추천하지 않지만 원하는 문자열을 넣어도 됩니다.
CIDR은 api_key를 사용할 수 있는 IP대역을 지정하는 것으로, 내부 네트워크 대역으로 수정해 주세요. 0.0.0.0/0은 모든 네트워크에서 사용할 수 있다는 뜻입니다.
아래처럼 slskd의 값을 모두 수정했다면 저장 후 slskd를 한 번 재시작해주시고 soularr의 config.ini에 api_key를 반영해주세요.

마지막으로 Search Settings에서 주요설정을 정해줘야 합니다.
- allowed_filetypes : mp3부터 flac까지
- search_for_tracks : True일 경우 트랙 단위로 검색, False일 경우 앨범 단위로 검색
- album_prepend_artist : True일 경우 앨범 검색에 아티스트 이름 붙여서 검색
- track_prepend_artist : True일 경우 트랙 검색에 아티스트 이름 붙여서 검색
- search_type : incrementing_page 추천 (incrementing_page은 실행 시 마다 Lidarr의 wanted페이지를 +1씩 넘겨가며 검색하는 옵션, all은 매 실행 시 마다 모든 Wanted를 검색)
- search_source : missing은 Lidarr의 wanted – missing, cutoff_unmet은 Lidarr의 watned – cutoff unmet(설정한 음질 미달 파일)
[Search Settings]
allowed_filetypes = flac 24/192,flac 16/44.1,flac,mp3 320,mp3
search_for_tracks = True
album_prepend_artist = False
track_prepend_artist = True
search_type = incrementing_page
search_source = missing
여기까지 설정했다면 Soularr를 재시작 해 줍니다.
sudo docker restart soularr
연결이 정상적으로 이루어졌다면 Soularr에서 알아서 검색하고 다운로드 받는 로그를 보실 수 있게 됩니다.

Lidarr에서 알람을 설정해 두었다면, Slskd와 Soularr를 이용한 Import도 모두 알람을 받아볼 수 있으므로 편리합니다.