<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <id>https://protoflix.club/changements/</id>
  <title>ProtoFlix : journal des changements</title>
  <link rel="self" type="application/atom+xml" href="https://protoflix.club/changements/atom.xml"/>
  <link rel="alternate" type="text/html" href="https://protoflix.club/changements/"/>
  <updated>2026-11-10T12:00:00Z</updated>
  <author><name>ProtoFlix</name></author>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-archives-rar</id>
    <title>Ajouté : archives RAR</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-archives-rar"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• Module « Archives RAR » (downloads.archives.more, ADR 0035, §6), à installer depuis le dépôt, expérimental. Avec le module Archives, un téléchargement qui arrive en RAR (versions 1.5 à 5) est ouvert, et seuls ses fichiers vidéo et audio vont dans la bibliothèque, vérifiés comme ceux d'un ZIP ; un album en RAR se range Artiste/Album comme un ZIP (ADR 0036, §3 bis).
• Le module n'écrit rien : sans réseau, sans base ni clé, il lit l'archive par le serveur et lui rend les fichiers, que le serveur écrit lui-même sous les bornes du ZIP (taille, nombre de fichiers, bombes, place disque). Une seule dépendance, rardecode, dans le module seulement.
• Refusés : RAR chiffrés, RAR en plusieurs parties (.part2.rar, .r00). 7z n'est pas pris en charge (trop de dépendances pour un format rare).</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-lire-sur-la-tv-et-la-piloter-depuis-le-telephone</id>
    <title>Ajouté : lire sur la TV et la piloter depuis le téléphone</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-lire-sur-la-tv-et-la-piloter-depuis-le-telephone"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• « Lire sur la TV » (ADR 0044) : depuis la fiche d'un film ou d'un épisode, ou depuis le lecteur du téléphone, on choisit une TV où ProtoFlix tourne et la lecture y démarre. Depuis la fiche, la TV reprend où son compte s'était arrêté ; depuis le lecteur, là où en était le téléphone, dont le lecteur se ferme. Essayé sur la TV de référence et le Pixel 9 Pro : Interstellar démarre sur la TV en quelques secondes, au bon endroit.
• Le téléphone comme télécommande : ce que lit la TV, en direct (titre, position, lecture ou pause) ; lecture et pause, ±10/30 s, la barre de progression, épisode suivant et précédent, pistes audio et sous-titres, volume de la TV, et en secours les flèches, OK, Retour et Accueil (dans ProtoFlix). Une barre en bas de l'application suit la TV pilotée. Sur la TV, un bandeau discret dit qui la pilote.
• Tout passe par le serveur, aussi hors de la maison : la TV s'annonce, les commandes lui arrivent par le flux d'événements, à elle seule (/api/v1/remote/…, migration 00044). Le compte connecté sur la TV la pilote sans rien demander ; un autre compte du serveur doit être accepté une fois sur la TV (« Accepter / Refuser »), et peut être retiré dans ses réglages.
• La TV reste joignable ProtoFlix fermé : un service démarre avec elle. Pour qu'un envoi ouvre ProtoFlix depuis l'écran d'accueil d'Android, la TV doit l'autoriser à « afficher par-dessus les autres applications » (Réglages &gt; Compte de ProtoFlix) ; sans cela, le téléphone dit d'ouvrir ProtoFlix d'abord. Depuis l'économiseur de ProtoFlix, l'envoi l'ouvre sans autorisation. Pas de Google Cast.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-economiseur-d-ecran-de-la-tv-partie-serveur</id>
    <title>Ajouté : économiseur d'écran de la TV, partie serveur</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-economiseur-d-ecran-de-la-tv-partie-serveur"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• Module « Économiseur d'écran » (screensaver, ADR 0043), éteint de base. Il rend pour chaque compte la scène que la TV dessine (GET /api/v1/screensaver/scene?client=tv) : jusqu'à 60 images de fond des films et séries que la personne peut voir, limite d'âge comprise, mélangées et gardées dans le même ordre une heure ; les réglages de l'horloge et de la veille de nuit ; et des bulles. Module éteint : 404 module_disabled, la TV garde l'économiseur du système.
• Bulles : « Ce soir sur ProtoFlix » (le prochain épisode à regarder et les derniers ajouts) ; la météo d'Open-Meteo, sans compte : la ville est située une fois, puis seules des coordonnées arrondies au dixième de degré partent, et la réponse est gardée 15 minutes ; Home Assistant : les entités choisies, avec une étiquette si on veut, mises en forme par le serveur (« 1,2 kW », « À la maison »), et une bulle de tâches par liste todo.*. Home Assistant n'est lu que pendant qu'une TV demande la scène, au plus toutes les 30 s ; son jeton est un secret qui ne quitte pas le serveur. Le module peut joindre l'adresse de Home Assistant même locale, et elle seule. Un connecteur en panne retire sa bulle, sans casser la scène.
• Photos privées en fond, en option : celles de la personne connectée à la TV, seules ou en alternance avec les films. Désactivées de base.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-economiseur-d-ecran-de-la-tv-partie-tv</id>
    <title>Ajouté : économiseur d'écran de la TV, partie TV</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-economiseur-d-ecran-de-la-tv-partie-tv"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• Économiseur d'écran sur la TV (ADR 0043). Les images de fond des films et des séries défilent, très assombries, désaturées et vignettées, avec un fondu lent. Au premier plan : une horloge à aiguilles, l'heure en grand et la date, et des bulles d'information. Pour ne pas marquer l'écran, l'ensemble se décale chaque minute et l'horloge change de côté chaque heure. La nuit, il est plus sombre encore.
