# π₯ YTSage
[](https://badge.fury.io/py/ytsage)
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://pepy.tech/project/ytsage)
[](https://github.com/oop7/YTSage/stargazers)
**A modern YouTube downloader with a clean PySide6 interface.**
Download videos in any quality, extract audio, fetch subtitles, and more.
---
## β 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:
```bash
pip install ytsage
```
Then launch the app:
```bash
ytsage
```
### π¦ Pre-built Executables
#### πͺ Windows
| Format | Description |
|--------|-------------|
| `YTSage-v.exe` | Standard installer |
| `YTSage-v-ffmpeg.exe` | With FFmpeg bundled |
| `YTSage-v-portable` | Portable version, no installation required |
| `YTSage-v-ffmpeg-portable.zip` | Portable with FFmpeg, zipped |
#### π§ Linux
| Format | Description |
|--------|-------------|
| `YTSage-v-amd64.deb` | Debian package |
| `YTSage-v-x86_64.AppImage` | AppImage, portable |
| `YTSage-v-x86_64.rpm` | RPM package |
#### π macOS
| Format | Description |
|--------|-------------|
| `YTSage-v-arm64.app.zip` | Zipped application for ARM64 |
| `YTSage-v-arm64.dmg` | Disk image installer for ARM64 |
| `YTSage-v-x64.app.zip` | Zipped application for x64 |
| `YTSage-v-x64.dmg` | Disk image installer for x64 |
> [π Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
π οΈ Manual Installation from Source
### 1. Clone the Repository
```bash
git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Install Dependencies
#### β‘ With uv
```bash
uv pip install -r requirements.txt
```
#### π¦ Or with standard pip
```bash
pip install -r requirements.txt
```
### 3. Run the Application
```bash
python main.py
```
## πΈ Screenshots
Main Interface
Playlist Download
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. **Recommended:** Use the built-in "Extract cookies from browser" option in the app. Select your browser (Chrome, Firefox, etc.) and then select Profile (optional).
2. Alternatively, extract cookies manually:
a. Extract cookies from your browser using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
b. Copy the cookies in Netscape format
c. Create a file named `cookies.txt` and paste the cookies into it
d. 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.
- **Specific download errors:**
- **Private videos:** Use cookie authentication to access private content.
- **Age-restricted content:** Login to YouTube account to view age-restricted videos.
- **Geo-blocked videos:** Consider using a VPN to bypass regional restrictions.
- **Removed/deleted videos:** Video is no longer available on YouTube.
- **Live streams:** Live streams cannot be downloaded; wait for the stream to end.
- **Network errors:** Check your internet connection and try again.
- **Invalid URLs:** Ensure the URL is correct and from a supported platform.
- **Premium content:** Requires YouTube Premium membership.
- **Copyright blocks:** Content is blocked due to copyright restrictions.
- **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-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 packaged applications.
**Why this happens:**
- Antivirus heuristics can misidentify packed executables as suspicious
**Safe alternatives:**
- β **Use pip installation:** `pip install ytsage` (recommended)
- β **Build from source**: by following this [guide](.github/CI_CD_README.md)
- β **Whitelist the application** in your antivirus software
#### π 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:
```bash
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:
```bash
git checkout -b feature/AmazingFeature
```
3. πΎ Commit your changes:
```bash
git commit -m 'Add some AmazingFeature'
```
4. π€ Push to the branch:
```bash
git push origin feature/AmazingFeature
```
5. π Open a Pull Request
π Project Structure
## YTSage - Project Structure
This document describes the organized folder structure of YTSage.
### π Project Structure
```
YTSage/
βββ π .github/ # GitHub configuration
β βββ π CI_CD_README.md # CI/CD documentation
β βββ π ISSUE_TEMPLATE/ # Issue templates
β β βββ π-bug-report.md # Bug report template
β βββ π workflows/ # GitHub Actions workflows
β βββ build-linux.yml # Linux build workflow
β βββ build-macos.yml # macOS build workflow
β βββ build-windows.yml # Windows build workflow
βββ .gitignore # Git ignore rules
βββ π assets/ # Static assets and resources
β βββ π branding/ # Branding assets
β β βββ π icons/ # Application icons
β β β βββ icon.icns # macOS icon
β β β βββ icon.png # PNG icon
β β β βββ YTSage.ico # Windows icon
β β βββ π screenshots/ # Screenshots for documentation
β β βββ audio_format.png
β β βββ main.png
β β βββ playlist.png
β β βββ subtitle_options.png
β βββ π Icon/ # Legacy icon directory
β β βββ icon.png
β βββ π sound/ # Audio files
β βββ notification.mp3
βββ π LICENSE # License file
βββ π main.py # Application entry point
βββ π README.md # Project documentation
βββ π requirements.txt # Python dependencies
βββ π src/ # Source code
βββ π __init__.py # Main package init
βββ π core/ # Core business logic
β βββ π __init__.py # Core package init
β βββ π ytsage_downloader.py # Download functionality
β βββ π ytsage_ffmpeg.py # FFmpeg integration
β βββ π ytsage_logging.py # Logging utilities
β βββ π ytsage_style.py # UI styling
β βββ π ytsage_utils.py # Utility functions
β βββ π ytsage_yt_dlp.py # yt-dlp integration
βββ π gui/ # User interface components
β βββ π __init__.py # GUI package init
β βββ π ytsage_gui_format_table.py # Format table functionality
β βββ π ytsage_gui_main.py # Main application window
β βββ π ytsage_gui_video_info.py # Video information display
β βββ π ytsage_gui_dialogs/ # Dialog classes
β βββ π __init__.py # Dialogs package init
β βββ π ytsage_dialogs_base.py # Basic dialogs
β βββ π 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
βββ π utils/ # Utility modules
βββ π __init__.py # Utils package init
βββ π ytsage_constants.py # Application constants
```
## βοΈ Star History
## Star History
## π License
This project is licensed under the MIT License - see the [LICENSE](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.