Homer 089b144626 Correct the version and make the config merge deeply
The package version had been left at the scaffolded 0.1.0 while the released
tag was v5.4.0. Nothing in the code chose 0.1.0 -- it was npm-init's equivalent,
never updated -- and it made every version comparison meaningless: the window
title, the About dialog and the update check all read it.

ConfigManager merged a stored config over the defaults with dict.update(),
which is shallow. A config written by an older build carries partial "player"
and "feed" objects, and a shallow update replaces the whole nested default with
the partial one, so keys added since came back missing. The `or 15` and
`or "auto"` fallbacks at the call sites were load-bearing because of it. The
merge is now recursive, and keys present only in the stored file are kept so a
downgrade cannot destroy settings.

Configs now carry a config_version. A file written before 5.4.0 -- including
one inherited from an upstream YTSage install -- has its stored
check_app_updates cleared once, because that setting used to point at PyPI's
`ytsage` package and oop7/YTSage's releases, neither of which is this program.

The settings tab read a missing check_app_updates as enabled and persisted that
reading on OK, so merely opening Custom Options turned the checker back on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 00:31:56 +02:00

SageTube

A watch-first YouTube client for the desktop. Search, browse channels and playlists, follow subscriptions, and stream videos in an embedded mpv player — with the full yt-dlp download feature set inherited from YTSage.

Features

Watching

  • 📺 Embedded mpv player (Wayland/X11/Windows/macOS) with quality selector, speed, volume, subtitles, fullscreen
  • 🔍 In-app YouTube search with thumbnail card grid
  • 📂 Channel browsing (Videos / Shorts / Live) and playlist views
  • 🔔 Local subscriptions — no Google account needed — with an aggregated feed; optional real account feed via browser cookies
  • ⏯️ Watch history with resume positions and a persistent play queue
  • ⬇️ One click from any video card into the downloader

Downloading (from YTSage)

  • Format table, audio extraction, subtitles, SponsorBlock, chapters, playlists, trimming, speed limits, proxies, cookies, custom yt-dlp commands, download history — see the upstream README

Install

pip install .
sagetube

Requires libmpv for playback (Arch: pacman -S mpv) — see Building. Without it the app works as a downloader.

Fork notes

SageTube is a fork of YTSage by oop7 (MIT). The internal package keeps the ytsage name so upstream fixes remain mergeable — see Tracking upstream. The fork also fixes a number of upstream bugs (unsafe partial-file cleanup, unverified binary updates, thread-safety issues, PATH corruption on Windows — see the git log).

License

MIT — see LICENSE.

S
Description
No description provided
Readme MIT 12 MiB
5.5.2 Latest
2026-08-08 23:38:07 +00:00
Languages
Python 94.2%
Inno Setup 5.8%