/// FIELD NOTES FROM A SELF-AWARE GAME SITE
Twitch Download 2026: VODs & Chat in 12 Steps, 30 Min
Britannica files Twitch under the polite heading of an American online live streaming platform centered on video game footage, which is technically accurate and completely sidesteps the part that should keep any archivist awake: this is a platform engineered to forget. Business of Apps dates the service to 6 June 2011 and pegs its 2024 revenue at roughly 1.8 billion dollars. Icon Era counts 240 million monthly active users as of 2025 and projects north of 250 million for 2026. That is a mid-sized country's worth of people generating footage on a service whose default memory of your six-hour broadcast is fourteen days.
This is a tutorial about beating that clock. Not a listicle of sketchy websites with a green Download button and four fake ones around it, but the actual, durable toolchain that preservationists and editors use: yt-dlp for video, TwitchDownloader for chat, and Streamlink for anything still live. Budget about thirty minutes for a first run, twelve of which are the numbered walkthrough below. The rest is Twitch reminding you why you are doing this at all.
Why You Download Before Twitch Deletes It
The single most important fact in this entire article is a retention policy, not a command. Everything downstream is a consequence of it.
Fourteen days is not an archive
A regular Twitch account's past broadcasts (VODs) are retained for 14 days. Partners and Affiliates get 60 days. After that window, the file is gone from Twitch's servers, and no clever command-line flag resurrects it, because there is nothing left on the other end of the wire to pull. People routinely discover this the way you discover a dead hard drive: at the exact moment they need the thing. A streamer breaks a personal-best speedrun, gets a clip request three weeks later, and finds the source VOD has already aged out. The clip that someone else made survives; the six-hour source does not.
That asymmetry is the whole game. Twitch is not hostile to your archive so much as indifferent to it. Storing 394 million hours of watch-time worth of source video — StreamScheme's month-to-date figure for January 2026, against an average concurrent audience near 2.05 million — costs real money, and the platform has decided your run isn't worth the disk past a fortnight. Fair enough. That just means the archive is your job now.
Preservation is a gaming problem, not a Twitch problem
Readers of this site already understand the shape of this argument, because we make it constantly about hardware. The reason people spend real money on projects like the Analogue 3D and its twelve firmware builds is that the artifacts of gaming rot unless somebody actively fights entropy on their behalf. A VOD of a community's first clear of a raid, a charity marathon, a small streamer's best night — these are primary sources. They are also, by default, on a fourteen-day self-destruct. Downloading them is not hoarding; it is the same instinct that keeps a cartridge readable in 2026.
The numbers behind the delete button
Scale is why this matters and also why Twitch will never solve it for you. Backlinko reports the Twitch app has been installed over 100 million times, with 25.76 million downloads across Google Play and the Apple App Store in just the first two quarters of 2025. TwitchTracker's monthly chart put average concurrent viewers at 2,124,774 on 1 January 2026, easing to 1,997,256 by 1 June and 1,885,645 by 1 July. Those are the people making the content the platform then quietly composts. If you want a broader read on where this ecosystem is heading, our piece on PC versus console economics through 2028 covers the money side; the short version is that streaming volume grows faster than anyone's retention policy.
VODs, Clips, Highlights: What You Can Grab
Twitch content is not one thing, and the download strategy is different for each type. Get the taxonomy right before you touch a terminal.
VODs: the 14/60-day clock
A VOD is a full past broadcast — the whole stream, ads and dead air and all. This is the asset with the retention clock: 14 days for regular users, 60 for Partners and Affiliates. It is also the largest file by far. A 1080p60 Twitch stream is typically capped around 6,000 kbps of source bitrate, which works out to roughly 2 to 3 GB per hour. A six-hour marathon is comfortably a 15 GB download. VODs are what yt-dlp is best at, and they are the reason timing matters: this is the one type where waiting a week can mean the file no longer exists.
Clips and Highlights: the persistent assets
Here is the good news buried in the retention policy. Clips do not expire. They are short segments, described as 5 to 60 seconds, that any viewer can create from a live stream or VOD, and they persist indefinitely. Highlights — segments a broadcaster manually curates and saves from a VOD — also do not expire. For a preservation story this is enormous: if the source VOD is going to die at fourteen days, a Highlight cut from it before then is the durable copy. Many channels survive as archives entirely through clips and highlights, because those are the only Twitch-native assets that outlive the two-week window without external intervention. Download the VOD if you can, but understand that a highlight is the platform's own escape hatch from its own delete timer.
The viewer download button that doesn't exist
Now the bad news, and the reason this article needs three tools instead of one link. There is no viewer-facing download button. Multiple 2026 guides confirm what the interface makes obvious: only the broadcaster can download their own VODs through Twitch's tools. As a viewer looking at someone else's stream, Twitch offers you exactly nothing in the way of a save function. This is a deliberate product limitation, not an oversight, and it is why the durable methods below route around the platform rather than through it. If you are the broadcaster, skip ahead to the official method. If you are anyone else, yt-dlp and TwitchDownloader are your interface.
Prerequisites: Tools, Versions, Disk Space
You will install three programs, verify one address, and clear some disk. None of it costs money — watching, chatting, and streaming on Twitch are free, with the platform monetizing through optional Subscriptions, Bits, and donations rather than a paywall — and none of the tooling is Twitch's.
Software and versions
Grab these before you do anything else:
- yt-dlp — the actively maintained successor to youtube-dl and the backbone of this guide. It is released on a rolling, date-stamped schedule, so there is no single stable number to chase: install the latest build and update it often, because Twitch changes its player and yt-dlp chases it. It requires Python 3.9 or newer (3.12 is a safe choice) unless you use a self-contained binary.
- FFmpeg 7.1 or newer — yt-dlp uses it to remux and merge streams, and you will use it directly to repackage raw captures. The 8.x line is fine if your package manager has it.
- TwitchDownloaderCLI — lay295's tool, distributed as a self-contained binary from its GitHub Releases page. It is the only sane way to download and render chat, and it handles clips and precise VOD cropping cleanly. No .NET install needed for the CLI build.
- Streamlink — for capturing streams that are still live, before they even become a VOD.
# macOS / Linux (Homebrew)
brew install yt-dlp ffmpeg streamlink
# Windows (winget)
winget install yt-dlp.yt-dlp
winget install Gyan.FFmpeg
winget install Streamlink.Streamlink
# TwitchDownloaderCLI: download the self-contained binary from
# github.com/lay295/TwitchDownloader/releases, unzip, then:
chmod +x TwitchDownloaderCLI
./TwitchDownloaderCLI --helpHardware and disk space
Downloading a VOD is I/O and network bound, not CPU bound; any machine from the last decade manages it. The demanding job is chat rendering, which is genuinely CPU-heavy and will pin every core you own for the duration. For disk, do the arithmetic before you start: at ~2 to 3 GB per hour for 1080p60, a channel's back catalogue can eat a terabyte quickly. A spinning-rust drive is fine for storage but download to a fast local disk first and move the file afterward, because thousands of tiny HLS fragments landing on a slow, fragmented volume is its own kind of misery.
Getting the official Twitch app (and verifying it)
If your download story is really about installing Twitch itself, get it from a real store and not a search-result impostor. Twitch's own apps ship through the Apple App Store, Google Play, the Amazon Appstore, and the Microsoft Store, plus TV platforms including LG webOS, Samsung Tizen, Android TV, Apple TV, Roku, and Fire TV. On Android, verify you have the genuine listing: the Play Store entry shows the publisher contact as android@twitch.tv and the address 350 Bush St Fl 2, San Francisco, CA 94104, United States. If a listing claims to be Twitch but the developer contact is a Gmail address and the icon is subtly wrong, it is malware wearing a purple hat. Close the tab.
The Official Route: Creator Dashboard
If the VOD is yours, Twitch hands you the file directly, and this is unambiguously the highest-fidelity option. Use it first; fall back to the tools only for other people's content or after the retention window forces your hand.
Creator Dashboard to Video Producer
Per Twitch's own help documentation on on-demand content and the consistent testimony of 2026 creator guides, the path is unchanged and unglamorous:
- Creator Dashboard — open it from your avatar menu on twitch.tv.
- Content, then Video Producer — this is the list of your past broadcasts, highlights, and uploads.
- Find the VOD, click its three-dot menu, and choose Download.
- Twitch prepares the file and hands you an MP4. On a long marathon this takes a while; leave the tab open.
That is the entire official workflow. There is nothing hidden, no premium tier that unlocks a better button. If you want this same procedure written out at greater length with every edge case, our dedicated 12-step VOD download walkthrough is the companion to this piece.
What the official download preserves
The reason to prefer this route when it is available: Twitch's creator-side download preserves the original broadcast bitrate and does not re-encode. You get the source the servers stored, not a transcode-of-a-transcode. For anyone who cares about archival fidelity — and if you are reading a retro-gaming site, you do — that matters. Every re-encode is a generational loss; the official download is generation zero. The third-party tools below also avoid re-encoding when configured correctly, but the official button is the one that guarantees it.
Why 14 days is the real deadline
The catch, again, is the clock. The official download only works while the VOD still exists, which for a regular account is fourteen days and for a Partner or Affiliate is sixty. This is not a setting you can extend after the fact. The practical discipline is to treat every stream you care about as needing action within its window — and to enable auto-archiving of highlights, since those persist. The delete button is not malicious. It is just punctual.
The yt-dlp Method: 12 Steps
This is the core of the tutorial and the method that works whether or not you own the content. yt-dlp pulls the source HLS playlist directly and remuxes it into a clean container without re-encoding, which means no quality loss and download speeds limited only by the CDN. Twelve steps, each with the reason it exists.
Install and update
- Install yt-dlp and FFmpeg. Use the commands from the prerequisites section. Rationale: yt-dlp does the fetching; FFmpeg does the remuxing and merging. Without FFmpeg on your PATH, yt-dlp can download but cannot cleanly repackage, and you end up with a raw stream your editor refuses to open.
- Update yt-dlp immediately, then again whenever a download fails. Run yt-dlp -U (or your package manager's upgrade). Rationale: Twitch changes its player and API without warning, and a yt-dlp build from two months ago may simply 403 on a VOD that a build from last week grabs fine. Ninety percent of "yt-dlp is broken" reports are a stale binary. Update first, complain second.
Find the VOD and authenticate
- Get the VOD URL or ID. A VOD lives at twitch.tv/videos/<numbers>; the numeric ID is all yt-dlp needs. Rationale: Passing the canonical video URL avoids ambiguity. A channel's main URL points at whatever is live or most recent, which is not what you want to archive.
- Check the available formats before committing. Run yt-dlp -F <url> to list what the source actually offers. Rationale: Twitch source quality is not guaranteed to include a 1080p60 track forever; transcodes can expire or be limited on older or smaller-channel VODs. Knowing what exists stops you from chasing a format that was never there.
- Authenticate if the VOD is sub-only. Add --cookies-from-browser firefox (or chrome, edge, etc.) so yt-dlp borrows your logged-in session. Rationale: Subscriber-only VODs and some 60-day Partner content are gated. Without cookies, yt-dlp sees exactly what a logged-out stranger sees, which is a 403. With them, it sees what your account can. Log into the browser first.
- Run a dry test on a short clip. Point the same command at a 30-second clip before a six-hour VOD. Rationale: You confirm your auth, format, and output template all work in ten seconds instead of discovering a filename bug forty minutes into a marathon.
# Download a single VOD at the best available quality
yt-dlp "https://www.twitch.tv/videos/2000000001"
# Force best video+audio, remux to mp4, and use a clean filename
yt-dlp -f "bestvideo*+bestaudio/best" --remux-video mp4 -o "%(uploader)s - %(title)s [%(id)s].%(ext)s" "https://www.twitch.tv/videos/2000000001"Download, verify, and remux
- Set an output template and a download archive. Use -o for a sane filename and --download-archive archive.txt to record what you have grabbed. Rationale: The archive file means re-running the command skips VODs already saved — essential when you script whole channels and don't want to re-download 200 GB.
- Raise the concurrency and retries. Add --concurrent-fragments 8, --fragment-retries 20, and --retries 20. Rationale: A VOD is thousands of small HLS fragments. The CDN drops some; without generous retries a single flaky fragment aborts the whole job near the end. Concurrency turns a two-hour download into twenty minutes.
- Run the full download. Fire the command and watch the progress line. Rationale: yt-dlp resumes partial downloads, so a dropped connection is not fatal — re-run the identical command and it continues where it stopped rather than starting over.
- Read the expected output. A healthy run looks like the block below: metadata, then an m3u8 fetch, then a single progress bar climbing to 100%, then a fixup pass. Rationale: If you never see a percentage and it exits in two seconds, the VOD is gone, private, or sub-only — that is a diagnosis, not a download.
[twitch:vod] 2000000001: Downloading stream metadata
[twitch:vod] 2000000001: Downloading m3u8 information
[info] 2000000001: Downloading 1 format(s): 1080p60
[hls @ 0x5580] Opening 'index-dvr.m3u8' for reading
[download] Destination: SomeStreamer - 6 Hour Marathon .mp4
[download] 100% of 14.82GiB in 00:23:11 at 10.90MiB/s
[FixupM3u8] Fixing MPEG-TS in MP4 container
[download] Finished downloading playlist: 2000000001- Verify the file plays and has audio. Open it, scrub to the middle and the end, confirm sound. Rationale: Twitch mutes copyright-flagged audio at the source; a silent stretch is baked into the VOD and is not a download error. Verifying now beats discovering it during an edit.
- Remux only if your editor complains. If a tool refuses the file, run ffmpeg -i in.ts -c copy out.mp4. Rationale: -c copy repackages without re-encoding, so it is fast and lossless. You are changing the box, not the contents — generation zero stays generation zero.
Those twelve steps are the whole method. Everything below is either a different content type, a faster way to do the same thing at scale, or the reason something went wrong.
TwitchDownloader: Clips and Chat
yt-dlp is superb at video and indifferent to chat. TwitchDownloader is the opposite specialist: it downloads VODs and clips competently, and it is the only tool that will download the chat log and render it back into a video overlay. For a lot of archives, the chat is the point.
Downloading VODs and clips
The CLI is subcommand-driven and takes a numeric VOD ID or a clip slug. It is a self-contained binary, so once unzipped there is nothing to install. Quality is selected explicitly with --quality, and you can crop by second offsets with -b (begin) and -e (end), which is how you extract one twenty-minute boss fight from a six-hour VOD without downloading the whole thing.
# Download a VOD by its numeric ID
TwitchDownloaderCLI videodownload --id 2000000001 --quality 1080p60 -o vod.mp4
# Download a clip by its slug
TwitchDownloaderCLI clipdownload --id CleverCactusPancake -o clip.mp4
# Crop a VOD to seconds 3600-3900 (a 5-minute segment)
TwitchDownloaderCLI videodownload --id 2000000001 -b 3600 -e 3900 -o highlight.mp4Downloading and rendering chat
This is the feature no other mainstream tool matches well. First download the chat to a JSON file — a complete, timestamped, structured log of every message, which is itself a superb archival artifact — then optionally render that JSON into a video overlay you can composite beside the gameplay.
# Step 1: download chat as structured JSON (fast, tiny, archival)
TwitchDownloaderCLI chatdownload --id 2000000001 -o chat.json
# Step 2: render the JSON into a chat video overlay
TwitchDownloaderCLI chatrender -i chat.json -h 1080 -w 340 --framerate 60 -o chat.mp4Keep the chat.json forever; it is kilobytes and searchable. Re-render the video whenever you need it.
Trimming and cropping
Because the render step reads timestamps from the JSON, the chat stays synchronized with a cropped video as long as you crop both to the same offsets. The workflow for a highlight is: crop the VOD with -b/-e, download the full chat once, and render only the matching window. It is fiddlier than yt-dlp but produces the one thing yt-dlp cannot — a faithful reconstruction of what the stream felt like, chat and all. The full options are documented on the project's GitHub.
Streamlink: Capturing Live Streams
Sometimes the content you want is still live and there is no VOD yet — or the broadcaster has VODs disabled entirely, in which case the live capture is the only copy that will ever exist. Streamlink pulls the live HLS stream and writes it to disk in real time.
Piping a live stream to disk
Streamlink resolves the stream, picks a quality, and dumps it to a file. Because it is capturing a live broadcast, it can only save from the moment you start it — there is no rewinding to the beginning of a stream that started an hour ago. Start early.
# Save a live stream straight to disk at source quality
streamlink --twitch-disable-ads -o "stream.ts" "twitch.tv/somechannel" best
# Record while also watching in a player such as mpv or VLC
streamlink --record "stream.ts" "twitch.tv/somechannel" bestConfig file and ad handling
Streamlink reads a persistent config so you are not retyping flags. The --twitch-disable-ads option tries to skip Twitch's pre-roll and mid-roll ad insertion, which otherwise contaminates your capture with commercials; it is not a guarantee, since Twitch's ad system is a moving target, but it helps. Put your defaults in the config file and forget them.
# ~/.config/streamlink/config (Windows: %APPDATA%\streamlink\config)
twitch-disable-ads
twitch-low-latency
default-stream=best
retry-streams=5
retry-max=10Remuxing the .ts
Streamlink writes a raw MPEG-TS (.ts) file. That is deliberate — TS is resilient to interruptions, so if the stream drops or your machine crashes mid-capture, what you already wrote is still playable. Once the stream ends, remux to MP4 for editing with ffmpeg -i stream.ts -c copy stream.mp4. As always, -c copy means no re-encode. If your capture pipeline overlaps with remote-play or console-capture setups, our PS Remote Play setup guide covers the display-side of that chain in the same spirit as this one.
Five Pitfalls That Waste Your Evening
Every one of these has cost someone an evening. Read them now instead of rediscovering them at 2 a.m. with a half-downloaded marathon.
Authentication and sub-only content
Pitfall 1 — the silent 403. You point yt-dlp at a sub-only VOD, it exits in two seconds with an "unable to download" error, and you assume the tool is broken. It isn't; you are logged out. Fix: log into Twitch in your browser, then add --cookies-from-browser firefox so yt-dlp inherits the session. If the browser is open and locking its cookie database, close it or export cookies to a file first.
Pitfall 2 — the expired VOD. You queue a download of a VOD you bookmarked three weeks ago, and it no longer exists. Retention already ate it. Fix: there isn't one — this is why the whole article exists. Treat the 14-day (or 60-day) window as a hard deadline and act inside it. The only prevention is downloading sooner.
Ads, muted audio, and missing segments
Pitfall 3 — silent stretches. A section of your downloaded VOD has no audio and you assume the download corrupted. It didn't. Twitch mutes audio it flags for copyright, and that mute is baked into the source before you ever touch it. Fix: nothing local repairs it; the audio is not in the file on Twitch's end either. Verify important VODs have their audio before you rely on them.
Pitfall 4 — ads in a live capture. Streamlink dutifully records Twitch's pre-roll ad as part of your capture. Fix: use --twitch-disable-ads, accept it is imperfect, and trim any survivors in post with FFmpeg.
Filesystem and storage traps
Pitfall 5 — the filename that breaks. A stream title contains a colon, slash, emoji, or a name 200 characters long, and your output template produces a path your OS rejects — usually on Windows, usually right at the end. Fix: add --restrict-filenames (and --windows-filenames if you are on or syncing to Windows) so yt-dlp sanitizes titles into safe ASCII. Bonus pitfall: downloading thousands of HLS fragments directly onto a slow, nearly-full network drive. Download to a fast local disk, then move the finished file.
Troubleshooting Table
When something breaks, it usually breaks in one of a small number of ways. Match the symptom, apply the fix, move on.
Common failures and their fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| yt-dlp exits instantly with 403 / "unable to download JSON metadata" | VOD is sub-only, private, or already deleted | Add --cookies-from-browser; confirm the VOD still exists within its 14/60-day window |
| Only 480p or audio-only is offered | Source transcode limited or expired | List formats with -F; try TwitchDownloaderCLI with an explicit --quality |
| Muted / silent sections in the file | Twitch DMCA audio muting at the source | Unfixable locally — the mute is in the source; verify audio before relying on the VOD |
| Download stalls near 100% with fragment errors | CDN dropping HLS fragments | Raise --fragment-retries and --concurrent-fragments; re-run to resume |
| Clip saves as a tiny or empty file | Used a VOD command on a clip URL | Use clipdownload with the clip slug; clips are 5-60s by design |
| .ts file won't open in your editor | Raw MPEG-TS container | Remux with ffmpeg -i in.ts -c copy out.mp4 |
| TwitchDownloaderCLI: "ffmpeg not found" | FFmpeg not on PATH | Install FFmpeg or pass --ffmpeg-path explicitly |
| chatrender pins the CPU for an hour | Chat rendering is CPU-bound | Lower --framerate, reduce width/height, keep the JSON and re-render less often |
| Browser says "video unavailable" but you have the ID | VOD aged past retention | Too late; nothing to download. Act inside the window next time |
| Streamlink stuck on "waiting for pre-roll ads" | Twitch ad insertion | Add --twitch-disable-ads and --twitch-low-latency |
When to switch tools
If yt-dlp fights a particular VOD across two updated builds, hand it to TwitchDownloaderCLI, which resolves the source through a different code path and sometimes succeeds where yt-dlp stalls. If TwitchDownloader chokes on chat rendering time, keep the JSON and render at a lower framerate. The three tools have overlapping but non-identical failure modes, which is precisely why a serious archive keeps all three installed rather than betting on one.
Advanced Tips: Batch, Metadata, Archive
Once a single download works, the real value is doing it at scale, unattended, with enough metadata that the files are still legible to you in five years.
Batch archiving a whole channel
yt-dlp accepts a channel's videos page and a filter, and combined with a download archive it will pull every VOD a channel has, skip anything you already own, and be safely re-runnable. Wrap it in a small script so a single command archives a channel.
#!/usr/bin/env bash
# archive-channel.sh - pull every VOD from a channel, skip ones you already have
set -euo pipefail
CHANNEL="${1:?usage: archive-channel.sh <channel_name>}"
DEST="/mnt/archive/twitch/${CHANNEL}"
mkdir -p "${DEST}"
cd "${DEST}" || exit 1
yt-dlp --download-archive "archive.txt" --write-info-json --write-thumbnail --embed-metadata -f "bestvideo*+bestaudio/best" --remux-video mp4 -o "%(upload_date)s - %(title)s [%(id)s].%(ext)s" "https://www.twitch.tv/${CHANNEL}/videos?filter=archives&sort=time"Metadata, thumbnails, and sidecar files
A bare MP4 named after a stream title is nearly useless to future-you. Instruct yt-dlp to write the full metadata: --write-info-json saves a sidecar with the title, uploader, exact upload date, duration, and view count; --write-thumbnail grabs the preview image; --embed-metadata and --embed-thumbnail bake what they can into the container itself. The JSON sidecars are tiny and turn a folder of files into a searchable, dated archive. This is the difference between a hoard and a collection.
Automating with cron or Task Scheduler
The endgame is to stop thinking about it. Point the batch script at a cron job (Linux/macOS) or Task Scheduler (Windows) that runs nightly against the channels you follow. Because the download archive skips what already exists, each run only fetches new VODs, and because retention is 14 days, a nightly cadence comfortably catches everything before it expires. For the paranoid — the correct posture for an archivist — run it twice a day. Detailed flag references live in the FFmpeg documentation and the yt-dlp README; between them there is a flag for nearly any behavior you can imagine wanting.
A Complete Working Configuration
Here is the whole thing, assembled. Drop this yt-dlp config in place and most of the earlier steps collapse into a bare yt-dlp <url>, because your defaults now live in the file.
The yt-dlp config
# =====================================================================
# ~/.config/yt-dlp/config - StaresBack Twitch archival profile
# Windows path: %APPDATA%\yt-dlp\config.txt
# =====================================================================
# ---- output layout: one folder per channel ----
-o %(uploader)s/%(upload_date)s - %(title)s [%(id)s].%(ext)s
--restrict-filenames
--windows-filenames
# ---- pick the real source, never a re-encode ----
-f bestvideo*+bestaudio/best
--remux-video mp4
# ---- throughput and resilience on 6-hour VODs ----
--concurrent-fragments 8
--retries 20
--fragment-retries 20
--file-access-retries 10
--http-chunk-size 10M
# ---- keep the metadata a historian needs ----
--write-info-json
--write-description
--write-thumbnail
--embed-metadata
--embed-thumbnail
# ---- never download the same VOD twice ----
--download-archive %(uploader)s/archive.txt
# ---- auth for sub-only or 60-day partner VODs (uncomment) ----
# --cookies-from-browser firefox
# --cookies cookies.txtThe Streamlink config
# ~/.config/streamlink/config (Windows: %APPDATA%\streamlink\config)
twitch-disable-ads
twitch-low-latency
default-stream=best
retry-streams=5
retry-max=10
# output a resilient .ts, remux to mp4 after the stream ends:
# ffmpeg -i stream.ts -c copy stream.mp4Putting it together
With those two files in place, your daily commands shrink to almost nothing. A VOD is yt-dlp twitch.tv/videos/ID. A live capture is streamlink -o stream.ts twitch.tv/channel best. A whole channel is ./archive-channel.sh channelname. The chat is two TwitchDownloaderCLI calls. Everything else — quality, retries, metadata, filename safety, deduplication — is handled by configuration you wrote once. That is the entire point: turn a fragile, deadline-driven scramble into a boring, repeatable, unattended process. The official Twitch VOD documentation remains the authority on what the platform itself offers; these tools are what you use for everything the platform does not.
The Legal Reality (Read This)
The Machine knows the law well enough to tell you it is more interesting than the FUD suggests, and less permissive than the pirates pretend. There are two separate systems at play, and conflating them is how people end up either needlessly scared or genuinely liable.
Your content versus their content
Downloading your own VODs, clips, and highlights is entirely unproblematic. Twitch built the official download button for exactly that. There is no argument to be had; it is your footage, your copyright, your file. If everything you archive is your own broadcast, close this section and go enjoy your files.
Downloading someone else's content is where nuance lives. The viewer-facing download button does not exist by design, and the third-party tools route around that deliberate limitation. That does not make them illegal — yt-dlp, Streamlink, and FFmpeg are general-purpose software with countless legitimate uses — but it does mean you are acting outside the interface the platform gave you.
ToS is a contract, copyright is a law
Keep these straight. Twitch's Terms of Service are a private contract between you and Amazon; violating them is a matter of your account, and the worst ordinary consequence is a ban. Copyright is statute; the person who made the stream owns their footage, and redistributing it without permission is a separate and more serious matter than any ToS clause. Personal archival — downloading a stream to watch later, offline, for yourself — sits in a widely tolerated gray zone that mirems the ordinary logic of time-shifting. Re-uploading someone's VOD to your own channel, or selling it, does not. The line is not "did you download it" but "what did you do next."
The archivist's rule of thumb
Ask permission when you can — most streamers are delighted that someone cares enough to preserve their work, and many will simply hand you the file. Keep other people's content private and personal. Never redistribute or monetize what you did not make. And credit sources when you do share anything with permission. Follow those four rules and you are behaving exactly like every responsible archive in the history of the medium — the same ethic that keeps a game readable decades after its publisher stopped caring. Twitch will forget your favorite stream in fourteen days. Whether anyone remembers it after that is now, entirely, up to you.
Questions the search bar asks me
- Can I download someone else's Twitch VOD?
- Technically yes — yt-dlp and TwitchDownloader pull the source stream, because Twitch's viewer-facing download button doesn't exist and only the broadcaster gets an official download. Legally, the footage is the creator's copyright: personal archival sits in a tolerated gray zone, but redistributing or monetizing it does not. Ask permission and keep it private.
- How long before a Twitch VOD is deleted?
- Regular accounts retain past broadcasts for 14 days; Partners and Affiliates get 60 days, after which the file is gone from Twitch's servers permanently. Clips (5-60 seconds) and manually curated Highlights never expire, which makes them the only Twitch-native assets that survive the window without you intervening.
- Does downloading a Twitch VOD lose quality?
- No, if you do it right. Twitch's own creator-side download preserves the original broadcast bitrate with no re-encoding, and yt-dlp pulls the source HLS and remuxes with FFmpeg's '-c copy' — repackaging the container without touching the video. Every re-encode is a generational loss; both correct methods are generation zero.
- Should I use yt-dlp or TwitchDownloader?
- Use both. yt-dlp is fastest for VOD and clip video and scales to whole-channel batch jobs with a download archive. TwitchDownloader (lay295's tool) is the only mainstream option that downloads chat to JSON and renders it into a video overlay, and it crops VODs precisely by second offsets. They have different failure modes, so a serious archive keeps both installed.
- Is downloading Twitch content legal?
- Downloading your own broadcasts is unambiguously fine — Twitch built the official button for it. Others' content splits into two systems: Twitch's Terms of Service are a private contract (worst case, a ban), while copyright is statute and belongs to the creator. Personal offline archival is widely tolerated; re-uploading or selling someone else's VOD is not. The line is what you do after you download it.