I got tired of googling yt-dlp flags every time I wanted to download something. So I just built trawl, a CLI wrapper that makes the whole thing actually pleasant to use. Here's what's going on under the hood.

The basic idea

trawl is a thin layer on top of yt-dlp. You give it a URL, it figures out what you want, builds the right command, and runs it. Simple in theory. A bit messier in practice.

Running yt-dlp as an async subprocess

The whole thing is built around tokio::process::Command. Instead of blocking while yt-dlp does its thing, everything stays async: