1 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Phosphene est une app de barre de menus + extension de fond d’écran qui lit les fichiers vidéo de l’utilisateur comme fonds d’écran du bureau et de l’écran verrouillé sur macOS
  • Intégré au sélecteur de fonds d’écran natif du système, les vidéos ajoutées apparaissent dans System Settings → Wallpaper aux côtés des Aerials intégrés d’Apple
  • Construit sur le WallpaperExtensionKit privé d’Apple, il fournit une lecture out-of-process, une persistance après la fermeture de l’app, ainsi qu’une intégration avec le cycle de vie de l’écran verrouillé, de l’inactivité et de la mise en veille, comme les Apple Aerials
  • Il peut importer des fichiers MP4, MOV et tout fichier lisible par AVFoundation, et macOS enregistre le choix du fond d’écran pour plusieurs écrans et pour chaque Space
  • Il implémente un gapless looping sans flush ni saccade en décalant les PTS/DTS à la frontière de la boucle pour enchaîner les images au niveau frame par frame
  • PlaybackPolicy combine l’état thermique, le niveau de batterie, l’alimentation batterie/secteur, le Game Mode, le mode d’affichage, la pause utilisateur, l’état de masquage, etc., pour déterminer le comportement de lecture parmi full / reduced / minimal / paused
  • Quand tous les écrans sont entièrement recouverts par des fenêtres, le rendu s’arrête et la lecture se met en pause jusqu’à ce que le bureau redevienne visible
  • Il est possible de créer à l’avance, de façon optionnelle, des adaptive variants à plus basse résolution et plus faible fps, et le moteur de rendu remplace à chaque frontière de boucle par la variante la moins coûteuse satisfaisant la politique courante
  • Avec le réglage Only on Lock Screen, le fond d’écran apparaît et disparaît naturellement au verrouillage/déverrouillage avec une courbe cubique, en reproduisant le comportement des Apple Aerials
  • Côté app, une app de barre de menus en SwiftUI gère la vidéothèque, les métadonnées par vidéo, l’optimisation HEVC, les préférences et les notifications Darwin de modification de la bibliothèque
  • Côté extension, elle s’exécute dans le WallpaperAgent du système, charge WallpaperExtensionKit.framework à l’exécution et affiche les frames dans un CAContext distant via AVSampleBufferDisplayLayer
  • Comme AVPlayerLayer échoue silencieusement dans un CAContext distant, VideoRenderer pilote directement AVAssetReader et AVSampleBufferDisplayLayer pour maintenir une timeline strictement croissante
  • Le projet dépend du swizzle WallpaperSnapshotXPC et d’une analyse XPC basée sur Mirror, donc si Apple modifie des types privés ou des noms de champs, la gestion des snapshots et des requêtes peut se casser
  • Les prérequis sont macOS Tahoe 26.0+, Apple Silicon, Xcode 17+, avec une cible arm64-apple-macos26.0 et Swift 6 strict concurrency activé
  • La licence est MIT, avec mention d’une utilisation libre sans garantie

1 commentaires

 
GN⁺ 3 시간 전
Commentaires sur Hacker News
  • Très propre. Au début, j’étais un peu perdu·e : « on peut télécharger des économiseurs d’écran vidéo, alors pourquoi aller extraire des frames ? », puis en lisant les commentaires j’ai compris qu’on pouvait utiliser ses propres vidéos sur le bureau et l’écran verrouillé
    Ce serait bien mieux avec un titre qui ne cache pas l’idée principale et montre tout de suite ce qu’on peut faire et comment

  • Je comprends en partie pourquoi Tahoe se fait pas mal critiquer, mais les fonds d’écran vidéo et les effets de transparence ont un petit côté Windows Vista, ce qui est amusant et nostalgique
    Il est temps de mettre le fond d’écran de la cascade de Vista pour se sentir vraiment en 2007

    • De la « nostalgie » pour Windows Vista… ça me donne l’impression d’avoir pris un coup de vieux
    • Le plus gros problème de Tahoe, c’est que l’animation de l’écran verrouillé saccade et se fige en permanence. J’utilise un M3 Pro : si je peux lire des vidéos 4K sans perte d’images, un simple fond d’écran vidéo devrait tourner sans problème ; et si ce n’est pas le cas, ça ne devrait pas exister
    • Il doit y avoir quelques dizaines de personnes dans le monde à partager cette nostalgie de Vista
    • https://windowswallpaper.miraheze.org/wiki/Windows_Vista
      Je me demande de quelle cascade il s’agit. Je suis aussi surpris qu’il y ait eu autant de fonds d’écran dans Vista ; ceux dont je me souviens, c’est surtout le dégradé vert par défaut et une forêt de bambous que j’ai utilisée un temps
    • L’époque vers 1998 où on faisait tourner un hack xscreensaver comme fond de fenêtre racine X, donc directement sur le bureau, me manque
  • Merci vraiment pour ça. J’étais en train de constituer une collection d’économiseurs d’écran, mais LegacyScreenSaver était bien trop bancal
    J’espérais que quelqu’un finirait par comprendre le framework privé de fonds d’écran d’Apple, et c’est effectivement arrivé

    • De ce que je vois, ça vise WallpaperAgent, et l’extension de com.apple.wallpaper est exécutée sur le bureau par WallpaperAgent
      Pour les économiseurs d’écran, voir l’autre article ; j’y ai mis un exemple d’API privée d’économiseur d’écran qui contourne ça. Apple utilise les deux dans ses propres « Aerials » et dispose d’un système de synchronisation qui partage la position entre le lecteur de l’économiseur d’écran et celui du bureau
    • LegacyScreenSaver consomme énormément de mémoire
  • Je pense que le meilleur fond d’écran vidéo d’Apple, c’est Macintosh. Je me demande comment il fonctionne

    • Moi aussi. En voyant certaines parties de ce fond d’écran, j’ai eu l’impression que ce n’était pas juste un ensemble de fichiers vidéo, mais quelque chose de généré de façon procédurale, alors je suis allé vérifier
      À plusieurs endroits, la date et l’heure correspondent à la date et à l’heure du système, à la seconde près
  • Wow, c’est vraiment génial. J’ai réussi à rétroconcevoir le framework privé d’économiseur d’écran .appex pour le faire fonctionner dans Aerial 4, et j’ai publié la semaine dernière avec la v4 un projet d’exemple et la documentation pour ceux que ça intéresse : https://github.com/AerialScreensaver/AppexSaverMinimal
    J’ai aussi essayé la même approche avec les appex de fond d’écran ; le reverse engineering en lui-même semblait assez simple, mais WallpaperAgent refusait de les charger, donc pour l’instant j’utilise encore l’astuce classique qui consiste à afficher ma fenêtre et mon lecteur vidéo au-dessus du fond d’écran et sous les icônes. Je vais regarder ce que j’ai raté

  • Très beau travail. Je suis récemment tombé dans un terrier similaire en rétroconcevant le catalogue Aerials et en essayant de comprendre comment Apple relie tout ça ; c’est sympa de voir un autre projet open source faire la même chose
    Le détail que je préfère, et que nous n’avons pas réussi à reproduire dans notre outil, c’est la manière dont l’animation se poursuit sans interruption entre la fenêtre de connexion et le bureau live. Nous avons créé phonto, une implémentation cross-platform de la même idée : https://github.com/museslabs/phonto. J’étais justement sur le point d’écrire un billet sur tout le processus de reverse engineering, et ça pourrait être le déclic pour m’y mettre

    • Le fonctionnement repose sur le fait que la lecture vidéo est partagée entre l’écran verrouillé et le bureau, et que le framework d’Apple bascule en transparence la surface affichée
  • Ça me rappelle qu’on pouvait utiliser une page HTML comme fond d’écran sur Windows 98. Et cette page HTML pouvait même contenir de la vidéo

    • Sous X11, on peut définir à peu près n’importe quel programme comme fenêtre racine
      Cela dit, Active Desktop sur Windows 98 était la partie la plus instable d’un système d’exploitation déjà instable. Sur une nouvelle installation, c’était la première chose à désactiver ; le système plantait toujours si on le regardait de travers, mais au moins il ne plantait plus juste pour le fun
  • C’est bien réalisé, mais j’aimerais qu’il y ait une vidéo de démonstration dans le README

  • L’app a maintenant une landing page avec un lien de téléchargement, et on peut aussi voir les autres projets. Le plus gros projet est le navigateur Refrax, et il y a aussi pas mal de petites apps utilitaires
    https://kagerou.glass/phosphene/
    https://kagerou.glass

    • Je me demande comment la page a pu être faite aussi vite
      Je suis aussi curieux de savoir ce qui a aidé pour le design
  • Vraiment très cool. Ça me rappelle que j’avais envie d’essayer de mettre en place un fond d’écran vidéo personnalisé avec une vieille vidéo que j’avais
    Avant de voir ça, je ne savais même pas que ce n’était pas pris en charge nativement