Skip to main content

A modern YouTube video downloader with a beautiful PyQt5 interface

Project description

ViDownloader

ViDownloader Logo

License: MIT Python 3.9+ Status: Beta PyPI Version Platform: Windows & Linux Built with PyQt5 Powered by yt-dlp

[!WARNING] Heads up: This is currently in Beta phase. It works, but there might be rough edges and unexpected behavior. Your feedback will help shape the stable release.

ViDownloader Screenshot


What This Is

ViDownloader is a desktop application built with PyQt5 that simplifies downloading YouTube videos in bulk. While it uses yt-dlp under the hood for the actual downloading, the scraping and interface are completely custom-built.

This happens to be my first substantial open-source project, so please bear with me. it might do some dumb things, but I'm learning as I go. If something breaks or doesn't make sense, let me know and I'll do my best to fix it.


Quick Start

Install via pip (PyPI)

pip install vidownloader

Or from source

git clone https://github.com/farhaanaliii/vidownloader.git
cd vidownloader
pip install -e .

Launch the App

After installation, run:

vidownloader

Or, if you prefer:

python -m vidownloader

What You Can Download

Paste almost any YouTube URL and ViDownloader will figure out the rest:

  • Channel videoshttps://youtube.com/@channel/videos
  • Channel shortshttps://youtube.com/@channel/shorts
  • Playlist videoshttps://youtube.com/playlist?list=PLAYLIST_ID
  • Single videoshttps://youtube.com/watch?v=VIDEO_ID
  • Single shortshttps://youtube.com/shorts/VIDEO_ID

Just paste one or more links (one per line) and let the app handle the scraping and downloading.


How It Works

  1. Paste Links – Add YouTube URLs into the text area
  2. Scrape Metadata – Click Start to fetch video details using custom scraping logic
  3. Select Videos – Choose which videos you want from the list
  4. Download – Hit Download and let yt-dlp do its magic in the background

The interface sits on top of yt-dlp for reliable downloads, but all the scraping, queuing, and progress tracking happens within ViDownloader itself.


Configuration

Open Settings (top-right corner) to adjust:

Setting What It Does
Download Location Where your videos are saved
Export Location Where .viio list files are stored
File Naming Name files by title, video ID, or random string
Download Threads Simultaneous downloads (1–10 threads)

Export & Resume

Working with a large channel? Export your video list as a .viio file, close the app, and import it later to resume right where you left off. No need to re-scrape everything.


System Requirements

  • Python 3.9 or newer
  • PyQt5 (≥ 5.15.11)
  • yt-dlp (latest recommended)
  • curl_cffi
  • FFmpeg – Required by yt-dlp for video/audio processing (download)
  • JavaScript Runtime – yt-dlp needs a JS engine to handle some videos. Install one of:

Python dependencies install automatically via pip. You'll need to install FFmpeg and a JS runtime separately.

[!TIP] One-click installer coming soon! A standalone installer that bundles all dependencies is in development.


Building Executables

Want to build a standalone executable? Use the provided build scripts:

Windows:

.\build.bat

Linux:

./build.sh

These scripts will automatically:

  • Set up the virtual environment
  • Install dependencies
  • Compile Qt resources
  • Build the executable using Nuitka

Pre-built executables are also available for download:

  • Windows (x86/x64)
  • Linux (x64)

Check the Releases page for downloads.


Development & Contribution

This is my first major open-source project, so I'm sure there are plenty of areas to improve. If you find bugs, have feature ideas, or want to contribute code:

  1. Fork the repository
  2. Create a feature branch
  3. Submit a pull request

All contributions are welcome. just try to match the existing code style.


License

Released under the MIT License. Use it, modify it, share it.


Coming Soon

  • Format & quality selection – Pick 720p, 1080p, 4K, etc.
  • Advanced filtering – Search and filter video lists
  • Download history – Track your past downloads
  • Improved error handling – Making the app more resilient

TODO: If you're good with design, we could really use a better logo. The current one is... functional, but not pretty. Any takers?


Acknowledgment

While ViDownloader implements its own scraping logic, it relies on the excellent yt-dlp project for actual video downloading. Big thanks to the yt-dlp maintainers for their incredible work.


Author

Built by Farhan Ali – my first serious dive into open-source desktop apps. Be gentle.

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

vidownloader-1.0.0b2.tar.gz (691.7 kB view details)

Uploaded Source

Built Distribution

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

vidownloader-1.0.0b2-py3-none-any.whl (724.3 kB view details)

Uploaded Python 3

File details

Details for the file vidownloader-1.0.0b2.tar.gz.

File metadata

  • Download URL: vidownloader-1.0.0b2.tar.gz
  • Upload date:
  • Size: 691.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for vidownloader-1.0.0b2.tar.gz
Algorithm Hash digest
SHA256 be58786e44700c988f90e4f2f0d32c1f33f1fc0d440d7629cc7ad25286a28f1e
MD5 daae40d77cc0d574a13c6b87b6beff26
BLAKE2b-256 66e91a36d9bc41f8a1cad30e8e7ae9b33a9f0e467346598d1ee58d8e8ed34c00

See more details on using hashes here.

File details

Details for the file vidownloader-1.0.0b2-py3-none-any.whl.

File metadata

  • Download URL: vidownloader-1.0.0b2-py3-none-any.whl
  • Upload date:
  • Size: 724.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for vidownloader-1.0.0b2-py3-none-any.whl
Algorithm Hash digest
SHA256 ee335ac0d44845351bab87b3dd271b428642f669106905650c1b19bcfc36816a
MD5 56142fecd181b169e626a8cfeaef268b
BLAKE2b-256 8ba01e5c39df0a8992ad7387d4c866b5bcd2b229857fd1af9f2f1290a4b335be

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