Skip to content
/ YTSage Public

Modern YouTube downloader with a clean PySide6 interface. Download videos in any quality, extract audio, fetch subtitles, sponsorBlock, and view video metadata. Built with yt-dlp for reliable performance.

License

Notifications You must be signed in to change notification settings

oop7/YTSage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

98 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ₯ YTSage

YTSage Interface

PyPI version License: MIT Python 3.7+ Downloads GitHub Stars

A modern YouTube downloader with a clean PySide6 interface.
Download videos in any quality, extract audio, fetch subtitles, and more.

Installation β€’ Features β€’ Usage β€’ Screenshots β€’ Troubleshooting β€’ Contributing


❓ Why YTSage?

YTSage is designed for users who want a simple yet powerful YouTube downloader. Unlike other tools, it offers:

  • A clean, modern PySide6 interface
  • One-click downloads for video, audio, and subtitles
  • Advanced features like SponsorBlock, subtitle merging, and playlist selection
  • Cross-platform support and easy installation

✨ Features

Core Features Advanced Features Extra Features
πŸŽ₯ Format Table 🚫 SponsorBlock Integration πŸ’Ύ Save Download Path
🎡 Audio Extraction πŸ“ Multi-Subtitle Select & Merge πŸ”„ Auto-Update yt-dlp
✨ Simple UI πŸ’Ύ Save Description πŸ› οΈ FFmpeg/yt-dlp Detection
πŸ“‹ Playlist Support πŸ–ΌοΈ Save thumbnail βš™οΈ Custom Commands
πŸ–ΌοΈ Playlist Selector πŸš€ Speed Limiter πŸͺ Login with Cookies
πŸ“‘ Embed Chapters βœ‚οΈ Trim Video Sections

πŸš€ Installation

⚑ Quick Install (Recommended)

Install YTSage from PyPI:

pip install ytsage

Then launch the app:

ytsage

πŸ“¦ Pre-built Executables

  • πŸͺŸ Windows: YTSage-v<version>.exe / YTSage-v<version>-ffmpeg.exe (with FFmpeg)
  • 🐧 Linux: YTSage-v<version>-amd64.deb / YTSage-v<version>-x86_64.AppImage
  • 🍎 macOS: YTSage-v<version>-macOS.zip / YTSage-v<version>.dmg

πŸ‘‰ Download Latest Release

πŸ› οΈ Manual Installation from Source

1. Clone the Repository

git clone https://github.com/oop7/YTSage.git
cd YTSage

2. Install Dependencies

⚑ With uv

uv pip install -r requirements.txt

πŸ“¦ Or with standard pip

pip install -r requirements.txt

3. Run the Application

python main.py

πŸ“Έ Screenshots

Main Interface Playlist Download
Main Interface Playlist Download
Audio Format Selection with Save Thumbnail Subtitle Options merged with Remove Sponsor Segments
Audio Format Subtitle Options

πŸ“– Usage

🎯 Basic Usage
  1. Launch YTSage
  2. Paste YouTube URL (or use "Paste URL" button)
  3. Click "Analyze"
  4. Select Format:
    • Video for video downloads
    • Audio Only for audio extraction
  5. Choose Options:
    • Enable subtitles & select language
    • Enable subtitle merge
    • Save thumbnail
    • Remove sponsor segments
    • Save description
    • Embed chapters
  6. Select Output Directory
  7. Click "Download"
πŸ“‹ Playlist Download
  1. Paste Playlist URL
  2. Click "Analyze"
  3. Select videos from the playlist selector (optional, defaults to all)
  4. Choose desired format/quality
  5. Click "Download"

πŸ’‘ The application automatically handles the download queue

🧰 Advanced Options
  • Quality Selection: Choose the highest resolution for best quality
  • Subtitle Options: Filter languages and embed into video
  • Custom Commands: Access advanced yt-dlp features
  • Save Description: Save the description of the video
  • Save Thumbnail: Save the thumbnail of the video
  • Embed Chapters: Embed chapter markers as metadata in the downloaded video file for compatible video players
  • Remove Sponsor Segments: Remove sponsor segments from the video
  • Speed Limiter: Limit the download speed
  • Login with Cookies: Login to YouTube using cookies to access private content
    How to use it:
    1. Extract cookies from your browser using an extension like cookie-editor
    2. Copy the cookies in Netscape format
    3. Create a file named cookies.txt and paste the cookies into it
    4. Select the cookies.txt file in the app
  • Save Download Path: Save the download path
  • Update yt-dlp: Update yt-dlp
  • FFmpeg/yt-dlp Detection: Automatically detect FFmpeg/yt-dlp
  • Trim Video: Download only specific parts of a video by specifying time ranges (HH:MM:SS format)

πŸ› οΈ Troubleshooting

Click to view common issues and solutions
  • Format table not displaying: Update yt-dlp to the latest version.
  • Download fails: Check your internet connection and ensure the video is available.
  • Separate video and audio files after download: This happens when FFmpeg is missing or not detected. YTSage requires FFmpeg to merge high-quality video and audio streams.
    • Solution: Ensure FFmpeg is installed and accessible in your system's PATH. For Windows users, the easiest option is to download the YTSage-v<version>-ffmpeg.exe file, which comes bundled with FFmpeg.

πŸ›‘οΈ Windows Defender / Antivirus Warning

Some antivirus software may flag the .exe files as false positives. This is a known limitation of PyInstaller-packaged applications.

Why this happens:

  • PyInstaller bundles Python runtime and libraries together
  • Antivirus heuristics can misidentify packed executables as suspicious
  • This affects many legitimate Python applications built with PyInstaller

