Getting Started with fetchit
Welcome! This guide walks you through installing fetchit, running it for the first time, and downloading your first video. By the end, you'll be comfortable using fetchit from your terminal to download media from hundreds of sites.
Prerequisites
Before you begin, make sure you're comfortable using a terminal (command prompt on Windows, Terminal.app on macOS, or your preferred shell on Linux). You'll need permission to install software on your machine — typically administrator or sudo access for the one-line installers.
- Terminal basics: You should know how to open a terminal, paste a command, and read command output.
- Operating system: fetchit supports Windows 10+, macOS 12+, and Linux (x86-64 and ARM).
- Internet connection: The installer downloads a ~15 MB binary, and downloads themselves can be large.
- Optional — Node.js 18+: If you prefer installing via npm, you'll need Node.js 18 or later.
fetchit does not require Python, FFmpeg, or any system dependencies. Everything is bundled into a single executable.
What is fetchit?
fetchit is a modern terminal application for downloading video and audio from the web. It was built to replace the frustrating experience of hunting for download buttons, dealing with spammy sites, or remembering arcane yt-dlp flags.
How it works under the hood
fetchit uses yt-dlp as its download engine — the same battle-tested tool that powers most video downloading software. yt-dlp supports over 2,000 websites including YouTube, Twitter/X, Instagram, TikTok, Facebook, Twitch, Vimeo, Reddit, and many more. fetchit wraps this engine in a polished terminal user interface (TUI) built with Ink and React, giving you interactive resolution pickers, real-time progress bars, and a clean experience — all inside your terminal.
Concretely, when you pass a URL to fetchit, it: (1) probes the URL with yt-dlp to extract available formats, metadata, and thumbnails; (2) presents the formats in an interactive selector sorted by quality; (3) streams the selected format to your chosen output location; and (4) prints the final file path so you can open it immediately.
Why use fetchit over yt-dlp directly?
If you know yt-dlp well, you might wonder why you'd reach for fetchit. The answer is convenience. fetchit remembers your preferences, shows you visual quality pickers with file sizes, supports audio-only extraction without memorizing flags, and handles output naming consistently. It's yt-dlp with training wheels that you never outgrow.
Why use fetchit over browser extensions?
Browser extensions can see your browsing history, sell your data, or disappear when the browser updates. fetchit is an open-source CLI tool that runs entirely on your machine. No accounts, no telemetry, no monetization. It downloads at the full speed of your connection and writes files directly to your filesystem.
Step 1: Install fetchit
Choose one of the methods below. The quick install script is recommended for most users — it requires no existing runtime and takes about 10 seconds.
Quick install (recommended)
This method downloads a standalone binary and adds it to your PATH. Toggle between platforms or package managers below:
curl -fsSL https://fetchit-cli.vercel.app/install.sh | shThe installer places the fetchit binary in ~/.fetchit/bin/ and appends this directory to your shell configuration file (.zshrc, .bashrc, or PowerShell profile). You may need to restart your terminal or run source ~/.zshrc (or equivalent) for the change to take effect.
System Settings → Privacy & Security, scroll to the security section, and clickAllow Anyway next to the fetchit message. This only happens once.Via npm (requires Node.js 18+)
If you already have Node.js 18 or later on your machine, you can install fetchit globally through npm. This is the same binary — not a wrapper or a JavaScript implementation.
npm install -g @vedant1521/fetchit
npm places the binary in your global Node modules bin directory, which is usually already on your PATH. Verify it worked by running fetchit --version.
Verify your installation
After installing, verify that fetchit is available and print the installed version:
fetchit --version
You should see a version number like 1.2.0 printed to your terminal. If you seecommand not found (or fetchit is not recognizedon Windows), your PATH hasn't been updated yet — try restarting your terminal or running your shell's config reload command.
You can also print the full help menu to see all available options:
fetchit --help
Step 2: Your first download
Now that fetchit is installed, let's download a video. We'll use the classic Internet Archive “Rick Astley — Never Gonna Give You Up” as our test URL.
fetchit https://youtu.be/dQw4w9WgXcQ
What you'll see
Running that command does the following, in order:
- Fetching video info — fetchit contacts YouTube and retrieves metadata: title, duration, available resolutions, and file sizes. This takes 1–3 seconds.
- Interactive picker —A list of formats appears, sorted by quality. You'll see entries like
1080p (MP4, ~45 MB),720p (MP4, ~20 MB), andAudio only (M4A, ~3 MB). Use the arrow keys (↑/↓) to navigate and pressEnterto select. - Download progress — A real-time progress bar shows download speed, ETA, and percentage complete. The bar updates smoothly as chunks arrive.
- Completion — When the download finishes, fetchit prints the full file path (e.g.,
~/Downloads/Rick Astley - Never Gonna Give You Up [dQw4w9WgXcQ].mp4) and exits. You can now open the file in your media player of choice.
--best flag — see the Common Workflows section below.What you can download
fetchit inherits its site support from yt-dlp, which means it works with virtually every major video and audio platform on the web. Here are the most commonly used sites:
| Site | URL format | Notes |
|---|---|---|
| YouTube | youtube.com/watch?v=... or youtu.be/... | Full support: 4K, HDR, 60fps, audio, playlists, subtitles |
| X / Twitter | x.com/username/status/... | Video and GIF downloads; inline media from tweets |
| instagram.com/reel/... or instagram.com/p/... | Reels, posts, stories, IGTV; highest quality available | |
| Threads | threads.net/@username/post/... | Video and image downloads from Threads posts |
| TikTok | tiktok.com/@username/video/... | Watermark-free downloads when available |
| facebook.com/watch/... | Public video downloads from Watch and Pages | |
| Twitch | twitch.tv/videos/... or clips | Clips, VODs, and highlights |
| Vimeo | vimeo.com/... | High-quality video downloads; supports password-protected videos |
| reddit.com/r/.../comments/... | Video and audio from Reddit-hosted content | |
| SoundCloud | soundcloud.com/... | Audio downloads (track and playlist support) |
| linkedin.com/feed/update/... | Public video downloads from posts | |
| pin.it/... or pinterest.com/pin/... | Video pin downloads |
In addition to these, fetchit works with thousands of other sites supported by yt-dlp, including many news outlets, educational platforms, and niche video hosts. If a site plays video in a browser, fetchit can almost certainly download it.
Understanding the output
File naming
fetchit names downloaded files using a consistent pattern:
{title} [{video_id}].{ext}For example, downloading https://youtu.be/dQw4w9WgXcQ producesRick Astley - Never Gonna Give You Up [dQw4w9WgXcQ].mp4. The video ID is included in square brackets to guarantee uniqueness — two different videos with the same title will never collide.
Output location
By default, fetchit saves files to your system's downloads directory (~/Downloads on macOS/Linux, %USERPROFILE%\Downloads on Windows). You can change this with the -o (or --output) flag:
fetchit https://youtu.be/dQw4w9WgXcQ -o ~/Videos
fetchit https://youtu.be/dQw4w9WgXcQ -o "D:MediaDownloads"
The output path is created automatically if it doesn't exist. You can also use--output-template for advanced naming patterns — see thescriptable mode docs for details.
File format
The file extension depends on what you selected in the interactive picker. Video streams are typically .mp4 or .webm, and audio streams are .m4a,.mp3 (when transcoded), or .opus. fetchit prefers MP4/M4A when available for maximum compatibility with media players.
Common workflows
Here are the day-to-day commands you'll use most often with fetchit:
Download the best quality (no interaction)
Skip the interactive picker and automatically download the highest-resolution stream available. This is perfect for scripts or when you just want the best quality immediately.
fetchit --best https://youtu.be/dQw4w9WgXcQ
The --best flag selects the highest resolution video with the best audio track and merges them automatically. If the user has set a preference in the config, that preference is respected.
Download audio only (MP3)
Extract the audio track and convert it to MP3. This is useful for music videos, podcasts, or any content you want to listen to without the video file.
fetchit --mp3 https://youtu.be/dQw4w9WgXcQ
fetchit downloads the best available audio stream (typically Opus or M4A) and transcodes it to MP3 using FFmpeg (bundled). The output is a standalone audio file you can import into any music player.
Download a specific resolution
If you know exactly which resolution you want, you can pass it as a positional argument after the URL. This bypasses the interactive picker.
fetchit https://youtu.be/dQw4w9WgXcQ 1080p
fetchit matches the requested resolution to the closest available stream. If 1080p isn't available, it falls back to the next best option and prints a notice. Supported values include 2160p (4K), 1440p, 1080p, 720p,480p, and 360p.
Save to a custom folder
Override the default download location for a single command:
fetchit https://youtu.be/dQw4w9WgXcQ -o ~/Videos
Download a playlist
fetchit supports YouTube playlists and other curated collections. When you pass a playlist URL, fetchit enters a playlist-aware mode:
fetchit https://youtube.com/playlist?list=PL...
See the playlists guide for detailed instructions on playlist handling, including downloading specific playlist items and parallel downloads.
| Workflow | Command |
|---|---|
| Interactive download | fetchit <url> |
| Best quality, no picker | fetchit --best <url> |
| Audio-only MP3 | fetchit --mp3 <url> |
| Specific resolution | fetchit <url> 1080p |
| Custom output folder | fetchit <url> -o ~/Videos |
| Show help | fetchit --help |
What's next
You've installed fetchit and downloaded your first video. Here are some natural next steps:
- Interactive mode deep-dive — Learn about the TUI components: format filtering, thumbnail previews, download queueing, and keyboard shortcuts.
- Scriptable mode & configuration — Use fetchit entirely non-interactively, set default preferences, configure output templates, and integrate it into your shell scripts or automation pipelines.
- Playlist downloading — Download entire YouTube playlists with a single command, choose specific items, and control concurrency.
- Advanced installation — Build from source, install on headless servers, or set up fetchit in CI/CD environments.
- Troubleshooting — Fix common issues: download failures, rate limiting, missing formats, and platform-specific quirks.
If you run into anything unexpected, open an issue on the GitHub repository. fetchit is actively maintained and new releases ship regularly.