How to Download Whop Videos Manually with yt-dlp (No Extension)
Step-by-step guide to downloading Whop course videos using yt-dlp directly from the command line — no browser extension, full control, completely free.

Downloading Whop videos with yt-dlp is the manual version of what every Whop downloader extension — including this one — does under the hood: finding the video stream URL and handing it to a tool that fetches and merges it. That tool, in almost every case, is yt-dlp, the open-source command-line downloader that's become the de facto standard for this kind of job. Whop Downloader's own local helper app uses it for large videos that need extra processing headroom.
If you're comfortable with a terminal, you can skip the extension entirely. Here's exactly how.

This is for downloading content you already have legitimate access to on Whop — the same personal-backup use case an extension covers. It doesn't bypass paywalls or DRM, and it won't work on content you can't already play in your browser.
Why this works: Whop's video infrastructure
Whop streams video through Mux, a third-party video platform used by a lot of course/community sites. Mux serves video as HLS (HTTP Live Streaming) — instead of one downloadable file, the player fetches a manifest (a .m3u8 file) that lists dozens of small video/audio segment URLs, plus a short-lived access token in the query string. Right-clicking the player and choosing "Save video" doesn't work because there's no single file to save — that's exactly the gap yt-dlp is built to close.
Step 1: Install yt-dlp
Mac (Homebrew):
brew install yt-dlp
Windows:
pip install yt-dlp
(Requires Python. If you don't have it, install Python from python.org first, or use winget install yt-dlp if you have winget available.)
Linux:
sudo apt install yt-dlp
# or, for the latest version:
pip install --upgrade yt-dlp
Verify it installed correctly:
yt-dlp --version
Step 2: Capture the stream URL
- Open the Whop lesson in Chrome (or any Chromium browser) and open DevTools (
F12or right-click → Inspect). - Go to the Network tab. In the filter box, type
m3u8. - Press play on the video. Nothing will appear in the Network tab until playback actually starts — Mux generates the stream URL on demand, not ahead of time.
- Within a few seconds you should see one or more requests ending in
.m3u8with a long token in the query string. Right-click the request and choose Copy → Copy link address.
That URL is your source. It's time-limited — usually valid for a fairly short window — so move on to the next step promptly rather than saving it for later.
Step 3: Download with yt-dlp
Run:
yt-dlp "PASTE_YOUR_M3U8_URL_HERE" \
-f "bv*+ba/b" \
--merge-output-format mp4 \
--concurrent-fragments 8 \
-o "lesson-name.mp4"
What each flag does:
-f "bv*+ba/b"— grab the best available video stream and best available audio stream separately, and merge them (falling back to a combined stream if separates aren't available). This is what gets you full quality instead of whatever single low-bitrate variant the player might default to.--merge-output-format mp4— output as a standard MP4 rather than yt-dlp's default container choice, so it plays everywhere.--concurrent-fragments 8— download 8 segments in parallel instead of one at a time. HLS streams are chopped into many small chunks; fetching them in parallel is the difference between a five-minute download and a thirty-second one. You can push this higher (16, 24) on a fast connection, or lower it if you hit rate limiting.-o "lesson-name.mp4"— sets the output filename. Swap in whatever you want to call it.
If the download requires ffmpeg for the merge step (it usually does) and you don't have it installed:
# Mac
brew install ffmpeg
# Windows
winget install ffmpeg
# Linux
sudo apt install ffmpeg
Common issues
"HTTP Error 403: Forbidden" — the token in your URL expired. Mux tokens are short-lived by design. Go back to Step 2, get a fresh URL, and run the command again promptly.
Download completes but there's no audio — you likely used a simpler format selector like -f best instead of -f "bv*+ba/b", which can grab a video-only stream if Whop's adaptive manifest separates video and audio tracks. Use the exact flag above.
"Requested format is not available" — run yt-dlp -F "YOUR_URL" first to list every format Mux actually offers for that video, then adjust the -f selector to match one of the listed format codes if bv*+ba/b doesn't resolve cleanly.
Nothing appears in the Network tab — you pressed play on a tab that had already loaded the stream. Reload the page first, then press play. Same root cause as the extension's most common failure.
Video is DRM-protected — if a creator has applied DRM, the captured .m3u8 will fail no matter what flags you use; yt-dlp and every other tool are equally unable to decrypt it. A hard technical limit, not a bug in your command. Rare on standard Whop course video.
When it's worth just using the extension instead
The manual method gives you full control and zero ongoing cost, but it has real friction: DevTools every time, watching for token expiry, and no built-in fallback if Whop changes something in their player. If you're downloading dozens of lessons across a whole course, or you'd rather not open a terminal at all, Whop Downloader automates every step above — finding the stream, picking the best rendition, and merging — and keeps 3 merged downloads free every week with no signup. It also saves subtitles and attached course PDFs, which the manual route won't do for you.
Two things worth knowing before you choose: video-only and audio-only downloads in the extension are unlimited and never spend a credit, so the free tier goes further than the "3 per week" headline suggests — the full explanation is here. And Pro adds a whole-course download that walks every lesson automatically, which is the case where the DevTools dance really stops being worth it.


