Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

YTDownload

A native desktop media downloader built with PyQt6 and yt-dlp. Hacker-terminal themed GUI focused on music extraction with full video download support.

Python PyQt6 yt-dlp

Features

Music Downloads (Primary)

  • 5 audio formats: MP3, FLAC (lossless), WAV, OGG, M4A
  • 4 bitrate options: 320kbps, 256kbps, 192kbps, 128kbps
  • Batch downloads: Paste multiple URLs for bulk extraction
  • Playlist support: Download entire playlists as individual tracks

Video Downloads

  • Quality selection: 360p, 480p, 720p, 1080p, 1440p, 4K (2160p)
  • Best available: Auto-select highest quality option
  • MP4 output: Merged video+audio in MP4 container

Download Queue

  • Multiple concurrent downloads (configurable 1-10)
  • Real-time progress: Per-item speed, ETA, and progress bar
  • Cancel individual items or cancel all at once
  • Clear completed downloads from the queue

Interface

  • Hacker/terminal theme: Green-on-black monospace aesthetic
  • 3-tab layout: Download, Queue, Settings
  • Keyboard shortcuts: Ctrl+V (paste+scan), Ctrl+D (download), Ctrl+Q (quit)
  • Batch mode: Paste multiple URLs, one per line
  • URL scanning: Preview metadata before downloading

Project Structure

YTDownload/
├── main.py                  # Application entry point
├── requirements.txt         # Python dependencies
├── pyproject.toml           # Project config + pytest settings
├── src/
│   ├── app.py               # QApplication setup and theme application
│   ├── main_window.py       # Main window with tabs and all UI
│   ├── download_engine.py   # Core yt-dlp wrapper (formats, options, execution)
│   ├── download_manager.py  # Queue manager with concurrency control
│   ├── widgets.py           # Custom widgets (download items, stats bar)
│   └── theme.py             # Hacker-style dark theme stylesheet
├── tests/
│   ├── conftest.py           # Shared fixtures (offscreen Qt platform)
│   ├── test_download_engine.py  # 60 tests: formats, options, progress, downloads
│   ├── test_download_manager.py # 27 tests: queue, batch, cancel, concurrency
│   ├── test_widgets.py          # 28 tests: formatting, widget state, signals
│   └── test_main_window.py      # 29 tests: UI, fetching, downloads, shortcuts
└── backend/                 # (Legacy web app - retained for reference)

Installation

Prerequisites

  • Python 3.10+
  • FFmpeg (for audio extraction)

Setup

# Install dependencies
pip install -r requirements.txt

# Run the application
python main.py

Running Tests

# Run all 164 tests
QT_QPA_PLATFORM=offscreen python -m pytest tests/ -v

Usage

  1. Launch with python main.py
  2. Paste a YouTube URL in the target field
  3. Click SCAN to preview metadata
  4. Select format (Audio/Video) and quality/bitrate
  5. Click START DOWNLOAD
  6. Monitor progress in the QUEUE tab
  7. Files save to ~/YTDownloads/ (configurable in Settings)

Batch Mode

Click + BATCH MODE to paste multiple URLs (one per line) for bulk downloads.

Keyboard Shortcuts

Key Action
Ctrl+V Paste URL and auto-scan
Ctrl+D Start download
Ctrl+Q Quit application

Supported Sites

Powered by yt-dlp, supporting 1000+ sites including YouTube, SoundCloud, Bandcamp, Vimeo, and more.

License

This project is provided for educational purposes. Please respect content creators' rights and applicable copyright laws.


Disclaimer: This tool is for personal use only. Users are responsible for ensuring they have the right to download any content.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages