Tube Archivist
Self-hosted YouTube media server with metadata and search
Tube Archivist is a self-hosted YouTube media server that downloads, indexes, and organizes videos and channels for offline viewing. It maintains metadata, subtitles, and full-text search across your archived library.
Key features
- Automated channel downloads
- Full-text search
- Metadata and subtitles
- Watch progress tracking
Pros & cons
Strengths
- Great for archiving channels
- Powerful search
Trade-offs
- Requires Elasticsearch
- Storage hungry
Tube Archivist replaces
Last reviewed Aug 26, 2026 · 818 words
The real cost of Tube Archivist is not the videos; it is Elasticsearch. The 2 GB memory floor in the catalogue exists because a JVM search index sits alongside the app and Redis, and there is no lightweight mode that skips it. If you want to download a few channels for offline viewing, that is a heavy price and Pinchflat or MeTube will do it on a tenth of the memory. If you want a searchable, browsable archive of hundreds of channels with subtitles, comments and watch progress, Tube Archivist is the only self-hosted tool that does the job properly, and the 8,396 stars come from people who wanted exactly that.
Three containers, and one of them is a JVM
The stack is the app, a Redis for the task queue, and Elasticsearch. Tube Archivist ships its own Elasticsearch image with the right plugins, so use that rather than a generic one:
services:
tubearchivist:
image: bbilly1/tubearchivist
ports:
- "8000:8000"
volumes:
- ./media:/youtube
- ./cache:/cache
environment:
- ES_URL=http://archivist-es:9200
- REDIS_CON=redis://archivist-redis:6379
- TA_HOST=https://tube.example.com
- TA_USERNAME=admin
- TA_PASSWORD=change-me
- ELASTIC_PASSWORD=also-change-me
- TZ=Europe/London
depends_on:
- archivist-es
- archivist-redis
archivist-redis:
image: redis
volumes:
- ./redis:/data
archivist-es:
image: bbilly1/tubearchivist-es
environment:
- ELASTIC_PASSWORD=also-change-me
- ES_JAVA_OPTS=-Xms1g -Xmx1g
- xpack.security.enabled=true
- discovery.type=single-node
volumes:
- ./es:/usr/share/elasticsearch/data
Two things fail on first run for almost everyone. Elasticsearch refuses to start unless the host has vm.max_map_count raised to at least 262144 (sysctl -w vm.max_map_count=262144, then make it permanent in /etc/sysctl.d/). And TA_HOST must match the URL you actually open in the browser, including the scheme, or logins loop. Fix both before reading the logs for anything else.
The download loop is a subscription model
You subscribe to channels and playlists, Tube Archivist rescans them on a schedule, new videos land in a download queue, and a worker fetches them with yt-dlp into /youtube/<channel-id>/<video-id>.mp4 alongside thumbnails, metadata JSON and subtitles. The scheduler is where the important settings live: rescan interval, how many downloads run in parallel, sleep between downloads, and an optional cookies file for age-restricted or member content.
Be gentle with the sleep interval. YouTube throttles and eventually blocks IPs that hammer it, and an archiver that fetches a 400-video backlog with no pause is how people get their home IP challenged for a week. I run 2 downloads in parallel with a 30-second sleep and a nightly rescan and have never been blocked.
Storage maths before you subscribe to anything
Treat these as estimates: a 1080p video averages 1 to 2 GB per hour, 720p roughly half that. A creator with 500 videos of 15 minutes each is around 125 to 250 GB at 1080p. Ten such channels fill a 2 TB disk. Tube Archivist lets you set a maximum resolution and a per-channel setting to auto-delete watched videos after N days, and those two settings, not disk size, decide whether the archive is sustainable. Decide the policy before the first subscription; retro-fitting it means deleting things you meant to keep. Keep 20 percent of the disk free as well, because Elasticsearch stops accepting writes when the volume it lives on fills up.
Search and metadata are what you are paying for
This is the part the lighter tools cannot do. Every title, description, subtitle line and comment is indexed, so you can search for a phrase someone said in a video from 2019 and jump to the timestamp. Watch progress syncs across browsers, playlists are preserved from the source, and there is a REST API and a browser extension that adds a "download this" button on YouTube itself. If you are trying to leave the platform, the YouTube alternatives page covers the front-end side; Tube Archivist is the back-end that makes the archive usable rather than a folder of files.
Play it in Jellyfin, or do not bother
Official plugins push the archive into Jellyfin and Plex with metadata intact, so the videos appear as a library with proper titles and thumbnails instead of ID-named files. For a household this is the difference between "my archive" and "something everyone uses". Set it up on day two.
What I'd do
Only run Tube Archivist on a box with 8 GB or more, give Elasticsearch a fixed 1 GB heap, raise vm.max_map_count first, and cap downloads at 1080p with a 2-parallel, 30-second-sleep schedule. Subscribe to fewer channels than you think and set auto-delete on the ones you merely follow. If the list is under 10 channels and you never need search, run Pinchflat instead and spend the memory on a media server the family will notice.
Compare Tube Archivist
4 head-to-head comparisons.
Similar media servers apps
Jellyfin
Media ServersFree software media system for streaming your library
Replaces Plex, Emby
qBittorrent
Media ServersBittorrent client that aims to be a good alternative to all other
Replaces µTorrent
SRS
Media ServersA simple, high efficiency and real-time video server, supports RTMP,
Navidrome
Media ServersModern music streaming server for your collection
Replaces Spotify
Kodi
Media ServersOpen-source home theater and media center
Replaces Plex
Koel
Media ServersPersonal music streaming server with an elegant interface
Replaces Spotify