Novis.

Tag Hub : PWA

  • Cinema Viewer

    Cinema Viewer

    Cinema Viewer part d’un problème simple : trouver quelque chose à regarder peut prendre plus de temps que regarder réellement la vidéo. Au lieu de transformer YouTube en un nouveau flux à parcourir, l’application commence par une question : « De quoi as-tu envie ? ».

    Une séance construite à partir d’une intention

    La V8 permet de combiner plusieurs catégories, plusieurs envies et un sujet écrit librement. Une séance peut par exemple mélanger Science & tech, Gaming, l’envie d’apprendre et une bonne histoire, puis préciser un sujet comme les coulisses de la création d’un jeu.

    Le texte libre devient une requête YouTube explicite. Les catégories et les envies génèrent ensuite des variantes visibles. Le système ne prétend pas comprendre intégralement chaque vidéo : il s’appuie sur les métadonnées disponibles, un moteur local et une série de recherches bornées.

    Découvrir sans recharger toujours les mêmes chaînes

    Le moteur distingue trois actions. Mélanger ma réserve change la sélection parmi les vidéos déjà collectées. Explorer YouTube lance une nouvelle collecte pour la séance courante. Surprends-moi prépare une recherche plus variée sans imposer un sujet.

    La collecte limite le nombre de résultats par chaîne et la sélection finale cherche à préserver de la diversité. Les vidéos déjà regardées, refusées ou explicitement marquées comme déjà vues sont écartées. Une option permet aussi de privilégier des chaînes encore inconnues dans l’historique exploitable.

    Lorsque la réserve est épuisée, Cinema Viewer ne réordonne pas artificiellement les mêmes cartes pour donner l’impression d’une nouvelle sélection : l’interface propose de relancer une recherche ou de revoir volontairement les propositions précédentes.

    Un lecteur qui reste dans la même salle

    La V8 abandonne l’ancienne fenêtre vidéo détachée au profit d’un volet interne sur le bord droit. Le lecteur reste dans le même document et conserve la même iframe pendant les changements d’affichage. Le volet peut apparaître au bord de la fenêtre, être épinglé, puis revenir au grand lecteur.

    Les retours sont accessibles à la fois sur la proposition et pendant la lecture : J’aime, Bof, Pas pour moi, Déjà vu et À garder. Un avis ne coupe pas la vidéo en cours.

    Reprise, historique et recherches programmées

    Le serveur local conserve l’historique, les positions de lecture, les avis et les favoris. La reprise peut donc rouvrir une vidéo là où elle avait été quittée. Les dates de publication sont utilisées lorsqu’elles sont réellement disponibles ; la date d’import ne sert pas à fabriquer une fausse nouveauté.

    Des recherches peuvent également être programmées à heures fixes. Elles réutilisent la dernière séance confirmée et passent par l’extension Chrome compagnon lorsque le navigateur et le serveur local sont disponibles.

    Architecture locale

    PWA / interface web
            │
            ▼
    FastAPI — 127.0.0.1:18765
            │
            ├── bibliothèque / historique / préférences
            ├── recommandation locale
            ├── file de tâches
            └── SQLite
                      ▲
                      │ WebSocket + API locale
    Extension Chrome ─┘
            │
            ▼
    YouTube

    Le backend FastAPI accepte les hôtes locaux attendus et contrôle l’origine des appels API. L’extension Chrome possède des permissions pour YouTube ainsi que pour le serveur local sur le port 18765.

    Pas de clé YouTube Data API

    La build analysée n’utilise pas de clé YouTube Data API. Le compagnon Chrome récupère les informations nécessaires depuis les pages YouTube et renvoie ses résultats au serveur local. C’est pratique pour un outil personnel, mais cela crée aussi une dépendance technique : une évolution importante du DOM ou des structures de YouTube peut nécessiter une mise à jour des extracteurs.

    Données et confidentialité

    La bibliothèque, les préférences, l’historique et les positions de lecture sont gérés localement. Cela ne signifie pas que Cinema Viewer fonctionne hors ligne : les recherches, miniatures, métadonnées distantes et la lecture impliquent toujours des communications avec YouTube / Google.

    État des tests de la V8

    La version fournie au Hub a été retestée avant préparation : 98 tests Python passent. Les suites Node fournies totalisent également 28 tests réussis sur les extracteurs, la planification et le collecteur V8.

    Le projet contient en plus un rapport de navigateur avec 15 parcours validés sur le DOM/CSS réel et le backend FastAPI/SQLite, mais dans un environnement où YouTube, les streams, les miniatures et les lots de l’extension sont simulés. Le rapport ne valide donc pas un compte YouTube réel, l’extension Chrome en production ou l’installation PWA native sur macOS.

    Installation

    macOS

    L’archive V8 contient un installateur Installer ou mettre a jour.command. Il prépare l’environnement local et le service. Le dossier extension/ doit ensuite être chargé dans chrome://extensions en mode développeur.

    Linux ou développement

    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    uvicorn server.main:app --host 127.0.0.1 --port 18765

    L’interface devient alors accessible sur http://127.0.0.1:18765/.

    Ce qui reste à généraliser

    Cette V8 est encore une build issue d’un usage personnel. Certaines préférences initiales de chaînes sont codées dans server/preferences.py et doivent être neutralisées ou configurées au premier lancement avant d’en faire une distribution générique.

    Le filtre de contenus indésirables est volontairement décrit dans le code comme un filtre lexical conservateur, et non comme un classifieur de vérité. Il travaille sur les titres et certaines métadonnées et peut donc produire des faux positifs ou des faux négatifs.

    Build note — ne pas simuler la nouveauté

    Une des décisions intéressantes de V8 consiste à séparer la découverte réelle du simple changement d’ordre. Quand il n’y a plus de propositions nouvelles dans la réserve courante, l’application le dit. Cette contrainte paraît minuscule, mais elle change beaucoup la confiance accordée à l’interface : « nouveau » correspond à une nouvelle collecte ou à un résultat réellement inédit, pas à un ancien élément recyclé silencieusement.