unsubbed.co

tubesync

Tubesync handles syncs YouTube channels and playlists to a locally hosted media server as a self-hosted solution.

Open-source YouTube archiving, honestly reviewed. No marketing fluff, just what you get when you self-host it.

TL;DR

  • What it is: Open-source (AGPL-3.0) PVR for YouTube — subscribes to channels and playlists, auto-downloads new videos, and syncs your local media server [README][5].
  • Who it’s for: People who want their YouTube subscriptions offline and organized in Jellyfin or Plex, without manually running yt-dlp commands every time a new video drops [1][7].
  • Cost savings: YouTube Premium is $13.99/mo for offline access — and only works on mobile, only while you’re subscribed. TubeSync self-hosted runs on a $5–10/mo VPS and keeps your archive forever, even if you cancel [1].
  • Key strength: Genuine PVR automation — set up a channel once, and every future video gets downloaded, tagged, and available in your media server without touching it again [README][5].
  • Key weakness: The “bloated” perception is real. Several users in r/selfhosted dropped it for lighter alternatives like Pinchflat. Tasks run on polling intervals (not instant), the web UI is functional but not minimal, and if you just want a simple downloader without the full PVR stack, TubeSync is more than you need [2][6].

What is TubeSync

TubeSync is a web-based PVR for YouTube. The pitch in the README is blunt: “like Sonarr but for YouTube (with a built-in download client)” [README]. You add YouTube channels or playlists as sources, configure quality settings and download frequency, and TubeSync handles the rest — fetching new videos on a schedule, downloading them via yt-dlp, processing them through ffmpeg, and optionally notifying Jellyfin or Plex to refresh their libraries [README][1].

The key word is PVR (personal video recorder). TubeSync isn’t a download manager or a one-shot archiver — it’s designed to run continuously, watching for new uploads and pulling them down automatically. That distinction matters because the tool choices it makes (task scheduler, retry logic, media server integration) all follow from it [README].

Internally it’s a Django web app wrapping yt-dlp and ffmpeg. The task scheduler handles polling, retries failed downloads with back-off timers, and sorts output into video/ and audio/ subdirectories based on whether the source has a video stream [README]. Administration is entirely through a web interface on port 4848 [README][1].

The project sits at 2,663 GitHub stars with 160 forks and 3,622 commits under the AGPL-3.0 license [merged profile]. It’s a single-maintainer project from a developer going by meeb, which is relevant context when evaluating long-term reliability.


Why people choose it

The appeal of TubeSync is straightforward: YouTube content disappears. Channels get deleted, videos get struck for copyright, creators go private, or you simply lose internet access. If you want a library you actually own, you need local copies [1][5].

Against manual yt-dlp. Most people start with running yt-dlp from the command line. TubeSync’s pitch is that you stop thinking about it — add the channel once, and the automation takes over. The GIGAZINE walkthrough [1] shows a real example: add a source, configure settings, come back in two hours and six videos have been downloaded, thumbnails included, ready to play in the built-in player or browse from Jellyfin.

Against YouTube Premium for offline. YouTube Premium gives you offline downloads on mobile at $13.99/mo. TubeSync gives you offline downloads to your hard drive permanently, accessible on any device on your network, in whatever quality you configure, for the cost of a VPS. The math is obvious if you watch YouTube on a TV or prefer the Jellyfin/Plex interface [5].

Against other self-hosted tools. This is where TubeSync gets more contested. The r/selfhosted community [2] has a thread specifically titled “TubeSync Feels Bloated” from a user who found it over-engineered for their use case. Their ask: poll RSS feeds, auto-download new videos, save metadata for Jellyfin, minimal or no UI. TubeSync does all of that — but it brings along a full Django stack, a task scheduler with database, and a web UI whether you want them or not.

The Self-Hosted Show podcast [4] has mentioned TubeSync alongside Tube Archivist in the same breath across multiple episodes, suggesting the two tools occupy similar mental space for homelab users. The practical difference: TubeSync is PVR-first (ongoing sync, media server handoff), Tube Archivist is archive-first (searchable library with its own interface, Elasticsearch under the hood, heavier resource requirements).


