GitHunt
OH

oheyek/VidGrabber

Desktop application for downloading and processing YouTube content

VidGrabber Logo VidGrabber

Python Version
License
Platform
Release
Downloads

A powerful desktop application for downloading and processing YouTube content with an intuitive interface.

VidGrabber Interface

โœจ Features

  • Multi-Format Downloads: Download videos (MP4), audio (MP3/WAV), thumbnails (JPG), and tags (CSV).
  • Quality Selection: Choose from available video qualities (144p to 2160p) with automatic detection.
  • Queue Management: Add multiple downloads to queue and process them in batch (up to 5 concurrent downloads).
  • Smart Path Management: Customize download locations for each file type with persistent settings.
  • Theme Customization: Switch between Dark, Light, and System themes.
  • Tag Extraction: Extract video tags and copy them directly to clipboard.
  • Cross-Platform: Works seamlessly on Windows, macOS, and Linux.
  • Auto-Updates: Automatically downloads and updates yt-dlp and ffmpeg binaries.
  • Progress Tracking: Real-time download progress with visual indicators.

๐Ÿ› ๏ธ Installation

Using the Pre-built Release

  1. Download the appropriate executable for your platform from
    the Releases page:
    • Windows: VidGrabber.exe
    • macOS: VidGrabber-macOS.zip
    • Linux: VidGrabber-Linux.tar.gz
  2. Extract the archive (if applicable).
  3. On first launch, the app will automatically download required binaries (yt-dlp and ffmpeg)

๐Ÿง Linux & ๐ŸŽ macOS Notes

Linux Users:
Download the .tar.gz file, extract it, and run the binary inside. No installation required.

tar -xzf VidGrabber-Linux.tar.gz
./VidGrabber

macOS Users:
If you receive a message that the app is "damaged" or "cannot be opened" (Gatekeeper error), run the following command
in Terminal to allow execution:

xattr -cr /path/to/VidGrabber.app

Running from Source

# Clone the repository
git clone https://github.com/oheyek/VidGrabber.git
cd VidGrabber

# Install dependencies
pip install -r requirements.txt

# Run the application
python main.py

๐ŸŽฏ Usage

Basic Download

  1. Paste a YouTube link into the input field.
  2. Click "๐Ÿ”Ž Grab video" to fetch video information.
  3. Select your desired download option:
    • ๐Ÿ–ผ๏ธ Download thumbnail (JPG) - Get the video thumbnail
    • ๐ŸŽต Download MP3/WAV - Extract audio only
    • ๐ŸŽฌ Download MP4 - Download video (select quality)
    • ๐Ÿท๏ธ Tags (CSV + Clipboard) - Extract video tags

Queue Management

  1. Click "๐Ÿ“‹ Queue Manager" to open the queue window.
  2. When fetching video info, choose "โž• Add to Queue" instead of immediate download.
  3. Add multiple items to the queue (max 5 per category).
  4. Click "โ–ถ๏ธ Download All" to process all queued downloads.
  5. Use "๐Ÿ—‘๏ธ Clear All" to remove all items from queue.

Customizing Settings

  1. Click "โš™๏ธ Settings" button.
  2. Appearance Tab: Choose between Dark, Light, or System theme.
  3. Downloads Tab: Set custom download paths for each file type (MP4, MP3, WAV, JPG, Tags).
  4. Credits Tab: View app information and support links.

๐Ÿ“‹ Available Downloads

Type Format Description
Video MP4 Download in multiple qualities (144p-2160p)
Audio MP3 Extract audio with 192K bitrate
Audio WAV Extract high-quality uncompressed audio
Thumbnail JPG Download video thumbnail image
Tags CSV Extract video tags to CSV and clipboard

๐Ÿ”ง Technical Details

  • Language: Python 3
  • GUI Framework: CustomTkinter 5.2.2
  • Download Engine: yt-dlp (auto-updated)
  • Media Processing: ffmpeg (auto-downloaded)
  • Async Support: asyncio for non-blocking operations
  • Clipboard: pyperclip for tag copying
  • Logging: Comprehensive logging system for debugging

