u/LonelyWinner2158

How I archive entire YouTube channels in 2026 — my workflow after losing a creator I cared about

Lost a channel last summer that I'd followed for years — niche tutorial content, dozens of hours, just gone overnight. Spent the next few weeks rebuilding my archival workflow from scratch and figured I'd share what actually works in 2026, since a lot of older guides are out of date.

Step 1 — Enumeration

First thing you need is a list of every video on the channel. yt-dlp --flat-playlist --print id works, but I've started using the channel URL directly with yt-dlp -f and letting it enumerate. Either way, get the IDs first, then download. Don't try to do both in one pass — if the run dies you lose everything.

Pro tip: --write-info-json for every video. Metadata is half the archive. Titles, descriptions, upload dates, view counts at archive time, thumbnails. Without it you have raw video files with cryptic IDs, which is a different kind of useless.

Step 2 — Format strategy

The mistake I made for years: defaulting to bestvideo+bestaudio. For 4K/8K YouTube uses VP9 or AV1, and the merged MP4 sometimes won't play in older players. My current strategy:

  • 4K/8K: accept VP9/AV1, container = MKV (no compatibility loss for an archive)
  • 1080p and below: prefer H.264 (bv*[vcodec^=avc1]+ba) for max compatibility
  • Audio-only archives: bestaudio then convert to MP3 V0 if I need universal playback

Don't filter [ext=mp4] — it silently drops to audio-only on lots of videos.

Step 3 — Subtitles are the archive

If the channel ever gets struck, the auto-generated subtitles are often the only searchable record of what was said. Always pull them:

--write-auto-subs --sub-langs all --convert-subs srt

Then later you can grep across your entire archive for a phrase you half-remember. Worth its weight in gold.

Step 4 — Resume strategy

Long downloads die. Power blips, ISPs reset, yt-dlp updates mid-run. Two things save you:

  • --download-archive archive.txt — yt-dlp writes completed video IDs here, skips them on rerun. Set this up before starting a big run, not after the first crash.
  • Trust the .part files. yt-dlp will resume from them automatically. Don't delete them when something fails — let yt-dlp finish them.

Step 5 — Tooling

The CLI is fine for me but it's a hard sell to non-technical people. If you're trying to get a partner/parent/friend to archive their own content, GUIs are the only realistic option. The ones I've tested:

  • 4K Video Downloader — works, but the free tier is restrictive enough to be useless for actual hoarders
  • JDownloader — solid but the UI is from 2007
  • Tartube — open source, functional, ugly
  • Yalla Video — newer, free, channel-mode is good for non-CLI users (disclosure: I'm the dev, mention because the channel-archive flow specifically is what this post is about)

All of them are wrappers around yt-dlp underneath, including mine — yt-dlp is the actual hero of every YouTube archival workflow.

Step 6 — Storage

Don't archive to your boot drive. Don't archive to a single drive. The 3-2-1 rule applies: 3 copies, 2 media, 1 offsite. I use a local NAS + Backblaze B2 for hot stuff, cold archives on shucked externals in a fireproof box.

>

reddit.com
u/LonelyWinner2158 — 7 days ago

Shipped my first Electron app after a 3 months of building — Yalla Video (YouTube downloader). Here's the stack, here's what hurt, AMA.

Finally pushed v1.0 of an Electron app I've been building solo for about a year. Sharing the stack and a few lessons because this sub has been useful to me when I was stuck.

Yalla Video — desktop YouTube downloader (videos, playlists, entire channels). Mac/Windows/Linux. Site: www.yallavideo.app

Frontend:

  • Electron + React 18 + Vite
  • TailwindCSS + shadcn/ui
  • Zustand for state
  • i18next for 12 languages (Arabic-first, full RTL)

Backend (separate, optional):

  • Laravel 13 + FilamentPHP v5 + MySQL
  • Handles auth, quotas, Paddle subscriptions, analytics only
  • The actual downloading never touches a server — yt-dlp + ffmpeg are bundled in the app and run locally

Things that hurt that I wish someone had warned me about:

  1. Auto-updates on macOS. Notarization + signing + electron-updater is a maze. I lost three weeks to entitlements plists and the "app is damaged" error. The fix was never one thing — it was always seven things at once. GitHub Actions secrets management for the signing certs is its own nightmare.
  2. Bundled binary management. I ship yt-dlp and ffmpeg bundled with the app and auto-update yt-dlp on launch. Getting the chmod, PATH resolution, and "binary not found because the user moved the app" edge cases right took longer than the entire download UI did.
  3. Process lifecycle. Downloads are detached child processes so the app can crash without killing them. Pause/resume uses yt-dlp's native .part files rather than custom checkpointing — much less code, much more robust.
  4. IPC channel discipline. I started with ad-hoc ipcMain.handle calls scattered everywhere. By month 4 it was unmaintainable. Refactored into domain-grouped registrars (registerDownloadsIpc, registerWindowIpc, etc.) and never looked back.
  5. Full RTL support is more than dir="rtl". I had to ban hardcoded pl-/pr-/ml-/mr- Tailwind classes across the entire codebase and switch to logical properties (ps-/pe-/ms-/me-). The codemod was painful but mandatory.
  6. Bundle size. It's 180MB. Yes I know. No I'm not switching to Tauri for v1, maybe for v2.

Things that were easier than expected:

  • Tray icon + minimize-to-tray
  • Deep-link protocol (yallavideo://) for password reset flows
  • Cross-platform native file pickers
  • shadcn/ui in Electron just... works

Things I'd do differently:

  • Start with the design system on day one, not month four
  • Pick a state manager before writing any UI code (I started with Context, rewrote in Zustand at month two, never regretted it)
  • Set up Playwright E2E tests before the codebase has 10k LOC, not after

Happy to dig into any of these in the comments. Curious what other Electron devs are doing for: auto-update reliability, bundle-size reduction, and IPC organization at scale.

u/LonelyWinner2158 — 8 days ago