{"id":22711212,"url":"https://github.com/oop7/ytsage","last_synced_at":"2026-04-01T21:55:26.130Z","repository":{"id":274624848,"uuid":"896163475","full_name":"oop7/YTSage","owner":"oop7","description":"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.","archived":false,"fork":false,"pushed_at":"2026-01-25T14:32:08.000Z","size":11093,"stargazers_count":2972,"open_issues_count":2,"forks_count":214,"subscribers_count":15,"default_branch":"main","last_synced_at":"2026-01-26T03:28:29.262Z","etag":null,"topics":["pyside6","python","youtube-dl","youtube-downloader","yt-dlp","yt-dlp-gui"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oop7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-29T17:15:45.000Z","updated_at":"2026-01-25T13:53:31.000Z","dependencies_parsed_at":"2025-12-09T19:17:41.608Z","dependency_job_id":null,"html_url":"https://github.com/oop7/YTSage","commit_stats":null,"previous_names":["oop7/ytsage"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/oop7/YTSage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oop7%2FYTSage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oop7%2FYTSage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oop7%2FYTSage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oop7%2FYTSage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oop7","download_url":"https://codeload.github.com/oop7/YTSage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oop7%2FYTSage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29056027,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T20:13:53.544Z","status":"ssl_error","status_checked_at":"2026-02-03T20:13:40.507Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pyside6","python","youtube-dl","youtube-downloader","yt-dlp","yt-dlp-gui"],"created_at":"2024-12-10T12:14:57.909Z","updated_at":"2026-04-01T21:55:26.104Z","avatar_url":"https://github.com/oop7.png","language":"Python","readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"branding\\svg\\ytsage-wordmark.svg\" width=\"400\" alt=\"ytsage-wordmark\"\u003e\n\u003cimg src=\"branding\\screenshots\\main.png\" width=\"800\" alt=\"YTSage Interface\"/\u003e\n\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-1f2937?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://www.python.org/downloads/)\n[![PyPI Downloads](https://img.shields.io/pepy/dt/ytsage?color=1f2937\u0026style=for-the-badge\u0026label=downloads\u0026logo=python\u0026logoColor=white)](https://pepy.tech/project/ytsage)\n[![GitHub Downloads](https://img.shields.io/github/downloads/oop7/YTSage/total?color=1f2937\u0026style=for-the-badge\u0026label=downloads\u0026logo=github\u0026logoColor=white)](https://github.com/oop7/YTSage/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-1f2937?style=for-the-badge\u0026logo=opensource\u0026logoColor=white)](https://opensource.org/licenses/MIT)\n[![Supported Platforms](https://img.shields.io/badge/platform-cross--platform-1f2937?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/oop7/YTSage/releases)\n[![GitHub Stars](https://img.shields.io/github/stars/oop7/YTSage?color=c90000\u0026style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/oop7/YTSage/stargazers)\n[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000\u0026style=for-the-badge\u0026logo=pypi\u0026logoColor=white)](https://pypi.org/project/ytsage/)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000\u0026style=for-the-badge\u0026logo=githubsponsors\u0026logoColor=white)](https://github.com/sponsors/oop7)\n\n**A modern YouTube downloader with a clean PySide6 interface.**  \nDownload videos in any quality, extract audio, fetch subtitles, and more.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e •\n  \u003ca href=\"#screenshots\"\u003eScreenshots\u003c/a\u003e •\n  \u003ca href=\"#troubleshooting\"\u003eTroubleshooting\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n---\n\n\u003ca id=\"why-ytsage\"\u003e\u003c/a\u003e\n## ❓ Why YTSage?\n\nYTSage is designed for users who want a **simple yet powerful YouTube downloader**. Unlike other tools, it offers:\n\n- A clean, modern PySide6 interface\n- One-click downloads for video, audio, and subtitles\n- Advanced features like SponsorBlock, subtitle merging, and playlist selection\n- Cross-platform support and easy installation\n\n\u003ca id=\"features\"\u003e\u003c/a\u003e\n## ✨ Features\n\n\u003cdiv align=\"center\"\u003e\n\n| Core Features                     | Advanced Features                       | Extra Features                     |\n|-----------------------------------|-----------------------------------------|------------------------------------|\n| 🎥 Format Table                   | 🚫 SponsorBlock Integration             | 🎞️ FPS/HDR Display             |\n| 🎵 Audio Extraction               | 📝 Multi-Subtitle Select \u0026 Merge        | 🔄 Auto-Update yt-dlp                  |\n| ✨ Simple UI                      |  💾 Save Description \u0026 Thumbnail        | 🛠️ FFmpeg/yt-dlp/Deno Detection    |\n| 📋 Playlist Support \u0026 Selector   | 🚀 Speed Limiter                        | ⚙️ Custom Commands                 |\n| 📑 Embed Chapters                | ✂️ Trim Video Sections                  | 🍪 Login with Cookies              |\n| 📜 Download History              | 🔄 Release Channel Selection            | 🌐 Proxy Support                   |\n| 🎚️ Audio Format Conversion       | 🎬 Video Format Settings                | 🆙 Built-in Updater Tab            |\n\n\u003c/div\u003e\n\n\u003ca id=\"installation\"\u003e\u003c/a\u003e\n## 🚀 Installation\n\n### ⚡ Quick Install (Recommended)\n\nInstall YTSage from PyPI:\n\n```bash\npip install ytsage\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e🔄 Update an existing installation\u003c/summary\u003e\n\n```bash\npip install --upgrade ytsage\n```\n\n\u003c/details\u003e\n\nThen launch the app:\n\n```bash\nytsage\n```\n\n### 📦 Pre-built Executables\n\n\u003e [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)\n\n#### 🪟 Windows\n\n| Format | Description |\n|--------|-------------|\n| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge\u0026logo=windows\u0026logoColor=white) | Standard installer |\n| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge\u0026logo=windows\u0026logoColor=white) | With FFmpeg bundled |\n| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge\u0026logo=windows\u0026logoColor=white) | Portable version, no installation required |\n| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge\u0026logo=windows\u0026logoColor=white) | Portable with FFmpeg, zipped |\n\n\u003cdetails\u003e\n\u003csummary\u003e🛠️ Installation Steps\u003c/summary\u003e\n\n1. **EXE Installer (`.exe`)**: Double-click the file and follow the setup wizard.\n2. **Portable Version (`.zip`)**: Extract the archive to your desired location and run `ytsage.exe`.\n3. **FFmpeg Bundled**: Choose the FFmpeg bundled versions if you don't have FFmpeg installed on your system.\n\u003c/details\u003e\n\n#### 🐧 Linux\n\n| Format | Description |\n|--------|-------------|\n| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black) | Debian package |\n| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black) | AppImage, portable |\n| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge\u0026logo=linux\u0026logoColor=black) | RPM package |\n| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge\u0026logo=flathub\u0026logoColor=black) | Flatpak Bundle |\n\n\u003cdetails\u003e\n\u003csummary\u003e🛠️ Installation Steps\u003c/summary\u003e\n\n- **DEB (`.deb`)**:\n  ```bash\n  sudo dpkg -i ytsage_*.deb\n  sudo apt-get install -f # Fix missing dependencies if any\n  ```\n- **RPM (`.rpm`)**:\n  ```bash\n  sudo rpm -i ytsage-*.rpm\n  ```\n- **AppImage (`.AppImage`)**:\n  ```bash\n  chmod +x YTSage-*.AppImage\n  ./YTSage-*.AppImage\n  ```\n- **Flatpak**: Follow instructions on Flathub or run:\n  ```bash\n  flatpak install flathub io.github.oop7.ytsage\n  ```\n\u003c/details\u003e\n\n#### 🍎 macOS\n\n| Format | Description |\n|--------|-------------|\n| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge\u0026logo=apple\u0026logoColor=white) | Zipped application for Apple Silicon |\n| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge\u0026logo=apple\u0026logoColor=white) | Disk image installer for Apple Silicon |\n\n\u003cdetails\u003e\n\u003csummary\u003e🛠️ Installation Steps\u003c/summary\u003e\n\n- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` into your Applications folder.\n- **App Archive (`.zip`)**: Extract the zip and move `YTSage.app` to your Applications folder.\n\n*Note: If you encounter an \"App is damaged\" error, see the [macOS troubleshooting section](#troubleshooting) below.*\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e💻 Manual Installation from Source\u003c/summary\u003e\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/oop7/YTSage.git\ncd YTSage\n```\n\n### 2. Install Dependencies\n\n#### ⚡ With uv\n\n```bash\nuv pip install .\n```\n\n#### 📦 Or with standard pip\n\n```bash\npip install .\n```\n\n### 3. Run the Application\n\n```bash\npython -m ytsage.main\n```\n\n\u003c/details\u003e\n\n\u003ca id=\"screenshots\"\u003e\u003c/a\u003e\n## 📸 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"branding\\screenshots\\Download-Settings.png\" alt=\"Download Settings\" width=\"400\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"branding\\screenshots\\playlist.png\" alt=\"Playlist Download\" width=\"400\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eDownload Settings\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003ePlaylist Download\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"branding\\screenshots\\audio_format.png\" alt=\"Audio Format Selection with Save Thumbnail\" width=\"400\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"branding\\screenshots\\Custom-Option.png\" alt=\"Custom Options\" width=\"400\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eAudio Format\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eCustom Options\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n\u003ca id=\"usage\"\u003e\u003c/a\u003e\n## 📖 Usage\n\n\u003cdetails\u003e\n\u003csummary\u003e🎯 Basic Usage\u003c/summary\u003e\n\n1. **Launch YTSage**\n2. **Paste YouTube URL** (or use \"Paste URL\" button)\n3. **Click \"Analyze\"**\n4. **Select Format:**\n   - `Video` for video downloads\n   - `Audio Only` for audio extraction\n5. **Choose Options:**\n   - Enable subtitles \u0026 select language\n   - Enable subtitle merge\n   - Save thumbnail\n   - Remove sponsor segments\n   - Save description\n   - Embed chapters\n6. **Select Output Directory**\n7. **Click \"Download\"**\n\n\u003e 💡 The default download directory is the user's \"Downloads\" folder.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e📋 Playlist Download\u003c/summary\u003e\n\n1. **Paste Playlist URL**\n2. **Click \"Analyze\"**\n3. **Select videos from the playlist selector (optional, defaults to all)**\n4. **Choose desired format/quality**\n5. **Click \"Download\"**\n\n\u003e 💡 The application automatically handles the download queue\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🧰 Advanced Options\u003c/summary\u003e\n\n- **Subtitle Options:** Filter languages and embed into video file\n- **Subtitle Merge:** Merge subtitles into video file for hardcoded subtitles\n- **Custom Commands:** Access advanced yt-dlp features via command line arguments\n- **Save Description:** Save the description of the video as a text file\n- **Save Thumbnail:** Save the thumbnail of the video as an image file\n- **Embed Chapters:** Embed chapter markers as metadata in the downloaded video file for compatible video players\n- **Remove Sponsor Segments:** Remove sponsor segments from the video using SponsorBlock\n- **Speed Limiter:** Limit the download speed (e.g., `500K` for 500 KB/s)\n- **Login with Cookies:** Login to YouTube using cookies to access private content  \n  How to use it:\n  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).\n  2. Alternatively, extract cookies manually:\n     a. Extract cookies from your browser using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)\n     b. Copy the cookies in Netscape format\n     c. Create a file named `cookies.txt` and paste the cookies into it\n     d. Select the `cookies.txt` file in the app\n- **Save Download Path:** Save the default download path for future downloads. Available in **Download Settings → Download Path**.\n- **Output Filename Format:** Customize the output filename format using variables like `%(title)s`, `%(uploader)s`, `%(resolution)s`, etc. Available in **Download Settings → Filename Format**.\n- **Updater Tab:** Unified tab in Custom Options for managing all updates:\n  - **yt-dlp Updates:** Check and update yt-dlp to the latest version, with release channel selection (Stable/Nightly)\n  - **FFmpeg Version Checker:** Check your FFmpeg version with direct links to installation guides\n  - **Deno Updates:** Check and update Deno runtime to the latest version\n- **FFmpeg/yt-dlp/Deno Detection:** Automatically detect FFmpeg/yt-dlp/Deno path and version. You can use this option by clicking on about button.\n- **Trim Video:** Download only specific parts of a video by specifying time ranges (HH:MM:SS format)\n- **Proxy Support:** Use a proxy server for downloads (e.g., `http://\u003cproxy-server\u003e:\u003cport\u003e`)\n- **Force Output Format:** Force video downloads in a specific container format (e.g., `mp4`, `webm`, `mkv`). Available in **Download Settings → Output Format Settings**.\n- **Audio Format Conversion:** Convert audio-only downloads to preferred formats (`AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, or `Best`). Ideal for video editing software like DaVinci Resolve. Available in **Download Settings → Audio Format Settings**.\n- **Download History:** View past downloads with thumbnails and statuses. You can use this option by clicking on the **History** button.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🌍 Localization\u003c/summary\u003e\n\nYTSage supports **14 languages** for worldwide accessibility. Select your preferred language from **Custom Options → Language**.\n\n### Supported Languages\n\n| Language | Code | Language | Code |\n|----------|------|----------|------|\n| 🇺🇸 English | `en` | 🇪🇸 Spanish | `es` |\n| 🇸🇦 Arabic | `ar` | 🇫🇷 French | `fr` |\n| 🇩🇪 German | `de` | 🇮🇳 Hindi | `hi` |\n| 🇮🇩 Indonesian | `id` | 🇮🇹 Italian | `it` |\n| 🇯🇵 Japanese | `ja` | 🇵🇱 Polish | `pl` |\n| 🇧🇷 Portuguese | `pt` | 🇷🇺 Russian | `ru` |\n| 🇹🇷 Turkish | `tr` | 🇨🇳 Chinese | `zh` |\n\n\u003e 💡 **Want to contribute a translation?** Check out the [Contributing](#contributing) section to help us add more languages!\n\n\u003c/details\u003e\n\n\u003ca id=\"troubleshooting\"\u003e\u003c/a\u003e\n## 🛠️ Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to view common issues and solutions\u003c/summary\u003e\n\n- **Format table not displaying:** Update yt-dlp to the latest version, and switch to yt-dlp nightly.\n- **Download fails:** Check your internet connection and ensure the video is available.\n- **Specific download errors:**\n  - **Private videos:** Use cookie authentication to access private content.\n  - **Age-restricted content:** Login to YouTube account to view age-restricted videos.\n  - **Geo-blocked videos:** Consider using a VPN to bypass regional restrictions.\n  - **Removed/deleted videos:** Video is no longer available on YouTube.\n  - **Live streams:** Live streams cannot be downloaded; wait for the stream to end.\n  - **Network errors:** Check your internet connection and try again.\n  - **Invalid URLs:** Ensure the URL is correct and from a supported platform.\n  - **Premium content:** Requires YouTube Premium membership.\n  - **Copyright blocks:** Content is blocked due to copyright restrictions.\n- **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.\n  - **Solution:** Ensure FFmpeg is installed and accessible in your system's PATH. For Windows users, the easiest option is to download the `YTSage-v\u003cversion\u003e-ffmpeg.exe` file, which comes bundled with FFmpeg.\n\n---\n\n#### 🛡️ Windows Defender / Antivirus Warning\n\nSome antivirus software may flag the `.exe` files as false positives. This is a **known limitation** of packaged applications.\n\n**Why this happens:**\n- Antivirus heuristics can misidentify packed executables as suspicious\n\n**Safe alternatives:**\n- ✅ **Use pip installation:** `pip install ytsage` (recommended)\n- ✅ **Build from source**: by following this [guide](.github/CI_CD_README.md)\n- ✅ **Whitelist the application** in your antivirus software\n\n#### 🍎 macOS: \"App is damaged and can’t be opened\"\nIf you see this error on macOS Sonoma or newer, you need to remove the quarantine attribute.\n\n1.  **Open Terminal** (you can find it using Spotlight).\n2.  **Type the following command** but **do not** press Enter yet. Make sure to include the space at the end:\n    ```bash\n    xattr -d com.apple.quarantine \n    ```\n3.  **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.\n4.  **Press Enter** to run the command.\n5.  **Try opening YTSage.app again.** It should now launch correctly.\n\n---\n\n#### **Configuration Locations (Advanced)**\n- **Windows:** `%LOCALAPPDATA%\\YTSage`\n- **macOS:** `~/Library/Application Support/YTSage`\n- **Linux:** `~/.local/share/YTSage`\n\n\u003c/details\u003e\n\n\u003ca id=\"contributing\"\u003e\u003c/a\u003e\n## 👥 Contributing\n\nWe welcome contributions! Here's how you can help:\n\n1. 🍴 Fork the repository\n2. 🌿 Create your feature branch:\n  ```bash\n  git checkout -b feature/AmazingFeature\n  ```\n3. 💾 Commit your changes:\n  ```bash\n  git commit -m 'Add some AmazingFeature'\n  ```\n4. 📤 Push to the branch:\n  ```bash\n  git push origin feature/AmazingFeature\n  ```\n5. 🔄 Open a Pull Request\n\n\u003cdetails\u003e\n\u003csummary\u003e📂 Project Structure\u003c/summary\u003e\n\n## YTSage - Project Structure\n\nThis document describes the organized folder structure of YTSage.\n\n### 📁 Project Structure\n\n```\nYTSage/\n├── 📁 .github/                   # GitHub configuration\n│   ├── 📁 ISSUE_TEMPLATE/         # Issue templates\n│   │   └── 🐛-bug-report.md       # Bug report template\n│   ├─── 📁 workflows/              # GitHub Actions workflows\n│   │   ├── build-linux.yml        # Linux build workflow\n│   │   ├── build-macos.yml        # macOS build workflow\n│   │   │── build-windows.yml      # Windows build workflow\n|   |   └── release-all.yml          # Master release workflow\n│   └── 📄 CI_CD_README.md        # CI/CD documentation\n├──  📁 branding/                 # Branding assets (Screenshots, SVGs)\n│   ├── 📁 icons/                 # Application icons\n│   ├── 📁 screenshots/           # Screenshots for documentation\n│   └── 📁 svg/                   # SVG assets\n├── 📄 LICENSE                    # License file\n├── 📄 pyproject.toml             # Project metadata and dependencies\n├── 📄 README.md                  # Project documentation\n├── 📄 requirements.txt           # Python dependencies (dev)\n└── 📁 ytsage/                    # Source package\n    ├── 📁 assets/                # Runtime assets\n    │   ├── 📁 Icon/              # Application icons\n    │   └── 📁 sound/             # Audio files\n    ├── 📁 languages/             # Localization files\n    │   ├── 📄 ar.json            # Arabic translation\n    │   ├── 📄 de.json            # German translation\n    │   ├── 📄 en.json            # English translation\n    │   └── ...                   # Other languages\n    ├── 📁 core/                  # Core business logic\n    │   ├── 📄 __init__.py        # Core package init\n    │   ├── 📄 ytsage_deno.py     # Deno integration\n    │   ├── 📄 ytsage_downloader.py # Download functionality\n    │   ├── 📄 ytsage_ffmpeg.py   # FFmpeg integration\n    │   ├── 📄 ytsage_utils.py    # Utility functions\n    │   └── 📄 ytsage_yt_dlp.py   # yt-dlp integration\n    ├── 📁 gui/                   # User interface components\n    │   ├── 📄 __init__.py        # GUI package init\n    │   ├── 📄 ytsage_gui_main.py # Main application window\n    │   └── 📁 ytsage_gui_dialogs/ # Dialog classes\n    ├── 📁 utils/                 # Utility modules\n    │   ├── 📄 __init__.py        # Utils package init\n    │   ├── 📄 ytsage_config_manager.py # Configuration management\n    │   └── 📄 ytsage_logger.py   # Logging utilities\n    ├── 📄 __init__.py            # Package entry point\n    └── 📄 main.py                # Main execution script\n```\n\n\u003c/details\u003e\n\n## ⭐️ Star History\n\n\u003cdiv align=\"center\"\u003e\n\n## Star History\n\n\u003ca href=\"https://www.star-history.com/#oop7/YTSage\u0026Date\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=oop7/YTSage\u0026type=Date\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=oop7/YTSage\u0026type=Date\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=oop7/YTSage\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n\u003cdetails\u003e\n\u003csummary\u003eShow Acknowledgments\u003c/summary\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cp\u003eA heartfelt thank you to everyone who has contributed to this project by opening an issue to suggest an improvement or report a bug.\u003c/p\u003e\n\n\u003ctable\u003e\n    \u003ctr class=\"section\"\u003e\u003cth colspan=\"2\"\u003eCore Components\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"35%\"\u003e\u003ca href=\"https://github.com/yt-dlp/yt-dlp\"\u003eyt-dlp\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eDownload Engine\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://ffmpeg.org/\"\u003eFFmpeg\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eMedia Processing\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://deno.com/\"\u003eDeno\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eRuntime for integration with yt-dlp\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr class=\"section\"\u003e\u003cth colspan=\"2\"\u003eLibraries \u0026 Frameworks\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://wiki.qt.io/Qt_for_Python\"\u003ePySide6\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eGUI Framework\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://python-pillow.org/\"\u003ePillow\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eImage Processing\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://requests.readthedocs.io/\"\u003erequests\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eHTTP Requests\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://packaging.python.org/\"\u003epackaging\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eVersion \u0026 Package Handling\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://python-markdown.github.io/\"\u003emarkdown\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eMarkdown Rendering\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://github.com/Delgan/loguru\"\u003eloguru\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eLogging\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr class=\"section\"\u003e\u003cth colspan=\"2\"\u003eAssets \u0026 Contributors\u003c/th\u003e\u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://pixabay.com/sound-effects/new-notification-09-352705/\"\u003eNew Notification 09 by Universfield\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eNotification Sound\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\u003ca href=\"https://github.com/viru185\"\u003eviru185\u003c/a\u003e\u003c/td\u003e\n        \u003ctd\u003eCode Contributor\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003c/details\u003e\n\n## ⚠️ Disclaimer\n\nThis tool is for personal use only. Please respect YouTube's terms of service and content creators' rights.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMade with ❤️ by [oop7](https://github.com/oop7)\n\n\u003c/div\u003e\n","funding_links":["https://github.com/sponsors/oop7"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foop7%2Fytsage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foop7%2Fytsage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foop7%2Fytsage/lists"}