Skip to main content

Youtarr vs alternatives

Youtarr details updated July 2026; Pinchflat and Tube Archivist last verified April 2026.

At a glance​

All three monitor YouTube channels and archive new videos with yt-dlp, but they sit at very different points on the complexity/feature curve.

  • Pick Tube Archivist if you want a full self-hosted YouTube media server with in-app playback, full-text search across subtitles and comments, and you're willing to run a multi-container stack.
  • Pick Pinchflat if you want the simplest single-container install, the most flexible filename/folder templating, and a podcast-RSS workflow. One caveat: the project has been in maintenance-only mode since September 2025 (small fixes still land, no new features). It still works and is still widely recommended, but don't expect the roadmap to move.
  • Pick Youtarr if you want the deepest media-server integration: native playlist sync into Plex, Jellyfin, or Emby, watch-status sync back from those servers into Youtarr's own library views, an optional TV-show-style Plex layout, polished in-browser playback, integrated YouTube search, and a documented REST API. The tradeoff is a smaller community and a couple of things the other two do better (transcript search, podcast RSS).

Short summary of each:

  • Youtarr (Node.js/Express + React + MariaDB, ISC). Media-server automation tool with the strongest Plex story of the three. Unique strengths: automatic Plex library refresh with per-subfolder library mapping, native playlist sync that mirrors subscribed YouTube playlists into Plex, Jellyfin, and Emby (plus a universal .m3u fallback), MP3 playlists that sync as real music playlists, watch-status sync that pulls per-user watched state from Plex, Jellyfin, and Emby back into Youtarr's listing pages and filters, an optional TV Series layout that shows each channel as a show in Plex, one-click download of a channel's entire back catalog, automatic detection of terminated YouTube channels, channel grouping into user-defined subfolders (__kids/__music/__news, whatever), per-video content ratings, integrated in-app YouTube search, in-browser playback, a Swagger-documented REST API, MP3-only audio extraction, per-channel regex title filters, bulk channel import from Google Takeout CSV or a one-time cookies file, per-video and per-channel protection against auto-deletion, backup/restore scripts, in-app yt-dlp updates, and Apprise notifications. Weaker than the competition on full-text transcript/comment search, multi-user RBAC, podcast RSS output, and sheer community size.

  • Pinchflat (Elixir/Phoenix + SQLite, AGPL-3.0). Single-container media manager by Kieran Eglin. Community favorite for its "just works" install, powerful filename templating, per-source filters (regex, duration, date cutoff), audio-only Media Profiles that produce podcast-app-compatible RSS feeds, and first-class SponsorBlock + cookies handling. No built-in player by design, no REST API, single-user HTTP basic auth only.

  • Tube Archivist (Python/Django + Elasticsearch + Redis, GPL-3.0). Multi-container YouTube media server by Simon (bbilly1). The only one of the three with a real built-in video player, full-text search over subtitles and comments, comments archiving, LDAP/forward-auth, per-channel SponsorBlock overrides, dedicated Jellyfin and Plex companion projects, and scale-tested support for very large libraries. The cost: three containers, 2-4 GB RAM minimum, a host vm.max_map_count tweak, occasional breaking upgrades, and a fixed (non-configurable) filename/folder structure.

Project health​

YoutarrPinchflatTube Archivist
First commitMay 2023Jan 2024Sept 2021
Primary maintainerChris Dial (dialmaster)Kieran Eglin (kieraneglin)Simon (bbilly1) + MerlinScheurer
LicenseISCAGPL-3.0GPL-3.0
Stars~1,420~4,800~7,600
Forks56~130359
Latest releaseJul 2026Sept 2025Mar 2026
Release cadence2-3/monthMaintenance-only since Sept 2025Roughly monthly
Docker pulls100K+100K+1M+

Architecture and tech stack​

Youtarr runs two containers: a Node.js app and MariaDB. yt-dlp, ffmpeg, and Deno are bundled in the app image, with an in-app "Update yt-dlp" action. Multi-arch images cover ARM64. No Redis, no Elasticsearch. Comfortable on a small NAS or Pi.

Pinchflat is the most resource-efficient. A single container, SQLite storage, no external services. yt-dlp runs as a subprocess and auto-updates daily. SQLite on network shares is a known pain point with a documented workaround. Also fine on a NAS or Pi.

Tube Archivist is a three-container stack: the Django app, Elasticsearch, and Redis. The host needs a vm.max_map_count=262144 sysctl tweak and permissive ulimits. Elasticsearch is the reason for both the memory cost (2-4 GB minimum) and the killer feature: full-text search across subtitles and comments. Runs best on a homelab with a few gigabytes of RAM to spare, not a small NAS.