• Lancement : dans l'application après quelques minutes sans touche, jamais pendant un film ou une chaîne ; et comme économiseur du système Android TV, à choisir dans les réglages de la TV. Un aperçu est dans Réglages &gt; Affichage.
• Musique : elle laisse maintenant l'écran se mettre en veille. L'économiseur montre ce qui joue.
• La scène vient du module screensaver du serveur (GET /api/v1/screensaver/scene, contrat dans api/screensaver/). Sans ce module, l'aperçu et l'économiseur du système prennent les fonds de la bibliothèque, et l'application ne se met pas en veille d'elle-même.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-tv-moins-de-conversions-son-a-l-heure</id>
    <title>Amélioré : TV : moins de conversions, son à l'heure</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-tv-moins-de-conversions-son-a-l-heure"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• Sous-titres image dessinés par la TV. Un sous-titre PGS, DVB ou DVD choisi dans un film envoyé tel quel reste dans le fichier : la TV le décode et le dessine à sa place sur l'image, au lieu que le serveur convertisse tout le film pour l'incruster. Forrest Gump en 4K HDR se lit maintenant sans conversion avec ses sous-titres du Blu-ray. Seule une application qui le déclare (capabilities.subtitles) en profite ; une plus ancienne garde l'incrustation.
• Décodeurs DTS et TrueHD de la TV réparés. La version publiée de l'application ne chargeait pas les décodeurs de FFmpeg (une fonction appelée par le code natif était retirée à la construction) : chaque film en DTS était converti par le serveur. Interstellar se lit maintenant tel quel.
• Son et image à l'heure. Le lecteur de la TV passe en mode tunnel quand la TV le permet : c'est elle qui cale l'image sur le son qu'elle joue vraiment. Mesuré en filmant la TV (flash et bip), le son s'est rapproché de son image de 53 à 64 ms. Un réglage « Synchro du son » dans le panneau des pistes, par pas de 25 ms et gardé par la TV, compense en plus une barre de son lente.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-10-le-domaine-du-projet-protoflix-club</id>
    <title>Modifié : le domaine du projet : protoflix.club</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-10-le-domaine-du-projet-protoflix-club"/>
    <updated>2026-11-10T12:00:00Z</updated>
    <content type="text">• Le dépôt officiel des modules est maintenant https://modules.protoflix.club. Les fichiers signés n'ont pas changé ; l'ancienne adresse modules.klarvi.fr sert encore le même dépôt le temps que les serveurs installés prennent cette version.
• Le relais de notifications est en ligne à https://push.protoflix.club. Un serveur l'utilise avec PROTOFLIX_PUSH_RELAY=https://push.protoflix.club : ses téléphones reçoivent alors les notifications tout de suite, par Firebase.
• Le service de soumission des modules prendra l'adresse soumettre.modules.protoflix.club.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-icones-de-l-app-tv</id>
    <title>Corrigé : icônes de l'app TV</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-icones-de-l-app-tv"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Quatre icônes de l'app TV étaient mal tracées : Effacer, Cercle coché et Image perdaient une partie de leur dessin, hors du cadre, et Zap était écrite dans une notation que tous les lecteurs ne lisent pas. « trash-2 » montre maintenant une corbeille, comme sur le site, et non plus la touche Effacer.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-conversion-plus-rapide-tons-hdr-sur-l-igpu-intel</id>
    <title>Amélioré : conversion plus rapide, tons HDR sur l'iGPU Intel</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-conversion-plus-rapide-tons-hdr-sur-l-igpu-intel"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Tons HDR sur l'iGPU Intel. Avec un iGPU Intel, les tons HDR10 se calculent maintenant sur la carte, quand le film décrit son écran de mastering. Sur un UHD 750, 30 s de 4K HDR se convertissent en environ 4,5 s au lieu de 14 à 17 s, avec presque pas de processeur. Le démarrage passe à 0,5 s et les sauts à moins d'une seconde, deux fois mieux que Jellyfin sur la même machine. La luminosité est corrigée pour égaler celle de la table du processeur.
• Sur le processeur. x264 a des réglages plus légers (17 % plus rapide, différence de qualité négligeable), l'image est réduite par zscale au lieu de scale, et la table de tons travaille en virgule flottante. Une conversion 4K vers 1080p est environ 25 % plus rapide qu'avant.
• Les mesures face à Jellyfin et Emby sont dans docs/testing/benchmarks/ovh-protoflix-jellyfin-emby.md. En HDR sans carte graphique, ProtoFlix reste plus lent que Jellyfin.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-migration-depuis-emby</id>
    <title>Ajouté : migration depuis Emby</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-migration-depuis-emby"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• La migration accepte maintenant Emby comme source, en plus de Jellyfin. Elle a été essayée contre un vrai Emby 4.10.2 : films retrouvés par leur chemin, et pour chaque compte, films vus, positions et favoris importés. Un second import ne change rien. L'interface web ne propose encore que Jellyfin ; l'API prend &quot;source&quot;: &quot;emby&quot;.
• La même série d'essais a validé la migration depuis Jellyfin 12.4 : chaque compte qui a son équivalent dans ProtoFlix récupère ce qu'il a vu, ses positions et ses favoris. Un compte sans équivalent est laissé de côté.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-ffmpeg-5-1-suffit-debian-12</id>
    <title>Modifié : FFmpeg 5.1 suffit : Debian 12</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-ffmpeg-5-1-suffit-debian-12"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• ProtoFlix fonctionne maintenant avec FFmpeg 5.1, celui de Debian 12, au lieu de 6.1 minimum. Le paquet accepte ce FFmpeg, et la chaîne VAAPI y marche avec le FFmpeg et le pilote Intel de la distribution.
• Avant FFmpeg 6.0, le moteur ne sait pas lire le fichier que le serveur lui ouvre : il le rouvre par /dev/fd/3, et seuls les formats de fichiers multimédias lui sont permis. Une liste de lecture piégée ne peut donc pas lui faire lire d'autres fichiers. Sous Landlock, le lanceur ne lui permet de relire que ce fichier-là.
• Avant FFmpeg 6.1, une conversion ne prend pas d'avance au démarrage : elle travaille aussi vite qu'elle peut, et elle est mise en pause quand elle a trop d'avance sur le lecteur.
• Toute la suite de tests du moteur passe sous FFmpeg 5.1 et 7.1. Le paquet n'a pas encore été installé sur un Debian 12 vierge, et Ubuntu 22.04 (FFmpeg 4.4) reste refusé.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-couleurs-saturees-en-hdr-sous-ffmpeg-7-1</id>
    <title>Corrigé : couleurs saturées en HDR sous FFmpeg 7.1</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-couleurs-saturees-en-hdr-sous-ffmpeg-7-1"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Sous FFmpeg 7.1, celui de Debian 13, la conversion HDR sans table de tons (HLG, pic du film inconnu, aperçus) rendait certaines couleurs très saturées n'importe comment : un bleu vif sortait presque noir. Ces couleurs sont maintenant ramenées au bord de la gamme avant la dernière étape, comme le faisaient déjà les versions plus récentes. La chaîne ralentit d'environ 15 %.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-acceleration-vaapi-graphismes-intel-et-amd</id>
    <title>Ajouté : accélération VAAPI : graphismes Intel et AMD</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-acceleration-vaapi-graphismes-intel-et-amd"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Le serveur se sert maintenant de la partie graphique intégrée aux processeurs Intel et AMD, la plus courante sur un serveur domestique, par VAAPI. Elle décode le H.264 et le HEVC (10 bits compris), réduit l'image et l'encode en H.264, presque sans processeur. Les tons HDR restent sur le processeur, comme avec Nvidia, mais la réduction se fait sur la carte avant.
