Chunder
Spew out videos from YouTube straight to your disk.

chunder is a fast, zero-fuss YouTube downloader for your terminal. Written in Go, ships as a single binary, shows you a live progress bar while it works.
_ _
___| |__ _ _ _ __ __| | ___ _ __
/ __| '_ \| | | | '_ \ / _` |/ _ \ '__|
| (__| | | | |_| | | | | (_| | __/ |
\___|_| |_|\__,_|_| |_|\__,_|\___|_|
Features
- ๐บ
chunder watch โ play videos INSIDE your terminal. No window, no browser: frames render as true-color half-block text at ~2 pixels per cell, with synced audio, pause, and seeking. Yes, really.
- โจ A TUI that doesn't look like 1998 โ animated download experience built on Bubble Tea + Lip Gloss: gradient progress bar, live speed sparkline, step checklist, styled video cards, adaptive light/dark colors
- โก Single static binary โ no Python, no runtime, just
chunder
- ๐๏ธ Quality selection โ
best, worst, or any resolution (1080p, 720p, 480p, โฆ)
- ๐ Playlist downloads โ paste a playlist link and chunder queues every video with a live queue view, numbered files, and a folder named after the playlist (
--limit, --reverse)
- ๐
chunder search โ YouTube search in your terminal. No API key, no browser: an interactive result browser with thumbnail previews rendered as terminal art. Enter downloads, w watches in the terminal, a grabs audio
- โ๏ธ Clip extraction โ
--from 1:23 --to 2:45 grabs just a segment, transferring only those bytes (no full download, no re-encode)
- ๐ฌ Subtitles โ
--subs en saves captions as .srt; --embed-subs muxes them into the mp4 as a proper subtitle track
- ๐งญ Helpful when you're lost โ missing arguments and typos get ready-to-paste suggestions, not parser errors
- ๐ต Audio-only mode โ rip audio to
.m4a with --audio-only, or straight to .mp3 with --format mp3
- ๐ Live progress โ bytes, speed, ETA, and a real-time speed graph
- ๐ Output control โ pick the folder and filename; never silently overwrites
- ๐ Format inspector โ
chunder info <url> lists every available stream
- ๐ค Script-friendly โ automatically switches to plain line output when piped
- โ๏ธ Config file + env vars โ set your defaults once (Viper-powered)
- ๐ Shell completions โ bash, zsh, fish, powershell via
chunder completion
What it looks like
chunder youtube downloader
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Rick Astley - Never Gonna Give You Up (Official Video) โ
โ Rick Astley โข 3m33s โข 1.8B views โ
โ โ
โ 480p VIDEO+AUDIO FFMPEG โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โ Fetch video metadata
โ ธ Download video
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 62%
8.3 MiB / 13.5 MiB โข 3.2 MiB/s โข eta 2s
โโโโ
โโโโโ
โโโโโ
โโโโโโโ
โโโ
โ Download audio
โ Mux with ffmpeg
press q to cancel
Install
Homebrew (macOS / Linux)
brew install chunder-cli/tap/chunder
Prebuilt binaries
Grab the archive for your platform from the latest release, then:
tar xzf chunder_*_darwin_arm64.tar.gz # unzip on Windows
sudo mv chunder /usr/local/bin/
Binaries are published for macOS (Apple Silicon & Intel), Linux (x86-64 & ARM64), and Windows, with SHA-256 checksums.
From source
Requires Go 1.26+:
go install github.com/chunder-cli/chunder@latest
Or clone and build:
git clone https://github.com/chunder-cli/chunder.git
cd chunder
make build
ffmpeg (optional, recommended)
YouTube serves resolutions above 720p as separate video and audio streams. chunder uses ffmpeg to combine them โ without it, downloads fall back to the best single-file quality (usually 720p).
brew install ffmpeg # macOS
sudo apt install ffmpeg # Debian/Ubuntu
Usage
# Download at best available quality
chunder https://youtu.be/dQw4w9WgXcQ
# Pick a quality and a destination folder
chunder download https://youtu.be/dQw4w9WgXcQ -q 720p -o ~/Videos
# Audio only
chunder download https://youtu.be/dQw4w9WgXcQ --audio-only
# Straight to mp3 (implies --audio-only)
chunder download https://youtu.be/dQw4w9WgXcQ --format mp3
# Custom filename (extension added automatically)
chunder download https://youtu.be/dQw4w9WgXcQ -f "never-gonna"
# See every available format first
chunder info https://youtu.be/dQw4w9WgXcQ
# Watch it INSIDE the terminal (space = pause, โ/โ = seek, q = quit)
chunder watch https://youtu.be/dQw4w9WgXcQ
# Cut a clip โ only the segment's bytes are downloaded
chunder download <url> --from 1:23 --to 2:45
chunder download <url> --from 43 --to 58 --format mp3 # audio clip as mp3
# Subtitles: save as .srt, or embed straight into the mp4
chunder download <url> --subs en
chunder download <url> --embed-subs
# Download a whole playlist (files numbered, folder named after the playlist)
chunder https://www.youtube.com/playlist?list=PLxxxxxxx
chunder download <playlist-url> --limit 10 --reverse --audio-only
# Search YouTube, browse results with thumbnail previews, act on one
chunder search lofi hip hop radio
Watching videos in the terminal
chunder watch decodes the stream with ffmpeg and paints every frame directly
into your terminal using the half-block trick: the โ character with separate
foreground and background colors gives two pixels per cell, so a 200ร56
terminal becomes a 200ร112 true-color display. Audio plays through ffplay
(bundled with ffmpeg) and stays in sync via wall-clock frame pacing.
chunder watch <url> # play with audio
chunder watch <url> --no-audio # silent
chunder watch <url> --fps 15 # gentler on slow terminals
chunder watch <url> --mpv # hand off to mpv instead
Best enjoyed maximized in a fast, true-color terminal (iTerm2, Kitty,
WezTerm, Ghostty). It's a party trick โ a glorious one.
Flags
| Flag |
Short |
Description |
Default |
--quality |
-q |
best, worst, or a resolution like 1080p |
best |
--output |
-o |
Directory to save into |
current dir |
--audio-only |
-a |
Download audio only (.m4a) |
off |
--format |
|
Audio format: m4a or mp3 (implies --audio-only) |
m4a |
--from / --to |
|
Clip range: 1:23, 1:02:03, 83, or 1m23s |
whole video |
--subs |
|
Download subtitles in this language (en, es, โฆ) |
off |
--embed-subs |
|
Mux subtitles into the mp4 (implies --subs en) |
off |
--limit |
|
Playlists: only the first N videos |
all |
--reverse |
|
Playlists: download in reverse order |
off |
--playlist |
|
Treat a watch?v=โฆ&list=โฆ link as its playlist |
off |
--filename |
-f |
Override output filename |
video title |
--no-color |
|
Disable colored output |
off |
--config |
|
Path to config file |
~/.config/chunder/config.yaml |
Configuration
Set persistent defaults in ~/.config/chunder/config.yaml:
output: ~/Videos
quality: 1080p
Or with environment variables:
export CHUNDER_OUTPUT=~/Videos
export CHUNDER_QUALITY=720p
Precedence: flags > env vars > config file > defaults.
How quality selection works
- chunder asks YouTube for every available stream.
- If your target quality exists as a single file with audio, it downloads that directly.
- If it only exists as a separate video stream (typically >720p and some 480p), chunder downloads video + audio separately and losslessly muxes them with ffmpeg (
-c copy, no re-encoding).
- If ffmpeg is missing, it warns and falls back to the best single-file quality.
Roadmap
-
Watch videos inside the terminal โ chunder watch ๐บ
-
Playlist downloads โ with a live queue view ๐
-
chunder search โ interactive results with thumbnail-art previews ๐
-
Subtitles / captions โ --subs en, --embed-subs ๐ฌ
-
--format mp3 audio conversion ๐ต
-
Clip extraction โ --from 1:23 --to 2:45 โ๏ธ
- Thumbnail + metadata embedding
- Batch file input (
chunder -i list.txt)
- Resume interrupted downloads
-
chunder library โ browse everything you've downloaded
- Self-update (
chunder upgrade)
- TikTok / Instagram / X support
Built with
- Cobra โ command routing, flags, completions
- Viper โ config file + env var management
- Bubble Tea โ the TUI framework (Elm architecture)
- Lip Gloss + Bubbles โ styling, gradients, progress, spinners
- kkdai/youtube โ YouTube stream extraction in pure Go
Development
make build # build ./chunder with version info
make test # run tests
make lint # go vet
Legal
chunder is a tool. Downloading videos may violate YouTube's Terms of Service and/or copyright law depending on the content and your jurisdiction. Only download videos you have the right to download. The authors take no responsibility for how you use it.
License
MIT