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
cewl
Spider a URL and return a wordlist for password crackers.
dnsgen
Wordlist and mined-word subdomain permutation.
pup
CSS selectors over HTML, the jq counterpart for markup.
unfurl
Extract chosen URL parts from stdin into clean line lists.
whisper
Speech to txt, vtt, srt, and json from an audio file or folder.
youtube-transcript
Public caption tracks to transcript.txt and results.jsonl.
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.