Safe alternatives:

  • βœ… Use pip installation: pip install ytsage (recommended)
  • βœ… Build from source
  • βœ… Whitelist the application in your antivirus software

πŸ“‹ Related Issues: #33 - This is a known PyInstaller limitation, not a security issue with YTSage itself.


🍎 macOS: "App is damaged and can’t be opened"

If you see this error on macOS Sonoma or newer, you need to remove the quarantine attribute.

  1. Open Terminal (you can find it using Spotlight).
  2. Type the following command but do not press Enter yet. Make sure to include the space at the end:
    xattr -d com.apple.quarantine 
  3. Drag the YTSage.app file from your Finder window and drop it directly into the Terminal window. This will automatically paste the correct file path.
  4. Press Enter to run the command.
  5. Try opening YTSage.app again. It should now launch correctly.

Configuration Locations (Advanced)

  • Windows: %LOCALAPPDATA%\YTSage
  • macOS: ~/Library/Application Support/YTSage
  • Linux: ~/.local/share/YTSage

πŸ‘₯ Contributing

We welcome contributions! Here's how you can help:

  1. 🍴 Fork the repository
  2. 🌿 Create your feature branch:
git checkout -b feature/AmazingFeature
  1. πŸ’Ύ Commit your changes:
git commit -m 'Add some AmazingFeature'
  1. πŸ“€ Push to the branch:
git push origin feature/AmazingFeature
  1. πŸ”„ Open a Pull Request
πŸ“‚ Project Structure

YTSage - Project Structure

This document describes the organized folder structure of YTSage.

πŸ“ Project Structure

YTSage-main/
β”œβ”€β”€ πŸ“ assets/                    # Static assets and resources
β”‚   β”œβ”€β”€ πŸ“ Icon/                  # Application icons
β”‚   β”‚   └── icon.png
β”‚   └── πŸ“ sound/                 # Audio files
β”‚       └── notification.mp3
β”‚
β”œβ”€β”€ πŸ“ src/                       # Source code
β”‚   β”œβ”€β”€ πŸ“ core/                  # Core business logic
β”‚   β”‚   β”œβ”€β”€ __init__.py           # Core package init
β”‚   β”‚   β”œβ”€β”€ ytsage_downloader.py  # Download functionality
β”‚   β”‚   β”œβ”€β”€ ytsage_ffmpeg.py      # FFmpeg integration
β”‚   β”‚   β”œβ”€β”€ ytsage_style.py       # UI styling
β”‚   β”‚   β”œβ”€β”€ ytsage_utils.py       # Utility functions
β”‚   β”‚   └── ytsage_yt_dlp.py      # yt-dlp integration
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ gui/                   # User interface components
β”‚   β”‚   β”œβ”€β”€ πŸ“ dialogs/           # Dialog classes
β”‚   β”‚   β”‚   β”œβ”€β”€ __init__.py       # Dialogs package init (re-exports all)
β”‚   β”‚   β”‚   β”œβ”€β”€ ytsage_dialogs_base.py     # Basic dialogs (Log, About)
β”‚   β”‚   β”‚   β”œβ”€β”€ ytsage_dialogs_custom.py   # Custom functionality dialogs
β”‚   β”‚   β”‚   β”œβ”€β”€ ytsage_dialogs_ffmpeg.py   # FFmpeg-related dialogs
β”‚   β”‚   β”‚   β”œβ”€β”€ ytsage_dialogs_selection.py # Selection dialogs
β”‚   β”‚   β”‚   β”œβ”€β”€ ytsage_dialogs_settings.py  # Settings dialogs
β”‚   β”‚   β”‚   └── ytsage_dialogs_update.py    # Update dialogs
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ __init__.py           # GUI package init
β”‚   β”‚   β”œβ”€β”€ ytsage_gui_dialogs.py # Dialog aggregator (backward compatibility)
β”‚   β”‚   β”œβ”€β”€ ytsage_gui_format_table.py # Format table functionality
β”‚   β”‚   β”œβ”€β”€ ytsage_gui_main.py    # Main application window
β”‚   β”‚   └── ytsage_gui_video_info.py # Video information display
β”‚   β”‚
β”‚   └── __init__.py               # Main package init
β”‚
β”œβ”€β”€ πŸ“„ main.py                    # Application entry point
β”œβ”€β”€ πŸ“„ requirements.txt           # Python dependencies
β”œβ”€β”€ πŸ“„ README.md                  # Project documentation
β”œβ”€β”€ πŸ“„ LICENSE                    # License file
└── πŸ“„ .gitignore                 # Git ignore rules

⭐️ Star History

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

Show Acknowledgments

A heartfelt thank you to everyone who has contributed to this project by opening an issue to suggest an improvement or report a bug.

Core Components
yt-dlp Download Engine
FFmpeg Media Processing
Libraries & Frameworks
PySide6 GUI Framework
Pillow Image Processing
requests HTTP Requests
packaging Version & Package Handling
markdown Markdown Rendering
pygame Audio Playback
loguru Logging
Assets & Contributors
New Notification 09 by Universfield Notification Sound
viru185 Code Contributor

⚠️ Disclaimer

This tool is for personal use only. Please respect YouTube's terms of service and content creators' rights.


Made with ❀️ by oop7

About

Modern YouTube downloader with a clean PySide6 interface. Download videos in any quality, extract audio, fetch subtitles, sponsorBlock, and view video metadata. Built with yt-dlp for reliable performance.

Topics

Resources

License

Stars

Watchers

Forks

Languages