So entscheidet DejaVu, was es behält

Ein Bildschirmgedächtnis steht und fällt mit dem, was es nicht behält. So schaut DejaVu höchstens alle zwei Sekunden auf deinen Bildschirm und behält nur, was sich zu merken lohnt – mit Apples eigenen Frameworks, auf deinem Mac.

Vom DejaVu-TeamVeröffentlicht am 19. Oktober 20264 Min. Lesezeit

Kurz gesagt

  • Ein einziger ScreenCaptureKit-Stream, nie wiederholte Screenshots – wiederholte Einzelaufnahmen bringen macOS bekanntermaßen ins Stocken.
  • Vier sparsame Filter entscheiden, ob ein Bild behalten wird: die Änderungsbereiche, die macOS meldet, ein Helligkeits-Fingerabdruck aus 64×36 Pixeln, ein Animationsdetektor und Fensterwechsel.
  • Behaltene Bilder gehen an Apples HEVC-Encoder in Hardware und werden Bild für Bild versiegelt; Text liest Vision nur dort, wo sich der Bildschirm geändert hat – in einem isolierten Hilfsprozess.

Rewind behielt etwa alle zwei Sekunden ein Bild, und seine ehemaligen Nutzer haben uns gesagt, das sei der richtige Rhythmus: oft genug, um die Sendungsnummer zu erwischen, die kurz aufblitzte, selten genug, um schlank zu bleiben. Schwierig ist alles, was zwischen zwei Bildern passiert. Ein blinkender Cursor, eine tickende Uhr, ein Video in einer Ecke – ein naives Gedächtnis würde all das behalten, all das lesen und deine Festplatte mit nichts füllen.

So entscheidet DejaVu, Schritt für Schritt.

Ein Stream statt tausend Screenshots

DejaVu öffnet einen einzigen ScreenCaptureKit-Stream und lässt sich von macOS höchstens alle zwei Sekunden ein Bild liefern. Wiederholte Einzel-Screenshots gibt es nie: Open-Source-Projekte haben dokumentiert, dass wiederholte Aufnahmen, vor allem über mehrere Displays hinweg, die Oberfläche von macOS sekundenlang einfrieren können. Ein langlebiger Stream ist außerdem das, was es dem System erlaubt, uns zu sagen, was sich geändert hat.

Wenn dein Mac in den Ruhezustand geht, sich sperrt oder der Bildschirm ausgeht, endet der Stream sauber und startet ein paar Sekunden nach deiner Rückkehr neu. Der kurze Moment Wartezeit verhindert eine Flut von Anfragen genau dann, wenn das System aufwacht.

Vier Filter, der sparsamste zuerst

Jedes ankommende Bild durchläuft vier Prüfungen. Jede kostet weniger, als sie spart, und die meisten Bilder kommen über die ersten zwei nicht hinaus.

1. Meldet macOS überhaupt eine Änderung?

ScreenCaptureKit hängt an jedes Bild sogenannte Dirty Rectangles an: die Bereiche, die der Window Server seit dem letzten Bild neu gezeichnet hat. DejaVu summiert sie seit dem zuletzt behaltenen Bild auf. Decken sie nur einen schmalen Streifen des Bildschirms ab – einen blinkenden Cursor, die Uhr in der Menüleiste – und hast du das Fenster nicht gewechselt, wird das Bild sofort verworfen.

2. Sieht es wirklich anders aus?

Neu gezeichnet heißt nicht geändert. Ein Ladekreisel, der wieder an derselben Stelle steht, Subpixel-Rauschen, eine Hervorhebung, die kommt und geht: macOS meldet all das, aber das Bild ist dasselbe. Deshalb liest DejaVu direkt aus der Luma-Ebene des Bildes eine Helligkeits-Miniatur aus 64 × 36 Pixeln – rund 37.000 Byte-Lesezugriffe, ohne Farbumrechnung – und vergleicht sie Zelle für Zelle mit dem zuletzt behaltenen Bild. Zu wenige Zellen haben sich verändert? Verworfen.

3. Ist es ein Video oder eine Animation?

Wenn sich dasselbe Rechteck Bild für Bild ändert – ein Video, ein animiertes Banner –, wäre es teuer und nutzlos, jedes Bild zu behalten. DejaVu bemerkt, wenn sich der geänderte Bereich mehrmals hintereinander fast vollständig mit dem vorherigen deckt, und behält diesen Bereich dann nur noch ab und zu. Seinen Text liest es noch seltener.

4. Hast du App oder Fenster gewechselt?

Ein neues Fenster zählt immer. Der Wechsel von Mail zu Safari ist genau die Art Moment, zu der du später zurückwillst – deshalb umgeht er die Filter oben.

