CLI tool
imsyy/yt-dlp-gui avatar
imsyy/yt-dlp-gui

yt-dlp GUI: a Tauri front end that keeps the command line out of sight

A modern cross-platform GUI for yt-dlp. Download videos from YouTube, Bilibili, TikTok and 1000+ sites. Built with Tauri + Vue.

581 stars68 forksRustMIT

At a glance

What is it?
yt-dlp GUI is an MIT licensed cross-platform desktop application built with Tauri 2 and Vue 3 that wraps yt-dlp for people who do not want to learn its flags, adding a download queue, a toolbox for subtitles, thumbnails and live chat, a browser extension and a scripted command line mode. It suits a user who downloads from many sites, and it ships the yt-dlp binary as a separate download rather than bundling it.
Who is it for?
yt-dlp GUI fits a user who downloads from YouTube, Bilibili, TikTok and the rest of the supported site list and wants a window instead of a terminal, especially with the browser extension that hands over the URL and cookies without a copy and paste. It is the wrong choice if you already know the yt-dlp flags you need, if you want unattended bulk work, or if your environment will not let you fetch the yt-dlp binary and the Deno runtime the app expects.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 33 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The pitch: same downloader, no flags to remember

The project describes itself as a modern, beautiful desktop GUI for yt-dlp, and the framing of the problem is blunt. yt-dlp is powerful, but its command-line interface can be intimidating. The application wraps it in a clean native desktop app with no terminal needed.

The stated principles are compact. Zero config to start, which means paste a link, pick a quality and click download. Native and lightweight, built with Tauri 2 and Rust, with an installer of roughly 10 MB and low memory usage. Cross-platform across Windows, macOS and Linux. And multilingual, with 7 languages and auto-detection.

The coverage claim comes from yt-dlp itself, since the download list is the upstream project's: YouTube, Bilibili, Twitter/X and 1000+ websites, with a link to the upstream supported sites page.

The audience is a person who wants the capability and not the syntax. The application is a front end, and understanding what it does under the hood tells you what it can and cannot do.

What the Tauri and Vue split actually buys

The tech stack table is short and each row is a decision. The backend is Tauri 2 with Rust, the frontend is Vue 3 with TypeScript, the UI kit is Naive UI, state is Pinia with persistence, the build tool is Vite, and there is an i18n layer.

The Tauri choice is the interesting one, because it explains the size claim. Tauri renders the interface in the system webview and keeps the application logic in Rust, so the shipped artefact is a small native binary plus a web bundle rather than a bundled browser engine. The plugin list in the package manifest shows what the Rust side does: the clipboard manager, the deep link handler, the dialog for choosing a download folder, notifications, the opener for opening files, the process and shell plugins for launching the downloader, and the updater.

The deep link plugin is what makes the browser extension work. The extension sends the current tab's URL and the required cookies to the desktop app over a local protocol handler, ytdlp-gui://, which the app registers and which brings the window to the front with the fields pre-filled. The extension lives in browser-extension/ in the repository and is bundled with the app, so there is no separate download, and the install path is to open Toolbox, then Browser Extension in the app, click Open extension folder, turn on Developer mode in the browser's extension page and load the unpacked folder.

The stated privacy property is specific: cookies are processed locally, passed straight to the app via the local protocol, never uploaded anywhere. That is a design statement about the extension, and it is the reason the extension can be trusted with a session cookie for a members-only video.

The download flow, and the two binaries the app manages

The core feature list describes the everyday path. Paste a video URL and instantly preview the title, thumbnail, duration and available formats. Choose video quality, audio-only, or video-only. A download queue with pause, resume and cancel. Real-time progress with speed and ETA. Playlist support, downloading all items or a selected subset. And configurable concurrent downloads and fragment threading.

The advanced list is where the difference from a plain command wrapper shows. Custom filename templates with variables for title, author, date and resolution. Time-based clip trimming so you download a segment rather than the whole file. Re-encoding to MP4, MKV, WebM, MP3, AAC, FLAC and other formats. Embedding subtitles, thumbnails, metadata and chapters into the output. SponsorBlock integration to skip sponsored segments. Cookie authentication for age-restricted or members-only content, and proxy support over HTTP or SOCKS, plus a download speed limiter and a light, dark or auto theme.

Two runtime dependencies sit behind all of this and neither is bundled. The yt-dlp binary is fetched separately: on first launch you open Settings and click Download next to yt-dlp, and the binary is fetched automatically. Deno is an optional runtime you install for full YouTube format support, and the command line mode has a flag for its path, so the app can point at a Deno you already have.

That split explains a lot of the app's behaviour, including why the format list may be shorter than expected on a fresh install.

The toolbox, and the plugin that unlocks more sites

The Toolbox section is where the application stops being a downloader and starts being a small content tool.

The Thumbnail Downloader browses and saves all available cover images in any resolution. The Subtitle Extractor downloads subtitles in SRT, VTT, ASS or LRC, with bilingual merge support, so you can get a two-language subtitle file rather than one language over another. The Live Chat Archiver extracts a YouTube live chat replay, filters it with a regular expression, and exports it as JSON or CSV.

The Plugin Manager installs yt-dlp plugins with one click, and the example given is ChromeCookieUnlock, which is the plugin that handles the YouTube formats that need a browser's decryption capability. That plugin example is not incidental, because it is the same problem the Deno runtime and the cookie support are solving from different directions.

The combination is coherent. A downloader GUI that also gives you subtitles, thumbnails, chat archives and plugin installation is a companion tool for the whole media you consumed, not just the file you saved. For someone archiving a channel or collecting reference material, that combination is worth more than the download form itself.

Running it on Linux, and the scripted mode

Prebuilt binaries come from the releases page, with an .exe installer for Windows, a .dmg for macOS and an .AppImage plus .deb and .rpm for Linux.

Arch Linux gets a specific note, because the AppImage needs FUSE 2, which is not the default on Arch these days:

bash
sudo pacman -S fuse2
chmod +x YDL.GUI_*.AppImage
./YDL.GUI_*.AppImage

If FUSE cannot be enabled in the environment at all, the same file runs with the --appimage-extract-and-run flag instead, and the AppImage stays portable without a system-wide installation.

The command line automation section is the part that turns this from a mouse tool into something a script can drive. An installed instance can be opened with session-specific inputs:

bash
yt-dlp-gui --url "https://example.com/video" \
  --cookies "/path/to/cookies.txt" \
  --dir "/path/to/downloads" \
  --yt-dlp-path "/path/to/yt-dlp" \
  --deno-path "/path/to/deno"

The flag=value form is also accepted, and an HTTP or HTTPS URL can be passed without the url flag. The overrides apply only to the current app session and are never written back, and re-running the command forwards the request to an already-open instance rather than starting a second one. That last detail is what makes it usable from a script that runs on a schedule, where you want the window to appear and the download to begin, not a second application to fight over the same settings.

Where yt-dlp GUI is the wrong tool

The first limitation is that it is a wrapper, so it inherits everything that means. If yt-dlp cannot extract a format, the application cannot either, and if the upstream downloader changes its output the wrapper has to follow. The application does reduce the number of things you can get wrong, but it does not add capability, and the value it adds is entirely in the interface.

The second limitation is the two-binary setup. On a fresh install you have an application that cannot download anything until you click through Settings to fetch yt-dlp, and a separate optional Deno install for full YouTube format support. A user who expects a working downloader on first launch will hit a blank list of formats and may not connect it to the missing binary. The tip about login-required videos and Netscape format cookies is a second such point, and cookie configuration is where the mistakes happen most often.

The third is that this is an interactive desktop application. It has a queue with pause, resume and cancel, which is exactly right for a person watching a download, and exactly wrong for an unattended batch. The scripted mode forwards a request to the running instance, so a cron job can start a download, but there is no scheduling, no retry policy and no result reporting. A team that needs to archive a channel on a schedule wants yt-dlp itself in a script, not a window that happens to accept a URL.

The alternative worth comparing is yt-dlp directly, with a config file and a shell script. The difference in approach is exactly the one the project argues about, in reverse: a script is faster to run, scriptable, and has no UI to learn, and it is far worse for someone who does not know the format flags. A third option is a dedicated media manager, which brings a library, a search and a browser extension of its own, at a cost in disk and setup. This application sits in the useful middle, for a person who wants the downloader without the flags, and it is a worse choice for a person who already has a working script.

Editorial conclusion

yt-dlp GUI fits a user who downloads from YouTube, Bilibili, TikTok and the rest of the supported site list and wants a window instead of a terminal, especially with the browser extension that hands over the URL and cookies without a copy and paste. It is the wrong choice if you already know the yt-dlp flags you need, if you want unattended bulk work, or if your environment will not let you fetch the yt-dlp binary and the Deno runtime the app expects. Before adopting it, download the yt-dlp binary from its own Settings screen and check the format list for the sites you care about, since the app fetches the binary rather than shipping it, and note that the first launch does not include the runtime that some sites need.

Frequently asked questions

How do I install yt-dlp GUI?

Download the build for your platform from the releases page, an .exe installer for Windows, a .dmg for macOS, and an .AppImage plus .deb and .rpm for Linux. On Arch Linux the AppImage needs the fuse2 package, and there is an --appimage-extract-and-run fallback when FUSE cannot be enabled.

Does yt-dlp GUI include the yt-dlp binary?

No. The yt-dlp binary is fetched separately: on first launch you open Settings and click Download next to yt-dlp, and the binary is downloaded automatically. Installing the Deno runtime is optional and is needed for full YouTube format support.

What can the yt-dlp GUI toolbox do?

It includes a thumbnail downloader that saves cover images in any resolution, a subtitle extractor supporting SRT, VTT, ASS and LRC with bilingual merge, a live chat archiver that filters with regex and exports JSON or CSV, and a plugin manager that installs yt-dlp plugins such as ChromeCookieUnlock.

How does the yt-dlp GUI browser extension work?

The YDL GUI Helper extension sends the current tab's URL and required cookies to the desktop app over a local ytdlp-gui:// protocol handler, so there is no copy and paste and no separate cookie export. The extension is bundled with the app and is loaded unpacked through the browser's developer mode.

Can yt-dlp GUI be driven from a script?

Yes. An installed instance accepts session-specific inputs such as --url, --cookies, --dir, --yt-dlp-path and --deno-path on the command line, and re-running the command forwards the request to an already-open instance rather than starting a second one.

Official sources

  1. imsyy/yt-dlp-gui on GitHub
  2. Issues
  3. License: MIT
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/imsyy-yt-dlp-gui.svg)](https://hysenlabs.com/projects/imsyy-yt-dlp-gui)

Was this useful?