diff --git a/CHANGELOG.md b/CHANGELOG.md index cf00d63..0752634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ Kept as the work happens, not assembled at release time. Format is with its history. SageTube's own versions start below and are the ones this file records. -## Unreleased +## 5.5.0 — 2026-08-09 ### Added @@ -88,6 +88,10 @@ records. ### Fixed +- The error log filled with hundreds of `after creating texture: OpenGL error + INVALID_ENUM` lines per session. They come from the GL driver, playback + continues regardless, and they buried the errors that do matter, so they are + logged at debug level now. - The player's cookie and proxy options were joined with commas and never escaped, so a cookie path or a proxy URL containing one silently truncated the option and produced a bogus one. The geo-bypass proxy was honoured by the diff --git a/pyproject.toml b/pyproject.toml index f591740..9e850fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sagetube" -version = "5.4.0" +version = "5.5.0" description = "Watch-first YouTube client with embedded mpv playback and yt-dlp downloading. Fork of YTSage." authors = [ { name = "Houmeres", email = "admin@ecoposta.sk" }, diff --git a/ytsage/__init__.py b/ytsage/__init__.py index 2102e27..74789d3 100644 --- a/ytsage/__init__.py +++ b/ytsage/__init__.py @@ -10,5 +10,5 @@ match `version` in pyproject.toml and the repository's latest signed tag -- this package's tag line continues YTSage's, which is why it starts at 5.x. """ -__version__ = "5.4.0" +__version__ = "5.5.0" __author__ = "Houmeres" diff --git a/ytsage/gui/ytsage_gui_player.py b/ytsage/gui/ytsage_gui_player.py index d33ac2e..7254f3f 100644 --- a/ytsage/gui/ytsage_gui_player.py +++ b/ytsage/gui/ytsage_gui_player.py @@ -281,13 +281,25 @@ class MpvRenderWidget(QOpenGLWidget): if value is not None: self.mpvBufferingChanged.emit(bool(value)) + #: libmpv reports these at error level, but they are noise from the GL + #: driver rather than a failure: playback continues and frames keep + #: arriving. They were filling the error log with hundreds of lines per + #: session, which buries the errors that do matter. + _BENIGN_MPV_ERRORS = ( + "after creating texture: OpenGL error INVALID_ENUM", + ) + def _on_mpv_log(self, level: str, prefix: str, text: str) -> None: + message = text.strip() if level in ("error", "fatal"): - logger.error(f"mpv [{prefix}] {text.strip()}") + if level == "error" and any(noise in message for noise in self._BENIGN_MPV_ERRORS): + logger.debug(f"mpv [{prefix}] {message}") + return + logger.error(f"mpv [{prefix}] {message}") if "ytdl" in prefix or level == "fatal": - self.mpvError.emit(text.strip()) + self.mpvError.emit(message) else: - logger.debug(f"mpv [{prefix}] {text.strip()}") + logger.debug(f"mpv [{prefix}] {message}") # --------------------------------------------------------------- OpenGL