- Search by keywords
- Search by url : artist url, album url, playlist url
- Downloadable media : tracks, albums, playlists
- Server side download list processing
- UI build with React JS + Express JS API
- Self-hostable using Docker with Linuxserver.io base image (uncompressed size: ~ 190 Mo)
- Download from Tidal with Tidal Media Downloader (python)
- Tag import using Beets.io (python)
- Push notifications using Gotify
- Plex library update
- Song recognition : Shazarr project (Android)
Example docker-compose.yml :
services:
tidarr:
image: cstaelen/tidarr
container_name: 'tidarr'
ports:
- 8484:8484
volumes:
- /any/folder/to/tidarr/config:/home/app/standalone/shared
- /any/folder/to/download/albums:/home/app/standalone/download/albums
- /any/folder/to/download/tracks:/home/app/standalone/download/tracks
- /any/folder/to/download/playlists:/home/app/standalone/download/playlists
restart: 'unless-stopped'
or
docker run \
--rm \
--name tidarr \
-p 8484:8484 \
-v /any/folder/to/tidarr/config/:/home/app/standalone/shared \
-v /any/folder/to/download/albums:/home/app/standalone/download/albums \
-v /any/folder/to/download/tracks:/home/app/standalone/download/tracks \
-v /any/folder/to/download/playlists:/home/app/standalone/download/playlists \
cstaelen/tidarr:latest
(if no .tidal-dl.token.json
token file provided) :
docker compose exec -it tidarr tidal-dl
or
docker exec -it tidarr tidal-dl
Tidal DL options in .tidal-dl.json
:
{
"albumFolderFormat": "{ArtistName}/{AlbumYear} - {AlbumTitle}",
"apiKeyIndex": 4,
"audioQuality": "HiFi",
"checkExist": true,
"downloadDelay": true,
// ⚠️ DO NOT MODIFY / DO NOT MOUNT - This folder is cleaned after each download
"downloadPath": "/home/app/standalone/download/incomplete",
"includeEP": true,
"language": 0,
"lyricFile": false,
"multiThread": false,
"playlistFolderFormat": "{PlaylistName}",
"saveAlbumInfo": false,
"saveCovers": false,
"showProgress": true,
"showTrackInfo": true,
"trackFileFormat": "{TrackNumber} - {TrackTitle}{ExplicitFlag}",
"usePlaylistFolder": true,
"videoFileFormat": "{VideoNumber} - {ArtistName} - {VideoTitle}{ExplicitFlag}",
"videoQuality": "P360"
}
Add to your docker-compose file in environment:
section :
- ENABLE_BEETS=true # optional
Beets options in </mounted/config/folder/>beets-config.yml
:
Add to your docker-compose file in environment:
section :
- ENABLE_PLEX_UPDATE=true
- PLEX_URL=<url|ip:port>
- PLEX_LIBRARY=<music_library_id>
- PLEX_TOKEN=<x-plex-token>
- PLEX_PATH=/path/to/scan # optional - if not set, update whole library
- PlexToken : your Plex token : https://www.plexopedia.com/plex-media-server/general/plex-token/
- Library ID : In Plex server web ui, go to your music library tab and check
source=
in the URL http://192.168.1.20:32400/web/index.html#!/media/abcdef12345678/com.plexapp.plugins.library?**source=3** - Folder (optional) : path to folder to scan url (if not set, all music library will be scanned)
Doc : https://www.plexopedia.com/plex-media-server/api/library/scan-partial/
Add to your docker-compose file in environment:
section :
- ENABLE_GOTIFY=true # optional
- GOTIFY_URL=<url|ip:port>
- GOTIFY_TOKEN=<gotify_app_token>
- REACT_APP_TIDAL_SEARCH_TOKEN=<search_token> #optional
- REACT_APP_TIDAL_COUNTRY_CODE=<country-code> #optional - useful to access restricted content
How to get search token :
- Use Shazam API to recognize songs, then search over Tidal and easily grab track or album. => See Shazarr project here
- Download Tidal playlist by URL
Check docker environment variables in compose.yml
before running :
make dev
Open http://localhost:3000 with your browser to see the result.
- Renovate old torrent dl media library with full FLAC
- Just for coding
- Just for fun
- Need an offical Tidal account
- Private use only
- Do not forget to support your local artists 🙏❤️