YTSage 5.0.0 - Major Release
Install via PyPI:
pip install ytsageUpgrade to the latest version:
pip install --upgrade ytsageDownloads
| Platform | File | Notes |
|---|---|---|
| YTSage-v5.0.0-ffmpeg-Setup.exe | With FFmpeg bundled | |
| YTSage-v5.0.0-Setup.exe | Standard installer | |
| YTSage-v5.0.0-ffmpeg-portable.zip | Portable with FFmpeg, zipped | |
| YTSage-v5.0.0-portable.zip | Portable version, no installation required | |
| YTSage-v5.0.0-amd64.deb | Debian package | |
| YTSage-v5.0.0-x86_64.AppImage | AppImage, portable | |
| YTSage-v5.0.0-x86_64.flatpak | Flatpak Bundle | |
| YTSage-v5.0.0-x86_64.rpm | RPM package | |
| YTSage-v5.0.0-arm64.dmg | Disk image installer for Apple Silicon | |
| YTSage-v5.0.0-arm64.app.zip | Zipped application for Apple Silicon | |
| ytsage-5.0.0-py3-none-any.whl | Python Wheel | |
| ytsage-5.0.0.tar.gz | Source Distribution |
💖 Sponsor
Finally, a GitHub sponsor on repositories is a great way to support the project and help fund future development.
Added a sponsor link to the About dialog. If you like the project and want to support development, consider sponsoring!
🚀 New Features
- Linux Flatpak Support: Added a
.flatpakbundle for broader Linux compatibility (Fedora, Steam Deck, etc.) (#4, thanks to @imbev). - Sandbox Compatibility: YTSage now respects
YTDLP_APP_BIN_PATHandDENO_APP_BIN_PATHenvironment variables on Linux, allowing dependencies to update correctly in read-only environments. - Searchable Playlist Selection: Added a search bar and duration display to the playlist selection dialog, making it much easier to find specific videos in large playlists.
- Background History Loading: The history dialog now loads entries and thumbnails in the background, ensuring instant UI responsiveness even with hundreds of downloaded items.
- Language Synchronization: The windows installer now automatically sets the application's language based on the language selected during setup. The preference is saved directly to
ytsage_config.jsonin the local app data folder. - Automated Release Script: Added
build_release.pyto automate production builds (cleanup, wheel build, README handling) and standardize the release flow. - Modern Packaging: Migrated dependency and build configuration to
pyproject.toml, removedrequirements.txt, and addedMANIFEST.into ensure assets and language files are packaged. - Package Layout Consolidation: Renamed the top-level package from
srctoytsageand movedmain.pyintoytsage/, simplifying module imports and enablingpython -m ytsage.mainusage. - Background History & Thumbnails: Introduced a virtualized history view with an SQLite backend, persistent DB connection, and asynchronous thumbnail downloads to keep the UI responsive on large histories.
- Animated UI Enhancements:
- Window Blurring: Implemented a sophisticated modal dialog flow using blurred screenshots as overlays, providing a better focus on dialogs like "About," "History," and "Settings."
- Smooth Transitions: Added
SmoothTabWidgetwith fade-in/fade-out transitions between tabs and cross-fade animations for status messages and control buttons. - Dynamic Elements: Introduced a "shake" animation for invalid input validation and smooth fade-in effects for video thumbnails and the format table.
- Deno Integration Detection: Added a background system information thread to detect yt-dlp's Deno integration. The About Dialog now displays a "+ yt-dlp" indicator when integration is active.
- Real-time Deno Updates: Rewrote the Deno upgrade process to stream
stdoutin real-time to a dedicated GUI progress window. - Improved Analysis Feedback: Added progress signals and a simulated progress timer to provide smoother visual feedback during long-running URL extractions.
- Automated Windows Installers: The build process now automatically generates Setup installers (
.exe) alongside portable ZIPs. - Beta Update System: Introduced an opt-in beta update feature. Users can now receive notifications for preview releases by enabling the "Receive Beta Updates" option in the updater settings.
- Log Management: Added a new "Logs" button in the About dialog to quickly open the application logs folder.
- Expanded Localization: Initial support for Chinese (Simplified), Hindi, and Indonesian in the Windows installer and application metadata.
- Sponsor Link: Added a Sponsor link to the About dialog.
🔧 Improvements
- Release Triggers: Moved to manual release triggers (
workflow_dispatch) for better version control. - CI Orchestration: Added
release-allworkflow to orchestrate multi-platform builds. - Faster Playlist Analysis: Refactored the analysis engine to use flat-playlist extraction, significantly reducing the time required to load large playlists. Only the first video is fully analyzed initially to populate the UI immediately.
- Localization: Added translations for the new "Analyzing... Fetching formats for first video" status message across all 14 supported languages.
- Build Workflows & CI: Updated Windows, macOS and Linux CI workflows to install from
pyproject.toml(PEP 517), adjusted cx_Freeze entry points and asset paths, and clarified artifact naming. - README & Docs: Refreshed documentation and CI/CD notes to show the new layout, packaging steps, and how to run via
python -m ytsage.main. - Assets & Localization: Reorganized branding and asset folders (
branding/,ytsage/assets) and moved language JSON files toytsage/languagesfor packaging and discoverability. - Localization Coverage: Added and expanded translation keys (multiple languages) and localized dialogs, log messages, and FFmpeg/yt-dlp setup strings.
- Update Checks: Sped up update checks using parallel network requests and non-blocking background threads, plus improved fallbacks and timeouts.
- Format Table & UI Performance: Built the format table once and used visibility toggles for filtering; centralized file-extension constants to reduce duplication.
- Audio Playback: Replaced
pygletwithPySide6.QtMultimediafor notification playback and updated build steps accordingly. - Progress Feedback: Added smooth
QPropertyAnimationfor progress updates and increased progress precision to 0.01% (range 0–10000) for finer progress reporting. - Standardized UI Status Messages: Cleaned up and simplified status messages across all 14 supported languages, removing progress percentages in favor of concise action-oriented text.
- Aggressive Build Optimization:
- Cross-Platform Distributions: Significantly reduced bundle sizes by pruning unused Qt modules (Web, Pdf, Qml, Quick), PDB debug files, and extra translations for Windows, Linux, and macOS.
- Optimized Bytecode: Switched to
python -OOfor all builds to ensure faster startup and execution.
- Revamped CI & Packaging:
- Windows: Improved PowerShell cleanup scripts to handle duplicate Qt DLLs robustly.
- Linux: Shifted to a manual AppImage build process to ensure a cleaner layout and fix "encodings" module errors.
- macOS: Consolidated bundle trimming and automated the creation of DMG and ZIP artifacts.
- Style Consistency: Updated
QPushButtonstyles with explicit pressed-state padding and unified visual feedback across the application. - Plugin Management: Maintained
QtDBusandQtSvgsupport across all platforms to ensure D-Bus integration and proper SVG rendering. - Output Filename Template: Added option to customize the output filename format in download settings (e.g.
%(title)s.%(ext)s) (#75, thanks to @Daymond). - About/System Info:
- Refined the "System Info" loading text style (updated color to #888888 and removed italics for better readability).
- Updated version refresh icons and localized "Open Logs" tooltips across all 14 supported languages.
- Diagnostics & Reporting:
- Simplified the GitHub Bug Report template to leverage the new one-click log access.
- Workflow:
- Implemented an automated PyPI build workflow (
build-pypi.yml) to generate Python Wheel and Source distributions. - Integrated PyPI artifact generation into the master release pipeline.
- Implemented an automated PyPI build workflow (
- Update Logic: Optimized the update thread to prioritize GitHub Beta releases when opted-in, preventing version conflicts with PyPI releases.
- README Updates: Expanded the README with clear install + upgrade instructions (including platform-specific steps for Windows, Linux, and macOS).
🐛 Bug Fixes
- Fixed Playlist Timeouts: Increased the subprocess timeout from 60 to 300 seconds to prevent failures when processing massive playlists (#71, thanks to @oskararesov-wq).
- Fixed Crash on Older Python: Resolved a
SyntaxErrorrelated to backslashes in f-strings, ensuring full compatibility with Python 3.11 and earlier (#72, thanks to @agustina-laurenti). - Fixed Config Corruption: Fixed a
TypeErrorwhere WindowsPath objects were not correctly serialized to JSON, preventing configuration save errors (#73, thanks to @xhzsz666-lang). - Build Fixes: Fixed Linux build configuration and corrected icon paths used by build scripts; updated Windows workflow paths and packaging excludes.
- Enhanced Error Reporting: Implemented a yt-dlp error buffer to capture and display the last two lines of specific "ERROR:" output when a command fails, replacing generic return-code messages with actionable information (#70, thanks to @xhzsz666-lang).
- Build Script Stability: Added error suppression to Windows pruning scripts to prevent failures when optional files (like specific translations) are missing.
- macOS Rendering: Corrected an issue where SVG and PDF rendering plugins were accidentally removed during the trimming pass.
- Format Table Update Issue: Fixed a bug where the download format list would not update when analyzing a new video after a previous one, causing the previous video's formats to persist (#74, thanks to @bachig26 and @xhzsz666-lang).
- UI Rendering: Removed the 🔄 emoji from the System Info loading message to resolve potential rendering issues on certain systems.*
- Fixed Version Matching: Improved version matching for yt-dlp updates by zero-padding PyPI version strings (#80, thanks to @bachig26).
🔄 Refactoring
- Package & Imports: Moved
src/core,src/gui, andsrc/utilsintoytsage/and updated imports to relative module paths across the codebase. - GUI Organization: Extracted analysis logic into
AnalysisMixin, centralized stylesheet handling inytsage_stylesheet.py, and reorganized GUI dialogs and modules for clarity. - Threading & Stability: Replaced manual threading with
QThread-based classes for analysis and updater checks, added cancellation and safer UI signaling. - History Backend: Migrated history storage from JSON to SQLite with a persistent connection, added indexes for fast search, and implemented a virtualized
QListViewfor large histories. - Config & Constants: Introduced
ConfigManagerand centralized file-extension constants inytsage_constants.pyto reduce duplication and improve maintainability.