概要
- Phosphene はmacOS Tahoe向けの 動画壁紙エンジン
- メニューバーアプリ+壁紙拡張として 独自動画をデスクトップ/ロック画面に設定 可能
- Apple純正Aerialsと同じフレームワーク を利用し、システム連携・安定動作を実現
- 電源・パフォーマンス状態に応じて自動制御、複数ディスプレイにも対応
- オープンソース(MITライセンス)、Apple Silicon専用
Phosphene:macOS Tahoe向け動画壁紙エンジン
- Phosphene は、 macOS Tahoe(26.0以降) 専用の動画壁紙アプリケーション
- メニューバーアプリ+壁紙拡張(WallpaperExtensionKit)構成
- 自身のMP4/MOV等の動画を壁紙に設定、システム標準の壁紙ピッカーに統合
- Apple純正Aerialsと並列表示、設定画面から簡単選択
- ロック画面・デスクトップ両対応、AppleのAerials同等の動作体験
主な特徴
- 動画ファイルのインポート :MP4/MOV/AVFoundation対応ファイルをライブラリ管理
- シームレスなループ再生 :PTS/DTSオフセットによるフラッシュ・スタッター無しの滑らかループ
- 複数ディスプレイ・Spaceごとの壁紙設定 :macOS標準の永続化機能利用
- 電源・パフォーマンス管理 :サーマル・バッテリー・Game Mode等の状態に応じて再生制御
- ロック画面時の滑らかな遷移 :キュービックカーブによるアニメーション
- ウィンドウ重なり検知で自動一時停止 :全画面隠蔽時は描画停止
- 適応的な解像度/フレームレート切替 :状況に応じて低負荷バリアントへ自動切替
- メニューバーからの操作 :壁紙プレビュー・一時停止・ディスプレイ切替・設定・自動起動
システム要件
- macOS Tahoe(26.0+)
- Wallpaper extension point(macOS 14以降)+Tahoe専用SwiftUI/glassEffect() API利用
- Apple Silicon(arm64-apple-macos26.0)
- Xcode 17+(Swift 6厳格コンカレンシー有効)
ビルド・セットアップ手順
git clone https://github.com/<you>/phosphenecd phospheneopen Phosphene.xcodeproj(Xcodeで開く)- Phospheneスキームを選択しRun
- 開発チームの設定必須(コード署名用)
- 拡張機能はアプリバンドルに埋め込み、起動時にシステムへ登録
使い方
- Phospheneを起動、メニューバーからライブラリ管理で動画追加
- システム設定→壁紙 で、Phospheneの動画が「コレクション」として表示
- 任意の動画を選択、macOSが壁紙設定を実行(Phosphene拡張がフレーム提供)
アーキテクチャ概要
-
Phosphene.app (メニューバーUI)
- ライブラリ管理、動画メタデータ、HEVC最適化、設定、Darwin通知
-
PhospheneExtension.appex (WallpaperAgent内で動作)
- XPCハンドラ、AVSampleBufferDisplayLayerによる描画、電源/サーマル監視、スナップショット生成
-
共有App Groupコンテナ (~/Library/Group Containers/glass.kagerou.phosphene)
-
動画ライブラリ・バリアント、設定plist、スナップショットキャッシュ
-
App側(Phosphene/)
- SwiftUIメニューバーアプリ
- オンディスク動画管理、低解像度バリアント変換(VideoOptimizationService)、設定管理、Darwin通知
-
Extension側(PhospheneExtension/)
- WallpaperAgentプロセス内で動作
- WallpaperExtensionKit.frameworkをdlopenで動的ロード
- リモートCAContextへAVSampleBufferDisplayLayerで直接描画
- XPC経由で壁紙状態管理・スナップショット応答
- PlaybackPolicy :全ての再生制御状態の集約点(サーマル・バッテリー・ユーザ一時停止・ウィンドウ隠蔽等)
-
-
VideoRenderer
- AVPlayerLayer非使用(リモートCAContext非対応のため)
- AVAssetReaderをループごとに手動管理、PTSオフセットで滑らかループ実現
注意点・テクニカルクイック
- WallpaperSnapshotXPCスウィズル
- システムのスナップショットエンコーダが型判定で失敗するため、ランタイムスウィズル必須
- 未対応だとロック画面遷移時にグレー表示
- MirrorベースのXPCパース
- Apple非公開リクエスト型(WallpaperCreationRequestXPC等)はMirrorで動的解析
- フィールド名変更時は即時動作不能リスク
- バリアントは助言的
- 例:1080p@30バリアントも、AC&アイドル時は最高画質優先(PlaybackPolicyが最終決定)
ライセンス・クレジット
- MITライセンス :自由利用・無保証
- @kageroumado 作、元商用→オープンソース化(競合多数のため)
開発者の思い・補足
- Appleの動画壁紙対応をきっかけに 独自動画壁紙実現を目指しリバースエンジニアリング
- WallpaperExtensionKit.framework の挙動を再現するため試行錯誤
- システム標準の壁紙UIに カスタム動画壁紙を完全統合
- 「追加」ボタン実装は不可 だったため、ライブラリ管理は別アプリで対応
- Aerialsと異なりデスクトップでも動画再生継続
- AVSampleBufferDisplayLayerを直接駆動、PTSオフセットによるギャップレスループ、電源・ウィンドウ状況で自動制御
- 無料・高機能な動画壁紙エンジンとして公開