How to Download Whop Videos Manually with yt-dlp (No Extension)

    Every Whop downloader extension — including this one — is, under the hood, doing something you can do yourself: 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

    1. Open the Whop lesson in Chrome (or any Chromium browser) and open DevTools (F12 or right-click → Inspect).
    2. Go to the Network tab. In the filter box, type m3u8.
    3. 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.
    4. Within a few seconds you should see one or more requests ending in .m3u8 with 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.

    Video is DRM-protected — some Whop creators use Widevine DRM on their content. If so, the .m3u8 you captured will fail to download no matter what flags you use — yt-dlp (and every other tool) can't decrypt Widevine streams. This is a hard technical limit, not a bug in your command.

    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 an entire course, or you'd rather not open a terminal at all, Whop Downloader automates every step above — stream detection, quality selection, and the merge — and still keeps 3 full downloads free every week with no signup. Pro adds automated whole-course bulk downloading (tested on courses with 400+ videos) if you're archiving an entire library rather than pulling lessons one at a time.

    Skip the Terminal — Get the Free ExtensionFree to start — 3 full downloads/week, audio & video-only always free.

    Frequently asked questions