Skip to main content

现代化视频下载工具,基于 yt-dlp 和 PySide6

Project description

Logo

Yt-dlp Qt GUI

CI codecov Python PySide6 yt-dlp License Platform

A modern video download tool built with PySide6 and yt-dlp

[English] | 简体中文

FeaturesQuick StartFAQ


📖 Introduction

Yt-dlp Qt GUI is a lightweight, modern, cross-platform video download tool built on the powerful yt-dlp core and the elegant PySide6 framework. It provides a user-friendly graphical interface, making it simple and efficient to download content from thousands of video sites like YouTube, Bilibili, Vimeo, and more.

🎯 Key Advantages

  • 🚀 High Performance: Utilizes a multi-threaded architecture; download tasks run in the background, keeping the UI smooth and responsive.
  • 🎨 Modern Design: Carefully crafted dark theme interface for a comfortable visual experience.
  • 🔧 Highly Configurable: Rich format presets and custom options to meet various needs.
  • 🛡️ Stable & Reliable: Robust error handling and retry mechanisms ensure tasks are completed.
  • 🌐 Network Friendly: Built-in proxy support to easily handle network restrictions.

✨ Features

🎬 Downloading

  • Multi-platform Support: Powered by yt-dlp, supporting thousands of sites including YouTube, Bilibili, Vimeo, Twitter, etc.
  • Smart Format Selection: Built-in presets for Best Quality, 4K, 1080p, 720p, and Audio-only downloads.
  • Automatic Merging: Automatically downloads the best video and audio streams and merges them into MP4 using FFmpeg.
  • Resume Support: Supports resuming interrupted downloads to save time and bandwidth.

📊 Progress & Status

  • Real-time Progress: Detailed progress bars showing exact percentages.
  • Speed Monitoring: Real-time download speed display.
  • ETA Prediction: Smart calculation of estimated remaining time.
  • Detailed Logs: Complete download logs for troubleshooting and tracking.

⚙️ Advanced Features

  • Proxy Support: Built-in HTTP/SOCKS proxy configuration.
  • Multi-threaded: Independent background threads for downloads.
  • Task Cancellation: Gracefully cancel downloads at any time.
  • Custom Save Path: Flexible directory selection (defaults to system Downloads folder).
  • Retry Mechanism: Automatic retries (up to 10 times) to improve success rates.

📸 Preview

Main Interface

Modern dark theme interface for a clean download experience


🚀 Quick Start

Prerequisites

  • Python 3.12 or higher
  • uv (Recommended package manager)
  • FFmpeg (Required for merging; ensure it's in your system PATH)

Installation

  1. Clone the Repository

    git clone https://github.com/twn39/yt-dlp-qt-gui.git
    cd yt-dlp-gui
    
  2. Install Dependencies Recommended using uv:

    uv sync
    
  3. Run the Application

    Multiple ways to start:

    Option 1: Using CLI (Recommended)

    uv run yt-dlp-qt-gui
    

    Check version:

    uv run yt-dlp-qt-gui --version
    

    Help info:

    uv run yt-dlp-qt-gui --help
    

📦 Packaging

Install Packaging Dependencies

uv sync --extra packaging

Build Executable

# Using build script (Recommended)
uv run python build.py

# Or using PyInstaller directly
uv run pyinstaller --clean yt-dlp-qt-gui.spec

The executable will be located in the dist/ directory.

Cross-platform

  • Windows: Build on Windows for .exe
  • macOS: Build on macOS for app/executable
  • Linux: Build on Linux for executable

🧪 Testing

Running Tests

This project uses pytest for testing with pytest-qt for Qt-specific tests.

# Run all tests
uv run pytest

# Run tests with coverage
uv run pytest --cov=src/yt_dlp_gui --cov-report=html

# Run specific test file
uv run pytest tests/test_main_window.py

# Run with verbose output
uv run pytest -v

# Run specific test
uv run pytest tests/test_main_window.py::test_main_window_init

🛠️ Tech Stack

📝 FAQ

Q: What if a download fails?

A: Please check:

  • URL is correct and accessible.
  • Network connection is stable.
  • Try using a proxy if there are regional restrictions.
  • Check logs for specific error details.

Q: Is FFmpeg mandatory?

A: Yes. FFmpeg is used to merge video and audio. Without it, some formats may not download correctly.


🤝 Contributing

Contributions, issues, and feature requests are welcome!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.


🙏 Acknowledgments


📮 Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yt_dlp_qt_gui-0.2.0.tar.gz (368.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yt_dlp_qt_gui-0.2.0-py3-none-any.whl (364.1 kB view details)

Uploaded Python 3

File details

Details for the file yt_dlp_qt_gui-0.2.0.tar.gz.

File metadata

  • Download URL: yt_dlp_qt_gui-0.2.0.tar.gz
  • Upload date:
  • Size: 368.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.17

File hashes

Hashes for yt_dlp_qt_gui-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bb2eaf92a2f67e87c1a769aacad7a549fd87fdee2807c466aee588dcb97cacbd
MD5 010fa0930e7bc6ac1a2581f7d6243d0e
BLAKE2b-256 47db59c998ab6e79d3208b5be3e6b86ea989b7c172976bfb12abb5ba5fe097ae

See more details on using hashes here.

File details

Details for the file yt_dlp_qt_gui-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yt_dlp_qt_gui-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2863a77cfa16bc5807d79882dceb8473a75f83c529836e61122631361b8fe78
MD5 207902e3af8bd72b6273638845bc25eb
BLAKE2b-256 b99d00877e77ec0a7357a471e7d0c55e064c94629bb52efe8ee236731123be39

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page