Ants Projects Hub ← All projects

Live

Snatch

LiveWINMACLNX

Latest release on GitHub →

YT-DLP GUI

A tkinter-based graphical frontend for yt-dlp, built for Linux desktops.

Four tabs in one window: download videos, search YouTube with embedded playback, inspect local media files, and browse download history. Three themes (Dark, Nord, Monokai, YouTube), drag-and-drop URL support, optional embedded mpv player, browser cookie import, and yt-dlp self-update from the GUI.

Features

  • Download tab — paste a URL (or drag-and-drop), pick format/resolution, queue multiple downloads, watch live progress
  • Search tab — search YouTube and preview results in an embedded mpv player before downloading
  • Media Info tab — inspect any local video/audio file via ffprobe (codec, bitrate, duration, streams)
  • History tab — browse and manage previous downloads (stored locally, max 200 entries)
  • Browser cookie import — pull cookies from Firefox/Chrome for age-gated or member-only videos
  • yt-dlp version check + update — one-click self-update via pkexec
  • SponsorBlock + subtitle support — toggle per-download
  • Speed limit + audio merging — configurable per session

Screenshots

(Add screenshots here — icon.png ships with the repo.)

Requirements

Required:

  • Python 3.10+
  • yt-dlp on PATH
  • Tkinter (python3-tk on Debian/Ubuntu, usually preinstalled on most distros)

Optional (auto-detected):

  • mpv — enables the embedded player in the Search tab
  • ffprobe — required for the Media Info tab
  • tkinterdnd2 — enables drag-and-drop URL support (pip install tkinterdnd2)
  • Pillow — enables thumbnail rendering (pip install Pillow)
  • zenity — nicer native file picker on GNOME/KDE

Install

git clone https://github.com/milnet01/ytdlp-gui.git
cd ytdlp-gui
# Optional extras:
pip install --user tkinterdnd2 Pillow

Run

python3 ytdlp_gui.py

or as a module:

python3 -m ytdlp_gui

Desktop launcher

YT-DLP.desktop is provided but its Exec= and Path= lines point at the original author's install location. Edit both lines to your actual checkout path, then drop it into ~/.local/share/applications/.

Configuration

Three files are created at runtime in the project root, all mode 0600:

File Purpose
config.json UI preferences (save path, default format, theme, window geometry)
history.json Download history (max 200 entries)
cookies.txt Browser-exported cookies (when used)

These are git-ignored and never uploaded.

Architecture

The main YTDLPGui class in ytdlp_gui/app.py is composed of seven mixins (one per concern: each tab, the player, version checks, the download engine). All blocking work runs in daemon threads and posts back to the Tk event loop via root.after(0, ...).

See STANDARDS.md for the full architecture, mixin contracts, theme system, security rules, and coding conventions.

Security notes

  • All subprocess calls use argument lists with a -- separator before URLs (no shell, no command injection surface).
  • URLs are validated as http/https only before being passed to yt-dlp.
  • Network fetches (thumbnails, update check) are HTTPS-only.
  • The mpv IPC socket lives in a directory whose ownership is checked before connecting.
  • User data files are written with 0600 permissions.

License

MIT © 2026 milnet01