Key Dependencies

customtkinter==5.2.2
pyperclip==1.11.0
pillow==12.0.0
pytest==8.4.2
pytest-asyncio==1.2.0

๐Ÿ—๏ธ Building from Source

Windows

pyinstaller win.spec

macOS

pyinstaller macos.spec

Linux

pyinstaller linux.spec

The built executables will be located in the dist/ directory.

๐Ÿ—‚๏ธ Project Structure

VidGrabber/
โ”œโ”€โ”€ main.py                      # Application entry point
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ downloader.py           # Video/audio download logic
โ”‚   โ”œโ”€โ”€ video_info.py           # YouTube video information fetcher
โ”‚   โ”œโ”€โ”€ thumbnail_downloader.py # Thumbnail download handler
โ”‚   โ”œโ”€โ”€ tag_extractor.py        # Tag extraction and CSV export
โ”‚   โ”œโ”€โ”€ path_manager.py         # Download path management
โ”‚   โ”œโ”€โ”€ logger.py               # Logging functionality
โ”‚   โ”œโ”€โ”€ updater.py              # Binary updater (yt-dlp, ffmpeg)
โ”‚   โ”œโ”€โ”€ queue/
โ”‚   โ”‚   โ””โ”€โ”€ download_queue.py   # Queue management system
โ”‚   โ””โ”€โ”€ ui/
โ”‚       โ”œโ”€โ”€ interface.py        # Main application UI
โ”‚       โ”œโ”€โ”€ queue_window.py     # Queue manager window
โ”‚       โ”œโ”€โ”€ themes/
โ”‚       โ”‚   โ””โ”€โ”€ basalt.json     # Custom theme
โ”‚       โ””โ”€โ”€ icons/
โ”‚           โ”œโ”€โ”€ icon.ico        # Windows icon
โ”‚           โ”œโ”€โ”€ icon.icns       # macOS icon
โ”‚           โ””โ”€โ”€ icon.png        # Linux icon
โ”œโ”€โ”€ tests/                       # Unit tests
โ”‚   โ”œโ”€โ”€ conftest.py             # Pytest configuration
โ”‚   โ”œโ”€โ”€ test_downloader.py      # Downloader tests
โ”‚   โ”œโ”€โ”€ test_video_info.py      # Video info tests
โ”‚   โ”œโ”€โ”€ test_thumbnail_downloader.py
โ”‚   โ”œโ”€โ”€ test_tag_extractor.py
โ”‚   โ””โ”€โ”€ test_download_queue.py
โ”œโ”€โ”€ requirements.txt            # Python dependencies
โ”œโ”€โ”€ win.spec                    # PyInstaller config for Windows
โ”œโ”€โ”€ macos.spec                  # PyInstaller config for macOS
โ”œโ”€โ”€ linux.spec                  # PyInstaller config for Linux
โ”œโ”€โ”€ Doxyfile                    # Documentation configuration
โ””โ”€โ”€ README.md                   # This file

๐Ÿงช Testing

The project includes comprehensive unit tests for all core functionality.

Running Tests

# Install test dependencies
pip install pytest pytest-asyncio

# Run all tests
pytest

# Run specific test file
pytest tests/test_downloader.py

# Run with verbose output
pytest -v

# Run with coverage
pytest --cov=src tests/

Test Coverage

  • Video Download Tests: URL validation, quality selection, error handling
  • Audio Download Tests: MP3/WAV format validation, invalid input handling
  • Thumbnail Tests: Download validation, error cases
  • Tag Extraction Tests: CSV generation, clipboard copying
  • Queue Management Tests: Adding items, queue limits, batch processing
  • Video Info Tests: URL cleaning, metadata extraction

๐Ÿค Contributions

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a new feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is open source and available under the MIT License.


Happy Downloading! ๐ŸŽ‰

Author

Made with โค๏ธ by ohey

Buy Me A Coffee


If you find this project useful, consider buying me a coffee! โ˜•