@@ -1,20 +1,18 @@
# Playtube
Eigenstae ndige Desktop-App für YouTube & YouTube Music (kein Browser-Fenster, keine
Eigenstä ndige 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.
- **Login/Premium** – eigenes, persistentes Profil (`%APPDATA%\Playtube` ) , einmal be i
Google anmelden reicht für beide Dienste.
- **Discord Rich Presence** – zeigt Titel, Kanal/Interpret, Fortschrittsbalken und
einen Link-Button in deinem Discord-Profil, sobald etwas lae uft.
- **System-Tray** – Fenster schliessen minimiert nur (Musik lae uft weiter), Rechtsklick
aufs Tray-Icon zum Beenden, Play/Pause/Skip direkt aus dem Menue .
einen Link-Button in deinem Discord-Profil, sobald etwas lä uft.
- **System-Tray** – Fenster schliessen minimiert nur (Musik lä uft weiter), Rechtsklick
aufs Tray-Icon zum Beenden, Play/Pause/Skip direkt aus dem Menü .
- **Eigener Name** – erscheint als "Playtube" im Taskmanager, Fenstertitel, Alt-Tab
und (nach dem Packaging, siehe unten) im Lautstae rkemixer statt als "python".
und (nach dem Packaging, siehe unten) im Lautstä rkemixer statt als "python".
## Installation (Windows)
@@ -22,20 +20,20 @@ Lade auf der [Releases-Seite](https://github.com/fojadrachi/Playtube/releases)
`Playtube-Setup-vX.Y.Z.exe` herunter und starte sie. Der Installer
- installiert Playtube **pro Benutzer ** nach `%LOCALAPPDATA%\Programs\Playtube` (keine
Admin-Rechte noe tig) und legt Startmenue -Eintrag (optional Desktop-Verknue pfung) an,
- ersetzt bei jeder spae teren Ausfue hrung die vorhandene Installation **an Ort und
Admin-Rechte nö tig) und legt Startmenü -Eintrag (optional Desktop-Verknü pfung) an,
- ersetzt bei jeder spä teren Ausfü hrung die vorhandene Installation **an Ort und
Stelle** (feste Installer-ID) - es gibt also immer genau EINE installierte Version, nie
mehrere nebeneinander,
- beendet dafue r ein noch laufendes Playtube selbst und rae umt den alten Programmordner
auf, damit keine Reste alter Versionen ue brig bleiben,
- lae sst Login und Einstellungen (`%APPDATA%\Playtube` ) unangetastet; beim Deinstallieren
ue ber "Apps & Features" wird gefragt, ob sie mitgeloe scht werden sollen.
- beendet dafü r ein noch laufendes Playtube selbst und rä umt den alten Programmordner
auf, damit keine Reste alter Versionen ü brig bleiben,
- lä sst Login und Einstellungen (`%APPDATA%\Playtube` ) unangetastet; beim Deinstallieren
ü ber "Apps & Features" wird gefragt, ob sie mitgelö scht werden sollen.
Ab dann aktualisiert sich Playtube selbst (siehe "Automatische Updates") - die
Setup-Datei wird dafue r nicht erneut von Hand gebraucht. Das ZIP-Paket
Setup-Datei wird dafü r nicht erneut von Hand gebraucht. Das ZIP-Paket
(`Playtube-vX.Y.Z-win64.zip` ) bleibt als portable Variante ohne Installation erhalten;
Playtube bietet einer portablen Kopie beim nae chsten Update automatisch an, in die
regulae re Installation zu wechseln (danach kann der alte Ordner geloe scht werden).
Playtube bietet einer portablen Kopie beim nä chsten Update automatisch an, in die
regulä re Installation zu wechseln (danach kann der alte Ordner gelö scht werden).
## Schnellstart (Entwicklung)
@@ -52,24 +50,24 @@ Login bleibt danach dauerhaft gespeichert.
## Discord Rich Presence einrichten
Die Client-ID ist bereits in `config.json` eingetragen (`discord.client_id` ). Falls du
sie ae ndern oder eine eigene Anwendung nutzen willst:
sie ä ndern oder eine eigene Anwendung nutzen willst:
1. Auf https://discord.com/developers/applications eine neue Application anlegen.
2. Die **Application ID ** in `config.json` unter `discord.client_id` eintragen.
3. Optional, fue r eigene Icons: unter * Rich Presence → Art Assets * zwei Bilder mit den
exakten Schlue sseln `youtube_logo` und `music_logo` hochladen (Playtube nutzt genau
3. Optional, fü r eigene Icons: unter * Rich Presence → Art Assets * zwei Bilder mit den
exakten Schlü sseln `youtube_logo` und `music_logo` hochladen (Playtube nutzt genau
diese Keys automatisch). Ohne hochgeladene Assets funktioniert die Presence trotzdem,
nur ohne Bild.
4. 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 lae uft) anpassen.
Updates) und `show_idle_presence` (Status anzeigen, wenn gerade nichts lä uft) anpassen.
## App als eigenstae ndige Playtube.exe packen
## App als eigenstä ndige Playtube.exe packen
Fue r die volle Taskmanager-/Audiomixer-Markierung wird die App als eigene .exe gebaut
Fü r 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 ae ndern):
nur eine kompilierte .exe mit eigenem Namen und eigener Versionsinfo kann das ä ndern):
``` powershell
. venv \ Scripts \ pip install pyinstaller
@@ -80,61 +78,61 @@ Ergebnis liegt danach unter `dist\Playtube\Playtube.exe`. Ist
[Inno Setup 6 ](https://jrsoftware.org/isinfo.php ) installiert
(`winget install --id JRSoftware.InnoSetup -e` ), baut das Skript daraus ausserdem den
Installer `dist\installer\Playtube-Setup-vX.Y.Z.exe` (Skript:
[packaging/playtube.iss ](packaging/playtube.iss ); mit `-SkipInstaller` ue berspringbar).
[packaging/playtube.iss ](packaging/playtube.iss ); mit `-SkipInstaller` ü berspringbar).
Eine portable, nicht per Setup installierte `.exe` legt beim ersten Start automatisch eine
Verknue pfung im Windows-Startmenue an - eine per Setup installierte Kopie hat den
Verknü pfung im Windows-Startmenü an - eine per Setup installierte Kopie hat den
Eintrag bereits vom Installer.
Das Build-Skript benennt
zusae tzlich den QtWebEngine-Hilfsprozess (der den eigentlichen Ton ausgibt) zu
zusä tzlich den QtWebEngine-Hilfsprozess (der den eigentlichen Ton ausgibt) zu
`PlaytubeHelper.exe` um, damit er im Taskmanager nicht als `QtWebEngineProcess`
auftaucht. Fue r eine vollstae ndige Umbenennung inkl. Icon/Versionsinfo dieses
Hilfsprozesses (relevant fue r den Lautstae rkemixer) zusae tzlich
auftaucht. Fü r eine vollstä ndige Umbenennung inkl. Icon/Versionsinfo dieses
Hilfsprozesses (relevant fü r den Lautstä rkemixer) zusä tzlich
[rcedit ](https://github.com/electron/rcedit/releases ) als `packaging\rcedit.exe`
ablegen - das Skript nutzt es automatisch, wenn vorhanden. Ohne rcedit funktioniert
alles genauso, nur zeigt der Lautstae rkemixer fue r den Ton-Unterprozess je nach
alles genauso, nur zeigt der Lautstä rkemixer fü r den Ton-Unterprozess je nach
Windows-Version eventuell weiterhin "QtWebEngineProcess" statt "Playtube" (rein
kosmetisch - Namensgebung von Chromium-Hilfsprozessen ist ein bekanntes,
Windows-versionsabhae ngiges Verhalten, das selbst grosse Electron-Apps nur mit rcedit
o.ae . umgehen).
Windows-versionsabhä ngiges Verhalten, das selbst grosse Electron-Apps nur mit rcedit
o.ä . umgehen).
## Automatische Updates
Playtube prue ft beim Start und danach alle `updates.check_interval_hours` Stunden
Playtube prü ft beim Start und danach alle `updates.check_interval_hours` Stunden
(Standard 6, im **Einstellungen-Tab ** oder in `config.json` einstellbar) die
[GitHub Releases ](https://github.com/fojadrachi/Playtube/releases ) des Projekts. Im
Einstellungen-Tab gibt es zusae tzlich einen "Jetzt nach Updates suchen"-Button mit
Status-Anzeige und Fortschrittsbalken fue r den Download. Gibt es eine neuere Version,
Einstellungen-Tab gibt es zusä tzlich einen "Jetzt nach Updates suchen"-Button mit
Status-Anzeige und Fortschrittsbalken fü r den Download. Gibt es eine neuere Version,
fragt ein Dialog, ob sie installiert werden soll:
- **Windows, per Setup installiert** (siehe "Installation"): lae dt bevorzugt das kleine
- **Windows, per Setup installiert** (siehe "Installation"): lä dt bevorzugt das kleine
**Patch-Paket ** herunter (nur die `Playtube.exe` mit unserem Anwendungscode, ca. 2-3 MB)
und ue berschreibt damit die Datei im Installationsordner - der riesige PySide6/
und ü berschreibt damit die Datei im Installationsordner - der riesige PySide6/
QtWebEngine-Laufzeitordner (`_internal/` ) bleibt unangetastet, da er sich zwischen
normalen Patch-Releases nicht ae ndert. Die PySide6-Version steht im Dateinamen des
normalen Patch-Releases nicht ä ndert. Die PySide6-Version steht im Dateinamen des
Patches (`...-pyside6.11.2-patch.play` ); weicht sie von der installierten Laufzeit ab,
ist ein reines .exe-Patch nicht mehr passend und Playtube nimmt stattdessen den
**Setup-Installer ** , der alles (auch die Laufzeit) an Ort und Stelle erneuert und
Playtube danach wieder startet. Der Versionseintrag in "Apps & Features" wird nach
einem Patch ebenfalls nachgezogen.
- **Windows, portable Kopie** (aus dem ZIP entpackt, z.B. in Downloads): lae dt den
**Setup-Installer ** und fue hrt ihn still aus. Playtube liegt danach in der regulae ren
Installation - Startmenue -Eintrag und Dateizuordnung zeigen dorthin, die alte portable
Kopie ist nicht mehr noe tig (und kann geloe scht werden). So entstehen nicht lae nger
versionierte Ordner nebeneinander. Gibt es (bei ae lteren Releases) keinen Installer,
wird wie frue her das volle ZIP ue ber den vorhandenen Ordner kopiert.
- **Windows, portable Kopie** (aus dem ZIP entpackt, z.B. in Downloads): lä dt den
**Setup-Installer ** und fü hrt ihn still aus. Playtube liegt danach in der regulä ren
Installation - Startmenü -Eintrag und Dateizuordnung zeigen dorthin, die alte portable
Kopie ist nicht mehr nö tig (und kann gelö scht werden). So entstehen nicht lä nger
versionierte Ordner nebeneinander. Gibt es (bei ä lteren Releases) keinen Installer,
wird wie frü her das volle ZIP ü ber den vorhandenen Ordner kopiert.
- **Linux** (`Playtube` -Binary): Patch-Paket (nur das Binary) bzw. volles `.tar.gz` .
Die App startet sich in allen Fae llen danach selbst neu.
- **Entwicklungsmodus** (`python main.py` ): fue hrt `git pull` + `pip install -r
Die App startet sich in allen Fä llen danach selbst neu.
- **Entwicklungsmodus** (`python main.py` ): fü hrt `git pull` + `pip install -r
requirements.txt` aus und startet den Python-Prozess neu.
Auto-Update lae sst sich im Einstellungen-Tab oder in ` config.json` unter
Auto-Update lä sst sich im Einstellungen-Tab oder in ` config.json` unter
` updates.enabled` deaktivieren.
Nach einem erkannten Update wird beim nae chsten Start automatisch der QtWebEngine-
HTTP-Cache geleert (` webprofile/cache`) - alte Cache-Eintrae ge koe nnen sonst nicht mehr
zum neuen Code passen (frue here Ursache fue r fehlende Icons). Der Login bleibt davon
unberue hrt, da Cookies/LocalStorage in einem komplett getrennten Ordner
Nach einem erkannten Update wird beim nä chsten Start automatisch der QtWebEngine-
HTTP-Cache geleert (` webprofile/cache`) - alte Cache-Einträ ge kö nnen sonst nicht mehr
zum neuen Code passen (frü here Ursache fü r fehlende Icons). Der Login bleibt davon
unberü hrt, da Cookies/LocalStorage in einem komplett getrennten Ordner
(` webprofile/storage`) liegen.
### Patch-Dateien manuell installieren (` .play`)
@@ -143,11 +141,11 @@ Windows-Patch-Pakete tragen die eigene Dateiendung `.play` statt `.zip` (technis
weiterhin ein ganz normales ZIP-Archiv). Playtube registriert ` .play` beim ersten Start
automatisch als Windows-Dateizuordnung - eine manuell heruntergeladene
` Playtube-vX.Y.Z-win64-patch.play` (z.B. von der
[Releases-Seite](https://github.com/fojadrachi/Playtube/releases)) lae sst sich also
[Releases-Seite](https://github.com/fojadrachi/Playtube/releases)) lä sst sich also
einfach per Doppelklick installieren, ohne dass Playtube selbst etwas herunterladen
muss.
### Eine neue Version veroe ffentlichen
### Eine neue Version verö ffentlichen
` ``powershell
powershell -ExecutionPolicy Bypass -File packaging\release.ps1 -Version 1.1.0
@@ -155,13 +153,13 @@ 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
loe st automatisch die GitHub-Actions-Pipeline
lö st automatisch die GitHub-Actions-Pipeline
([.github/workflows/release.yml](.github/workflows/release.yml)) aus, die **sowohl
eine Windows- als auch eine Linux-Version baut** und beide als Assets an einem GitHub
Release veroe ffentlicht - Fortschritt unter
Release verö ffentlicht - Fortschritt unter
https://github.com/fojadrachi/Playtube/actions.
Fue r Windows entstehen dabei drei Dateien: ` Playtube-Setup-vX.Y.Z.exe` (Installer, fue r
Fü r Windows entstehen dabei drei Dateien: ` Playtube-Setup-vX.Y.Z.exe` (Installer, fü r
Neueinsteiger und volle Updates), ` Playtube-vX.Y.Z-win64.zip` (portabel) und das kleine
` ...-pyside<Version>-patch.play` (schnelles Update). Der Installer bekommt seine
Versionsnummer aus ` playtube/__init__.py` (das ` release.ps1` vor dem Tag setzt).
@@ -171,11 +169,11 @@ neue Version danach automatisch angeboten.
## Native Linux-Version
Playtube lae uft genauso unter Linux (gleicher Code, gleiches PySide6/QtWebEngine) und
Playtube lä uft 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):
**Fertiges Release installieren** (richtet Startmenü -Eintrag + Icon ein):
` ``sh
tar -xzf Playtube-vX.Y.Z-linux-x86_64.tar.gz
@@ -183,7 +181,7 @@ cd Playtube
sh install-linux.sh
` ``
Danach ist Playtube ue ber das Anwendungsmenue oder den Befehl ` playtube` startbar.
Danach ist Playtube ü ber das Anwendungsmenü oder den Befehl ` playtube` startbar.
**Aus dem Quellcode starten:**
@@ -193,31 +191,31 @@ python3 -m venv .venv
.venv/bin/python main.py
` ``
QtWebEngine benoe tigt unter Linux ein paar System-Bibliotheken (auf Debian/Ubuntu):
QtWebEngine benö tigt 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](.github/workflows/release.yml)).
## Hinweise
- **"Dieser Browser ist unter Umstae nden nicht sicher" beim Google-Login:** Playtube
- **"Dieser Browser ist unter Umstä nden 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 nae chsten Prozessstart), notfalls einmal den
starten (die Header greifen erst ab dem nä chsten Prozessstart), notfalls einmal den
Profilordner ` %APPDATA%\Playtube\webprofile` (bzw. ` PlaytubeDev` im
Entwicklungsmodus) loe schen und neu anmelden.
- **Auf YouTube/YouTube Music fehlen alle Icons (Play/Pause, Suche, Menue ...):** Fast
Entwicklungsmodus) lö schen und neu anmelden.
- **Auf YouTube/YouTube Music fehlen alle Icons (Play/Pause, Suche, Menü ...):** Fast
sicher laufen zwei Playtube-Prozesse gleichzeitig auf demselben Browser-Profil - die
zweite Instanz rendert dann keine Icons mehr. Passiert leicht, weil das Schliessen des
Fensters Playtube nur in den Tray minimiert: eine ae ltere Version lae uft unsichtbar
weiter, wae hrend eine neu heruntergeladene zusae tzlich gestartet wird. Abhilfe: alle
Playtube-Instanzen ue ber das Tray-Icon (Rechtsklick -> Beenden) bzw. im Taskmanager
Fensters Playtube nur in den Tray minimiert: eine ä ltere Version lä uft unsichtbar
weiter, wä hrend eine neu heruntergeladene zusä tzlich gestartet wird. Abhilfe: alle
Playtube-Instanzen ü ber das Tray-Icon (Rechtsklick -> Beenden) bzw. im Taskmanager
beenden und nur EINE neu starten. Ab der Version mit
[playtube/single_instance.py](playtube/single_instance.py) verhindert Playtube den
Doppelstart selbst (ein zweiter Start holt das laufende Fenster nach vorn); eine
ae ltere Instanz ohne diesen Schutz wird dabei nicht erkannt und muss einmalig manuell
ä ltere Instanz ohne diesen Schutz wird dabei nicht erkannt und muss einmalig manuell
beendet werden.
- 4K/Premium-Videoqualitae t kann eingeschrae nkt sein, da die Open-Source-Variante von
QtWebEngine kein Widevine-DRM mitbringt (Standard-Qualitae ten funktionieren normal).
- 4K/Premium-Videoqualitä t kann eingeschrä nkt sein, da die Open-Source-Variante von
QtWebEngine kein Widevine-DRM mitbringt (Standard-Qualitä ten funktionieren normal).
- Icon/Branding-Bilder liegen unter ` assets/` und wurden mit ` tools/generate_icon.py`
erzeugt (Pillow) - bei Bedarf einfach eigenes ` icon.ico`/` icon.png` dort ersetzen.