Files
SageTube/pyproject.toml
T
Jaroslav Beneš f886125857 Add embedded mpv player (render API + QOpenGLWidget)
New ytsage/gui/ytsage_gui_player.py:
- MpvRenderWidget hosts libmpv through MpvRenderContext in a
  QOpenGLWidget - works on native Wayland where wid-embedding cannot -
  with all mpv-thread callbacks marshalled to the GUI thread via queued
  signals only.
- PlayerPanel adds transport controls: play/pause, seek slider, time
  display, quality selector (caps ytdl-format height and reloads in
  place), speed, volume (persisted), subtitle toggle, fullscreen
  (reparent to top-level window), and Space/F/Escape keys.
- Playback resolves watch URLs through mpv's ytdl_hook pointed at the
  app-managed SHA256-verified yt-dlp binary (script-opts
  ytdl_hook-ytdl_path), inheriting cookies and proxy settings via
  ytdl-raw-options - stream freshness, DASH muxing and nsig handling
  stay in yt-dlp's hands.

New ytsage/core/ytsage_mpv.py probes libmpv availability; without it
the Watch UI shows a per-OS install hint and everything else works.
python-mpv added to dependencies (libmpv itself is a system package).
Config gains player.* and feed.* defaults.

Verified on Wayland: real YouTube video streams with position/duration
signals flowing and no thread-safety errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 01:44:25 +02:00

69 lines
1.8 KiB
TOML

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "ytsage"
version = "5.2.0"
description = "Modern YouTube downloader with a clean PySide6 interface."
authors = [
{ name = "oop7", email = "oop7_support@proton.me" },
]
dependencies = [
"PySide6>=6.10.1",
"requests>=2.32.5",
"pillow>=12.0.0",
"packaging>=25.0",
"markdown>=3.10",
"loguru>=0.7.3",
"setuptools>=80.9.0",
"python-mpv>=1.0.7",
]
requires-python = ">=3.10,<3.15"
readme = "README.md"
license = "MIT"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
'Programming Language :: Python :: 3.14',
"Intended Audience :: End Users/Desktop",
"Operating System :: OS Independent",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Multimedia :: Video",
"Topic :: Multimedia :: Sound/Audio",
"Topic :: Desktop Environment",
"Environment :: X11 Applications :: Qt",
"Environment :: Win32 (MS Windows)",
"Environment :: MacOS X"
]
keywords = ["youtube", "downloader", "video", "audio", "PySide6", "yt-dlp", "GUI"]
[project.scripts]
ytsage = "ytsage.main:main"
[project.urls]
Homepage = "https://github.com/oop7/YTSage"
Bug-Tracker = "https://github.com/oop7/YTSage/issues"
Reddit = "https://www.reddit.com/r/NO-N_A_M_E/"
[tool.setuptools]
include-package-data = true
[tool.setuptools.packages.find]
include = ["ytsage*"]
[tool.setuptools.package-data]
ytsage = [
"assets/Icon/icon.png",
"assets/sound/notification.mp3",
"languages/*.json",
]