- Einstellungen-Tab: 'Jetzt nach Updates suchen'-Button, Status-Text (aktuell/verfuegbar/ fehlgeschlagen), Fortschrittsbalken fuer den Download (Prozent bei bekannter Groesse, unbestimmt waehrend Entpacken/Installieren), 'Update installieren'-Button erscheint bei Fund. - updater.py/UpdateInstaller: laedt Download jetzt in Chunks (statt copyfileobj) und meldet echten Fortschritt in Prozent ueber ein neues progress_percent-Signal. - Patch-Updates: CI baut zusaetzlich zum vollen Release-Paket ein kleines '-patch'-Paket, das nur die ausfuehrbare Datei (Playtube.exe/Playtube, ~2-3 MB) enthaelt - der riesige PySide6/QtWebEngine-Laufzeitordner _internal/ (~200 MB) bleibt unangetastet, da er sich zwischen normalen Code-Patches nicht aendert. updater.py bevorzugt das Patch-Paket und faellt nur auf das volle Paket zurueck, wenn kein Patch-Asset gefunden wird. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Playtube
Eigenstaendige Desktop-App für YouTube & YouTube Music (kein Browser-Fenster, keine Erweiterung) mit:
- Zwei Tabs – YouTube und YouTube Music laufen parallel, Musik spielt im Hintergrund weiter wenn du zu Videos wechselst.
- Login/Premium – eigenes, persistentes Profil (
%APPDATA%\Playtube, im Entwicklungsmodus%APPDATA%\PlaytubeDev– bewusst getrennt, damit sich lokale Test-Builds nie mit einer installierten Version in die Quere kommen), einmal bei Google anmelden reicht fuer beide Dienste. - Discord Rich Presence – zeigt Titel, Kanal/Interpret, Fortschrittsbalken und einen Link-Button in deinem Discord-Profil, sobald etwas laeuft.
- System-Tray – Fenster schliessen minimiert nur (Musik laeuft weiter), Rechtsklick aufs Tray-Icon zum Beenden, Play/Pause/Skip direkt aus dem Menue.
- Eigener Name – erscheint als "Playtube" im Taskmanager, Fenstertitel, Alt-Tab und (nach dem Packaging, siehe unten) im Lautstaerkemixer statt als "python".
Schnellstart (Entwicklung)
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
.venv\Scripts\python main.py
Beim ersten Start meldest du dich einmal in einem der beiden Tabs mit deinem Google-Konto an (Symbol oben rechts auf youtube.com bzw. music.youtube.com) - der Login bleibt danach dauerhaft gespeichert.
Discord Rich Presence einrichten
Die Client-ID ist bereits in config.json eingetragen (discord.client_id). Falls du
sie aendern oder eine eigene Anwendung nutzen willst:
- Auf https://discord.com/developers/applications eine neue Application anlegen.
- Die Application ID in
config.jsonunterdiscord.client_ideintragen. - Optional, fuer eigene Icons: unter Rich Presence → Art Assets zwei Bilder mit den
exakten Schluesseln
youtube_logoundmusic_logohochladen (Playtube nutzt genau diese Keys automatisch). Ohne hochgeladene Assets funktioniert die Presence trotzdem, nur ohne Bild. - Discord muss auf demselben Rechner laufen, damit die Presence angezeigt wird.
In config.json lassen sich zudem update_interval_seconds (Mindestabstand zwischen
Updates) und show_idle_presence (Status anzeigen, wenn gerade nichts laeuft) anpassen.
App als eigenstaendige Playtube.exe packen
Fuer die volle Taskmanager-/Audiomixer-Markierung wird die App als eigene .exe gebaut
(ein via python main.py gestarteter Prozess heisst in Windows immer "python.exe" -
nur eine kompilierte .exe mit eigenem Namen und eigener Versionsinfo kann das aendern):
.venv\Scripts\pip install pyinstaller
powershell -ExecutionPolicy Bypass -File packaging\build.ps1
Ergebnis liegt danach unter dist\Playtube\Playtube.exe. Das Build-Skript benennt
zusaetzlich den QtWebEngine-Hilfsprozess (der den eigentlichen Ton ausgibt) zu
PlaytubeHelper.exe um, damit er im Taskmanager nicht als QtWebEngineProcess
auftaucht. Fuer eine vollstaendige Umbenennung inkl. Icon/Versionsinfo dieses
Hilfsprozesses (relevant fuer den Lautstaerkemixer) zusaetzlich
rcedit als packaging\rcedit.exe
ablegen - das Skript nutzt es automatisch, wenn vorhanden. Ohne rcedit funktioniert
alles genauso, nur zeigt der Lautstaerkemixer fuer den Ton-Unterprozess je nach
Windows-Version eventuell weiterhin "QtWebEngineProcess" statt "Playtube" (rein
kosmetisch - Namensgebung von Chromium-Hilfsprozessen ist ein bekanntes,
Windows-versionsabhaengiges Verhalten, das selbst grosse Electron-Apps nur mit rcedit
o.ae. umgehen).
Automatische Updates
Playtube prueft beim Start und danach alle updates.check_interval_hours Stunden
(Standard 6, im Einstellungen-Tab oder in config.json einstellbar) die
GitHub Releases des Projekts. Im
Einstellungen-Tab gibt es zusaetzlich einen "Jetzt nach Updates suchen"-Button mit
Status-Anzeige und Fortschrittsbalken fuer den Download. Gibt es eine neuere Version,
fragt ein Dialog, ob sie installiert werden soll:
- Gepackte
Playtube.exe/Playtube: laedt bevorzugt das kleine Patch-Paket herunter (nur die ausfuehrbare Datei mit unserem Anwendungscode, ca. 2-3 MB statt ~200 MB) und ersetzt ausschliesslich diese - der riesige PySide6/QtWebEngine- Laufzeitordner (_internal/) bleibt unangetastet, da er sich zwischen normalen Patch-Releases nicht aendert. Nur wenn kein Patch-Paket verfuegbar ist (z.B. beim allerersten Release oder nach einem Wechsel der PySide6-Version), wird automatisch auf das volle Release-Paket zurueckgefallen und der komplette Installationsordner ersetzt. Die App startet sich in beiden Faellen danach selbst neu. - Entwicklungsmodus (
python main.py): fuehrtgit pull+pip install -r requirements.txtaus und startet den Python-Prozess neu.
Auto-Update laesst sich im Einstellungen-Tab oder in config.json unter
updates.enabled deaktivieren.
Eine neue Version veroeffentlichen
powershell -ExecutionPolicy Bypass -File packaging\release.ps1 -Version 1.1.0
Das Skript setzt die Versionsnummer, committet, erstellt Git-Tag v1.1.0 und pusht zu
origin (dein Repo unter https://github.com/fojadrachi/Playtube). Der gepushte Tag
loest automatisch die GitHub-Actions-Pipeline
(.github/workflows/release.yml) aus, die sowohl
eine Windows- als auch eine Linux-Version baut und beide als Assets an einem GitHub
Release veroeffentlicht - Fortschritt unter
https://github.com/fojadrachi/Playtube/actions.
Alle Nutzer mit einer laufenden Playtube-Installation (Windows oder Linux) bekommen die neue Version danach automatisch angeboten.
Native Linux-Version
Playtube laeuft genauso unter Linux (gleicher Code, gleiches PySide6/QtWebEngine) und
wird bei jedem Release automatisch als Playtube-vX.Y.Z-linux-x86_64.tar.gz unter
https://github.com/fojadrachi/Playtube/releases mitgebaut.
Fertiges Release installieren (richtet Startmenue-Eintrag + Icon ein):
tar -xzf Playtube-vX.Y.Z-linux-x86_64.tar.gz
cd Playtube
sh install-linux.sh
Danach ist Playtube ueber das Anwendungsmenue oder den Befehl playtube startbar.
Aus dem Quellcode starten:
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.py
QtWebEngine benoetigt unter Linux ein paar System-Bibliotheken (auf Debian/Ubuntu):
sudo apt install libxkbcommon0 libegl1 libnss3 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2t64 libatk-bridge2.0-0 libcups2 (siehe auch die vollstaendige Liste in
.github/workflows/release.yml).
Hinweise
- "Dieser Browser ist unter Umstaenden nicht sicher" beim Google-Login: Playtube
setzt einen echten Chrome-User-Agent inkl. passender
Sec-CH-UA-Header, damit Google das eingebettete Chromium (QtWebEngine) nicht als unsicheres WebView erkennt. Sollte die Meldung dennoch erscheinen: alle Playtube-Fenster/-Prozesse schliessen und neu starten (die Header greifen erst ab dem naechsten Prozessstart), notfalls einmal den Profilordner%APPDATA%\Playtube\webprofile(bzw.PlaytubeDevim Entwicklungsmodus) loeschen und neu anmelden. - 4K/Premium-Videoqualitaet kann eingeschraenkt sein, da die Open-Source-Variante von QtWebEngine kein Widevine-DRM mitbringt (Standard-Qualitaeten funktionieren normal).
- Icon/Branding-Bilder liegen unter
assets/und wurden mittools/generate_icon.pyerzeugt (Pillow) - bei Bedarf einfach eigenesicon.ico/icon.pngdort ersetzen.