cstaelen / tidarr

Selfhosted Tidal DL with ReactJS UI
21 stars 3 forks source link

Selfhosted Tidal media downloader web client with docker

GitHub Stars GitHub Release GitHub Release Playwright CI Docker build Docker Pulls Docker Stars

Features

Companion

Getting Started

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

Proceed to Tidal Authentication

(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 configuration :

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"
}

BEETS

Add to your docker-compose file in environment: section :

environment:
  - ENABLE_BEETS=true # optional

Beets options in </mounted/config/folder/>beets-config.yml:

PLEX UPDATE

Add to your docker-compose file in environment: section :

environment:
  - 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

Doc : https://www.plexopedia.com/plex-media-server/api/library/scan-partial/

GOTIFY

Add to your docker-compose file in environment: section :

environment:
  - ENABLE_GOTIFY=true # optional
  - GOTIFY_URL=<url|ip:port>
  - GOTIFY_TOKEN=<gotify_app_token>

TIDAL SEARCH (optional)

 environment:
  - REACT_APP_TIDAL_SEARCH_TOKEN=<search_token>
  - REACT_APP_TIDAL_COUNTRY_CODE=<country-code>

PUID & PGID (optional)

environment:
  - PUID=1234
  - PGID=123

How to get search token :

Enhancements I'd love to add :

Want more features and/or contribute ? Be my guest, fork and dev <3

Check docker environment variables in compose.yml before running :

make dev

Open http://localhost:3000 with your browser to see the result.

Purposes

Disclaimer

Resources