Data Hoarding Guide
,
__/ \__
\ /
/_ _\
____
| \___________
|________________|
| |
| |
| |
|________________|
COME AND TAKE IT
The Internet, as decades of online activity have proven, is actually quite forgetful. With its sheer unimaginable size, billions of cultural artefacts slip through the cracks and become lost to the Ediacaran abyss.
So here's how you can stop that and keep the things you love.
Archiving is free, doable on any device with any OS and can be a simple, automated process. From there you'll have to figure out what to do with your cool finds, I personally use a mix of Archive.org, ProtonDrive, a Seagate 2TB hard-drive and a small legion of flash-drives (a seperate guide on those will follow soon). Back to the process itself though. Most of the tools covered here are terminal programs which, while potentially intimidating to newcomers, are extremely lightweight compared to the bloat of modern "apps." You don't need to know how to code, calculate or do anything more complicated than pasting commands. So while your terminal rips your favourite pictures, videos and even websites, you can resume your usual activities knowing you're contributing to the education and enrichment of everyone.
Contents
Croc Gallery-DL Wayback Machine Wget YT-DLPCroc Guide
Croc allows you to transfer files directly and securely between two computers, anywhere on the internet. It's cross-platform, end-to-end encrypted, needs no port forwarding or IP address configuration, doesn't even require you to be on the same network and has no file size limit.
Part 1: Installation
Linux
Install croc using your distribution's package manager. Verify with croc --version after any of these.
- Debian-based (Ubuntu, Mint, Pop!_OS, etc.):
sudo apt updatethensudo apt install croc - Arch-based (Manjaro, EndeavourOS, etc.):
pacman -S croc - Fedora:
dnf install croc - Gentoo:
emerge net-misc/croc - Alpine: first run
apk add bash coreutils, thenwget -qO- https://getcroc.schollz.com | bash - Other distributions:
curl https://getcroc.schollz.com | bash
macOS
The easiest way to install croc on macOS is via Homebrew. If you don't have Homebrew yet, see the note below.
- Run
brew install croc - Verify it installed correctly:
croc --version
Alternatively, if you use MacPorts:
- Run
sudo port selfupdatethensudo port install croc - Verify it installed correctly:
croc --version
Don't have Homebrew? Homebrew is the standard package manager for macOS and is used by several tools in this guide. Open Terminal (press Cmd+Space, type Terminal, press Enter) and run:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Follow the prompts, then come back and run brew install croc.
Windows (Windows 10 and 11)
Install croc using whichever package manager you have. Winget is the most likely to already be on your machine as it ships with Windows 10 and 11. Scoop and Chocolatey need to be installed separately if you don't have them.
- Using Winget:
winget install schollz.croc - Using Scoop:
scoop install croc - Using Chocolatey:
choco install croc
Then open a new terminal window and verify: croc --version. If you see a version number, you're ready to go.
Windows (manual install, older versions)
If you don't have a package manager, or are on an older version of Windows, you can install croc manually:
- Go to the croc releases page and download the
.zipfile for Windows. - Extract the zip. You'll find
croc.exeinside. - Move
croc.exeto a folder that's on your PATH, or run it from wherever you extracted it by opening a terminal in that folder. - Verify it works:
croc --version
Note: croc v10 is built with Go 1.22, which does not officially support Windows 7. It may still work, but is not guaranteed.
Part 2a: Sending and Receiving Files (Linux)
Step 1: Test the flow on one computer
You can test the whole send/receive flow on a single machine using two terminal windows side by side. No second computer needed, though when you get to that it will need its own installation of croc.
- Create a test file:
echo "Hello from croc!" > test.txt - In Terminal 1, run
croc send test.txt. croc will display a code phrase like7776-gorilla-london-turtle. Copy it. - In Terminal 2, navigate to where you want the file to land. If you're not sure where your terminal is pointing, run
pwdfirst to check. - Run
crocfollowed by the code phrase. - Type
yto confirm. Once it reaches 100%, the file is in Terminal 2's current directory.
Step 2: Send a real file
If that worked, you're ready to send actual files. The code phrase is single-use, so croc will generate a new one each time. Make sure the sender starts first and shares the code before the receiver tries to connect.
Ways to specify what to send:
- By name from the current folder:
croc send filename.txt - By full path from anywhere:
croc send ~/Pictures/mypicture.jpg - An entire folder:
croc send ~/MyFolder - With a custom code phrase:
croc send --code "mycustomcode" filename.txt
If the path is deeply nested and you don't want to type it out, type croc send (with a trailing space) into the terminal, then drag the file from your file manager into the terminal window. The path will paste automatically. Press Enter to send.
Step 3: Receive a file
- Navigate to the folder where you want the file to land:
cd ~/Downloads - Run
crocfollowed by the code phrase the sender gives you. - Type
yto confirm. Once it reaches 100%, the file is in your current folder.
If you get an "Operation not permitted" error, you don't have write access to the current directory. Try receiving into ~/ or /tmp and moving the file afterwards. If a file with the same name already exists, croc won't overwrite it silently, so delete the old one with rm filename first.
Part 2b: Sending and Receiving Files (macOS)
macOS uses the same commands as Linux. Open Terminal with Cmd+Space, type Terminal, and press Enter.
Step 1: Test the flow on one computer
- Create a test file:
echo "Hello from croc!" > test.txt - In Terminal 1, run
croc send test.txt. croc will display a code phrase like7776-gorilla-london-turtle. Copy it. - Open a second Terminal window (Cmd+N) and navigate to where you want the file to land.
- Run
crocfollowed by the code phrase. - Type
yto confirm. Once it reaches 100%, the file is in Terminal 2's current directory.
Step 2: Send a real file
Ways to specify what to send:
- By name from the current folder:
croc send filename.txt - By full path from anywhere:
croc send ~/Pictures/mypicture.jpg - An entire folder:
croc send ~/MyFolder - With a custom code phrase:
croc send --code "mycustomcode" filename.txt
Drag-and-drop works here too: type croc send (with a trailing space), then drag the file from Finder into the Terminal window. The path will paste in. Press Enter to send.
Step 3: Receive a file
- Navigate to the folder where you want the file to land:
cd ~/Downloads - Run
crocfollowed by the code phrase the sender gives you. - Type
yto confirm. Once it reaches 100%, the file is in your current folder.
If you get an "Operation not permitted" error, try receiving into ~/ or /tmp instead and moving the file afterwards.
Part 2c: Sending and Receiving Files (Windows)
Step 1: Test the flow on one computer
You can test the whole send/receive flow on a single machine using two Command Prompt or PowerShell windows side by side. No second computer needed, though when you get to that it will need its own installation of croc.
- Create a test file:
echo Hello from croc! > test.txt - In Terminal 1, run
croc send test.txt. croc will display a code phrase like7776-gorilla-london-turtle. Copy it. - In Terminal 2, navigate to where you want the file to land. If you're not sure where your terminal is pointing, run
cdon its own first to check. - Run
crocfollowed by the code phrase. - Type
yto confirm. Once it reaches 100%, the file is in Terminal 2's current directory.
Step 2: Send a real file
If that worked, you're ready to send actual files. The code phrase is single-use, so croc will generate a new one each time. Make sure the sender starts first and shares the code before the receiver tries to connect.
Ways to specify what to send:
- By name from the current folder:
croc send filename.txt - By full path from anywhere:
croc send C:\Users\You\Pictures\mypicture.jpg - An entire folder:
croc send C:\Users\You\MyFolder - With a custom code phrase:
croc send --code "mycustomcode" filename.txt
If the path is deeply nested and you don't want to type it out, type croc send (with a trailing space) into the terminal, then drag the file from File Explorer into the terminal window. The path will paste automatically. Press Enter to send.
Step 3: Receive a file
- Navigate to the folder where you want the file to land:
cd %USERPROFILE%\Downloads - Run
crocfollowed by the code phrase the sender gives you. - Type
yto confirm. Once it reaches 100%, the file is in your current folder.
If you get an "Access is denied" error, you don't have write access to the current directory. Try receiving into %USERPROFILE% or %TEMP% and moving the file afterwards. If a file with the same name already exists, croc won't overwrite it silently, so delete the old one with del filename first.
Part 3a: Command Reference (Linux & macOS)
- Send a file
croc send filename.txt- Send with a custom code
croc send --code "mycode" filename.txt- Receive a file
croc code-phrase-here- Receive to a specific folder
cd ~/TargetFolder && croc code-phrase-here- Check current directory
pwd- List files in current folder
ls
Part 3b: Command Reference (Windows)
- Send a file
croc send filename.txt- Send with a custom code
croc send --code "mycode" filename.txt- Receive a file
croc code-phrase-here- Receive to a specific folder
cd C:\TargetFolder && croc code-phrase-here- Check current directory
cd- List files in current folder
dir
Conclusion
Congratulations! You can now transfer files from your terminal. For a full list of options, run croc --help or visit the croc GitHub page.
Gallery-DL Guide
The main terminal tool for downloading images from hundreds of galleries and boorus. If you want to download albums off Flickr, galleries from deviantArt or all of your pornography from Eka's Portal. You heard that last one right, this one supports a lot of porn sites. Once you've rigged the script to your liking, you can tab out the window, do your other tasks and come back to a full archive.
Part 1: Installation
Linux
Install gallery-dl using your distribution's package manager or pip. Verify with gallery-dl --version after any of these.
- Debian-based (Ubuntu, Mint, Pop!_OS, etc.):
python3 -m pip install -U gallery-dl - Arch-based (Manjaro, EndeavourOS, etc.):
sudo pacman -S gallery-dl - Fedora:
sudo dnf install gallery-dl - Other distributions:
python3 -m pip install -U gallery-dl
To update gallery-dl installed via pip in the future, run the same pip command again.
macOS
The easiest option is Homebrew, which handles everything in one step. If you don't have Homebrew yet, see the installation note in the Croc section.
- Run
brew install gallery-dl - Verify it installed correctly:
gallery-dl --version - To update gallery-dl in the future, run
brew upgrade gallery-dl
Alternatively, if you have Python 3 installed, you can use pip instead:
- Run
python3 -m pip install -U gallery-dl - Verify it installed correctly:
gallery-dl --version
The Homebrew route is recommended — it keeps gallery-dl on your PATH automatically and updates cleanly alongside your other packages.
Windows
- Download the standalone Windows executable from the gallery-dl GitHub page.
- If you haven't already, download the Microsoft Visual C++ Redistributable (x86) to run it. The standalone .exe can be set up exactly like yt-dlp: drop it in a folder and add it to your PATH. See the YT-DLP section for step-by-step PATH instructions.
- Verify it installed correctly:
gallery-dl --version
Part 2: Using gallery-dl
Step 1: Learning the basics
- The basic syntax is simple. Open your terminal and pass a URL:
gallery-dl "https://www.example.com/gallery/URL" - gallery-dl will automatically detect the site, find all images in the gallery, and download them. By default, files are saved to a
gallery-dl/subfolder inside your current directory, organised by site and username. - If you hit a rate limit, go down to Step 3 to learn how to handle them. If you haven't yet, you can proceed as normal to Step 2.
Step 2: Using commands
- Download a gallery or user page
gallery-dl "URL"- Download to a specific folder (Linux & macOS)
gallery-dl -d ~/Pictures/gallery-dl "URL"- Download to a specific folder (Windows)
gallery-dl -d "C:\Users\YourUsername\Pictures\gallery-dl" "URL"- List the URLs that would be downloaded (without downloading)
gallery-dl -g "URL"- See what keywords are available for a URL (useful for custom filenames)
gallery-dl -K "URL"- Username and password (command line)
gallery-dl -u "yourusername" -p "yourpassword" "URL"- See all available options
gallery-dl --help
Step 3: Stopping the Rate Limits
Most websites don't like having their servers pounded by legions of robots.
Because we are the robots for once, this is a bit of a problem. Thankfully this requires one minimal input in addition to your existing configuration, which goes as such:
--sleep 10-25
Websites know that bots are hitting them, but they'll tolerate that activity as long as it isn't too aggressive. And by default, as you may have seen in your test run, gallery-dl is quite aggressive. So it's not enough to just work with the normal settings. You'll want to download larger galleries at better qualities, and you will eventually hit this one way or another.
Rate-limiting is essentially how a website protects itself from bad actors, excessive bandwidth use and potential downtime. Every time your browser asks for something, whether that's an image, a page, or anything else, that counts as a request. If you send too many, whether you're a human or a robot, the site will start pushing back.
Websites use a few different techniques for this. They may track your IP address, your login session, your browser session, or even an API key. If you exceed a certain threshold of requests per minute, you'll get hit with a limit.
Some sites also use what's called a sliding window or token bucket system. If you're familiar with LLMs, you'll know exactly what this is. The service will allow you a certain number of requests, and if you go through them too quickly, you have to wait for it to refill. This is why large bursts cause problems, whereas spacing things out over time doesn't. The latter method doesn't hit the same limits in the same way.
Now, while gallery-dl does allow you to retry if 429s happen, this particular method avoids that entirely. I've downloaded thousands of pictures using this approach and haven't encountered a 429 since. You don't want to be working in bursts followed by five minute wait times. I've tried that, and it doesn't work. It doesn't matter how long you wait between bursts, the moment you start hammering the server again, it will push back with rate limits.
What this random timer helps to achieve is a more organic appearance. By resembling a human user, you don't trip the server's bot detection. I went with 10 to 25 to begin with, but you can alter this however you see fit.
Also, you might see some guides suggesting the use of accounts or API keys. I've deliberately avoided that here. Archiving is a free activity by default, and if you don't want to be tracked or tied to an account, it's just not necessary for this setup. An ounce of prevention, and all that.
Conclusion
Congratulations! You can now download image galleries from the command line. For a full list of configuration options, see the gallery-dl configuration documentation.
Wayback Machine Guide
If you're on a site like this, the Wayback Machine needs no introduction. The main caveat is that this only saves content to Archive.org's servers, so it's best paired with Wget.
Part 1: Common Methods
Logged out
- Go to web.archive.org.
- Paste the URL of the page you're looking for into the search bar and press Enter.
Logged in
- Go to web.archive.org.
- Paste the URL of the page you're looking for into the search bar.
- You'll see several extra options for your archive. These are Save outlinks (archives all pages linked from that page), Save error pages (includes 4xx/5xx responses), Save screenshot, and Save to my web archive (adds it to your personal archive for easy access later).
The official browser extension
The official Wayback Machine extension is available for Chrome, Firefox, and Edge. Once installed:
- Click the extension icon in your toolbar while on any page and select Save Page Now to archive the current page instantly.
- If you land on a 404 or broken page, the extension will automatically check whether a saved copy exists and alert you if one is found.
- You can enable Auto Save Page in the extension settings to automatically archive pages you visit that haven't been saved before — useful if you want to passively contribute to the archive as you browse.
Note: Some features of the extension require a free Internet Archive account. Saving pages works without one, but logging in unlocks additional options.
Conclusion
Congratulations, you've helped one of the biggest non-profit organisations online! The Wayback Machine is the simplest tool in this guide but also one of the most valuable. Make a habit of saving pages you care about before they disappear. For everything the Wayback Machine can't do, the rest of this guide has you covered.
Wget Guide
Wget is the premier tool for downloading entire websites to your machine. It's a staple of Linux and has persisted since 1996! As a result it is heavily documented, has decades' worth of versions and is an invaluable asset to your efforts.
Part 1: Installation
Linux
wget is likely already installed on your system — check by running wget --version first. If not, install using your distribution's package manager. Verify with wget --version after any of these.
- Debian-based (Ubuntu, Mint, Pop!_OS, etc.):
sudo apt install wget - Arch-based (Manjaro, EndeavourOS, etc.):
sudo pacman -S wget - Fedora/RHEL-based:
sudo dnf install wget
macOS
wget is not included with macOS but can be installed via Homebrew. If you don't have Homebrew yet, see the installation note in the Croc section.
brew install wget
Verify it installed correctly: wget --version. Once installed, all the commands and flags in this guide work exactly the same as on Linux.
Windows
wget is not installed on Windows by default. The easiest way to get it is with a package manager. The quickest option is winget, which comes pre-installed on Windows 10 (recent builds) and Windows 11:
winget install GnuWin32.Wget
Alternatively, if you use Scoop (which is a good fit for command-line developer tools and does not require admin rights):
scoop install wget
Or via Chocolatey:
choco install wget
Once installed, wget runs from PowerShell or Command Prompt just like it does on Linux. The same commands and flags covered in this guide all apply.
Part 2: Mirroring a Website
The following command will download a full local copy of a website, converting all links so they work offline:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent URL
Replace URL with the address of the site or page you want to mirror. Here's what each flag does:
--mirror- Enables mirroring mode, equivalent to turning on recursive downloading, timestamping, and infinite recursion depth all at once. wget will follow links and pull the full structure of the site.
--convert-links- After downloading, converts all links in the HTML to point to the local files instead of the original web addresses. This is what makes the archived site browsable offline: clicking a link opens the local copy rather than trying to fetch from the internet.
--adjust-extension- Adds the correct file extension (e.g.,
.html) to downloaded files that don't already have one, so your browser knows how to open them. --page-requisites- Downloads everything needed to display each page correctly: images, stylesheets, scripts, and other assets, even if they're hosted on a different domain.
--no-parent- Restricts downloading to the URL you specified and anything below it in the directory tree. Without this, wget could wander up to the site's root and start pulling the entire domain. This keeps the download focused.
Choosing a download location
By default, wget saves files into the current directory, organised into subfolders named after the domain. To run the command from a specific folder, navigate there first:
cd ~/Documents/Archives
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent URL
Or specify an output directory directly with -P:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent -P ~/Documents/Archives URL
Part 3: Troubleshooting & Tips
- The download is taking forever or pulling too much
- Some sites are enormous. You can limit recursion depth with
--level=N(e.g.,--level=2to only go two links deep) or add a wait between requests with--wait=1to be polite to the server and avoid being rate-limited. - wget is being blocked by the server
- Some servers reject requests that don't look like a browser. Try spoofing a user agent: add
--user-agent="Mozilla/5.0"to your command. - Links still point to the live site after downloading
- Make sure you included
--convert-links. If you forgot it, you can re-run the command with-c(--continue) to resume and only fetch what's missing. - Some assets are missing from the local copy
- If images or styles are hosted on a different domain (a CDN, for instance),
--page-requisitesshould catch them. However, some sites load assets dynamically via JavaScript, which wget cannot execute. For heavily JavaScript-dependent sites, a headless browser tool will produce better results than wget alone.
Windows notes
wget works on Windows and all the commands in this guide apply, but there are a couple of things worth knowing.
- curl is already on your machine
- Windows 10 and 11 come with curl built in. For simple one-off file downloads, curl will do the job without any installation. Where wget earns its place on Windows is site mirroring and recursive downloads, which curl cannot do.
- Use PowerShell, not Command Prompt
- wget runs in both, but PowerShell is the better environment on Windows for command-line work generally. If you installed via Scoop, PowerShell is required.
- File paths use backslashes on Windows
- When specifying an output directory with
-P, use Windows-style paths if needed, for example-P C:\Users\You\Archives. Forward slashes also work in PowerShell, so-P ~/Documents/Archivesshould work there too. - wget on Windows is a port, not the native tool
- The Windows version is a port of GNU wget rather than a first-class Windows application. It works well for the use cases in this guide, but if you hit unusual issues not covered here, they may be Windows-specific. Searching for the error message alongside "wget Windows" is usually the fastest way to find a fix.
Tips
- Add
--wait=1 --random-waitto your command to space out requests and be less aggressive. This reduces the chance of being blocked and is kinder to smaller sites. - To resume an interrupted download, re-run the same command with the
-c(--continue) flag added. wget will pick up where it left off rather than starting over. - To download a single file rather than mirror a whole site, just pass the URL with no extra flags:
wget URL. - You can use
--rejectto skip certain file types. For example,--reject="*.mp4,*.zip"will skip video and archive files if you only want the text and images. - Pair wget with the Wayback Machine: mirror a site locally with wget for offline access, and submit the URL to web.archive.org/save to preserve a public copy too.
Conclusion
Congratulations! You can now mirror websites to your local machine. For a full list of wget options, run wget --help or consult the GNU wget manual.
YT-DLP Guide
For downloading videos from YouTube and thousands of other websites. It is a community-maintained fork of the original Youtube-Dl, made in response to its increasingly sluggish development. Since its creation in 2021, yt-dlp has spawned many forks of its own, such as the gallery-dl script for image aggregators. Unlike browser extensions that promise to do the same thing, this script is well-documented and beloved by its users.
Part 1: Installation
Linux
yt-dlp also requires FFmpeg to merge video and audio streams into a single file — install it alongside yt-dlp. Install using your distribution's package manager, then verify with yt-dlp --version and ffmpeg -version.
- Debian-based (Ubuntu, Mint, Pop!_OS, etc.):
sudo apt install yt-dlp ffmpeg - Arch-based (Manjaro, EndeavourOS, etc.):
sudo pacman -S yt-dlp ffmpeg - Fedora/RHEL-based:
sudo dnf install yt-dlp ffmpeg - Any distribution (via pip):
python3 -m pip install -U yt-dlp(install FFmpeg separately via your package manager)
To update yt-dlp installed via pip in the future, run the same pip command again. If you installed via your package manager, update it through that instead.
macOS
The easiest way to install yt-dlp on macOS is via Homebrew. This installs yt-dlp and FFmpeg together in one step with no PATH configuration needed. If you don't have Homebrew yet, see the installation note in the Croc section.
- Install both yt-dlp and FFmpeg:
brew install yt-dlp ffmpeg - Verify both installed correctly:
yt-dlp --version ffmpeg -version
To update yt-dlp in the future:
brew upgrade yt-dlp
Note: Homebrew requires macOS 12 Monterey or newer. If you're on an older version, install Python 3 from python.org and follow the Linux pip method above, then download FFmpeg separately from ffmpeg.org.
Windows
Before you begin, you'll need to download three things.
- yt-dlp executable (.exe)
- Download from the yt-dlp releases page on GitHub. You want the
yt-dlp.exefile. - FFmpeg
- This is the mechanism that converts audiovisual streams into a single file. You'll want the essentials build (31MB) from gyan.dev — look for
ffmpeg-git-essentials.7z. A full build (150MB) is also available there, as is an alternative download from ffmpeg.org. - 7-Zip
- In case your computer doesn't have a means of extracting your FFmpeg folder from its archive, download from 7-zip.org.
Step 1: Creating the folder
- Create a folder for yt-dlp and FFmpeg to live in, along with your downloads. For example:
C:\Users\YourUsername\Videos\YT-DLP Stuff\ - Download
yt-dlp.exefrom GitHub and move it into your new folder. - Download the FFmpeg essentials
.7zfile. - Extract it (right-click > Extract All, or use 7-Zip).
- Open the extracted folder and find the
binsubfolder. - Copy these three files from
bin\into your YT-DLP folder:ffmpeg.exeffprobe.exeffplay.exe
- You can delete the extracted FFmpeg folder and
.7zfile afterwards.
Your folder should now contain: yt-dlp.exe, ffmpeg.exe, ffprobe.exe, and ffplay.exe. Right now it won't function from anywhere, as Windows doesn't know where to find it. We'll be sorting that in Step 2, where we add the folder to Windows PATH.
Step 2: Adding the folder to Windows PATH
Important: Do not replace an existing PATH variable — this will break other programs on your system. You want to be adding to the selection, not replacing it.
- Right-click This PC or My Computer on your desktop and select Properties.
- Click Advanced system settings, then Environment Variables.
- Under User variables, look for a variable called
PATH:- If PATH already exists (most systems): Select it, click Edit, then click New and paste your folder path. Click OK.
- If PATH does not exist: Click New, set the variable name to
PATH, and paste your folder path as the value. Click OK.
- Click OK again to close the remaining windows.
Step 3: Verifying the installation
- Close any open Command Prompt windows, then open a fresh one.
- Press Windows key + R, type
cmd, and press Enter. - Type
yt-dlp --versionand press Enter. - If you see a version number, your copy of yt-dlp is up and running!
Part 2: Using yt-dlp
Linux & macOS
- Open your terminal and run:
yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID" - Replace
VIDEO_IDwith the actual video ID from the URL. The video will download to whichever folder you're currently in. To check where that is, runpwd. To change folders before downloading:cd ~/Videos yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID"
On macOS, open Terminal with Cmd+Space, type Terminal, and press Enter. Everything else is identical to Linux.
Windows
- Open Command Prompt and run:
yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID" - Replace
VIDEO_IDwith the actual video ID from the URL. The video will download to whichever folder you're currently in. To check where that is, runcd. To change folders before downloading:cd C:\Users\YourUsername\Videos\YT-DLP Stuff yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID"
Commands
yt-dlp is highly customisable and comes with many options for precise downloading. The most useful ones are listed below.
- Best quality (merges best video + best audio, requires FFmpeg)
yt-dlp -f "bestvideo+bestaudio" "URL"- Best quality, output as .mp4 (some players struggle with the default .mkv)
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mp4 "URL"- Best single file (no merge needed, but often capped at 720p)
yt-dlp -f best "URL"- Custom filename
yt-dlp -o "%(title)s.%(ext)s" "URL"- List available formats
yt-dlp -F "URL"- Download entire playlist
yt-dlp "PLAYLIST_URL"- Update yt-dlp (Linux, Windows, or pip)
yt-dlp -U- Update yt-dlp (macOS Homebrew)
brew upgrade yt-dlp- See all options
yt-dlp --help
Conclusion
Congratulations! You can now download videos from the command line. For a full list of options, run yt-dlp --help or browse the yt-dlp wiki.