[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-72246":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},72246,"YTSage","oop7\u002FYTSage","oop7","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.","",null,"Python",3697,267,20,13,0,3,5,35,9,71.28,"MIT License",false,"main",true,[27,28,29,30,31,32],"pyside6","python","youtube-dl","youtube-downloader","yt-dlp","yt-dlp-gui","2026-06-12 04:01:04","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"branding\u002Fsvg\u002Fytsage-wordmark.svg\" width=\"400\" alt=\"ytsage-wordmark\">\n\u003Cimg src=\"branding\u002Fscreenshots\u002Fmain.png\" width=\"800\" alt=\"YTSage Interface\"\u002F>\n\n[![Python 3.10+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.10+-1f2937?style=for-the-badge&logo=python&logoColor=white)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)\n[![PyPI Downloads](https:\u002F\u002Fimg.shields.io\u002Fpepy\u002Fdt\u002Fytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https:\u002F\u002Fpepy.tech\u002Fproject\u002Fytsage)\n[![GitHub Downloads](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002Foop7\u002FYTSage\u002Ftotal?color=1f2937&style=for-the-badge&label=downloads&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Foop7\u002FYTSage\u002Freleases)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-1f2937?style=for-the-badge&logo=opensource&logoColor=white)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Supported Platforms](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-cross--platform-1f2937?style=for-the-badge&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Foop7\u002FYTSage\u002Freleases)\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Foop7\u002FYTSage?color=c90000&style=for-the-badge&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Foop7\u002FYTSage\u002Fstargazers)\n[![PyPI version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fytsage\u002F)\n[![GitHub Sponsors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fsponsors\u002Foop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Foop7)\n\n**Modern YouTube downloader with a clean PySide6 interface.**  \nDownload videos in any quality, extract audio, fetch subtitles, and more.\n\n### 🌍 README Languages\n\nEnglish: [EN](..\u002FREADME.md)\n| Arabic: [AR](README.ar.md)\n| German: [DE](README.de.md)\n| Spanish: [ES](README.es.md)\n| French: [FR](README.fr.md)\n| Hindi: [HI](README.hi.md)\n| Indonesian: [ID](README.id.md)\n| Italian: [IT](README.it.md)\n| Japanese: [JA](README.ja.md)\n| Polish: [PL](README.pl.md)\n| Portuguese: [PT](README.pt.md)\n| Russian: [RU](README.ru.md)\n| Turkish: [TR](README.tr.md)\n| Chinese: [ZH](README.zh.md)\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#installation\">Installation\u003C\u002Fa> •\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> •\n  \u003Ca href=\"#usage\">Usage\u003C\u002Fa> •\n  \u003Ca href=\"#screenshots\">Screenshots\u003C\u002Fa> •\n  \u003Ca href=\"#troubleshooting\">Troubleshooting\u003C\u002Fa> •\n  \u003Ca href=\"#sponsor\">Sponsor\u003C\u002Fa> •\n  \u003Ca href=\"#contributing\">Contributing\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003C\u002Fdiv>\n\n---\n\n\u003Ca id=\"why-ytsage\">\u003C\u002Fa>\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 modern and clean PySide6 interface\n- One-click downloads for video, audio, and subtitles\n- Advanced features like SponsorBlock, subtitle merging, and playlist selection\n- Optional Generic Mode for sites supported by yt-dlp beyond YouTube\n- Cross-platform support and easy installation\n\n\u003Ca id=\"features\">\u003C\u002Fa>\n## ✨ Features\n\n\u003Cdiv align=\"center\">\n\n| Core Features | Advanced Features | Extra Features |\n|-----------------------------------|-----------------------------------------|------------------------------------|\n| 🎥 Format Table | 🚫 SponsorBlock Integration | 🎞️ FPS\u002FHDR Display |\n| 🎵 Audio Extraction | 📝 Subtitle Selection & Merging | 🔄 Auto Update yt-dlp |\n| ✨ Simple UI | 💾 Save Description & Thumbnail | 🛠️ FFmpeg\u002Fyt-dlp\u002FDeno Detection |\n| 📋 Playlist Support & Selector | 🚀 Speed Limiter | ⚙️ Custom Commands |\n| 📑 Chapter Integration | ✂️ Video Section Trimming | 🍪 Login with Cookies |\n| 📜 Download History | 🔄 Version Channel Selection | 🌐 Proxy Support |\n| 🎚️ Audio Format Conversion | 🎬 Video Format Settings | 🆙 Built-in Updater Tab |\n| 🌍 Generic Mode | 🔊 Audio Normalization (EBU R128) | 🌍 Localized in 14 Languages |\n| 💾 Playlist Export | ⚙️ Default Quality & Subtitles | |\n\u003C\u002Fdiv>\n\n\u003Ca id=\"installation\">\u003C\u002Fa>\n## 🚀 Installation\n\n### ⚡ Quick Install (Recommended)\n\nInstall YTSage via PyPI:\n\n```bash\npip install ytsage\n```\n\n\u003Cdetails>\n\u003Csummary>🔄 Update existing installation\u003C\u002Fsummary>\n\n```bash\npip install --upgrade ytsage\n```\n\n\u003C\u002Fdetails>\n\nThen launch the application:\n\n```bash\nytsage\n```\n\n### 📦 Pre-built Executables\n\n> [👉 Download Latest Release](https:\u002F\u002Fgithub.com\u002Foop7\u002FYTSage\u002Freleases\u002Flatest)\n\n#### 🪟 Windows\n\n| Format | Description |\n|--------|-------------|\n| ![Windows EXE](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWindows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standard Installer |\n| ![Windows FFmpeg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWindows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | With FFmpeg Included |\n| ![Windows Portable](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWindows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable version, no installation needed |\n| ![Windows Portable FFmpeg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWindows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable with FFmpeg, zipped |\n\n\u003Cdetails>\n\u003Csummary>🛠️ Installation Steps\u003C\u002Fsummary>\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 launch `ytsage.exe`.\n3. **FFmpeg Included**: Choose versions with FFmpeg included if you don't have FFmpeg installed on your system.\n\u003C\u002Fdetails>\n\n#### 🐧 Linux\n\n| Format | Description |\n|--------|-------------|\n| ![Linux DEB](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLinux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian Package |\n| ![Linux AppImage](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLinux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Portable |\n| ![Linux RPM](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLinux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM Package |\n| ![Flathub](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLinux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |\n\n\u003Cdetails>\n\u003Csummary>🛠️ Installation Steps\u003C\u002Fsummary>\n\n- **DEB (`.deb`)**:\n  ```bash\n  sudo dpkg -i ytsage_*.deb\n  sudo apt-get install -f # Fix missing dependencies if needed\n  ```\n- **RPM (`.rpm`)**:\n  ```bash\n  sudo rpm -i ytsage-*.rpm\n  ```\n- **AppImage (`.AppImage`)**:\n  ```bash\n  chmod +x YTSage-*.AppImage\n  .\u002FYTSage-*.AppImage\n  ```\n- **Flatpak**: Follow instructions on Flathub or run:\n  ```bash\n  flatpak install flathub io.github.oop7.ytsage\n  ```\n\u003C\u002Fdetails>\n\n#### 🍎 macOS\n\n| Format | Description |\n|--------|-------------|\n| ![macOS ARM64 APP](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Zipped Application for Apple Silicon |\n| ![macOS ARM64 DMG](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Disk Image Installer for Apple Silicon |\n\n\u003Cdetails>\n\u003Csummary>🛠️ Installation Steps\u003C\u002Fsummary>\n\n- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` to your Applications folder.\n- **Application Archive (`.zip`)**: Extract the zip and move `YTSage.app` to your Applications folder.\n\n*Note: If you encounter an \"Application is damaged\" error, see the macOS troubleshooting section below.*\n\u003C\u002Fdetails>\n\n---\n\n\u003Cdetails>\n\u003Csummary>💻 Manual Source Installation\u003C\u002Fsummary>\n\n### 1. Clone the repository\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Foop7\u002FYTSage.git\ncd YTSage\n```\n\n### 2. Install dependencies\n\n#### ⚡ Using uv\n\n```bash\nuv pip install .\n```\n\n#### 📦 Or using 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\u002Fdetails>\n\n\u003Ca id=\"screenshots\">\u003C\u002Fa>\n## 📸 Screenshots\n\n\u003Cdiv align=\"center\">\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"branding\u002Fscreenshots\u002FDownload-Settings.png\" alt=\"Download Settings\" width=\"400\"\u002F>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"branding\u002Fscreenshots\u002Fplaylist.png\" alt=\"Playlist Download\" width=\"400\"\u002F>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Cem>Download Settings\u003C\u002Fem>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cem>Playlist Download\u003C\u002Fem>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"branding\u002Fscreenshots\u002Faudio_format.png\" alt=\"Audio Format Selection\" width=\"400\"\u002F>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"branding\u002Fscreenshots\u002FCustom-Option.png\" alt=\"Custom Options\" width=\"400\"\u002F>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\u003Cem>Audio Format\u003C\u002Fem>\u003C\u002Ftd>\n    \u003Ctd align=\"center\">\u003Cem>Custom Options\u003C\u002Fem>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\n\u003Ca id=\"usage\">\u003C\u002Fa>\n## 📖 Usage\n\n\u003Cdetails>\n\u003Csummary>🎯 Basic Usage\u003C\u002Fsummary>\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 and select language\n   - Enable Subtitle Merging\n   - Save Thumbnail\n   - Remove Sponsored Segments\n   - Save Description\n   - Embed Chapters\n6. **Select Output Directory**\n7. **Click \"Download\"**\n\n> 💡 Default download directory is the user's \"Downloads\" folder.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>📋 Playlist Download\u003C\u002Fsummary>\n\n1. **Paste Playlist URL**\n2. **Click \"Analyze\"**\n3. **Select videos from the playlist selector (optional, defaults to all)**\n4. **Choose desired format\u002Fquality**\n5. **Click \"Download\"**\n\n> 💡 The application automatically handles the download queue, and you can export playlist entries as `.txt`, `.csv`, `.m3u`, or `.json`.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🌍 Generic Mode for Non-YouTube Sites\u003C\u002Fsummary>\n\nUse Generic Mode when you want YTSage to accept URLs from sites supported by yt-dlp, such as Dailymotion, CBC Gem, TikTok, and others.\n\nHow to use it:\n\n1. Open `Download Settings`.\n2. Toggle on `Generic Mode`.\n3. Paste a supported video or playlist URL that is not from YouTube.\n4. Click `Analyze`.\n5. Choose a format and download as usual.\n\nNotes:\n\n- Generic mode only changes the URL validation inside YTSage. The target site must still be supported by your installed version of yt-dlp.\n- Some sites require cookies, login sessions, proxy, or extra yt-dlp arguments depending on the extractor.\n- If a site fails, update yt-dlp from the built-in updater tab first before reporting an issue.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🧰 Media & Download Options\u003C\u002Fsummary>\n\n- **Subtitle Options:** Filter languages and embed subtitles into the video file.\n- **Subtitle Merging:** Merge subtitles into the video file for hardcoded\u002Fburned-in subtitles.\n- **Save Description:** Save the video description as a text file.\n- **Save Thumbnail:** Save the video thumbnail as an image file.\n- **Embed Chapters:** Embed chapter markers as metadata for compatible video players.\n- **Remove Sponsored Segments:** Remove sponsored segments from the video using SponsorBlock.\n- **Trim Video:** Download only specific parts of a video by specifying time ranges in `HH:MM:SS` format.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>⚙️ Output & File Settings\u003C\u002Fsummary>\n\n- **Speed Limiter:** Limit download speed, e.g., `500K` for 500 KB\u002Fs.\n- **Save Download Path:** Saves the default download path for future downloads. Available in **Download Settings → Download Path**.\n- **Default Video Resolution:** Set your preferred default video resolution for auto-selection (e.g., 1080p, 720p). Available in **Download Settings → Default Video Resolution**.\n- **Default Subtitle Languages:** Set default subtitle languages for auto-selection (comma-separated, e.g., `en,es`). Available in **Download Settings → Default Subtitle Languages**.\n- **Output Filename Format:** Customize the output filename format using variables like `%(title)s`, `%(uploader)s`, `%(playlist_index)s`, and `%(resolution)s`. Available in **Download Settings → Filename Format**.\n- **Force Output Format:** Force video downloads into a specific container format like `mp4`, `webm`, or `mkv`. Available in **Download Settings → Output Format Settings**.\n- **Audio Format Conversion:** Convert audio-only downloads into preferred formats such as `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, or `Best`. Available in **Download Settings → Audio Format Settings**.\n- **Audio Normalization:** Standardize volume for audio-only downloads using EBU R128.\n- **Concurrent Connections:** Dramatically increase download speed by downloading files in multiple fragments simultaneously. Available in **Download Settings → General → Concurrent Connections** (Default is 1, maximum recommended is 8-10 to avoid IP throttling).\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🌐 Access & Network\u003C\u002Fsummary>\n\n- **Login with Cookies:** Log in 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, then select your browser and optionally a profile.\n  2. Alternatively, extract cookies manually:\n     a. Export browser cookies using an extension like [cookie-editor](https:\u002F\u002Fgithub.com\u002Fmoustachauve\u002Fcookie-editor?tab=readme-ov-file)\n     b. Copy cookies in Netscape format\n     c. Create a file named `cookies.txt` and paste cookies\n     d. Select the `cookies.txt` file in the app\n- **Proxy Support:** Use a proxy server for downloads, e.g., `http:\u002F\u002F\u003Cproxy-server>:\u003Cport>`\n- **Generic Mode:** Allows YTSage to analyze and download from non-YouTube sites supported by yt-dlp. Enable from **Download Settings → Generic Mode**.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🛠️ Tools & Maintenance\u003C\u002Fsummary>\n\n- **Custom Commands:** Access advanced yt-dlp features via command-line arguments.\n- **Updater Tab:** Manage built-in update tools from one place in Custom Options:\n  - **yt-dlp Updates:** Check for updates and toggle between Stable and Nightly release channels.\n  - **FFmpeg Version Checker:** Check your FFmpeg version and open installation guides.\n  - **Deno Updates:** Check and update the Deno runtime.\n- **FFmpeg\u002Fyt-dlp\u002FDeno Detection:** Automatically detects paths and versions for FFmpeg, yt-dlp, and Deno from the About dialog.\n- **Download History:** View past downloads with thumbnails and statuses from the **History** button.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>🌍 Localization\u003C\u002Fsummary>\n\nYTSage supports **14 languages** for global accessibility. Select your preferred language in **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### README Translations\n\n| Language | File | Language | File |\n|----------|------|----------|------|\n| 🇺🇸 English | [README.md](README.md) | 🇪🇸 Spanish | [README.es.md](README.es.md) |\n| 🇸🇦 Arabic | [README.ar.md](README.ar.md) | 🇫🇷 French | [README.fr.md](README.fr.md) |\n| 🇩🇪 German | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |\n| 🇮🇩 Indonesian | [README.id.md](README.id.md) | 🇮🇹 Italian | [README.it.md](README.it.md) |\n| 🇯🇵 Japanese | [README.ja.md](README.ja.md) | 🇵🇱 Polish | [README.pl.md](README.pl.md) |\n| 🇧🇷 Portuguese | [README.pt.md](README.pt.md) | 🇷🇺 Russian | [README.ru.md](README.ru.md) |\n| 🇹🇷 Turkish | [README.tr.md](README.tr.md) | 🇨🇳 Chinese | [README.zh.md](README.zh.md) |\n\n> 💡 **Want to contribute a translation?** Check out the [Contributing](#contributing) section to help us add more languages!\n\n\u003C\u002Fdetails>\n\n\u003Ca id=\"troubleshooting\">\u003C\u002Fa>\n## 🛠️ Troubleshooting\n\n\u003Cdetails>\n\u003Csummary>Click to view common issues and solutions\u003C\u002Fsummary>\n\n- **Format table not appearing:** Update yt-dlp to latest version and switch to nightly yt-dlp.\n- **Download failed:** 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:** Log in to your YouTube account to view age-restricted videos.\n  - **Geo-Blocked Videos:** Consider using a VPN to bypass regional restrictions.\n  - **Deleted Videos:** Video is no longer available on YouTube.\n  - **Live Streams:** Live streams cannot be downloaded; wait for the broadcast 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 a YouTube Premium subscription.\n  - **Copyright Blocks:** Content is blocked due to copyright restrictions.\n- **Video and Audio Files separate 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>-ffmpeg.exe` file, which comes bundled with FFmpeg.\n\n---\n\n#### 🛡️ Windows Defender \u002F Antivirus Warning\n\nSome antivirus software may flag `.exe` files as false positives. This is a **known limitation** of packaged applications.\n\n**Why this happens:**\n- Antivirus heuristics can mistakenly identify packaged executables as suspicious.\n\n**Safe Alternatives:**\n- ✅ **Use pip install:** `pip install ytsage` (Recommended)\n- ✅ **Build from Source**: by following this [guide](.github\u002FCI_CD_README.md)\n- ✅ **Whitelist the app** in your antivirus software.\n\n#### 🍎 macOS: \"Application is damaged and cannot 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 this 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#### **Config Locations (Advanced)**\n- **Windows:** `%LOCALAPPDATA%\\YTSage`\n- **macOS:** `~\u002FLibrary\u002FApplication Support\u002FYTSage`\n- **Linux:** `~\u002F.local\u002Fshare\u002FYTSage`\n\n\u003C\u002Fdetails>\n\n\u003Ca id=\"sponsor\">\u003C\u002Fa>\n## 💖 Sponsor\n\nIf YTSage saves you time, please consider sponsoring the project. Sponsoring helps cover development time, testing across all platforms, and future improvements.\n\n- GitHub Sponsors: https:\u002F\u002Fgithub.com\u002Fsponsors\u002Foop7\n- Sponsorship link is also available directly in the app via the About dialog.\n\n[![Sponsor YTSage](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Foop7)\n\n\u003Ca id=\"contributing\">\u003C\u002Fa>\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\u002FAmazingFeature\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\u002FAmazingFeature\n  ```\n5. 🔄 Open a Pull Request\n\n### 🌍 Contributing Translations\n\n- Update the relevant localized README file (e.g., `readme-translations\u002FREADME.fr.md`)\n- Keep app strings synced by editing `ytsage\u002Flanguages\u002F\u003Ccode>.json`\n- If your language is missing, start from `README.md` and create `README.\u003Ccode>.md`\n\n\u003Cdetails>\n\u003Csummary>📂 Project Structure\u003C\u002Fsummary>\n\n## YTSage - Project Structure\n\nThis document describes the organized folder structure of YTSage.\n\n### 📁 Project Structure\n\n```\nYTSage\u002F\n├── 📁 .github\u002F                   # GitHub configuration\n│   ├── 📁 ISSUE_TEMPLATE\u002F         # Issue templates\n│   │   └── 🐛-bug-report.md       # Bug report template\n│   ├─── 📁 workflows\u002F              # 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          # Release master workflow\n│   └── 📄 CI_CD_README.md        # CI\u002FCD documentation\n├──  📁 branding\u002F                 # Branding assets (Screenshots, SVGs)\n│   ├── 📁 icons\u002F                 # App icons\n│   ├── 📁 screenshots\u002F           # Documentation screenshots\n│   └── 📁 svg\u002F                   # 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\u002F                    # Source package\n    ├── 📁 assets\u002F                # Runtime assets\n    │   ├── 📁 Icon\u002F              # App icons\n    │   └── 📁 sound\u002F             # Sound files\n    ├── 📁 languages\u002F             # Localization files\n    │   ├── 📄 ar.json            # Arabic translation\n    │   ├── 📄 de.json            # German translation\n    │   ├── 📄 en.json            # English translation\n    │   └── ...                   # Other languages\n    ├── 📁 core\u002F                  # 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\u002F                   # UI components\n    │   ├── 📄 __init__.py        # GUI package init\n    │   ├── 📄 ytsage_gui_main.py # Main app window\n    │   └── 📁 ytsage_gui_dialogs\u002F # Dialog classes\n    ├── 📁 utils\u002F                 # Utility modules\n    │   ├── 📄 __init__.py        # Utils package init\n    │   ├── 📄 ytsage_config_manager.py # Config management\n    │   └── 📄 ytsage_logger.py   # Logging utilities\n    ├── 📄 __init__.py            # Package entry point\n    └── 📄 main.py                # Main execution script\n```\n\n\u003C\u002Fdetails>\n\n## ⭐️ Star History\n\n\u003Cdiv align=\"center\">\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F#oop7\u002FYTSage&Date\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=oop7\u002FYTSage&type=Date&theme=dark\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=oop7\u002FYTSage&type=Date\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=oop7\u002FYTSage&type=Date\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n\u003C\u002Fdiv>\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>\n\u003Csummary>Show Acknowledgments\u003C\u002Fsummary>\n\n\u003Cdiv align=\"center\">\n\n\u003Cp>A big thanks to everyone who contributed to this project by opening an issue to suggest an improvement or report a bug.\u003C\u002Fp>\n\n\u003Ctable>\n    \u003Ctr class=\"section\">\u003Cth colspan=\"2\">Core Components\u003C\u002Fth>\u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd width=\"35%\">\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fyt-dlp\u002Fyt-dlp\">yt-dlp\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Download Engine\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fffmpeg.org\u002F\">FFmpeg\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Media Processing\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fdeno.com\u002F\">Deno\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Runtime for yt-dlp plugins\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr class=\"section\">\u003Cth colspan=\"2\">Libraries & Frameworks\u003C\u002Fth>\u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fwiki.qt.io\u002FQt_for_Python\">PySide6\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>GUI Framework\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fpython-pillow.org\u002F\">Pillow\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Image Processing\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Frequests.readthedocs.io\u002F\">requests\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>HTTP Requests\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fpackaging.python.org\u002F\">packaging\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Version\u002FPackage Management\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fpython-markdown.github.io\u002F\">markdown\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Markdown Rendering\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FDelgan\u002Floguru\">loguru\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Logging\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr class=\"section\">\u003Cth colspan=\"2\">Assets & Contributors\u003C\u002Fth>\u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fpixabay.com\u002Fsound-effects\u002Fnew-notification-09-352705\u002F\">New Notification 09 by Universfield\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Notification Sound\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n        \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fviru185\">viru185\u003C\u002Fa>\u003C\u002Ftd>\n        \u003Ctd>Code Contributor\u003C\u002Ftd>\n    \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n\u003C\u002Fdetails>\n\n## ⚠️ Disclaimer\n\nThis tool is for personal use only. Please respect YouTube's Terms of Service and content creator rights.\n\n---\n\n\u003Cdiv align=\"center\">\n\nMade with ❤️ by [oop7](https:\u002F\u002Fgithub.com\u002Foop7)\n\n\u003C\u002Fdiv>\n","YTSage 是一个现代化的YouTube下载工具，具有简洁的PySide6界面。它支持下载任意质量的视频、提取音频、获取字幕等功能，并且集成了SponsorBlock以跳过赞助内容。该工具基于yt-dlp构建，确保了稳定性和高性能。此外，YTSage还提供了查看视频元数据等额外功能。适用于需要从YouTube下载高质量视频或音频、同时希望有良好用户体验的用户，尤其适合那些经常需要批量处理多媒体文件的人士。其跨平台特性使得无论是在Windows、Mac还是Linux系统上都能轻松使用。",2,"2026-06-11 03:41:02","high_star"]