github oop7/YTSage v5.0.0
YTSage v5.0.0

8 hours ago

YTSage 5.0.0 - Major Release

Install via PyPI:

pip install ytsage

Upgrade to the latest version:

pip install --upgrade ytsage

Downloads

Platform File Notes
Windows FFmpeg YTSage-v5.0.0-ffmpeg-Setup.exe With FFmpeg bundled
Windows EXE YTSage-v5.0.0-Setup.exe Standard installer
Windows Portable FFmpeg YTSage-v5.0.0-ffmpeg-portable.zip Portable with FFmpeg, zipped
Windows Portable YTSage-v5.0.0-portable.zip Portable version, no installation required
Linux DEB YTSage-v5.0.0-amd64.deb Debian package
Linux AppImage YTSage-v5.0.0-x86_64.AppImage AppImage, portable
Flathub YTSage-v5.0.0-x86_64.flatpak Flatpak Bundle
Linux RPM YTSage-v5.0.0-x86_64.rpm RPM package
macOS ARM64 DMG YTSage-v5.0.0-arm64.dmg Disk image installer for Apple Silicon
macOS ARM64 APP YTSage-v5.0.0-arm64.app.zip Zipped application for Apple Silicon
PyPI ytsage-5.0.0-py3-none-any.whl Python Wheel
PyPI 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!

Sponsor YTSage

🚀 New Features

  • Linux Flatpak Support: Added a .flatpak bundle for broader Linux compatibility (Fedora, Steam Deck, etc.) (#4, thanks to @imbev).
  • Sandbox Compatibility: YTSage now respects YTDLP_APP_BIN_PATH and DENO_APP_BIN_PATH environment 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.json in the local app data folder.
  • Automated Release Script: Added build_release.py to automate production builds (cleanup, wheel build, README handling) and standardize the release flow.
  • Modern Packaging: Migrated dependency and build configuration to pyproject.toml, removed requirements.txt, and added MANIFEST.in to ensure assets and language files are packaged.
  • Package Layout Consolidation: Renamed the top-level package from src to ytsage and moved main.py into ytsage/, simplifying module imports and enabling python -m ytsage.main usage.
  • 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 SmoothTabWidget with 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 stdout in 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-all workflow 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 to ytsage/languages for 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 pyglet with PySide6.QtMultimedia for notification playback and updated build steps accordingly.
  • Progress Feedback: Added smooth QPropertyAnimation for 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 -OO for 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 QPushButton styles with explicit pressed-state padding and unified visual feedback across the application.
  • Plugin Management: Maintained QtDBus and QtSvg support 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.
  • 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 SyntaxError related to backslashes in f-strings, ensuring full compatibility with Python 3.11 and earlier (#72, thanks to @agustina-laurenti).
  • Fixed Config Corruption: Fixed a TypeError where 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, and src/utils into ytsage/ and updated imports to relative module paths across the codebase.
  • GUI Organization: Extracted analysis logic into AnalysisMixin, centralized stylesheet handling in ytsage_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 QListView for large histories.
  • Config & Constants: Introduced ConfigManager and centralized file-extension constants in ytsage_constants.py to reduce duplication and improve maintainability.

Don't miss a new YTSage release

NewReleases is sending notifications on new releases.