DejaVu は、何を残すかをどう決めているのか

画面の記憶の出来は、何を残さないかで決まります。DejaVu が最短2秒ごとに画面を見て、記憶する価値のあるものだけを残すしくみを紹介します。Apple 自身のフレームワークで、Mac の中で。

DejaVu チーム2026年10月19日 公開6 分で読めます

要点

  • ScreenCaptureKit のストリームは1本だけ。スクリーンショットを繰り返し撮ることはしません。単発のキャプチャを繰り返すと macOS がカクつくことが知られているからです。
  • フレームを残すかどうかは、4つの軽いフィルタで決めます。macOS が報告する変更領域、64×36 の明るさのフィンガープリント、アニメーションの検出、ウインドウの切り替えです。
  • 残すフレームは Apple のハードウェア HEVC エンコーダに送られ、1フレームずつ封印されます。テキストは、画面が変化した部分だけを、隔離されたヘルパープロセスで Vision が読み取ります。

Rewind はおよそ2秒ごとにフレームを残していて、元ユーザーの方々は、それがちょうどいいリズムだったと教えてくれました。一瞬だけ表示された伝票番号を逃さないほどには頻繁で、軽さを保てるほどにはまばら。難しいのは、2つのフレームのあいだに起きるすべてのことです。点滅するカーソル、時を刻む時計、画面の隅で再生されている動画。単純な作りの記憶なら、そのすべてを残し、すべてを読み取り、何の意味もないものでディスクを埋めてしまうでしょう。

DejaVu がどう判断しているのかを、順を追って説明します。

1,000枚のスクリーンショットではなく、1本のストリーム

DejaVu は ScreenCaptureKit のストリームを1本だけ開き、macOS から最短2秒ごとにフレームを受け取ります。単発のスクリーンショットを繰り返し撮ることはしません。オープンソースのプロジェクトでは、キャプチャを繰り返すと、特に複数のディスプレイで、macOS のインターフェイスが数秒間固まることがあると報告されています。そして、長く続く1本のストリームだからこそ、システムが「何が変わったか」を教えてくれるのです。

Mac がスリープしたとき、ロックされたとき、画面がオフになったときは、ストリームはきれいに止まり、あなたが戻ってから数秒後に再開します。少し待つのは、システムが目覚めた直後にリクエストが集中するのを避けるためです。

4つのフィルタを、軽いものから順に

届いたフレームは、どれも4つのチェックを通ります。どのチェックも、それによって節約できる処理より軽く、ほとんどのフレームは最初の2つを通過しません。

1. macOS は変化を報告したか?

ScreenCaptureKit は、各フレームにダーティ矩形を付けて届けます。前のフレーム以降に、ウインドウサーバが再描画した領域です。DejaVu は、最後に残したフレーム以降のこれらの領域を合計します。それが画面のごく一部(カーソルの点滅や、メニューバーの時計)しか覆っておらず、ウインドウも切り替わっていなければ、そのフレームはその場で破棄されます。

2. 本当に見た目が変わったか?

再描画されたからといって、変化したとは限りません。元の位置に戻ってくるスピナー、サブピクセルのノイズ、現れては消えるハイライト。macOS はこれらを報告しますが、画像としては同じです。そこで DejaVu は、フレームの輝度プレーンから直接 64 × 36 の明るさのサムネールを読み取り(約37,000バイトの読み取りで、色変換は不要)、最後に残したフレームとマスごとに比較します。変化したマスが少なすぎれば、破棄します。

3. 動画やアニメーションか?

動画やアニメーションするバナーのように、同じ領域がフレームごとに変化する場合、すべてのフレームを残すのは高くつくうえに無駄です。DejaVu は、変化している領域が直前の領域とほぼ完全に重なる状態が何度か続いたことを検知すると、その部分はときどきだけ残し、テキストの読み取りはさらにまれにします。

4. アプリやウインドウを切り替えたか?

新しいウインドウは、常に変化として扱います。メールから Safari への切り替えは、まさにあとで戻ってきたくなる瞬間なので、上のフィルタを通さずに残します。

エンコード:ハードウェア HEVC、1フレームずつ封印

残すフレームは、Apple のビデオフレームワークである VideoToolbox に送られ、CPU ではなく Mac 専用のメディアエンジンで HEVC にエンコードされます。設定は画面向けに調整しています。品質は一定、キーフレームは30フレームごと、フレームの並べ替えはなし、セグメントは10分単位です。

エンコードされた各フレームは、ディスクに書き込まれる前に、セグメント固有の鍵を使って AES-GCM で1フレームずつ暗号化されます。一時的であっても、暗号化されていない状態で書き込まれることはありません。そして各フレームが独立しているので、直前の数分間もすぐに見ることができます。

テキスト:画面が変化した部分だけを読む

テキストの読み取りは、画面の記憶が行う処理の中で最も負荷の高いものです。私たちのプロトタイプの測定では、DejaVu の処理コストの中で群を抜いて大きな割合を占めていました。そこで DejaVu は、読み取りをできるだけ少なくしています。

  • 変化した領域だけ。 ステップ1のダーティ矩形をタイルにまとめ、そのタイルだけを、Apple の文字認識フレームワークである Vision に渡します。画面全体を読み取るのは、ウインドウを切り替えたとき、画面の大部分が変化したとき、そして安全策としてときどきだけです。
  • 幅数千ピクセルのタイルで。 4K のフレーム全体を一度に渡すと、Vision はほとんど何も読み取れないことがわかりました。タイルに分ければ、すべて読み取れます。
  • 隔離されたヘルパーで。 文字認識は、独自の状態を持たない、サンドボックス化された別の XPC サービスで動きます。不具合が起きたり、メモリを使いすぎたりしても、DejaVu のほかの部分に影響を与えずに再起動されます。
  • バッテリー駆動時は控えめに。 バッテリー駆動時、Mac が熱くなったとき、低電力モードのときは、テキストの読み取り要求の間隔を空け、変化をまとめて最新の画像から読み取ります。画像は予定どおり残され、そのテキストが数秒遅れて届きます。

直販版の DejaVu は、アクセシビリティを通じてウインドウから直接テキストを読み取ることもできます。正確で、負荷も軽い方法です。パスワードを入力しているあいだは、何も残しません。macOS がセキュアキーボード入力を報告しているあいだ、DejaVu は一時停止します。

検索:1日ごとに、小さなデータベース

テキスト、ウインドウのタイトル、タイムスタンプは、全文検索インデックスである SQLite の FTS5 に入ります。1日ごとに、暗号化されたデータベースがひとつです。私たちのプロトタイプでは、キーワード検索は1日あたり1ミリ秒未満で応答しました。日ごとに分けておくことで、削除も確実になります。1日分を消すと、その鍵も一緒に破棄されるからです。

私たちがしないこと

  • 音声は、一切なし。 ストリームは音声なしで作成されます。
  • キー入力なし。 DejaVu がキーボードに耳を傾けることはありません。
  • クラウドなし。 上のすべてのステップは、あなたの Mac の中で動きます。

これから

発売前に、MacBook Air で測定したバッテリーとディスクの数値を公開します。それより前には公開しません。それまでのあいだ、画面の記憶がディスクをどれくらい使うのか大まかに知りたい方は、ディスク容量の見積もりツールをお試しください。前提条件もすべて明らかにしています。

よくある質問

DejaVu は、どれくらいの頻度で画面を見ていますか?

多くても2秒に1フレームです。元 Rewind ユーザーの方々が求めたリズムです。そして、画面上で実際に何かが変化したときだけです。

DejaVu は、Apple のテキスト認識表示を使っていますか?

テキスト認識表示を支えるフレームワークである Vision を使って、Mac の中で文字を読み取ります。直販版では、アクセシビリティを通じてウインドウから直接テキストを読み取ることもでき、こちらのほうが速く、正確です。

バッテリーとディスクの数値は公開されますか?

はい。発売前に MacBook Air で測定して公開します。それまでは、数値は挙げません。