Skip to content
All projects

YouTube Video Downloader

A desktop downloader for videos and playlists, built with PyQt6 and yt-dlp.

Role
Developer
Year
2026
Illustration of a desktop app downloading a video from a playlist

What it is

A cross-platform desktop app that downloads single videos and whole playlists at a chosen resolution, packaged as native builds for macOS and Linux.

The problem

The original pytube-based version hung for 30 seconds generating tokens, was blocked as a bot, froze the UI and took up to a minute to load playlists.

Architecture

Requests flow left to right. Hover a component for its role.

YouTube Video Downloader architecturePyQt6 desktop UIPyQt6 desktop UIDownload service: background threadsDownload serviceyt-dlpyt-dlpLocal libraryLocal libraryPyInstaller builds: macOS Apple Silicon and Intel, LinuxPyInstaller builds
Solid line: synchronous callDashed line: through a queueDashed box: external or infrastructure
  • PyQt6 desktop UI client
  • Download service worker, background threads
  • yt-dlp external
  • Local library data
  • PyInstaller builds infrastructure, macOS Apple Silicon and Intel, Linux

Key decisions

  • Replace the engine, keep the app

    Moving from pytube to yt-dlp removed token generation entirely and fixed bot detection, without changing the user interface.

  • No shell strings

    A subprocess call that used shell=True was rewritten to pass an argument list, closing a command-injection risk.

Highlights

  • Playlist loading no longer blocks the interface.
  • Native builds for Apple Silicon, Intel Macs and Linux.

Stack

PythonPyQt6yt-dlpPyInstaller