Feature comparison​

Legend: ✅ supported, ❌ not supported, ⚠️ partial/caveat, "unclear" = not documented clearly enough to confirm.

FeatureYoutarrPinchflatTube Archivist
Subscriptions & sources
Channel subscriptions + auto-download✅ Per-tab controls (videos/shorts/streams); one-click Download All for the back catalog; terminated channels get flagged automatically✅ "Sources", the core model✅ Subscriptions page; separate "add to queue" for back-catalog
Playlist as first-class source✅ Subscribe to public/unlisted playlists; auto-download + native sync to Plex/Jellyfin/Emby + .m3u; optional reverse ordering (no private playlists yet)✅ Yes (also user-created)✅ Yes, including reverse sort
Individual/one-off downloads✅ Pre-validated URL preview; bulk video-URL import; bulk channel import from Takeout CSV or one-time cookies⚠️ Supported but not the design goal; docs suggest the "unlisted playlist" workaround✅ Accepts video/channel/playlist URLs
Integrated YouTube search inside the UI✅ "Find Channels on YouTube" and "Find Videos on YouTube" pages; video results show "already downloaded" state❌⚠️ Search operates on archived library; browser extension adds YouTube-side one-click archive
Cron/scheduled fetching✅ Cron-based download scheduling✅ Per-source index_frequency_minutes; daily retention/update checks✅ Full cron UI at /settings/scheduling/
Downloads & filtering
Quality/format selection✅ 360p-4K, global + per-channel; true 1440p/2160p via VP9/AV1-to-MP4 remux✅ Via Media Profile (res sort + format string)✅ yt-dlp format/sort strings
Audio-only (MP3) extraction✅ MP3-only downloads; MP3 playlists sync as music playlists✅ First-class; audio-only Media Profile❌ Listed on open roadmap
Duration/date filters✅ Per-channel✅ Strong: cutoff date, min/max duration, shorts/livestream rules⚠️ Via page size + type toggles; no arbitrary duration filter
Title regex filter (per-channel/source)✅ Per-channel title filter with regex examples✅ Documented in Advanced Source mode❌ Not user-facing
Bandwidth / rate limiting✅ App-wide download rate limit (eg 500K, 5M)✅ App-wide rate limit⚠️ No dedicated MB/s cap; uses yt-dlp sleep intervals
Archive tracking (no re-downloads)✅ Smart dedup✅ Per-source index✅ Indexed + ignore list
Metadata & files
NFO files✅ Generated for Jellyfin/Kodi/Emby ordering✅ First-class (nfo_filepath on every item)⚠️ Only via user script RoninTech/ta-helper
Thumbnails / channel posters✅ Poster + per-video thumbs; optional fanart for Plex backgrounds✅ Via yt-dlp✅ Downloaded and can be embedded
Embedded MP4 tags✅ Title/genre/studio/keywords + optional original-year metadata✅ Via --embed-metadata✅ Can embed full TA metadata into MP4 tags
JSON info-sidecar⚠️ Written via --write-info-json, moved to jobs/info/ rather than kept alongside the video✅ Via --write-info-json⚠️ Only via user script lamusmaser/create_info_json
Subtitles (user + auto-generated)⚠️ Language configurable from YouTube, no auto-gen✅ Yes, including auto-gen, configurable langs✅ Yes, language regex supported
Chapters✅ Via Sponsorblock✅ Via yt-dlp + SponsorBlock chapter marks✅ Inherited from yt-dlp + in-player seeking
Comments archiving❌❌✅ Configurable; slow by nature
SponsorBlock✅ Global settings✅ With chapter-marking option✅ Global + per-channel override
Custom file-naming template✅ Templated filename prefix (yt-dlp syntax) with live preview and presets, including a Plex TV Series layout; the video-ID suffix is fixed✅ Very flexible per Media Profile❌ Fixed <channel-id>/<video-id>.mp4 (explicit design choice)
Channel-grouping subfolders (kids/music/etc.)✅ eg __kids, __music, __news, each mappable to a different Plex library; in-app management shows where each folder is used⚠️ Achievable via output template❌ Not configurable
Retention / auto-prune✅ Age, free-space, and watched-based rules with dry-run; per-video and per-channel "protection" shields; global and per-channel keep-recent guards; Apprise notifications on auto-removal✅ Per-source "auto-delete after N days"✅ Global + per-channel
Playback & viewing
In-browser video player✅ Detail modal + streaming❌ Intentionally out of scope✅ Full HTML5 player with SponsorBlock skip, keyboard shortcuts, Cast
Watched-state tracking✅ Synced from Plex/Jellyfin/Emby for all server users; Watched chips + filters on every listing page; one-way pull, needs a connected media server (the built-in player doesn't track)❌✅ With threshold + "Continue watching"
Full-text search across transcripts❌❌✅ Flagship feature via Elasticsearch
Search across comments❌❌⚠️ Comments archived; dedicated comment-search UI still on roadmap
Integrations
Plex library refresh✅ Native (auto-refresh after downloads); HTTPS to Plex; per-subfolder library mapping; TV Series preset for a shows-style library⚠️ Indirect via NFO + filepaths⚠️ Via community tubearchivist-plex Scanner + Agent
Jellyfin integration✅ NFO-compatible✅ NFO-compatible; community reports "just works"✅ Dedicated tubearchivist-jf-plugin with bidirectional watched-state sync
Emby✅ NFO-compatible✅ NFO-compatible❌ No plugin
Kodi✅ NFO-compatible✅ NFO-compatible⚠️ Only via user-script-generated NFOs
Content ratings (G/PG/R/TV-*)✅ Per-video/per-channel badges + policies❌❌
Podcast RSS feed output❌✅ Beta; used with AntennaPod/Pocket Casts❌ Roadmap item
Prometheus metrics❌✅ Opt-in ENABLE_PROMETHEUS⚠️ Dormant tubearchivist-metrics companion
Access, API & notifications
REST/GraphQL API✅ 40+ endpoints, Swagger UI at /swagger, API keys with rate-limiting❌ Open feature request✅ REST + OpenAPI docs at /api/docs/
Multi-user / RBAC❌ Single admin + API keys❌ Single HTTP basic-auth user⚠️ Superuser/staff/read-only roles; library is still shared across users
Apprise notifications✅✅✅
Cookies (private/unlisted/members-only)✅ Persistent cookies.txt for downloads + separate one-time cookies file for bulk import (auto-deleted after use) 1; retryable download failures retry automatically, persistent ones get a plain-language explanation✅ Three modes: Disabled / When Needed / All Ops✅ Plus PO-token provider support for bot-detection bypass
Backup / restore✅ In-app backup & restore scripts⚠️ File-level (copy /config)⚠️ Documented manual multi-step procedure
Responsive / mobile-friendly UI✅ Responsive; mobile screenshots⚠️ Likely responsive (Tailwind); not explicitly claimed✅
Live-stream / premiere handling⚠️ Streams in per-tab controls; in-progress stream handling not supported✅ Per-source shorts/livestream rules✅ Streams as a separate per-channel tab; disable via page size 0
Member-only channel content❌⚠️ Via cookies; distinguished for retry logic⚠️ Works implicitly if cookie has membership

Install and operational complexity​

Youtarr sits in the middle. One git clone + ./start.sh spins up the two containers and walks you through output path, timezone, and admin credentials. MariaDB adds weight versus Pinchflat's SQLite. Updates run via ./start.sh --pull-latest. First-time setup is gated behind a one-time token, the bundled database isn't reachable from outside the Docker network, and there's a published security disclosure policy. Downloads also work on FUSE-backed storage like rclone mounts. In-app backup/restore scripts, an in-app yt-dlp update, bulk channel import, per-video auto-deletion protection, and per-subfolder Plex library mapping are all available. Documentation covers Plex, Jellyfin, Emby, Kodi, Synology, Unraid, external DB, authentication, and backup/restore, plus Swagger API docs.

Pinchflat is the clear winner for simplicity. A single docker run with two volumes and one port. No DB to provision, no Redis, no Elasticsearch, no kernel knobs. Everything configurable lives under environment variables plus the web UI. Documentation is GitHub Wiki-based, no standalone docs site, but the wiki is well-written and honest about edge cases. Updates are "pull the new image." The one recurring gotcha is SQLite on network shares, with a documented workaround that carries a data-loss caveat.

Tube Archivist is the heaviest. You need Docker Compose for three services, a host-level sysctl change, chown 1000:0 on the Elasticsearch volume, and enough RAM for ES's JVM heap plus its on-disk caches. Documentation is the best of the three: a proper MkDocs site with install guides for docker-compose, Podman, Proxmox LXC, Synology, and Unraid, plus an in-tree Swagger API reference. The real operational cost is version migrations; the README warns of breaking changes and recommends updating at least monthly. If you're comfortable reading release notes before docker compose pull, this is fine. If you want a set-and-forget tool, it is not.

Footnotes​

  1. The persistent cookies.txt is intended for a throwaway account, since download cookies risk suspension and rotate quickly on active accounts. The one-time cookies file is used only for bulk channel import and deleted immediately after, so you can safely import from your real account. ↩