Lux: A Go-Powered CLI to Download Videos from 30+ Platforms (30K GitHub Stars)

Lux: A Go-Powered CLI to Download Videos from 30+ Platforms (30K GitHub Stars)

Lux is a command-line download tool written in Go. It keeps things straightforward: hand it a URL and it shows you the available information first; once you confirm, it downloads the stream you specify. Playlists, batch links, resume support, and JSON output all build around this same usage path.

Which platforms are supported

Popular domestic sites: Bilibili, Douyin, Youku, iQiyi, Xigua Video, Tencent Video, Weibo, Kuaishou, Xiaohongshu, Zhihu, Douyu, Huya, Ximalaya, and more.

Popular overseas sites: YouTube, Vimeo, Facebook, Instagram, Threads, TikTok, Tumblr, Pinterest, Reddit, VKontakte, Rumble, Odysee, and more.

Besides video, some sites also support images or audio; the full scope shifts as site rules change. For direct file URLs not on the dedicated list, Lux also tries to handle them as generic resources.

Install FFmpeg first

Lux requires FFmpeg to be installed separately. It does not participate in downloading web resources; its job is to merge segmented media or separate audio and video at the end. The shortest way to install Lux is via Go:

For those not using Go, binary files are also available from the Releases page. On macOS you can use brew install lux; on Windows, Scoop, Chocolatey, and Cask are supported.

Give it a URL, preview before downloading

Pass the link directly and Lux starts downloading. Add -i and it only shows information: site, title, content type, and all available streams.

Once you pick one, pass the stream number to -f:

248 is just an example from the docs — always use the result of -i as the source of truth. For direct resource addresses without dedicated support, Lux also tries a normal file download.

When one link is not enough, run from a list

Playlists are handled with -p; if you do not want everything, use -start, -end, or -items to grab a slice. Multiple URLs can be written directly after the same command and Lux runs them in order.

With more links, put them in a text file and pass it to -F:

This fits organizing a batch of material far better than repeatedly opening web pages and clicking download one by one: tasks are reusable and the scope is spelled out in the command.

Interrupted? No need to start over

If a download is interrupted by Ctrl+C, a .download temp file is kept in the output directory. Run the same command again and Lux continues from where it left off.

It retries automatically on network hiccups; to change the count, use -retry. A single video can also enable multi-threading with -m and set the thread count with -n.

Handling different web conditions

When login state is required, -c accepts a Cookie string or Cookie file. For a proxy, set the HTTP_PROXY environment variable; to specify a referrer page, pass it with -r.

Where files land is also controllable: -o sets the output directory, -O sets the filename. To debug requests or site issues, -d prints network request information.

Not just downloading — it outputs data too

If you have scripts or an organizing pipeline downstream, -j outputs the parse result as JSON. It preserves the site, title, content type, and the address, size, and format of every stream, so the downloader can serve as just one step in a larger flow.

Lux has earned over 30,000 stars on GitHub. The reason it draws attention is not only multi-site support, but that it folds the steps people actually hit — preview first, choose, batch run, resumable, scriptable — into one consistent set of commands.

Project links

GitHub: github.com/iawia002/lux

Releases: github.com/iawia002/lux/releases

By peter_lzh

Author of in-depth reviews of AI open-source tools; focuses on identifying high-value open-source projects and providing practical testing results as well as guidance for making choices.

Leave a Reply

Your email address will not be published. Required fields are marked *