Features

Based on the README, Easypanel documentation, and setup guides:

Core sync engine:

  • Subscribe to YouTube channels by URL, channel ID, or playlist URL [README][1]
  • Scheduled polling for new videos at configurable intervals [README][5]
  • Gradual retry with back-off timers for failed downloads — TubeSync will keep trying rather than silently giving up [README]
  • Separate video/ and audio/ output directories — music-only sources route to audio [README]
  • Task queue visible in the web UI [1]

Quality and format control:

  • Select video resolution and format per source [1]
  • yt-dlp handles the actual downloading and ffmpeg handles post-processing [README]
  • Metadata and thumbnail fetching included [5]

Media server integration:

  • Jellyfin integration — notifies the server to refresh libraries after downloads complete [README][1]
  • Plex integration [README][5]
  • No native support for Emby or Kodi (those are Tube Archivist / ytdl-sub territory) [6]

Database backends:

  • SQLite (default, zero config) [merged profile]
  • MySQL and PostgreSQL for more robust installations [merged profile]

Deployment:

  • Docker and Docker Compose on amd64 and arm64 (including Raspberry Pi 3+) [README]
  • Optional HTTP basic auth via HTTP_USER / HTTP_PASS environment variables [7]
  • Timezone and UID/GID configuration via environment variables [README][7]

What it does not have:

  • A built-in search interface for downloaded content (that’s Tube Archivist’s territory)
  • Keyword filtering as a first-class feature in the base install (Easypanel’s description mentions it [5], but the README doesn’t foreground it)
  • Instant download on new upload — polling-based, so there’s always a lag [1]
  • Multi-user accounts or RBAC — single instance, single set of credentials

Pricing: SaaS vs self-hosted math

TubeSync is free software (AGPL-3.0). The cost is infrastructure.

What you’re replacing:

  • YouTube Premium: $13.99/mo for offline downloads on mobile only, lost when you cancel
  • 4K Video Downloader+: ~$30/year for a desktop GUI that still requires manual action per channel
  • Manual yt-dlp scripts: Free but requires you to maintain cron jobs and handle updates when YouTube changes its format negotiation

Self-hosted cost:

  • A Raspberry Pi 4 you already own: $0 ongoing
  • Hetzner CX22 (2 vCPU, 4GB RAM): ~$4.50/mo
  • Storage is the real variable — a channel with 500 videos at 1080p can run 200–500GB depending on length

Concrete math for a typical use case:

Say you follow 10 channels and want every new video at 1080p. With YouTube Premium you get offline access on your phone — but not your TV, not your Jellyfin, and not after you cancel. On a $5/mo Hetzner VPS with 40GB included (and cheap attached volumes for storage), TubeSync runs the full PVR stack. Over a year: YouTube Premium ≈ $168, TubeSync VPS ≈ $60 + storage costs. If you already have a NAS or home server, the infrastructure cost is effectively zero.

The asterisk: AGPL-3.0 means if you build a commercial service on top of TubeSync, you have to open-source it. For personal use, this doesn’t matter.


Deployment reality check

The GIGAZINE walkthrough [1] covers a Windows + Docker + Git Bash setup and describes it as straightforward: create two folders, write a docker-compose.yaml, run docker compose up -d, open localhost:4848. The MariusHosting Synology guide [7] covers the NAS path via Portainer with equivalent steps.

What you actually need:

  • Docker or Podman (TubeSync is container-only — no pip install or bare-metal path)
  • Enough storage for your intended library (the real constraint)
  • A reverse proxy (nginx, Caddy, Traefik) if you want HTTPS or remote access
  • Your PUID/PGID for file permission alignment with host directories

What can go sideways:

  • File permissions. The README explicitly calls this out as the most common issue: docker logs tubesync will show permission errors if the PUID/PGID doesn’t match the directory owner [README]. Samba-mounted volumes need matching UID/GID in the driver options [README].
  • Task timing. The first check runs 10 minutes after adding a source [1]. If you add a source and nothing happens immediately, that’s expected — it’s not broken.
  • yt-dlp maintenance. YouTube regularly changes its internal API, which breaks yt-dlp. TubeSync bundles a patched yt-dlp version (the patches/yt_dlp directory in the repo), but this means you’re dependent on the maintainer keeping up with YouTube changes. A single-maintainer AGPL project has inherent bus-factor risk here.
  • Memory on Raspberry Pi. The Synology guide [7] sets a 6GB memory limit in the compose file. The Pi 4’s 4GB model may constrain concurrent downloads at high resolution.
  • No authentication by default. Out of the box, port 4848 is unauthenticated. You need to set HTTP_USER and HTTP_PASS environment variables for basic auth, or put it behind a reverse proxy with auth [7]. Don’t expose it to the internet without one.

Realistic setup time for someone comfortable with Docker: 20–40 minutes. For someone working through it for the first time on a Synology NAS: 1–2 hours following MariusHosting’s guide [7]. For a non-technical founder who has never opened a terminal: find help first.


Pros and Cons

Pros

  • Genuine PVR automation. Set up a channel once, never think about it again. New videos download on schedule without any manual action [README][1].
  • Jellyfin and Plex integration. Library refresh happens automatically after download — the full Sonarr-style workflow, but for YouTube [README][5].
  • Back-off retry logic. Failed downloads get retried progressively rather than silently dropped [README]. For content that occasionally fails (age-restricted, temporarily unavailable), this matters.
  • amd64 and arm64 support. Runs on a Raspberry Pi 3+ without cross-compilation gymnastics [README].
  • SQLite default. Zero database setup for a single-user install [merged profile].
  • Synology NAS support. MariusHosting maintains a dedicated install guide [7], and Docker + Portainer is the standard Synology path.
  • Active maintenance. 3,622 commits, 32 releases, version bumped to v0.15.12 as of December 2025 [5][website_body].

Cons

  • Perceived as bloated for simple use cases. The r/selfhosted community produced an entire thread specifically looking for alternatives because TubeSync “felt bloated” [2]. If you want a lightweight cronjob with an RSS poller, TubeSync is more than you need.
  • Single-maintainer project. No organization, no team behind it. If meeb moves on, maintenance falls to forks. The AGPL license means forks are viable, but it’s still a risk for long-term production use.
  • yt-dlp dependency risk. YouTube breaks yt-dlp periodically. You’re dependent on the maintainer keeping TubeSync’s bundled patches current [README].
  • No authentication by default. Basic auth requires environment variables [7]. Easy to miss if you’re following the quick-start and don’t read far enough.
  • Polling-based, not event-based. There’s always a delay between a video being published and TubeSync downloading it [1]. Not a problem for most use cases, but if you need near-instant archiving it won’t deliver.
  • No built-in search. You download files. Browsing/searching is delegated entirely to Jellyfin, Plex, or your file manager [README].
  • AGPL-3.0. Copyleft license with service provision clause — relevant if you’re building a multi-tenant service on top of it.

Who should use this / who shouldn’t

Use TubeSync if:

  • You want a permanent local library of YouTube channels or playlists and you never want to think about running a command again.
  • You already run Jellyfin or Plex and want YouTube content to appear in those interfaces automatically.
  • You’re comfortable with Docker and have a NAS, Pi, or VPS with attached storage.
  • You’re paying for YouTube Premium primarily for offline access and the mobile-only restriction frustrates you.

Skip it, use Pinchflat instead, if:

  • You want lightweight — single container, minimal resource usage, simple rules-based downloading without the full Django stack [6].
  • You prefer a cleaner configuration-first approach over a web UI.

Skip it, use Tube Archivist instead, if:

  • You want a searchable archive interface, not just a download folder [3][6].
  • You’re archiving channels historically (bulk backfill) rather than syncing ongoing uploads.
  • You want metadata-rich browsing within the tool itself, not delegated to Jellyfin.