• Au démarrage, chaque carte trouvée dans /dev/dri est essayée sur quelques images. Si un essai échoue, la conversion reste sur le processeur. Il faut le pilote VAAPI de la carte : intel-media-va-driver-non-free pour Intel, mesa-va-drivers pour AMD. L'utilisateur du service doit être dans le groupe render, ce que fait déjà le paquet.
• Mesuré sur un Intel UHD 750 : six conversions 4K vers 1080p tiennent ensemble le temps réel. La limite est fixée à quatre (docs/testing/benchmarks/vaapi-intel-uhd750.md). Les Radeon n'ont pas encore été essayées sur du vrai matériel.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-docteur-de-lecture-et-accueil-des-proches</id>
    <title>Ajouté : Docteur de lecture et Accueil des proches</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-docteur-de-lecture-et-accueil-des-proches"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Deux nouveaux modules intégrés, éteints par défaut, dans Modules &gt; Système (ADR 0040).
• Docteur de lecture : pendant une lecture, Infos puis « Pourquoi ça saccade ? » dit si la lecture est fluide, combien de fois et combien de temps elle a attendu, et d’où vient le problème : réseau trop lent, serveur qui ne convertit pas assez vite, appareil qui peine, accélération matérielle qui a lâché. Chaque constat a son remède, et les raisons du plan de lecture s’y ajoutent. Les lectures en cours et l’historique de l’administration ont aussi leur diagnostic. Allumé, le module garde un résumé des mesures de chaque lecture (débit reçu, réserve, vitesse de conversion, attentes pendant que la conversion était en retard), au plus une écriture par minute.
• Accueil des proches : une invitation se partage avec un QR code et un message prêt à envoyer, sur l’adresse publique du serveur et avec un mot d’accueil, tous deux réglés dans le module. L’invité voit ce mot, puis arrive sur /bienvenue : il y mesure sa connexion (« la Full HD passe sans souci… ») et suit un guide pour sa TV Android, son téléphone, son ordinateur ou un autre appareil. Le débit mesuré apparaît sous son nom dans la page des comptes.
• Serveur : GET /api/v1/playback/sessions/{id}/diagnosis, GET /api/v1/welcome, POST /api/v1/me/welcome/speed, GET /api/v1/admin/welcome/checks ; la consultation d’une invitation ajoute welcome. Migration 00043 (playback_health, welcome_checks).
• La TV et le téléphone n’ont encore ni l’un ni l’autre.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-09-application-mobile-musique</id>
    <title>Ajouté : application mobile : musique</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-09-application-mobile-musique"/>
    <updated>2026-11-09T12:00:00Z</updated>
    <content type="text">• Un onglet « Musique » dans l’application du téléphone, quand le serveur en a : écoutés récemment, listes du compte, albums, artistes. La musique continue écran éteint, avec ses commandes dans la notification, sur l’écran verrouillé et aux boutons du casque ; une barre au-dessus des onglets dit ce qui joue. La recherche trouve aussi les artistes, albums et titres. Construit et vérifié côté serveur, pas encore essayé sur un téléphone.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-mise-a-jour-depuis-le-serveur</id>
    <title>Ajouté : application mobile : mise à jour depuis le serveur</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-mise-a-jour-depuis-le-serveur"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• L’application du téléphone se met à jour depuis son serveur, comme celle de la TV : le paquet du serveur la porte, un point sur le bouton du compte signale une nouvelle version, « Mettre à jour » la télécharge et Android demande confirmation. Version 0.2.0 de l’application.
• Serveur : GET /api/v1/clients/android-mobile et /apk ; deploy/package/build.sh ajoute l’APK du téléphone avec PROTOFLIX_MOBILE_APK_DIR.
• La version optimisée de l’application se construisait de nouveau mal depuis l’ajout du scanner de codes QR (fragment 1.0 refusé par lint) : corrigé.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-ecrans-des-modules</id>
    <title>Ajouté : application mobile : écrans des modules</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-ecrans-des-modules"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Les modules s’affichent dans l’application du téléphone comme sur la TV et le site : un onglet de la barre du bas, une rangée de l’accueil, une section et un bouton sur la fiche d’un titre. Un module qui ne parle pas des téléphones y montre ce qu’il montre au site ; dans la fiche du module, « Dans les applications » a maintenant une ligne « Téléphones ». Essayé sur le Pixel 9 Pro avec le module de démonstration : compteur, note écrite par formulaire, confirmation avant d’effacer, images du module.
• Serveur : le client mobile des surfaces (ADR 0030).
• Le lecteur du téléphone a un bouton par module qui parle du moment joué, comme le panneau de la TV. Vérifié par l’API, pas encore sur un téléphone.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-pages-d-un-module-apres-une-action</id>
    <title>Corrigé : pages d’un module après une action</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-pages-d-un-module-apres-une-action"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Après une action, une autre page du même module pouvait s’afficher telle qu’avant pendant son délai de relecture : une note gardée depuis la page « Nouvelle note » n’apparaissait pas tout de suite sur la page principale qui s’ouvrait ensuite. Une action vide maintenant le cache de toutes les pages de son module, sur le site, la TV et le téléphone.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-connexion-par-code-qr</id>
    <title>Ajouté : application mobile : connexion par code QR</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-connexion-par-code-qr"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Connecter un téléphone sans taper d’adresse ni de mot de passe : sur le web, compte, « Appareils connectés », « Connecter un téléphone » affiche un code QR ; dans l’application, « Scanner un code QR » le lit, et le téléphone se retrouve connecté à ce serveur avec ce compte. Le code vaut 2 minutes et une seule fois ; le web le renouvelle et dit quel téléphone s’est connecté. Un code expiré ou déjà utilisé est refusé avec un message qui dit d’en afficher un nouveau.
• Serveur : POST /api/v1/me/sign-in-links, GET /api/v1/me/sign-in-links/{id}, POST /api/v1/auth/sign-in-links/redeem ; codes d’erreur sign_in_link_expired et sign_in_link_used.
• Android : le scanner de Google Play services (play-services-code-scanner), sans permission caméra.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-hors-ligne</id>
    <title>Ajouté : application mobile : hors ligne</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-hors-ligne"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Garder un film ou un épisode sur le téléphone pour le regarder sans réseau : « Télécharger » sur sa page, au choix de la qualité d’origine (le fichier tel quel si le téléphone le lit) ou d’une conversion 1080p, 720p ou 480p, avec la taille prévue. Le téléchargement passe par le gestionnaire d’Android et reprend après une coupure. Les copies sont dans une rangée « Sur l’appareil » de l’accueil ; sans réseau, l’accueil ne montre qu’elles.
• Ce qui est regardé sans réseau rejoint le serveur au retour du réseau : position, épisode vu, historique.
• Serveur : /api/v1/me/offline (demander, suivre, télécharger avec Range, retirer une copie ; envoyer la progression) et la tâche offline.convert. Nouveau droit « Garder des titres sur son téléphone » dans les comptes (web), désactivé par défaut sauf pour les administrateurs. Migration 42.
• La barre d’onglets de l’application défile quand les onglets ne tiennent plus.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-les-ecrans-adr-0037</id>
    <title>Ajouté : modules décrits : les écrans, ADR 0037</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-les-ecrans-adr-0037"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Format 2 du graphe : une mise en page par écran, faite de widgets (les blocs de l’ADR 0030) dont les propriétés sont écrites ou liées aux valeurs que donne la logique, et qui se répètent sur une liste. Carte « Donner les valeurs de l’écran ». Les graphes au format 1 ne changent pas.
• Vérifications et moteur : la mise en page est vérifiée comme le graphe, et remplie par le même code que les cartes de blocs. La fiche du relecteur décrit chaque écran.
• Éditeur : onglets Écrans et Logique, comme l’éditeur de widgets d’Unreal. Concepteur avec palette, hiérarchie, écran rendu pour le site ou la TV, détails ; liaisons, répétition, actions ; un clic mène à la logique d’un écran ou crée le point de départ d’une action.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-l-editeur-de-modules-ergonomie</id>
    <title>Changé : l’éditeur de modules, ergonomie</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-l-editeur-de-modules-ergonomie"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• En-tête : une action principale (« Essayer », puis « Installer »), « Publier » pour la soumission et l’export, une pastille d’état qui mène à la carte fautive.
• Canevas : grille, zoom, plan du graphe, une forme de carte par rôle, une couleur par famille, des broches typées aux noms français, un rangement qui fait courir les liens de gauche à droite.
• Câbles tirés à la souris ; lâchés dans le vide, ils ouvrent la recherche des cartes qui les acceptent, et la carte choisie arrive reliée. Recherche au clic droit, au double-clic ou avec « / », avec la fiche de la carte à côté.
• Menus au clic droit sur une carte ou une broche ; Ctrl+D, Ctrl+C, Ctrl+V, F, Maj+F, et la liste des raccourcis (?).
• Info-bulles sur les broches ; la fiche complète d’une carte quand on reste dessus : ce qu’elle fait, quand, comment, ses broches, un exemple, le piège. Les 99 cartes, en français et en anglais.
• Panneau de droite réglable en largeur ; l’inspecteur aux couleurs de la carte ; le module en un coup d’œil quand aucune carte n’est choisie ; les commentaires sur les cartes.
• Page des brouillons : chaque brouillon avec le dessin de son graphe, et « Partir d’un exemple » (GET /admin/blueprints/examples, POST /admin/blueprints/drafts/{id}/start), rangé à l’ouverture.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-soumission-adr-0038-lot-7-et-adr-0039</id>
    <title>Ajouté : modules décrits : soumission, ADR 0038 lot 7 et ADR 0039</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-soumission-adr-0038-lot-7-et-adr-0039"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Vérification automatique d'un module décrit pour le catalogue communautaire, la même partout : refus, points à regarder, informations ; rien n'est contacté sauf le DNS sur demande ; chaque écran est essayé hors ligne et sa page passe la vérification du serveur.
• Fiche du relecteur en Markdown : ce que le module contacte et pourquoi, ce qu'il montre et garde, sa logique carte par carte, l'essai de ses écrans.
• Éditeur : « Vérifier pour soumettre », avec l'export du module et de sa fiche. pfrepo review pour le relecteur.
• Service de soumission pfsubmit (ADR 0039), pas déployé. Les auteurs s'inscrivent par un lien envoyé par courriel, envoient leur module, suivent la relecture et échangent avec le relecteur ; un module refusé par la vérification automatique ne va pas plus loin.
• pfrepo community pour le relecteur : la file, la fiche, le téléchargement vérifié, les décisions et les messages.
• Brouillons des conditions des auteurs et de la politique de confidentialité, dans docs/legal/, à faire relire avant l'ouverture.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-ecrans-et-reglages-adr-0038-lot-6</id>
    <title>Ajouté : modules décrits : écrans et réglages, ADR 0038 lot 6</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-ecrans-et-reglages-adr-0038-lot-6"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Concepteur de réglages : aide, valeur par défaut, bornes, choix, ordre ; avec « Ce que verra l'administrateur », dessiné par les composants de la fiche d'un module.
• Images d'un brouillon (PNG, JPEG ou WebP vérifiés sur leurs octets, 512 Kio, 32 au plus), proposées à la carte « Image du module » et mises dans le paquet. Routes /admin/blueprints/drafts/{id}/assets.
• Aperçu des écrans, web et TV, dans les deux langues : la réponse d'un essai passe par la vérification du serveur (surfaces.Preview) puis par les blocs du site ; les actions s'y essaient.
• La TV n'a pas de rendu dans le site : son aperçu en donne seulement les proportions et la taille du texte.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-l-editeur-adr-0038-lot-5</id>
    <title>Ajouté : modules décrits : l'éditeur, ADR 0038 lot 5</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-l-editeur-adr-0038-lot-5"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Modules → Créer un module : un éditeur de modules sans code dans l'administration, en SVG et React, sans dépendance. Brouillons gardés par le serveur ; canevas de cartes reliées, palette avec recherche, liens typés, fonctions et variables, annulation, rangement, clavier et lecteurs d'écran.
• Vérification en direct : les broches de chaque carte, la raison d'un refus et la carte en cause, et ce que le module demandera ; les capacités du manifeste suivent le graphe.
• Essai pas à pas d'un événement : chaque carte avec ses valeurs sur le canevas, le journal, les requêtes, la réponse ; les secrets ne sont jamais montrés.
• Installation sur ce serveur comme un fichier non signé, avec l'avertissement d'un module non officiel ; export .pfmod.
• Routes /api/v1/admin/blueprints : catalogue des cartes, vérification, essai, brouillons, paquet, préparation de l'installation.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-reseau-adr-0038-lot-4</id>
    <title>Ajouté : modules décrits : réseau, ADR 0038 lot 4</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-reseau-adr-0038-lot-4"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Cartes Requête HTTP, Lire du XML et Lire un flux RSS ou Atom. L'hôte d'une requête est écrit dans son adresse (https, un nom public, port 443) ou lu dans le réglage que l'administrateur saisit ; les valeurs des trous sont échappées. Un secret ne va que dans un en-tête ou le corps.
• Module d'exemple x.rss_accueil : un flux RSS dans une rangée de l'accueil et sur une page, fait sans code.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-installation-adr-0038-lot-3</id>
    <title>Ajouté : modules décrits : installation, ADR 0038 lot 3</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-installation-adr-0038-lot-3"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Un manifeste peut porter &quot;engine&quot;: { &quot;id&quot;: &quot;engine.blueprint&quot;, &quot;format&quot;: 1 } au lieu d'un programme. Le serveur lit alors graph.json, recalcule les capacités du graphe et refuse un manifeste qui en déclare d'autres, au chargement, à l'installation et dans pfrepo.
• Le moteur engine.blueprint s'installe depuis le dépôt officiel comme un module (&quot;kind&quot;: &quot;engine&quot;), sans processus propre ; un module décrit le trouve à chaque démarrage, et ses fichiers sont vérifiés avant le lancement.
• Les archives de modules peuvent porter graph.json et les images assets/ ; seul bin/ est exécutable.
• deploy/package/dev-modules.sh pose aussi un module décrit et le moteur dans le dossier de développement.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-moteur-adr-0038-lot-2</id>
    <title>Ajouté : modules décrits : moteur, ADR 0038 lot 2</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-moteur-adr-0038-lot-2"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Moteur officiel des modules décrits, engine.blueprint (server/modules/blueprint) : il se présente comme moteur, reçoit du serveur le graphe du module, le vérifie de nouveau et sert module.configure, module.check, surface.render et surface.action, avec ses minuteries.
• Interpréteur à budget (internal/blueprint/engine) : 10 000 cartes par événement, 1,8 s pour une surface, 32 Mio de valeurs, 20 requêtes, 8 appels imbriqués. Un dépassement arrête le fil sans rien écrire et n'est pas rattrapé par « Essayer ». Les valeurs gardées, par personne ou pour le module, sont écrites à la fin d'une exécution réussie, avec un quota.
• Le protocole des modules gagne engine dans module.hello et described dans sa réponse.
• Le graphe exemple-surfaces refait exemple.surfaces, réponse pour réponse.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modules-decrits-format-adr-0038-lot-1</id>
    <title>Ajouté : modules décrits : format, ADR 0038 lot 1</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modules-decrits-format-adr-0038-lot-1"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• ADR 0038 : une quatrième famille de modules, faits sans code. Un graphe de cartes (graph.json, format 1) exécuté par un moteur officiel confiné ; capacités déduites du graphe ; budgets ; canaux de distribution et principe de la soumission.
• api/blueprints/ : schéma du graphe, catalogue des 99 cartes de la version 1 (cards.json), exemples, et 25 graphes hostiles refusés avec leur raison (boucles, récursion, secret dans une adresse ou au journal, hôte caché, adresse IP…).
• internal/blueprint : lecture, vérification et analyse d'un graphe, partagées par le serveur et le moteur.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-notifications-lot-2-le-relais</id>
    <title>Ajouté : notifications, lot 2 : le relais</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-notifications-lot-2-le-relais"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• relay/ : le relais de notifications du projet (ADR 0034), un programme Go sans dépendance. Un téléphone y échange son jeton FCM contre une poignée ; un serveur y envoie des notifications chiffrées pour le téléphone et signées par sa clé d'installation ; le relais les passe à FCM sans pouvoir les lire. La première installation qui écrit à une poignée est la seule qui pourra lui écrire. Unité deploy/systemd/protoflix-relay.service, exploitation dans docs/operations/push-relay.md.
• Serveur : PUT et DELETE /api/v1/me/devices/current/push (poignée et clé du téléphone, la clé scellée) ; avec PROTOFLIX_PUSH_RELAY, chaque notification part aussitôt aux téléphones concernés, une par sorte et par téléphone toutes les 10 minutes au plus.
• Essayé de bout en bout sur ce PC : serveur, relais et faux FCM ; le téléphone ouvre ce que le relais n'a pu lire.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-notifications-lot-1</id>
    <title>Ajouté : notifications, lot 1</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-notifications-lot-1"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Serveur : il garde 30 jours ce qu'un compte doit savoir sans regarder (ADR 0034) : alerte du gardien, tâche abandonnée, nouvelle version pour les administrateurs ; fin ou échec de ses téléchargements pour chacun. GET /api/v1/me/notifications. Une sorte et ses paramètres, jamais une phrase ; le même événement n'est jamais dit deux fois. Migration 41 (39 et 40 sont à la branche des téléchargements).
• Application Android : elle demande au serveur ce qui est nouveau toutes les 15 minutes au mieux, sans Google, et l'affiche en notifications système ; un toucher ouvre la page concernée.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-administration</id>
    <title>Ajouté : application mobile : administration</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-administration"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Onglet « Serveur » pour les administrateurs : alertes du gardien et disques, lectures en cours avec leur plan, mises à jour, bibliothèques à analyser, tâches à relancer ou annuler, comptes et invitations (envoyées par la feuille de partage), appareils à déconnecter. Les gestes qui ne se rattrapent pas demandent confirmation.
• Téléchargements depuis le téléphone : la file du serveur, l'ajout d'un lien ou d'un magnet, pause, reprise, retrait ; « Partager » un lien vers ProtoFlix depuis une autre application.
• Serveur : DELETE /api/v1/admin/sessions/{id} arrête la lecture de quelqu'un. Son lecteur reçoit session_stopped et s'arrête au lieu d'ouvrir une nouvelle session ; la TV et le mobile le respectent.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-son-en-avance-apres-un-saut</id>
    <title>Corrigé : son en avance après un saut</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-son-en-avance-apres-un-saut"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Dans Chrome, après un saut ou une reprise en cours d'épisode, le son pouvait partir jusqu'à 10 s en avance sur l'image quand la vidéo était copiée et le son converti (AC-3 en AAC, par exemple). La vidéo copiée repart de l'image clé précédente, le son du point demandé, et FFmpeg mettait cet écart dans une liste d'édition que Chrome ignore. Les morceaux portent maintenant l'écart dans leurs propres horodatages (use_editlist=0). Trouvé par la session web sur une vraie lecture de Lost. Ce premier correctif ne suffisait pas : sans liste d'édition, FFmpeg étirait le premier échantillon de son sur tout l'écart, et Chrome, qui compte les échantillons, jouait encore le son en avance. Le son converti repart désormais de la même image clé que la vidéo (-noaccurate_seek), il n'y a donc plus d'écart du tout. Trouvé par la session TV sur Interstellar (6,5 s d'avance). Restait un petit écart, jusqu'à quelques centièmes de seconde selon l'entrelacement du fichier (60 ms d'avance mesurés sur Interstellar) : le son est maintenant coupé ou complété de silence à l'échantillon près pour partir exactement avec l'image (-copyts, aresample), et le décalage annoncé au client est l'instant de décodage de l'image clé.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-disques-lents-reconnaissance-et-lecture-anticipee</id>
    <title>Ajouté : disques lents : reconnaissance et lecture anticipée</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-disques-lents-reconnaissance-et-lecture-anticipee"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le serveur reconnaît le disque de chaque source : SSD, disque mécanique, USB ou partage réseau. L'API le donne dans disk (ADR 0029).
