Utilities
Download video or audio from thousands of sites
One URL or a URL list into a folder of media files.
overview
What yt-dlp does
You have a watch URL, a playlist, or a file of URLs, and the next node needs the media file, not the caption track. Set --url or --urls-file. The wrapper calls yt-dlp, writes into the output folder, and leaves the files for the next step. -t mp3 extracts audio. -t mp4 remuxes to MP4. -f picks a format when you need a specific height or codec.
A cookies.txt on --cookies is how you pass a logged-in session. --proxy and -r cap egress. --playlist-items and --max-downloads bound a playlist. --write-subs and --sub-langs keep caption files next to the video. The wrapper always passes --remote-components ejs:github so current YouTube formats can resolve.
yt-dlp downloads streams the site already serves. It does not remove DRM or invent access you do not have. Cloud fleet IPs are often blocked. Treat a challenge page or empty folder as a blocked fetch. Use youtube-transcript when you only need the public caption track. Use whisper when you have audio and no captions.
source github.com/yt-dlp/yt-dlp
use cases
Where yt-dlp fits
Extract audio from one watch URL
Set --url and -t mp3. The folder holds an MP3 the next node can transcribe or attach.
Download a list of URLs
Pass --urls-file a text file, one URL per line. Use --max-downloads or --playlist-items to bound a playlist.
Keep subtitles next to the video
Turn on --write-subs and set --sub-langs. Convert with --convert-subs when a later node wants srt.
Retry a site that wants a session
Pass --cookies a Netscape cookies.txt. Set --proxy when the fleet IP is blocked. A block is a failed fetch, not a cracked wall.
reference
yt-dlp inputs and flags
| Name | Type | Flag | Description |
|---|---|---|---|
| url | STRING | --url | URL of the video/playlist to download. Use this OR urls-file, not both. |
| urls-file | FILE | --urls-file | File containing URLs (one per line). Use this OR url, not both. |
| preset | STRING | -t | Quick preset - mp3 (extract audio as MP3), aac (extract audio as AAC), mp4 (remux to MP4), mkv (remux to MKV), sleep (add delays between downloads). Use this OR set extract-audio/format/remux-video manually, not both. |
| format | STRING | -f | Video format code (e.g., best, bestvideo+bestaudio, 720p, mp4) |
| extract-audio | BOOLEAN | -x | Extract audio only (converts video to audio) |
| cookies-file | FILE | --cookies | Cookies file for YouTube/site authentication (export from browser) |
Showing key inputs. yt-dlp exposes 54 inputs in total.
Full flag reference (54 inputs)
| Name | Type | Flag | Description |
|---|---|---|---|
| audio-format | STRING | --audio-format | Audio format when extracting: best, aac, alac, flac, m4a, mp3, opus, vorbis, wav |
| audio-quality | STRING | --audio-quality | Audio quality 0 (best) to 10 (worst) or specific bitrate like 128K |
| concurrent-fragments | STRING | -N | Number of fragments to download concurrently (default 1) |
| convert-subs | STRING | --convert-subs | Convert subtitles to format: ass, lrc, srt, vtt |
| convert-thumbnails | STRING | --convert-thumbnails | Convert thumbnails to format: jpg, png, webp |
| cookies-file | FILE | --cookies | Cookies file for YouTube/site authentication (export from browser) |
| date | STRING | --date | Download only videos uploaded on date (YYYYMMDD or today-2weeks) |
| dateafter | STRING | --dateafter | Download only videos uploaded on or after date |
| datebefore | STRING | --datebefore | Download only videos uploaded on or before date |
| download-archive | FILE | --download-archive | File to record downloaded video IDs (skip if already in file) |
| embed-chapters | BOOLEAN | --embed-chapters | Add chapter markers to the video file |
| embed-metadata | BOOLEAN | --embed-metadata | Embed metadata and chapters to the video file |
| embed-subs | BOOLEAN | --embed-subs | Embed subtitles in the video (mp4, webm, mkv) |
| embed-thumbnail | BOOLEAN | --embed-thumbnail | Embed thumbnail in audio/video file as cover art |
| extra-args | STRING | --extra | Additional yt-dlp arguments (passed directly) |
| extract-audio | BOOLEAN | -x | Extract audio only (converts video to audio) |
| extractor-retries | STRING | --extractor-retries | Number of retries for extractor errors (default 3) or infinite |
| format | STRING | -f | Video format code (e.g., best, bestvideo+bestaudio, 720p, mp4) |
| format-sort | STRING | -S | Sort formats by fields (e.g., res,fps,codec:h264) |
| fragment-retries | STRING | --fragment-retries | Number of retries for a fragment (default 10) or infinite |
| ignore-errors | BOOLEAN | -i | Ignore download and postprocessing errors |
| impersonate | STRING | --impersonate | Client to impersonate (e.g., chrome, chrome-110, chrome:windows-10) |
| js-runtimes | STRING | --js-runtimes | JavaScript runtime to enable: deno, node, quickjs, bun |
| live-from-start | BOOLEAN | --live-from-start | Download livestreams from the start (YouTube, Twitch) |
| match-filters | STRING | --match-filters | Generic video filter (e.g., !is_live, like_count>100) |
| max-downloads | STRING | --max-downloads | Abort after downloading NUMBER files |
| max-sleep-interval | STRING | --max-sleep-interval | Maximum seconds to sleep (use with sleep-interval) |
| merge-output-format | STRING | --merge-output-format | Container for merged formats: mp4, mkv, webm, avi, flv, mov |
| no-abort-on-error | BOOLEAN | --no-abort-on-error | Continue with next video on download errors |
| no-playlist | BOOLEAN | --no-playlist | Download only the video, not the playlist |
| output-template | STRING | -o | Output filename template (default: %(title)s.%(ext)s) |
| password | STRING | -p | Account password |
| playlist-items | STRING | --playlist-items | Playlist items to download (e.g., 1:3,7,-5::2) |
| preset | STRING | -t | Quick preset - mp3 (extract audio as MP3), aac (extract audio as AAC), mp4 (remux to MP4), mkv (remux to MKV), sleep (add delays between downloads). Use this OR set extract-audio/format/remux-video manually, not both. |
| proxy | STRING | --proxy | HTTP/HTTPS/SOCKS proxy URL (e.g., socks5://127.0.0.1:1080) |
| rate-limit | STRING | -r | Maximum download rate (e.g., 50K, 4.2M) |
| recode-video | STRING | --recode-video | Re-encode video to another format |
| remote-components | STRING | --remote-components | Remote components to allow: ejs:npm, ejs:github (needed for some YouTube formats) |
| remux-video | STRING | --remux-video | Remux video to format: avi, flv, gif, mkv, mov, mp4, webm |
| retries | STRING | -R | Number of retries (default 10) or infinite |
| sleep-interval | STRING | --sleep-interval | Seconds to sleep before each download |
| split-chapters | BOOLEAN | --split-chapters | Split video into multiple files based on chapters |
| sponsorblock-mark | STRING | --sponsorblock-mark | SponsorBlock categories to mark as chapters: sponsor, intro, outro, all |
| sponsorblock-remove | STRING | --sponsorblock-remove | SponsorBlock categories to remove: sponsor, intro, outro, all |
| sub-format | STRING | --sub-format | Subtitle format preference (e.g., srt, ass/srt/best) |
| sub-langs | STRING | --sub-langs | Subtitle languages to download (e.g., en, es, all) |
| username | STRING | -u | Account username |
| verbose | BOOLEAN | -v | Print various debugging information |
| video-password | STRING | --video-password | Video-specific password |
| write-auto-subs | BOOLEAN | --write-auto-subs | Write automatically generated subtitle file |
| write-subs | BOOLEAN | --write-subs | Write subtitle file |
| write-thumbnail | BOOLEAN | --write-thumbnail | Write thumbnail image to disk |
| url | STRING | --url | URL of the video/playlist to download. Use this OR urls-file, not both. |
| urls-file | FILE | --urls-file | File containing URLs (one per line). Use this OR url, not both. |
example
Run yt-dlp
# audio from one watch URLyt-dlp --url https://www.youtube.com/watch?v=dQw4w9WgXcQ -t mp3 # video listyt-dlp --urls-file urls.txt -t mp4 --cookies cookies.txt[download] Destination: /hive/out/Example Title.mp3[ExtractAudio] Destination: /hive/out/Example Title.mp3Download complete. Output in: /hive/outguidance
Choosing yt-dlp
Use yt-dlp when the next node needs the media file. Use youtube-transcript when a public caption track is enough. Use whisper when you already have audio and no captions. wget fetches page bytes, not a muxed video.
youtube-transcript
Reads the public caption track and writes transcript.txt. Faster and smaller when you do not need audio or video.
wget
Downloads HTTP files and can mirror a site. It does not mux a YouTube stream into mp4 or mp3.
whisper
Speech-to-text from an audio file. Pair after yt-dlp when you have audio and no captions.
workflows
Workflows using yt-dlp
Podcast Episode Download
List a public RSS feed, then download each enclosure with yt-dlp on its own worker. The report copies the media and writes downloads.jsonl.
Podcast Episode Transcripts
List a public RSS feed, download each enclosure with yt-dlp, then transcribe the audio with Whisper. The report writes one text file per episode.
faq
yt-dlp questions
related
More Utilities tools
browser-fetch
Headless Chromium render: requested URL, final URL, status, and title next to the page.
cewl
Spider a URL and return a wordlist for password crackers.
csvkit
SQL on one CSV. The table name is the file stem.
dnsgen
Wordlist and mined-word subdomain permutation.
duckdb
In-process SQL on CSV, JSON, and Parquet. No server.
edge-tts
Microsoft Edge neural speech from text or a script file. No API key.
Run yt-dlp yourself
A watch URL feeds the yt-dlp node. The folder holds the media file, or an MP3 when -t is mp3. The listing below is illustrative, not a fleet run.
Facts on this page come from the live Trickest tool library.