1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • Phosphene は、ユーザーが持つビデオファイルを macOS のデスクトップおよびロック画面の壁紙として再生する メニューバーアプリ + 壁紙拡張
  • システムの標準壁紙セレクタに統合されており、追加したビデオは System Settings → Wallpaper で Apple 内蔵の Aerials と一緒に表示される
  • Apple の非公開 WallpaperExtensionKit の上に構築されており、Apple Aerials と同じ方式で out-of-process 再生、アプリ終了後の維持、ロック画面・アイドル・スリープのライフサイクル連携を提供する
  • MP4、MOV、AVFoundation が読み込めるファイルを取り込め、複数ディスプレイや Space ごとの壁紙選択は macOS が保存する
  • ループ境界で PTS/DTS にオフセットを加えてフレーム単位でつなぎ合わせる方式により、flush や途切れのない gapless looping を実現する
  • PlaybackPolicy は、開閉状態、バッテリー残量、バッテリー/AC 電源、Game Mode、表示モード、ユーザーによる一時停止、遮蔽状態などを組み合わせて、full / reduced / minimal / paused のいずれかで再生動作を決定する
  • すべてのディスプレイがウィンドウで完全に覆われるとレンダリングを停止し、デスクトップが再び見えるまで再生を一時停止する
  • オプションで低解像度・低 fps の adaptive variants を事前生成でき、レンダラーがループ境界ごとに現在のポリシーを満たす最も低コストなバリアントへ切り替える
  • Only on Lock Screen 設定では、ロック・ロック解除時に cubic curve で壁紙が自然に現れたり消えたりし、Apple Aerials の挙動に合わせている
  • アプリ側は SwiftUI のメニューバーアプリで、ビデオライブラリ、ビデオごとのメタデータ、HEVC 最適化、環境設定、ライブラリ変更の Darwin notification を担当する
  • 拡張側はシステムの WallpaperAgent 内で実行され、実行時に WallpaperExtensionKit.framework をロードし、AVSampleBufferDisplayLayer でリモート CAContext にフレームをレンダリングする
  • AVPlayerLayer はリモート CAContext 内で静かに失敗するため、VideoRendererAVAssetReaderAVSampleBufferDisplayLayer を直接駆動して単調増加するタイムラインを維持する
  • WallpaperSnapshotXPC の swizzle と Mirror ベースの XPC パースに依存しているため、Apple が非公開の型やフィールド名を変更すると、スナップショット・リクエスト処理側が壊れる可能性がある
  • 要件は macOS Tahoe 26.0+、Apple Silicon、Xcode 17+ で、arm64-apple-macos26.0 を対象に Swift 6 strict concurrency が有効化されている
  • ライセンスは MIT で、無保証で自由に利用できると明記されている

1件のコメント

 
GN⁺ 3 시간 전
Hacker Newsのコメント
  • とてもすっきりしている。最初は「動画スクリーンセーバーはダウンロードできるのに、なぜフレームを抜き出すんだ?」と混乱したが、コメントを見て、自分の動画をデスクトップとロック画面に使えるのだと理解した
    要点を隠さず、何をどうできるのかがすぐ分かるタイトルのほうがずっと良い

  • Tahoeがかなり酷評されているのはある程度わかるが、動画壁紙と透明効果はWindows Vistaっぽくて面白いし、郷愁を誘う
    さあVistaの滝の壁紙を設定して、本当に2007年気分を味わう時だ

    • Windows Vistaの「郷愁」だなんて、自分がかなり長く生きてきた気分になる
    • Tahoeの一番大きな問題は、ロック画面のアニメーションがずっとカクついたり止まったりすることだ。M3 Proを使っていて、4K動画をフレーム落ちなしで見られるなら、単なる動画壁紙も問題なく動くべきだし、できないなら存在すべきではないと思う
    • 世界中でVistaへの郷愁を共有している人は数十人くらいしかいなさそう
    • https://windowswallpaper.miraheze.org/wiki/Windows_Vista
      どの滝のことを言っているのか気になる。Vistaにこんなに壁紙があったことにも驚いたし、覚えているのはデフォルトの緑のグラデーションっぽいものと、昔しばらく使っていた竹林くらいだ
    • 1998年ごろ、xscreensaverのハックをXのルートウィンドウ背景、つまりデスクトップ上に表示して使っていた時代が懐かしい
  • これは本当にありがたい。スクリーンセーバー集を作っていたのだが、LegacyScreenSaverがあまりにも雑だった
    誰かがAppleの非公開壁紙フレームワークを解明してくれればと思っていたが、本当にやってのけた

    • 私の見る限り、これはWallpaperAgent向けのもので、com.apple.wallpaperの拡張をWallpaperAgentがデスクトップ上で実行する構造だ
      スクリーンセーバーについては別の投稿を見ればよく、そちらにはこれを回避する非公開スクリーンセーバーAPIのサンプルを載せてある。Appleは自社の「Aerials」で両方を使っていて、スクリーンセーバープレーヤーとデスクトッププレーヤーの間で位置を共有する同期システムを持っている
    • LegacyScreenSaverはメモリを本当に大量に消費する
  • Appleで最高の動画壁紙はMacintoshだと思う。どう動いているのか気になる

    • 私も気になる。この壁紙の一部を見て、単なる動画ファイルの寄せ集めではなく手続き的に生成されているように感じて、確かめるために見直した
      日付と時刻がシステムの日付・時刻と秒単位まで一致する箇所がいくつもある
  • うわ、これは本当にすごい。非公開スクリーンセーバーの.appexフレームワークをリバースエンジニアリングしてAerial 4で動かすことには成功していて、興味のある人向けに先週v4と一緒にサンプルプロジェクトとドキュメントを公開した: https://github.com/AerialScreensaver/AppexSaverMinimal
    Wallpaper appexも同じように試したが、リバースエンジニアリング自体は簡単そうだった一方でWallpaperAgentが読み込みを拒否したので、今のところは壁紙の上でアイコンの下に自分のウィンドウと動画プレーヤーを置く古典的なトリックを使っている。何を見落としたのか調べるつもりだ

  • 本当によくできている。最近似たような沼にはまって、Aerialsのカタログをリバースエンジニアリングし、Appleがこれをどうつないでいるのかを調べていたので、また別のオープンソースプロジェクトがこれをやっているのを見るのはうれしい
    一番気に入っていて、こちらのツールでは再現できなかった細部は、ログイン画面とライブデスクトップの間でアニメーションが途切れず続く仕組みだ。私たちは同じアイデアをクロスプラットフォームで実装したphontoを作った: https://github.com/museslabs/phonto. リバースエンジニアリングの過程全体を記事にしようと思っていたところなので、これが書き始めるきっかけになるかもしれない

    • 仕組みとしては、動画再生がロック画面とデスクトップの間で共有され、Appleのフレームワークが表示面を透過的に切り替えている
  • Windows 98でHTMLページを壁紙にできたことを思い出した。そのHTMLには動画も埋め込めた

    • X11では、好きなどんなプログラムでもルートウィンドウに設定できる
      それはそうとして、Windows 98のActive Desktopは、もともと不安定なOSの中でも最も不安定な部分だった。新しいシステムを入れたら真っ先に無効にすべきもので、変な見方をしただけでも相変わらず落ちるのだが、少なくとも面白半分で落ちることはなくなった
  • よくできているが、READMEにデモ動画があるといい

  • アプリには今やダウンロードリンク付きのランディングページができていて、ほかのプロジェクトも見られる。最大のプロジェクトはRefraxブラウザで、そのほかにも小さなユーティリティアプリがたくさんある
    https://kagerou.glass/phosphene/
    https://kagerou.glass

    • どうやってそんなに早くページを作ったのか気になる
      デザインに何が役立ったのかも気になる
  • 本当にすばらしい。昔持っていた動画でカスタム動画壁紙を設定してみたかったことを思い出した
    これを見るまでは、そもそも標準では対応していないことすら知らなかった