Between toxic algorithms, intrusive ads, and pervasive tracking, the YouTube viewing experience is untenable. Their greedy, single-minded focus on advertising dollars has corrupted the user experience to the point that intrepid open source developers created the tools below. The goal here is to download YouTube videos and consume them without suggestion algorithms or comments, and play them through the Jellyfin media player so a separate app (YouTube or otherwise) is not required.
Tools like yt-dl
exist, but these are not user-friendly enough for family use. My requirements are:
- Web-based interface, simple to use
- Automatic downloading of new videos from subscribed channels
- Automatic cleanup of old / watched videos to limit amount of space used
- Compatibility with jellyfin-youtube-metadata-plugin format requirements (so that downloaded videos show in Jellyfin with thumbnails and pretty titles)
The end user experience should be: Open Jellyfin, Browse to “YouTube”, See lists of thumbnail’d videos, click, play.
Tubearchivist
tubearchivist:
container_name: tubearchivist
restart: unless-stopped
image: bbilly1/tubearchivist
ports:
- 8000:8000
volumes:
- /mnt/user/media/youtube:/youtube
- cache:/cache
environment:
- ES_URL=http://archivist-es:9200 # needs protocol e.g. http and port
- REDIS_HOST=archivist-redis # don't add protocol
- HOST_UID=1000
- HOST_GID=1000
- TA_HOST=10.0.50.10 # set your host name
- TA_USERNAME=tubearchivist # your initial TA credentials
- TA_PASSWORD=verysecret # your initial TA credentials
- ELASTIC_PASSWORD=verysecret # set password for Elasticsearch
- TZ=America/New_York # set your time zone
depends_on:
- archivist-es
- archivist-redis
archivist-redis:
image: redislabs/rejson # for arm64 use bbilly1/rejson
container_name: archivist-redis
restart: unless-stopped
expose:
- "6379"
volumes:
- redis:/data
depends_on:
- archivist-es
archivist-es:
image: bbilly1/tubearchivist-es # only for amd64, or use official es 8.5.1
container_name: archivist-es
restart: unless-stopped
environment:
- "ELASTIC_PASSWORD=verysecret" # matching Elasticsearch password
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "xpack.security.enabled=true"
- "discovery.type=single-node"
- "path.repo=/usr/share/elasticsearch/data/snapshot"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es:/usr/share/elasticsearch/data # check for permission error when using bind mount, see readme
expose:
- "9200"
volumes:
cache:
redis:
es: