Skip to content

Releases: Tom-Joad/TDLD

Release list

TDLD 2.0.0

Choose a tag to compare

@Tom-Joad Tom-Joad released this 03 Oct 14:10
9e4e727

TDLD now follows the linuxserver.io container conventions: settings in /config, downloads in /downloads, files owned by PUID/PGID, nothing world-writable any more.

Important

Needs action when upgrading. The folder layout and the user variables change. The container migrates your lists, yt-dlp configs and download history by itself, but only if you change the mappings as described below before the first start.

ghcr.io/tom-joad/tdld:2.0.0   # this release, never changes
ghcr.io/tom-joad/tdld:2       # stays on 2.x, no changes that need action
ghcr.io/tom-joad/tdld:latest

Upgrading from the old image

1. Change the folder mappings

Before After
…/appdata/tdld → /app/data keep it for the first start, the migration reads from it
— new, empty folder, e.g. …/appdata/tdld-config → /config
…/youtube → /app/data/output same host folder → /downloads
…/hotfolder → /app/data/hotfolder same host folder → /hotfolder

2. Change the variables

Before After
UID, GID remove; they never had an effect
— PUID, PGID: the owner of new files (Unraid: 99 / 100)
— optional UMASK: 002 makes new files writable for the group, e.g. over SMB

TZ, SLEEP_INTERVAL, AUTO_UPDATE_YTDLP and HOTFOLDER_INTERVAL stay as they are.

3. Start once and check the log

**** migrating /app/data to /config ****

What is carried over:

  • the lists (audioonly, channels, playlists)
  • the yt-dlp configs including cookies.txt, with the paths rewritten to /config and /downloads. Your own changes to the configs are kept.
  • the download archives, so nothing is downloaded twice

What is not carried over:

  • /app/data/scripts/ytdl.sh still uses the old paths, so the new default script is used. If you changed it, carry your changes over to /config/scripts/ytdl.sh; the log reminds you.
  • the old logs

If the log shows /downloads is not mapped, the download folder is missing from step 1. Without it, new downloads end up inside the container.

4. Clean up

Once the web UI (http://<host>:8083/) shows your lists, remove the /app/data mapping and restart. Delete the old appdata folder once you're sure everything is in /config.

Unraid

The easiest way is the new template: add https://github.com/Tom-Joad/TDLD under Docker → Template repositories, then Add Container → tdld. It comes with PUID=99, PGID=100 and UMASK=002. Add the old /app/data mapping by hand for the first start, then delete the old container.

docker compose

services:
  tdld:
    image: ghcr.io/tom-joad/tdld:2
    container_name: tdld
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK=022
      - TZ=Europe/Berlin
    ports:
      - 8083:8083
    volumes:
      - /path/to/tdld/config:/config
      - /path/to/downloads:/downloads
      - /path/to/hotfolder:/hotfolder          # optional
      - /path/to/old/appdata:/app/data         # first start only, then remove
    restart: unless-stopped

What's new

Changed

  • Folders: settings, lists, yt-dlp configs, archives, logs and the download script in /config; downloads in /downloads; the hotfolder in /hotfolder.
  • User: PUID, PGID and UMASK set the owner and permissions of new files.
  • Permissions: the chown nobody and chmod -R 777 on every start are gone. /config belongs to PUID; /downloads and /hotfolder are only taken over if Docker created them.
  • Services run as s6-rc units (init-tdld-config, svc-ytdl, svc-webui, svc-hotfolder) as the unprivileged user abc. /custom-cont-init.d is free for your own scripts again.
  • AUTO_UPDATE_YTDLP updates yt-dlp once per container start, no longer each time the download service restarts.
  • The image version comes from the build: docker inspect -f '{{ index .Config.Labels "build_version" }}' tdld.

Fixed

  • Starting without a mapped /app/data stopped the setup, and the web UI and the download loop failed with Permission denied / No such file.

Added

  • Unraid template unraid/tdld.xml
  • Image tags 2 and 2.0.0
  • Security policy: please report security problems privately through Security → Report a vulnerability
  • Issue templates, changelog, MIT license
  • Images are signed with cosign:
    cosign verify ghcr.io/tom-joad/tdld:2.0.0 \
      --certificate-identity-regexp 'https://github.com/Tom-Joad/ytdldocker/' \
      --certificate-oidc-issuer https://token.actions.githubusercontent.com

Full documentation: README · Closes #1