Kodierung: HEVC in Hardware, Bild für Bild versiegelt

Ein behaltenes Bild geht an VideoToolbox, Apples Video-Framework, und wird von der dedizierten Media Engine des Mac in HEVC kodiert statt von der CPU. Die Einstellungen sind auf Bildschirminhalte abgestimmt: konstante Qualität, ein Keyframe alle 30 Bilder, keine Umsortierung der Bilder und Segmente von 10 Minuten.

Jedes kodierte Bild wird dann einzeln verschlüsselt, mit AES-GCM und einem Schlüssel, der zu seinem Segment gehört, bevor irgendetwas die Festplatte berührt. Nichts wird je im Klartext geschrieben, nicht einmal vorübergehend – und weil jedes Bild für sich steht, lassen sich auch die letzten Minuten sofort ansehen.

Text: nur dort gelesen, wo sich der Bildschirm geändert hat

Text zu lesen ist das Aufwendigste, was ein Bildschirmgedächtnis tut; in unseren Prototyp-Messungen machte es mit Abstand den größten Teil des Aufwands von DejaVu aus. Also liest DejaVu so wenig wie möglich:

  • Nur die geänderten Bereiche. Die Dirty Rectangles aus Schritt 1 werden zu Kacheln gruppiert, und nur diese Kacheln gehen an Vision, Apples Framework für Texterkennung. Den ganzen Bildschirm liest DejaVu bei Fensterwechseln, wenn sich der Großteil des Bildschirms geändert hat, und hin und wieder als Sicherheitsnetz.
  • In Kacheln von einigen Tausend Pixeln Breite. Wir haben festgestellt, dass Vision auf einem vollen 4K-Bild am Stück fast nichts liest; in Kacheln liest es alles.
  • In einem isolierten Helfer. Die Texterkennung läuft in einem separaten XPC-Dienst in einer Sandbox, ohne eigenen Zustand. Macht er Probleme oder braucht er zu viel Arbeitsspeicher, wird er neu gestartet, ohne den Rest von DejaVu zu berühren.
  • Schonend im Akkubetrieb. Im Akkubetrieb, wenn der Mac warm wird, oder im Stromsparmodus werden Textanfragen in größeren Abständen gestellt und Änderungen gemeinsam am neuesten Bild gelesen. Die Bilder werden weiterhin pünktlich behalten; ihr Text kommt ein paar Sekunden später.

In der Direktversion kann DejaVu Text außerdem über die Bedienungshilfen direkt aus Fenstern lesen – exakt und sparsam. Während du ein Passwort eingibst, wird nichts behalten: DejaVu pausiert, sobald macOS eine sichere Tastatureingabe meldet.

Suche: eine kleine Datenbank pro Tag

Text, Fenstertitel und Zeitstempel landen in SQLite mit FTS5, einem Volltextindex – eine verschlüsselte Datenbank pro Tag. In unserem Prototyp beantwortete eine Stichwortsuche die Anfrage in weniger als einer Millisekunde pro Tag. Getrennte Tage machen das Löschen außerdem echt: Ist ein Tag weg, wird sein Schlüssel mit ihm vernichtet.

Was wir nicht tun

  • Nie Ton. Der Stream wird ohne Audio angelegt.
  • Keine Tastatureingaben. DejaVu hört nie auf die Tastatur.
  • Keine Cloud. Jeder Schritt oben läuft auf deinem Mac.

Wie es weitergeht

Gemessene Werte zu Akku und Speicherplatz von einem MacBook Air veröffentlichen wir vor dem Start – nicht früher. Wenn du bis dahin eine grobe Vorstellung davon willst, wie viel Speicherplatz ein beliebiges Bildschirmgedächtnis kostet, probier unseren Speicherplatz-Rechner; er legt seine Annahmen offen.

Fragen

Wie oft schaut DejaVu auf den Bildschirm?

Höchstens alle zwei Sekunden ein Bild – der Rhythmus, den sich ehemalige Rewind-Nutzer gewünscht haben – und nur, wenn sich auf dem Bildschirm wirklich etwas geändert hat.

Nutzt DejaVu Apples Live Text?

Es nutzt Vision, das Framework hinter Live Text, um Text auf deinem Mac zu lesen. In der Direktversion kann es Text außerdem über die Bedienungshilfen direkt aus Fenstern lesen; das ist schneller und genauer.

Veröffentlicht ihr Werte zu Akku und Speicherplatz?

Ja, gemessen auf einem MacBook Air vor dem Start. Bis dahin nennen wir keine Zahlen.