Skip it, use ytdl-sub instead, if:

  • You want deep Kodi/Emby/Plex/Jellyfin metadata formatting control and you’re comfortable with command-line configuration [6].
  • You’re already managing other media with Sonarr/Radarr and want similar configuration depth.

Skip it entirely if:

  • You don’t have a NAS, Pi, or VPS with storage to dedicate. The point is local archiving — without local infrastructure, there’s nothing to self-host.
  • You’re not technical enough to run Docker. The setup is genuinely approachable, but the command line is unavoidable at some point.

Alternatives worth considering

From AlternativeTo and the source articles:

  • Pinchflat — AGPL-3.0, self-hosted, yt-dlp based, intentionally lightweight. The direct answer to “TubeSync but less bloated” [6][2]. Worth trying first if you don’t specifically need Jellyfin/Plex auto-notification.
  • Tube Archivist — GPL-3.0, Python, Elasticsearch under the hood, built-in search interface, higher resource floor [3][6]. The right choice if you’re building a searchable personal YouTube archive rather than a media server feed.
  • ytdl-sub — GPL-3.0, command-line, deep metadata control for Kodi/Plex/Jellyfin/Emby [6]. No web UI — configuration files only. For power users who want maximum control.
  • ChannelTube — mentioned in the GIGAZINE article as a similar tool also compatible with Jellyfin [1]. Less community documentation available.
  • yt-dlp directly with cron — free, no dependencies beyond yt-dlp itself, requires you to manage scheduling and errors. The right answer if you have scripting comfort and want zero overhead.

The realistic shortlist for someone who wants ongoing channel sync with media server integration is TubeSync vs Pinchflat. TubeSync if the full PVR workflow (UI, task queue, Plex/Jellyfin push) is worth the weight. Pinchflat if you want the same outcome with less stack.


Bottom line

TubeSync does exactly what it claims: it’s Sonarr for YouTube. If you want to subscribe to channels and have new videos appear in your Jellyfin library without ever running a command, it delivers that reliably with active maintenance and real retry logic. The trade-offs are real — it’s a full Django stack for what is conceptually a cron job wrapper, the yt-dlp dependency ties you to YouTube’s cooperation with the maintainer’s patch cadence, and the r/selfhosted community’s “bloated” criticism is legitimate for simple use cases. But for the target user — someone who wants genuine media-server-grade automation for YouTube content — there’s no lighter tool that also gives you Plex/Jellyfin push notifications, per-source quality settings, and a task queue you can actually inspect. A $5 VPS, an afternoon of setup, and your YouTube subscriptions live on your server indefinitely regardless of what YouTube decides to charge next year.


Sources

  1. GIGAZINE“TubeSync: Automatically download and sync YouTube channels and playlists to your local computer for free” (Dec 27, 2025). https://gigazine.net/gsc_news/en/20251227-tubesync/
  2. Reddit r/selfhosted“Looking for a Lightweight Self-Hosted Automatic YouTube Downloader – TubeSync Feels Bloated”. https://www.reddit.com/r/selfhosted/comments/1gwcikw/looking_for_a_lightweight_selfhosted_automatic/
  3. Console / CodeSee.io“Console #142 — Interview with Simon of Tube Archivist - self hosted YouTube media server” (Jan 30, 2023). https://console.substack.com/p/console-142
  4. Self-Hosted Show — Episodes tagged “tubesync” (eps. 55, 125). https://selfhosted.show/tags/tubesync
  5. Easypanel“TubeSync | Self-Host on Easypanel”. https://easypanel.io/docs/templates/tubesync
  6. AlternativeTo“Tubesync Alternatives” (updated Dec 3, 2025). https://alternativeto.net/software/tubesync/
  7. MariusHosting“Synology Install Tubesync With Portainer”. https://mariushosting.com/synology-install-tubesync-with-portainer/

Primary sources: