So YouTube has declared war on adblockers which is currently the only way to have an acceptable user experience, unless you’re willing to pay a hefty fee.
With a little geekery though there is a much better way! Although I do already pay for YouTube Premium in order to get the best experience on the FireTV YouTube app, this way has several advantages over Premium subscriptions and may end up being my go-to if Google continues treating its users so aggressively.
TubeArchivist is a self-hosted tool designed for content creators to make archives of their own YouTube channels but also allows you to subscribe and download videos from your favourite creators with none of the tedious recommendations full of promoted nonsense, no more algorithm gaming influencers cluttering your search results, it serves you no adverts, uses absolutely no tracking, and there’s no need to even have a Google/YouTube account to use it…
TubeArchivist runs in Docker and automatically downloads the latest videos from only the channels that you tell it to. There are Plex and Jellyfin add-ons which bring all of the YouTube video’s metadata into your media library for a familiar and rich viewing experience in whichever platform you prefer.
The Web-UI is pretty user friendly and intuitive but adding your favourite YouTube channels to it can be a bit hit and miss, thankfully there is a browser extension for Chromium based browsers which adds a second “Subscribe” button to YouTube channel pages which talks to your TubeArchivist installation and adds the channel to your downloads, making life much easier.
TA is very configurable, with options to embed subtitles, chose video resolutions, whether to catalogue comments, and more. It also has options to auto delete videos after you have watched them or after a set amount of time, and can be tweaked to help keep your library size under control… As a self professed data hoarder I opted to keep everything set to default with no cleanups and instead created a FileFlows ingest pipeline to auto-transcode into more manageable file sizes.
The installation of TubeArchivist couldn’t be simpler, I took the docker-compose example from the TubeArchivist GitHub page and repointed the save directory for videos to a CIFS share on my NAS, here’s the compose file I used:
Docker Compose File:
version: '3.5'
services:
tubearchivist:
container_name: tubearchivist
restart: unless-stopped
image: bbilly1/tubearchivist
ports:
- 8000:8000
volumes:
- media:/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=***.**.***.*** # set your host name
- TA_USERNAME=********** # your initial TA credentials
- TA_PASSWORD=********** # your initial TA credentials
- ELASTIC_PASSWORD=******** # set password for Elasticsearch
- TZ=Europe/London # set your time zone
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 2m
timeout: 10s
retries: 3
start_period: 30s
depends_on:
- archivist-es
- archivist-redis
archivist-redis:
image: redis/redis-stack-server
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.11.0
container_name: archivist-es
restart: unless-stopped
environment:
- "ELASTIC_PASSWORD=********" # 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:
redis:
es:
media:
driver_opts:
type: cifs
device: "//10.10.0.1/Media Library/YouTube"
o: "username=*******,password=**********,vers=3.0"
cache:
It’s a bit of a nuclear option but asides from paying for Premium it may be the only option for a user friendly YouTube experience before too long.
The tubearchivist-jf Jellyfin add-on runs as a separate docker container which does a one way sync of metadata from TA to jellyfin, here’s the docker compose I used to get it to play nice with my YouTube download folder hosted as a CIFS share from my NAS.
version: '3.3'
services:
tubearchivist-jf:
image: bbilly1/tubearchivist-jf
container_name: tubearchivist-jf
environment:
- TA_URL=http://***.**.***.***:8000 # add your TA instance IP here
- TA_TOKEN=*your token here # add your TA API key here
- JF_URL=http://***.**.***.***:8096 # add your jellyfin IP here
- JF_TOKEN=*your jellyfin token here # add your jellyfin API key here
volumes:
- media:/youtube
expose:
- "8001"
volumes:
media:
driver_opts:
type: cifs
device: "//10.10.0.1/Media Library/YouTube" # add SMB share info here
o: "username=********,password=********,vers=3.0"