Première version stable — toutes les fonctionnalités prévues sont implémentées et les bugs connus de la bêta sont corrigés.
Corrections
Fermeture de l'application
MPV restait actif en arrière-plan après fermeture — corrigé via kill_all_mpv() et signal close-request GTK (merci tycooon)
Le processus pOpcOrn lui-même ne se terminait pas — corrigé avec self.quit() + Gio.ApplicationFlags
Plusieurs instances de MPV pouvaient s'accumuler — le socket IPC est maintenant ciblé précisément
Communication IPC avec MPV
Le socket IPC utilisait /tmp (privé dans le sandbox Flatpak) — déplacé vers ~/.var/app/io.mpv.Mpv/ accessible par les deux sandboxes
Broken pipe lors du chargement d'un fichier traité comme une erreur — corrigé, c'est un comportement normal de MPV
La fenêtre WebKit ne revenait pas après fin naturelle d'une vidéo — corrigé via un événement _playback_ended déclenché par le tracking IPC
Historique
Le titre affiché était "YouTube" au lieu du titre de la vidéo — remplacé par une récupération asynchrone via yt-dlp
yt-dlp dans le sandbox Flatpak utilisait un mauvais wrapper — remplacé par le binaire standalone officiel
Reprise de lecture
Les URLs YouTube contiennent des paramètres de tracking (pp=, si=) qui changeaient à chaque session — normalisées via urllib.parse pour ne conserver que v= et list=
La position n'était pas appliquée au relancement via IPC — corrigé avec un seek absolute après le premier time-pos valide
Stabilité
Instance unique : plusieurs lancements simultanés pouvaient créer plusieurs fenêtres — corrigé avec Gio.ApplicationFlags.DEFAULT_FLAGS
Nouvelles fonctionnalités
Mode éco WebKit : WebGL et WebAudio désactivés, Shorts redirigés vers MPV — accessible dans les réglages ⚙
Installation native : Makefile + wrapper-native.sh pour une installation sans Flatpak
Détection automatique Flatpak/natif dans updater.py — plus besoin de patch pour les builds natifs (merci Christophe !)
README bilingue français / anglais
Améliorations
La fenêtre WebKit se cache uniquement quand MPV joue réellement — supprime le gap visuel noir entre les deux fenêtres
Détection de fin de lecture accélérée (polling 1s au lieu de 5s) — la fenêtre WebKit revient en ~2s
Socket IPC pré-chauffé utilisé systématiquement — délai de lancement réduit
Navigation
Interface YouTube complète via WebKitGTK — recherche, recommandations, chaînes, Shorts, tout fonctionne comme dans un navigateur classique.
Lecture vidéo
La lecture est déléguée à MPV avec décodage matériel automatique (VAAPI/VDPAU). MPV étant un lecteur natif, les publicités YouTube ne sont pas lues — effet de bord bienvenu, non garanti selon les évolutions de YouTube.
Qualité cible configurable : 480p / 720p / 1080p / 1440p / 2160p
Mode fenêtré ou plein écran, taille ajustable
Retour automatique à l'interface YouTube après la lecture
Historique et reprise
Fonctionne quelle que soit la page YouTube d'origine (page d'accueil, recherche, chaîne...)
Confidentialité
Aucune télémétrie, aucun serveur tiers. Tout reste local : cookies, historique, positions de reprise.
SponsorBlock : Saut automatique des segments sponsorisés dans les vidéos (désactivé par défaut, activable dans les réglages ⚙).
# Mise à jour et v0.1.0
Posté par bbs . En réponse au message [v0.1.0] BBS pOpcOrn 🍿 – Client YouTube léger (GTK4 + MPV). Évalué à 1 (+1/-1).
Première version stable — toutes les fonctionnalités prévues sont implémentées et les bugs connus de la bêta sont corrigés.
Corrections
Fermeture de l'application
MPV restait actif en arrière-plan après fermeture — corrigé via kill_all_mpv() et signal close-request GTK (merci tycooon)
Le processus pOpcOrn lui-même ne se terminait pas — corrigé avec self.quit() + Gio.ApplicationFlags
Plusieurs instances de MPV pouvaient s'accumuler — le socket IPC est maintenant ciblé précisément
Communication IPC avec MPV
Le socket IPC utilisait /tmp (privé dans le sandbox Flatpak) — déplacé vers ~/.var/app/io.mpv.Mpv/ accessible par les deux sandboxes
Broken pipe lors du chargement d'un fichier traité comme une erreur — corrigé, c'est un comportement normal de MPV
La fenêtre WebKit ne revenait pas après fin naturelle d'une vidéo — corrigé via un événement _playback_ended déclenché par le tracking IPC
Historique
Le titre affiché était "YouTube" au lieu du titre de la vidéo — remplacé par une récupération asynchrone via yt-dlp
yt-dlp dans le sandbox Flatpak utilisait un mauvais wrapper — remplacé par le binaire standalone officiel
Reprise de lecture
Les URLs YouTube contiennent des paramètres de tracking (pp=, si=) qui changeaient à chaque session — normalisées via urllib.parse pour ne conserver que v= et list=
La position n'était pas appliquée au relancement via IPC — corrigé avec un seek absolute après le premier time-pos valide
Stabilité
Instance unique : plusieurs lancements simultanés pouvaient créer plusieurs fenêtres — corrigé avec Gio.ApplicationFlags.DEFAULT_FLAGS
Nouvelles fonctionnalités
Mode éco WebKit : WebGL et WebAudio désactivés, Shorts redirigés vers MPV — accessible dans les réglages ⚙
Installation native : Makefile + wrapper-native.sh pour une installation sans Flatpak
Détection automatique Flatpak/natif dans updater.py — plus besoin de patch pour les builds natifs (merci Christophe !)
README bilingue français / anglais
Améliorations
La fenêtre WebKit se cache uniquement quand MPV joue réellement — supprime le gap visuel noir entre les deux fenêtres
Détection de fin de lecture accélérée (polling 1s au lieu de 5s) — la fenêtre WebKit revient en ~2s
Socket IPC pré-chauffé utilisé systématiquement — délai de lancement réduit
Navigation
Interface YouTube complète via WebKitGTK — recherche, recommandations, chaînes, Shorts, tout fonctionne comme dans un navigateur classique.
Lecture vidéo
La lecture est déléguée à MPV avec décodage matériel automatique (VAAPI/VDPAU). MPV étant un lecteur natif, les publicités YouTube ne sont pas lues — effet de bord bienvenu, non garanti selon les évolutions de YouTube.
Qualité cible configurable : 480p / 720p / 1080p / 1440p / 2160p
Mode fenêtré ou plein écran, taille ajustable
Retour automatique à l'interface YouTube après la lecture
Historique et reprise
Fonctionne quelle que soit la page YouTube d'origine (page d'accueil, recherche, chaîne...)
Confidentialité
Aucune télémétrie, aucun serveur tiers. Tout reste local : cookies, historique, positions de reprise.
SponsorBlock : Saut automatique des segments sponsorisés dans les vidéos (désactivé par défaut, activable dans les réglages ⚙).