• Sur un disque lent, ouvrir la fiche d'un film ou d'une série réveille le disque en arrière-plan, pendant qu'on lit le résumé.
• Lecture anticipée sur les disques lents : un seul fil par disque lit par blocs de 16 Mio devant chaque lecture directe et chaque conversion, en priorité disque basse. Le disque fait de longues lectures au lieu de sauter d'un fichier à l'autre. 256 Mio de mémoire au plus en tout, réglable par PROTOFLIX_READAHEAD_MIB (0 l'arrête).
• Pas encore mesuré sur un vrai disque mécanique ou USB : c'est l'étape suivante, avant le tampon sur le SSD.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-lecture</id>
    <title>Ajouté : application mobile : lecture</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-lecture"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Lecture sur Android : reprise où l'on s'était arrêté ou depuis le début, épisodes, paysage plein écran, commandes au toucher (±10 s, double toucher, barre de lecture), son et sous-titres, « À propos de cette lecture » avec le mode et les raisons du serveur, épisode suivant, image dans l'image en quittant l'application.
• Serveur : profil android-mobile@1, les règles du lecteur Media3 de la TV sous un nom à lui.
• apps/core : la logique de lecture commune (Playback) sur une interface de lecteur (MediaPlayer), avec Media3Player et la détection des décodeurs (DeviceCaps, venue de la TV) pour Android. La TV garde pour l'instant son propre contrôleur.
• Essayé sur un Pixel 9 Pro : HEVC 10 bits en Matroska lu tel quel, MPEG-2 converti avec ses raisons ; APK optimisé de 2,3 Mo, démarrage à froid en 243 ms.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-application-mobile-android</id>
    <title>Ajouté : application mobile, Android</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-application-mobile-android"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• apps/mobile (écrans en Compose Multiplatform, pour Android puis iOS) et apps/mobile-android (l'application Android) : choix du serveur, avec les serveurs du réseau trouvés par mDNS ; connexion par mot de passe ou par un code saisi sur la page /appareil du site ; accueil (titre mis en avant, Reprendre, films et séries récents, Ma liste) ; Films et Séries en grilles qui se chargent au défilement ; fiche avec saisons, épisodes et distribution ; recherche au fil de la frappe. Les jetons, la police et les icônes sont ceux du web ; le français fait foi. La lecture n'est pas encore là (étape 4 de docs/mobile/plan.md).
• Essayée sur un Pixel 9 Pro contre un serveur local jetable : APK optimisé de 1,6 Mo, démarrage à froid en 363 ms.
• La recherche des serveurs sur le réseau passe de la TV à core, pour les deux applications.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-code-partage-des-applications</id>
    <title>Modifié : code partagé des applications</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-code-partage-des-applications"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• apps/core : module Kotlin Multiplatform (Android, iOS, et Windows natif pour les tests) qui porte les formes de l'API, son client, les surfaces de modules, le choix des pistes et WebVTT. La TV s'en sert ; l'application mobile s'en servira. Le client d'API ne dépend plus d'OkHttp : chaque plateforme lui donne son transport, et il dit au serveur quel client il est (tv, plus tard mobile).
• TV : rien ne change à l'écran. Mêmes 53 tests (22 passés dans core), plus 6 sur le client d'API ; le profil de référence couvre aussi core.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-applications-natives</id>
    <title>Modifié : applications natives</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-applications-natives"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• android-tv/ devient apps/, un projet Gradle qui accueillera aussi le code commun et l'application mobile (ADR 0033, ADR 0034 pour les notifications). L'application TV y est le module :tv : même APK à l'octet près en taille, mêmes 53 tests. Le paquet prend désormais tv-release.apk (PROTOFLIX_TV_APK_DIR=apps/tv/build/outputs/apk/release).</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-surfaces</id>
    <title>Corrigé : surfaces</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-surfaces"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le direct demande de relire la page quand une ligne part après une action (oublier un téléchargement) : la page gardée était effacée avec le cache, et rien ne permettait plus de voir le changement.
• Le contrat dit que la route des actions demande client (et accepte blocks), comme le serveur l'exige.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-surfaces-blocs-version-2-servis</id>
    <title>Ajouté : surfaces, blocs version 2 servis</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-surfaces-blocs-version-2-servis"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le serveur sert la version 2 des blocs : en-tête, grande carte, onglets, recherche, champ d'une ligne, courbe, et dans les lignes leurs actions, leurs détails et une affiche. Il retire ce qu'un client ne doit pas voir (un bloc réservé au site, ce qu'une app de version 1 ne sait pas dessiner) et vérifie les nouvelles règles : une action destructive pose sa question, l'id d'un élément en direct est unique.
• Le direct : GET /surfaces/{module}/{surface}/live rend l'état des éléments en direct, relu au plus toutes les 2 s pour tous les écrans, et demande de relire la page quand une ligne arrive ou part.
• Un fichier (un .torrent) peut accompagner une action : 2 Mio au plus, corps de 3 Mio ; 30 actions par minute et par compte.
• Une œuvre nommée par un module s'affiche avec son affiche ou son image de fond, si le compte peut la voir.
• Les surfaces parlent la langue du compte, sinon celle du serveur : la page Téléchargements n'est plus en anglais sur le site.
• La page Téléchargements des surfaces passe en version 2, avec pause, reprise, annulation, relance et « tout mettre en pause » ; elle est désactivée par défaut partout, le site gardant sa propre page.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-modifie</id>
    <title>Modifié : Modifié</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-modifie"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Les images des modules sont servies sous /api/v1/surface-assets/{module}/{fichier} : l'ancienne adresse se confondait avec le direct d'une surface nommée assets.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-gardien-de-la-bibliotheque-adr-0032</id>
    <title>Ajouté : gardien de la bibliothèque, ADR 0032</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-gardien-de-la-bibliotheque-adr-0032"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le gardien de la bibliothèque, intégré au serveur. Il calcule le SHA-256 de chaque fichier en tâche de fond (guardian.checksum, chaque heure), à 25 Mio/s au plus (PROTOFLIX_GUARDIAN_RATE_MIB, 0 l'arrête), en priorité d'entrées-sorties idle et nice 19 sous Linux, sans chasser du cache ce que l'on regarde. Il se met en pause pendant une lecture, une conversion ou une chaîne TV. Chaque fichier est relu tous les 90 jours (PROTOFLIX_GUARDIAN_VERIFY_DAYS).
• Un fichier dont la taille ou la date change est « remplacé » : nouvelle référence, sans alerte. Même taille, même date et un autre contenu, relu deux fois : « corrompu », alerte grave et ligne WARN au journal. Si Linux montre une écriture (ctime), le fichier est « réécrit », un simple avertissement. Un fichier illisible, ou deux lectures qui diffèrent, déclenchent aussi une alerte.
• La santé des disques, toutes les 10 minutes (guardian.disks), sans droits root. Il relie chaque source et les données du serveur à leur disque par /proc/self/mountinfo, /sys/block et /dev/disk/by-id (partitions, LVM, RAID logiciel). Il surveille la place libre, l'absence, la lecture seule, les erreurs d'entrée-sortie et SMART. Les rapports SMART sont déposés par un minuteur root optionnel (deploy/smart/, PROTOFLIX_SMART_DIR) : le serveur ne lance jamais smartctl.
• Ce qu'on perdrait si un disque mourait : œuvres perdues, œuvres qui perdraient une version, œuvres qui ont une copie ailleurs (même version ou même SHA-256), fichiers hors catalogue. Un volume RAID 1, 5, 6 ou 10 ne fait rien perdre. Le lien entre source et disque reste en base : un disque absent dit encore ce qu'il portait.
• Routes GET /admin/guardian, GET /admin/guardian/disks/{id}/loss, GET /admin/guardian/files, POST /admin/guardian/verify, POST /admin/guardian/files/{id}/accept, POST /admin/guardian/alerts/{id}/acknowledge, et GET /admin/guardian/sources/{id}/sha256sums au format de sha256sum -c. Événement guardian.updated (administrateurs). Migration 00038_guardian.sql.
• Web : page Gestion › Serveur › Gardien de la bibliothèque (/admin/serveur/gardien), ouverte depuis la page Serveur et la recherche de la console. Elle donne l'état en une phrase, les alertes avec ce qu'il faut faire, les sommes de contrôle et les disques. Pas de route ni d'entrée à elle dans le rail : le premier chargement est à 24 octets de son budget.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-migration-depuis-jellyfin-adr-0031</id>
    <title>Ajouté : migration depuis Jellyfin, ADR 0031</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-migration-depuis-jellyfin-adr-0031"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• ADR 0031 : comment ProtoFlix reprend un foyer venu de Jellyfin, Emby ou Plex. Il dit ce qu'on reprend et ce qu'on ne reprend pas, comment on lit chaque source (API ou base hors ligne, formats vérifiés), comment on fait correspondre fichiers et œuvres, comment l'administrateur conduit l'opération, et pourquoi l'outil est intégré au serveur.
• Page /admin/migration « Venir de Jellyfin », ouverte depuis la page Bibliothèques : un aperçu à blanc, puis l'import.
• Ce qu'on reprend : pour chaque utilisateur de Jellyfin rattaché à un compte ProtoFlix, ce qu'il a vu (avec la date, dans l'historique), où il en est et ses favoris, qui vont dans « Ma liste ».
• Ce qu'on ne touche pas : Jellyfin ne reçoit que des requêtes de lecture. Un état plus récent dans ProtoFlix est gardé. Relancer l'import n'écrit rien deux fois.
• Correspondance : par le chemin du fichier, après réécriture des dossiers (proposée d'elle-même quand le nom du dossier est le même), puis par les identifiants TMDB, IMDb ou TVDB, puis par un nom de fichier unique. La page liste ce qui n'a pas trouvé de correspondance.
• API POST /api/v1/admin/migration/preview et POST /api/v1/admin/migration/import (administrateurs seulement). La clé d'API de Jellyfin vient avec chaque requête : elle n'est jamais conservée. Nouveaux codes d'erreur : source_unauthorized, source_forbidden, source_unreachable, source_unexpected, source_not_supported, migration_running. L'import est inscrit au journal d'audit.
• Pas encore : Emby (lecteur écrit, à essayer sur un vrai serveur), Plex, la création des comptes et des bibliothèques, les listes de lecture, les collections et les métadonnées verrouillées. Essayé seulement contre un faux Jellyfin, pas encore contre celui du Pixel.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-blocs-des-surfaces-version-2-adr-0030</id>
    <title>Ajouté : blocs des surfaces, version 2, ADR 0030</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-blocs-des-surfaces-version-2-adr-0030"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le contrat de la version 2 des blocs, pour des surfaces aussi riches qu'une page faite main : en-tête, grande carte, onglets, recherche, champ d'une ligne (avec envoi de fichier sur le site), courbe ; dans les lignes et les cartes, leurs actions, leurs détails, une affiche ; des blocs réservés à un client ; le direct par GET /surfaces/{module}/{surface}/live. Exemples partagés : downloads-v2.json, search.json, live.json. Pas encore servi.
• App TV : la version 2 des blocs, annoncée par blocks=2.
• En-tête, grande carte, onglets, courbe.
• Recherche : le clavier de la télécommande, les résultats à côté.
• Lignes et cartes : détails, affiche, texte de progression, panneau d'actions.
• Direct : relecture par /live, changements en place.
• Les blocs réservés au site sont écartés.
• Les tests lisent les trois nouveaux exemples. Pas encore essayé sur la TV, faute d'un serveur qui serve la version 2.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-surfaces-comptes-supprimes</id>
    <title>Ajouté : surfaces : comptes supprimés</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-surfaces-comptes-supprimes"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Un compte supprimé est oublié par les modules : son pseudonyme rejoint la liste d'attente de chaque module qui en a, et le module la reçoit par subject.forget, à son démarrage ou dès son prochain appel de surface. Le module de démonstration efface alors les notes de la personne.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-surfaces-des-modules-adr-0030</id>
    <title>Ajouté : surfaces des modules, ADR 0030</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-surfaces-des-modules-adr-0030"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le cœur des surfaces : /surfaces, une surface (avec ETag et refresh_s), ses actions, les images des modules, et /admin/surfaces pour choisir, surface par surface et client par client, ce qui s'affiche et pour qui. Ce qu'un module rend est vérifié contre le vocabulaire avant d'atteindre un client : texte coupé, listes bornées, aucune adresse extérieure ni champ inconnu ; une réponse lente, fausse ou absente devient sa dernière réponse valide, ou un avertissement. Un module ne reçoit qu'un pseudonyme du compte. Événement surface.updated.
• Première surface : la page Téléchargements (les siens, ou tous les comptes pour un administrateur, en cours et 30 jours d'historique). Affichée sur le site, désactivée sur la TV tant que l'administrateur ne l'active pas.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-surfaces-des-modules-externes-adr-0030</id>
    <title>Ajouté : surfaces des modules externes, ADR 0030</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-surfaces-des-modules-externes-adr-0030"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Un module externe peut déclarer des surfaces dans son manifeste : leur emplacement, leurs clients par défaut, leur public, leur fraîcheur, leurs libellés fr/en et leur icône. Le serveur l'interroge par surface.render et surface.action, avec 2 s au plus, 256 Kio pour une page et 64 Kio pour une action.
• Le module ne reçoit jamais le compte : subject est un pseudonyme propre à lui (HMAC avec une clé par module, scellée, effacée par la purge).
• Ses images viennent du dossier assets/ de son paquet, signé avec lui : PNG, JPEG ou WebP vérifiés sur leurs octets, 512 Kio au plus.
• Module de démonstration exemple.surfaces, qui utilise chaque bloc et chaque emplacement, et deploy/package/dev-modules.sh pour le poser dans un dossier de développement.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-contrat-des-surfaces-adr-0030</id>
    <title>Ajouté : contrat des surfaces, ADR 0030</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-contrat-des-surfaces-adr-0030"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Le vocabulaire des blocs que les modules affichent dans la TV et le site : api/surfaces/schema.json (version 1), avec ses exemples partagés par le serveur, le site et la TV (api/surfaces/examples/). Les routes /surfaces, /surfaces/{module}/{surface}, ses actions, et /admin/surfaces sont au contrat, pas encore servies.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-sous-titres-episodes-nettoyage-langues</id>
    <title>Ajouté : sous-titres : épisodes, nettoyage, langues</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-sous-titres-episodes-nettoyage-langues"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• Sur la fiche d'une série, chercher et ajouter des sous-titres pour l'épisode choisi.
• Les sous-titres gardés d'un fichier qui a quitté les bibliothèques sont retirés une fois par jour : fichier disparu de la base, ou supprimé depuis 30 jours.
• Module OpenSubtitles 1.1.1 : ses refus portent leur cause.
• Les refus du service de sous-titres ont leur code : subtitles_quota et subtitles_busy (429, avec Retry-After), subtitles_login (422). Le web les écrit dans la langue du compte. Le protocole des modules gagne reason et retry_after sur une erreur ; un serveur plus ancien garde le texte du module.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-photos-heic</id>
    <title>Ajouté : photos HEIC</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-photos-heic"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• « Ma bibliothèque » lit aussi la date, l'appareil et le lieu des photos HEIC, comme ceux des JPEG.</content>
  </entry>
  <entry>
    <id>https://protoflix.club/changements/#2026-11-08-contrat</id>
    <title>Retiré : contrat</title>
    <link rel="alternate" type="text/html" href="https://protoflix.club/changements/#2026-11-08-contrat"/>
    <updated>2026-11-08T12:00:00Z</updated>
    <content type="text">• GET/PUT /admin/downloads/settings, jamais servies : ces réglages sont ceux du module Téléchargements et du module BitTorrent.</content>
  </entry>
</feed>
