Gemessen, nicht versprochen

Leistung

Jede Zahl auf dieser Seite stammt von echten Fotos auf einem gewöhnlichen Laptop (Apple M3, 16 GB), und die Skripte, die sie erzeugt haben, liegen im Repository, sodass jeder sie wiederholen kann. Unter jedem Diagramm steht, was es für deine Abzüge bedeutet, und am Ende die Begriffe hinter den Zahlen.

Warum Fotollection schnell ist

Keine Magie. Ein paar Entscheidungen, getroffen vor der ersten Zeile Code, jede gemessen.

  1. Nativer Code auf jedem Kern

    Die Arbeit von Fotollection läuft in Rust, kompiliert für deinen Prozessor und verteilt auf alle seine Kerne, mit den Vektorbefehlen (SIMD), die Prozessoren für Pixel bieten.1,2,3

    23,5 / sexportierte Fotos mit 16 MP

  2. Nur, was nötig ist

    Beim Öffnen eines Ordners werden die EXIF-Daten jeder Datei und ihr kleines eingebettetes Vorschaubild gelesen, nie das ganze Foto. Die Vorschaubilder liegen in einem Cache auf der Festplatte.4

    0,12 sum 1.000 Fotos zu öffnen

  3. Nie mehr Pixel als der Bildschirm

    Eine Vorschau hat höchstens 1.600 px und entsteht aus einer Kopie mit 2.048 px im Speicher. Das ganze Foto wird erst gelesen, wenn du hineinzoomst, und zwar Stück für Stück.

    17 msum eine Vorschau neu zu zeichnen

  4. Bereit, bevor du klickst

    Sind die Vorschaubilder fertig, wird im Hintergrund für jedes Foto eine Vorschau vorbereitet und auf der Festplatte abgelegt, während ein Viertel des Speichers die Fotos rund um das auf dem Bildschirm hält.

    27 msum ein beliebiges Foto zu öffnen

  5. Nichts doppelt

    Ein Farbregler ändert nur die Farbe, nie die Größe. Jeder Farbregler wird in eine einzige Tabelle mit 33 × 33 × 33 Farben eingerechnet, so kosten zehn Regler so viel wie einer.

    2 msfür zehn Farbregler auf einer Vorschau

  6. Speicher im Budget

    Fotollection bearbeitet nur so viele Fotos in voller Größe gleichzeitig, wie sein Speicherbudget erlaubt, festgelegt nach dem größten Foto im Export.

    1,45 GBSpitzenspeicher bei 5.035 Fotos

  7. Encoder, per Messung abgestimmt

    Druckdateien verzichten auf eine Tabellenoptimierung, die sie um weniger als 1 % kleiner machte und ein Drittel der Kodierzeit kostete.

    −33 %Kodierzeit für Druckdateien

  8. Die Grafikkarte beim Bearbeiten

    Während sich ein Farbregler bewegt, zeichnet die Grafikkarte aus der Tabelle, die der Kern erstellt. Exporte bleiben auf dem Prozessor, so ist ein Abzug auf jedem Computer identisch.

    1–2 mspro Reglerschritt, statt 26 ms

Wo die Arbeit geschieht: Fotollection auf deinem Computer, gegenüber einem typischen Web-Editor
Wo die Arbeit geschieht: Fotollection auf deinem Computer, gegenüber einem typischen Web-Editor

Bis zu 20× schneller. Eine neue Art, den Speicher zu nutzen.

v0.11.0 denkt neu, wie Fotollection deine Fotos bereithält. Die Vorschau jedes Fotos wird im Hintergrund vorbereitet, sobald sein Vorschaubild fertig ist, und auf der Festplatte abgelegt, ein Viertel des Speichers deines Computers hält die Fotos rund um das, das du siehst, und das Foto auf dem Bildschirm kommt immer zuerst. Das Ergebnis: Jedes Foto, nah oder fern, JPEG oder RAW, öffnet sich in 27 Millisekunden. Ein RAW öffnet sich bis zu 20-mal schneller als in v0.9.0, ein JPEG 10-mal schneller, gemessen an denselben 422 Fotos einer Reise.5,6

20×schneller beim Öffnen eines RAW-Fotos als v0.9.0 (531 → 27 ms)
10×schneller beim Öffnen eines JPEGs als v0.9.0 (274 → 27 ms)
27 msum ein beliebiges Foto zu öffnen, nah oder fern (Budget 100 ms)
Ein Foto öffnen: v0.9.0 und v0.10.0 gegen v0.11.0, mit den 422 Fotos einer Reise
Ein Foto öffnen: v0.9.0 und v0.10.0 gegen v0.11.0, mit den 422 Fotos einer Reise7
Woher die Vorschau eines Fotos kommt: Speicher, dann Festplatte, dann die Datei
Woher die Vorschau eines Fotos kommt: Speicher, dann Festplatte, dann die Datei

Vorher: jedes Foto beim Klick dekodiert

Bis v0.10.0 wurde eine Vorschau erst gemacht, wenn du sie angefordert hast: Datei gelesen, Foto dekodiert (ein RAW entwickelt), aufgerichtet, auf 2.048 px gebracht und nach sRGB umgewandelt, dann zugeschnitten, gefärbt, gestempelt und für den Bildschirm kodiert. Bei einem 20-MP-Foto aus einer Lumix GX9 dauerte das 274 bis 278 ms für ein JPEG und 440 bis 531 ms für ein RAW, jedes Mal, wenn ein Foto geöffnet wurde, das nicht unter den letzten acht war. Schnell genug für ein Foto, nicht aber, um durch eine Reise zu blättern.

Standardvorschauen, wie Lightroom sie anlegt

Seit v0.11.0 ist die Arbeit, auf die man wartet, erledigt, bevor man fragt. Sobald die Vorschaubilder eines Ordners fertig sind, macht Fotollection im Hintergrund von jedem Foto eine Kopie mit 2.048 px, ein Foto pro Thread nach dem anderen, und legt sie neben den Vorschaubildern auf der Festplatte ab, als JPEG von etwa 0,66 MB (etwa 280 MB für die ganze Reise). Ein Klick auf irgendein Foto, nah oder fern, in dieser Sitzung oder der nächsten, beginnt mit dieser Kopie: 27 ms für ein JPEG wie für ein RAW. Übrig bleibt die eigene Arbeit der Vorschau (Zuschnitt, Größenänderung, Farbe, Datumsstempel und Kodierung), dieselben 27 ms wie aus dem Arbeitsspeicher. Eine Vorschau aus der Kopie auf der Festplatte weicht von einer frisch gemachten im Mittel um 1,35 von 255 Stufen ab, zu wenig, um es zu sehen.8

Speicher gut genutzt, nicht so wenig wie möglich

Ein Fotobetrachter, der auf einem Laptop mit 16 GB acht Fotos im Speicher hält, verschwendet den Laptop. Fotollection gibt der Vorschau jetzt ein Viertel des Arbeitsspeichers (auf einem Mac mit 16 GB etwa 190 Fotos mit 2.048 px, 20 RAW-Entwicklungen, die für ihre Regler bereitgehalten werden, und 600 MB für den Zoom), in Bytes gezählt und die ältesten zuerst freigegeben. Ist ein Foto auf dem Bildschirm, werden auch die nächsten zwei in der Richtung, in die du dich bewegst, und das eine dahinter geladen, so warten die Pfeiltasten nie. Die Obergrenze von 2 GB gilt für Exporte weiterhin.

Das Foto auf dem Bildschirm geht vor

Es wird immer nur ein RAW gleichzeitig entwickelt, damit ein Stapel RAW-Fotos in den Speicher passt. Früher war die Reihenfolge der Warteschlange Glückssache: Eine Vorschau in Vorbereitung, die Größenschätzung des Exports oder ein Export konnten das angeklickte Foto warten lassen. Jetzt sagt jede Entwicklung, wer auf sie wartet, und Arbeit im Hintergrund tritt zur Seite, wann immer das Foto auf dem Bildschirm eine braucht. Dieselbe Arbeit brachte auch zwei seltene Hänger ans Licht, die jetzt beseitigt sind: einen, bei dem jeder Thread auf eine Entwicklung wartete, für die kein Thread mehr frei war, und einen, bei dem der Bildschirm auf ein Bild wartete, das er nie angefordert hatte.

Version JPEG p50 / p95 RAW p50 / p95 Wie
v0.9.0 274 / 286 ms 531 / 550 ms Beim Klick dekodiert; RAW über macOS
v0.10.0 278 / 293 ms 440 / 471 ms Beim Klick dekodiert; RAW über unsere eigene Entwicklung
v0.11.0 27 / 32 ms 27 / 30 ms Aus der Standardvorschau auf der Festplatte oder aus dem Arbeitsspeicher

Gemessen an der Prag-Reise des Autors (396 JPEG und 26 RAW, 20 MP) auf einem Apple M3 mit measure_browse: v0.9.0 aus seinem eigenen Tag gebaut, v0.10.0 auf seinem Code direkt vor dieser Änderung.

Tempo: tausend Fotos im Handumdrehen

Beim Öffnen eines Ordners werden die EXIF-Daten jedes Fotos und sein kleines eingebettetes Vorschaubild gelesen, nicht das ganze Bild, und eine geänderte Einstellung zeichnet nur die Vorschau neu. Natives Rust schlägt auch einen Webbrowser bei derselben Aufgabe: dasselbe Exporttempo, eine schnellere Vorschau und ein Viertel weniger Speicher.9

0,12 sum einen Ordner mit 1.000 Fotos zu lesen, achtmal unter dem Budget
17 msum die Vorschau nach einer Änderung neu zu zeichnen
23,5Fotos mit 16 MP pro Sekunde exportiert
Tempo und Speicher, gemessen an den Budgets, die vor dem Code festgelegt wurden
Tempo und Speicher, gemessen an den Budgets, die vor dem Code festgelegt wurden7
Dieselbe Aufgabe in Fotollection und in einem Webbrowser
Dieselbe Aufgabe in Fotollection und in einem Webbrowser7

Was passiert, wenn du einen Ordner öffnest

Ein Ordner mit Fotos wird nicht ganz gelesen. Von jeder Datei liest Fotollection die EXIF-Daten (Datum, Kamera, Ort) und das kleine Vorschaubild, das jede Kamera in der Datei ablegt, und sonst nichts: 1.000 Fotos brauchen 0,12 s, bei einem Budget von 1 s, das festgelegt wurde, bevor der Code geschrieben war. Schärfere Vorschaubilder mit 400 px entstehen danach im Hintergrund, auf zwei Threads, damit Fotollection flink bleibt, und kommen in einen Cache auf der Festplatte, so ist ein wieder geöffneter Ordner sofort da. Bei 5.035 Fotos dauerte der Import 383 ms und die eingebetteten Vorschaubilder 236 ms.

Wohin die 17 ms einer Vorschau gehen

Eine geänderte Einstellung rendert die Vorschau aus einer Kopie des Fotos mit 2.048 px neu, die im Arbeitsspeicher liegt, nie aus der ganzen Datei. Von den 16,7 ms, die das dauert, entfallen 9,7 ms auf Zuschnitt und Verkleinern mit einem Lanczos-Filter, unter 0,1 ms auf den Datumsstempel und 7,0 ms auf das Kodieren der Vorschau als JPEG für den Bildschirm. Dieser Encoder wurde durch Messen abgestimmt: Mit den Einstellungen des Exports (volle Farbauflösung und optimierte Tabellen) brauchte er 16,2 ms; der Bildschirm braucht sie nicht, also nutzt die Vorschau halbierte Farbe und einfache Tabellen, während Exporte die volle Farbe (4:4:4) behalten. Ein günstigerer Verkleinerungsfilter wurde probiert und war auf diesem Prozessor langsamer (12,5 ms), also blieb es bei Lanczos.

Nativer Code gegen einen Browser

Dieselbe Aufgabe (dekodieren, auf 2:3 zuschneiden, Datumsstempel, JPEG mit Qualität 95) lief mit denselben 95 Fotos in Fotollection und in Chromium mit einem Worker pro Kern. Das Exporttempo kam gleich heraus, 18,0 gegenüber 17,9 Fotos pro Sekunde, was unsere erste Vermutung widerlegte: Ein Browser ist nicht langsam. Die Gründe für nativen Code liegen woanders: Fotollection schreibt 4:4:4-Dateien in voller Farbauflösung, wo der Encoder des Browsers die Farbe halbiert, es behält das Farbprofil jedes Fotos, es schreibt Dateien direkt auf die Festplatte, und es brauchte ein Viertel weniger Speicher (1,35 GB gegenüber 1,78 GB). Seitdem wurde der Druck-Encoder noch schneller: 23,5 Fotos pro Sekunde bei 16 MP.

Die Grafikkarte beim Bearbeiten, jeder Kern für Exporte

Während du einen Farbregler ziehst, zeichnet die Grafikkarte den Look aus derselben Tabelle, die der Kern von Fotollection erstellt, und sobald du loslässt, übernimmt die exakte Berechnung. Exporte bleiben auf dem Prozessor, so wird ein Abzug auf jedem Computer gleich.

1–2 msein Reglerschritt auf der Grafikkarte, gegenüber etwa 26 ms
0,13ΔE2000 zwischen dem Look der Karte und der exakten Berechnung
10,8Fotos mit 26 MP pro Sekunde exportiert, sechs gleichzeitig
Ein Schritt eines Farbreglers: der Prozessor gegen die Grafikkarte
Ein Schritt eines Farbreglers: der Prozessor gegen die Grafikkarte7
Exporttempo nach Zahl der gleichzeitig bearbeiteten Fotos
Exporttempo nach Zahl der gleichzeitig bearbeiteten Fotos7
Bearbeiten auf der Grafikkarte, Exportieren auf jedem Prozessorkern
Bearbeiten auf der Grafikkarte, Exportieren auf jedem Prozessorkern

Zehn Regler zum Preis von einem

Jeder Farbregler (Helligkeit, Kontrast, Wärme, Sättigung, Verblassen, getönte Tiefen und Lichter, Schwarzweiß) wird in eine einzige Tabelle aus 33 × 33 × 33 Farben eingerechnet, 35.937 Punkte, die sagen, wohin jede Farbe geht. Sie auf ein Foto anzuwenden heißt, für jedes Pixel seine Zelle in der Tabelle zu finden und zwischen vier ihrer Ecken zu interpolieren (tetraedrische Interpolation), so kosten zehn Regler so viel wie einer. Die Tabelle mit allen gesetzten Reglern zu bauen dauert etwa 2,6 ms; sie auf eine Vorschau von 1.600 px anzuwenden unter 2,2 ms, auf einen Export mit 24 MP etwa 24 ms.

Warum sich ein Ziehen trotzdem langsam anfühlte und was die Grafikkarte änderte

Schritt für Schritt gemessen kostete eine Bewegung eines Reglers etwa 26 ms, und die Farbe selbst war davon nur 2 ms: Der Rest war das Kodieren der Vorschau als JPEG (7 bis 11 ms) und das erneute Dekodieren im Fenster (9 bis 15 ms). Die Grafikkarte nimmt beides weg. Wenn ein Ziehen beginnt, gehen die einfache Vorschau und eine Maske, die zeigt, wo das Foto ist (nicht der Datumsstempel, der Rahmen oder der Rand), einmal an die Grafikkarte; bei jedem Schritt folgt nur die neue Tabelle, und ein kleines WebGL2-Programm interpoliert sie, genau wie der Kern: 1 ms pro Schritt im WebKit von macOS, 2 ms in Chromium. Lässt du los, ersetzt das exakte Rendering des Kerns das Bild. Beide wurden an einem kräftigen Look verglichen, bei dem jeder Regler bewegt war: Sie unterscheiden sich im Mittel um 0,13 in ΔE2000 und um 0,77 im 99. Perzentil, weit unter der 1, die ein Auge im direkten Vergleich sieht.

Kein Schalter ist nötig. Beim ersten Ziehen prüft Fotollection selbst: Gibt es kein WebGL2, ist der Renderer ein Software-Renderer oder dauert ein Testschritt 8 ms oder länger, bleibt es für die Sitzung beim Weg über den Prozessor. Ein Software-Renderer brauchte im Test 16,5 ms pro Schritt, also ist es richtig, dort beim Prozessor zu bleiben.

Exporte auf jedem Kern

Dekodieren und Kodieren eines Fotos laufen jeweils auf einem Kern, so ist ein Export schnell, wenn an mehreren Fotos gleichzeitig gearbeitet wird. Wie viele, hängt vom Arbeitsspeicher ab: Bei Fotos mit 24 bis 26 MP ergaben 2 gleichzeitig 4,9 Fotos pro Sekunde, 4 ergaben 9,4, 6 ergaben 11,5 und 8 ergaben 12,5, wobei der Speicher von 0,49 auf 1,21 GB stieg. Fotollection wählt die Zahl aus einem Speicherbudget von 1,6 GB und der Größe des größten Fotos und hört bei 6 auf, weil 8 gleichzeitig bei den Fotos einer echten Reise nicht schneller waren und 0,2 GB mehr brauchten. Exporte nutzen nie die Grafikkarte: Ein Abzug muss auf jedem Computer gleich herauskommen, und die Tests, die Exporte Byte für Byte vergleichen, hängen davon ab.

Eine echte Reise: 422 Dateien aus Prag

Testsätze können schmeicheln, darum hier ein Ordner genau so, wie er nach einem Wochenende in Prag von einer Lumix GX9 kam: 396 JPEGs mit 20 MP, je etwa 11 MB, und 26 RAW-Dateien daneben, insgesamt 4,7 GB. Beim Öffnen werden die EXIF-Daten jeder Datei in 0,23 Sekunden gelesen. Die Vorschau wird in 19 ms neu berechnet, ein RAW in 0,35 Sekunden entwickelt, und zehn Postkarten werden in 21 ms neu gezeichnet. Am 2026-11-03 verfehlten zwei Werte bei diesen großen Dateien ihr Budget: Der Export schaffte 7,6 Fotos pro Sekunde, und der Speicher lag in der Spitze bei 2,14 GB. Die Ursache wurde gefunden und in v0.9.7 behoben: Die JPEGs werden jetzt mit 10,1 pro Sekunde exportiert, und der ganze Lauf bleibt unter 1,31 GB.10,11

0,23 sum alle 422 Dateien zu öffnen, samt EXIF
19 msNeuberechnung der Vorschau, p95 (Budget 50 ms)
0,35 sum ein 20-MP-RAW zu entwickeln (Median)
21 msum zehn Postkarten neu zu zeichnen (Budget 100 ms)
10,1 / sexportierte JPEGs (Budget 8 / s)
1,31 GBSpitzenspeicher, JPEG und RAW (Obergrenze 2 GB)

Zwei Budgets verfehlt und die Ursache gefunden

Bei diesen 20-MP-Dateien verfehlte der erste Durchlauf zwei Budgets: Der Export lief mit 7,6 Fotos pro Sekunde, und der Speicher erreichte in der Spitze 2,14 GB, über der Obergrenze von 2 GB. Die Zeitmessung jeder Stufe eines Fotos zeigte, wohin sie ging: Dekodieren etwa 100 ms, Zuschneiden 2 ms und Kodieren des Abzugs 203 ms. Der Druck-Encoder optimierte seine Tabellen in einem zweiten Durchgang, der jeden Koeffizienten des Bildes im Speicher hielt, etwa 160 MB pro Foto, bei sechs Fotos gleichzeitig etwa 1,5 GB, für Dateien, die nur 0,9 % kleiner waren. Mit den Standardtabellen schreibt er die Datei in Streifen: 138 ms, derselbe Fehler gegenüber dem gerenderten Bild, ein paar Kilobyte mehr.

Ein Teil des Speichers gehörte gar nicht zu Fotollection. Der Benchmark machte seine Vorschaubilder auf jedem Kern, wo Fotollection zwei Hintergrund-Threads nutzt, und hielt seine eigenen Vorschaumessungen während des Exports am Leben; so gemessen, wie Fotollection arbeitet, bleiben vor dem Start eines Exports 0,35 bis 0,39 GB. Seit v0.9.7 richtet sich die Zahl der gleichzeitig bearbeiteten Fotos auch nach dem größten Foto des Exports (weniger bei sehr großen), so bleibt die Spitze bei jeder Größe unter der Obergrenze: 10,1 Fotos pro Sekunde und 1,31 GB für diesen Ordner.

Speicher: 5.035 Fotos, und er bleibt flach

Fotollection hält pro Foto nur wenige Bytes im Speicher, schreibt Vorschaubilder in einen Cache auf der Festplatte und bearbeitet nur so viele Bilder in voller Größe gleichzeitig, wie in sein Speicherbudget passen. So bleibt der Speicher flach, auch wenn eine Reise auf Tausende Fotos wächst.

1,45 GBSpitzenspeicher bei 5.035 Fotos
1,35 GBSpitzenspeicher bei 95 Fotos
53×mehr Fotos für 0,1 GB mehr
Spitzenspeicher, während der Stapel auf 5.035 Fotos wächst
Spitzenspeicher, während der Stapel auf 5.035 Fotos wächst7

Warum der Speicher nicht mit dem Ordner wächst

Fotollection behält in seiner Bibliothek ein paar Bytes pro Foto (13 MB für 5.035 Fotos), schreibt Vorschaubilder in einen Cache auf der Festplatte, statt sie festzuhalten, hält eine begrenzte Zahl von Vorschauen im Arbeitsspeicher und bearbeitet nur so viele Fotos in voller Größe gleichzeitig, wie in sein Budget passen. Das Raster auf dem Bildschirm ist virtuell: Nur die Kacheln, die du sehen kannst, existieren. Zum Testen wurden dieselben 95 Fotos 53-mal in einen Ordner mit 5.035 Dateien verlinkt:

95 Fotos 5.035 Fotos
Import und EXIF 5 ms, 7 MB 383 ms, 13 MB
Vorschaubilder mit 400 px in den Festplatten-Cache 47,8 Fotos/s 46,4 Fotos/s
Export, 6 gleichzeitig 18,0 Fotos/s 15,4 Fotos/s, 0 fehlgeschlagen
Spitzenspeicher des ganzen Durchlaufs 1,35 GB 1,45 GB

53-mal mehr Fotos kosten 0,1 GB mehr. Der lange Export ist pro Foto nur deshalb etwas langsamer, weil er länger als fünf Minuten lief und der Prozessor eines Laptops unter Dauerlast langsamer wird.

Druckqualität: Der Abzug sieht aus wie das Foto

Abzüge, die über einen Web-Editor entstehen, wirken oft flau: Er verwirft das Farbprofil, verkleinert das Foto auf 2.000 px und speichert mit Qualität 80 und halbierter Farbe. Fotollection behält das Profil und exportiert in voller Auflösung mit 4:4:4.

0,19Farbfehler; ein Auge bemerkt ihn ab 1
4:4:4volle Farbauflösung; ein Web-Editor halbiert sie
87 %der feinen Details, die die 2.000 px eines Web-Editors verlieren
Was der Export vom Original behält, verglichen mit einem typischen Web-Editor
Was der Export vom Original behält, verglichen mit einem typischen Web-Editor7

Warum Abzüge aus einem Web-Editor flau aussehen

Der Test exportiert 20 Kamerafotos und 5 Fassungen in Display P3 (die weitere Farbe neuerer Smartphones und Macs) über den echten Export von Fotollection, liest dann beide Dateien mit einem unabhängigen Decoder, rechnet sie über ihre Farbprofile nach CIELAB um und vergleicht sie Pixel für Pixel mit dem Original. Ein typischer Export aus einem Web-Editor durchläuft denselben Vergleich: Profil verworfen, auf 2.000 px verkleinert und für den Abzug wieder vergrößert, mit Qualität 80 und halbierter Farbe (4:2:0) gespeichert.

Median Fotollection, sRGB Web-Editor Fotollection, Display P3 Web-Editor
ΔE2000 (Farbfehler, unter 1 unsichtbar) 0,19 1,39 0,31 2,15
PSNR 52,6 dB 37,9 dB 50,8 dB 37,0 dB
Erhaltene Sättigung 100 % 99,9 % 99,9 % 86,8 %
Erhaltenes feines Detail 99,8 % 13 % 100 % 18 %

Zwei Ursachen erklären den flauen Eindruck. Das Verkleinern auf 2.000 px und erneute Vergrößern für das Labor wirft 87 % des feinen Details weg, das einen Abzug knackig wirken lässt. Und das Verwerfen des Farbprofils liest ein Foto in Display P3, als wäre es sRGB, was ihm 13 % seiner Sättigung nimmt. Fotollection behält das Profil (25 von 25 Dateien), exportiert in der vollen Auflösung des Fotos mit voller Farbe (4:4:4) bei Qualität 95 (so damals gemessen; seit v0.13.0 standardmäßig 90, noch immer unter einem sichtbaren Unterschied), und seine größeren Fehler liegen nur an scharfen Kanten, wo jedes JPEG am härtesten arbeitet. Noch ausstehend: echte HEIC-Dateien vom iPhone und Abzüge, die mit einem Spektralfotometer gemessen werden.

Fotos für Facebook und Instagram: leicht, und immer noch das Foto

Facebook verkleinert jedes Foto auf 2.048 px, komprimiert es neu und ignoriert Farbprofile. Der Share-Export erledigt diese Arbeit vorher richtig, so bleibt das Foto nach Facebook näher an sich selbst als auf dem üblichen Weg.

99,6 %der Farbe eines Display-P3-Fotos bleiben nach Facebook erhalten, gegenüber 86 %
2.048 pxdie Größe, die Facebook in Ruhe lässt
½der Datei in Originalgröße, jedes Pixel erhalten
Fotos für Facebook: was Betrachter sehen, nachdem Facebook sie neu komprimiert hat
Fotos für Facebook: was Betrachter sehen, nachdem Facebook sie neu komprimiert hat7

Was Facebook mit einem Foto macht und was wir vorher tun

Facebook verkleinert jedes Foto auf höchstens 2.048 px, komprimiert es neu mit etwa Qualität 71 und halbierter Farbe und ignoriert Farbprofile. Der Export zum Teilen erledigt diese Arbeit sauber vor dem Hochladen, so bleibt Facebook nichts mehr zu verkleinern: Das Foto wird über sein Profil nach sRGB umgewandelt, mit einem Lanczos-Filter in linearem Licht verkleinert, leicht geschärft und mit Qualität 88 gespeichert. Jede Einstellung wurde durch Messen gewählt: Stärkeres Schärfen (0,35 statt 0,2) schnitt schlechter ab, und Qualität 84 oder 80 verlor mehr, als sie sparte.

Median Originalgröße Facebook, 2.048 px Instagram, 1.080 px
Dateigröße (Kamera-JPEGs mit 3,08 MB) 1,42 MB 0,51 MB 0,24 MB
SSIM gegenüber der idealen Verkleinerung (1 ist identisch) 0,981 0,979 0,982
ΔE2000 0,96 1,27 1,58

Nach Facebooks eigener Neukomprimierung bleibt das Ergebnis näher am Foto als auf dem üblichen Weg (SSIM 0,965 gegenüber 0,961), und ein Foto in Display P3 behält 99,6 % seiner Farbe statt 86 %, weil sein Profil in echte sRGB-Farben umgerechnet und nicht verworfen wurde. Die verkleinerten Vorgaben bleiben über ΔE 1 wegen der halbierten Farbe, die jede Plattform ohnehin anwendet; Originalgröße behält jedes Pixel bei etwa der halben Datei, unter ΔE 1.

Kamera-RAW: öffnen, wie es ist

Fotollection öffnet RAW-Dateien von neun verbreiteten Kameras, wie sie sind, ohne Umwandeln und, unter Windows und Linux, ohne etwas zu installieren. Seit v0.10.0 ist das volle Bild für jede Kamera mit Bayer-Sensor seine eigene Entwicklung, erstellt aus den eigenen Daten der Kamera wie in einem RAW-Editor, während Adobe DNG Converter nur eine RAW-Datei in eine andere umwandelt.12,13,14,15

9–32 msdas Vorschaubild eines RAW, aus der Vorschau in der Datei
0,3–0,7 sdie eigene Entwicklung des ganzen Fotos durch Fotollection
1,2–1,8 sAdobe DNG Converter pro Datei, nur zum Umwandeln
Kamera-RAW: von der Datei auf den Bildschirm, pro Kamera und gegen Adobe DNG Converter
Kamera-RAW: von der Datei auf den Bildschirm, pro Kamera und gegen Adobe DNG Converter7
Ein RAW-Foto, von der Datei bis zum Abzug
Ein RAW-Foto, von der Datei bis zum Abzug
Das Entwicklungstor: Das Foto auf dem Bildschirm kommt zuerst, Hintergrundarbeit wartet
Das Entwicklungstor: Das Foto auf dem Bildschirm kommt zuerst, Hintergrundarbeit wartet

Was ein Sensor wirklich aufzeichnet

Der Sensor einer Kamera ist ein Raster aus Millionen winziger Mulden, den sogenannten Fotodioden. Solange der Verschluss offen ist, sammelt jede das Licht, das sie erreicht, und wandelt es in elektrische Ladung um; schließt er sich, macht ein Wandler aus jeder Ladung eine Zahl. Der Zusammenhang ist linear: Doppelt so viel Licht ergibt die doppelte Zahl. Unsere Augen sind überhaupt nicht linear, sie beurteilen Helligkeit im Verhältnis, und deshalb sieht eine RAW-Datei dunkel und flau aus, bis sie entwickelt ist.

Zwei Arten von Sensoren lesen dieses Raster aus:

  • CCD (Charge-Coupled Device) schiebt die Ladung jeder Fotodiode Zeile für Zeile zu einem einzigen Verstärker am Rand des Chips. Es war der Sensor der ersten Digitalkameras und vieler früher Mittelformat-Rückteile: saubere Bilder, aber langsam ausgelesen und stromhungrig.
  • CMOS gibt jeder Fotodiode einen eigenen Verstärker und liest viele von ihnen gleichzeitig. Es ist schneller, braucht weniger Strom und ist günstiger herzustellen, daher hat fast jede Kamera und jedes Smartphone heute einen. Die meisten CMOS-Sensoren lesen ihre Zeilen nacheinander aus, weshalb sich ein schnell bewegtes Motiv auf einem Foto mit elektronischem Verschluss neigen kann (der Rolling Shutter), und weshalb Stacked-Sensoren, die viel schneller auslesen, sich weniger neigen.

Die Zahlen haben weit mehr Stufen als ein JPEG. Eine Kamera speichert 12 oder 14 Bit pro Fotodiode, 4.096 oder 16.384 Stufen, wo ein JPEG 8 Bit behält, 256 Stufen. Diese zusätzlichen Stufen erlauben es, einen Schatten aufzuhellen oder einen hellen Himmel zurückzunehmen, ohne dass Streifen entstehen. Und kein Licht ist nicht null: Jeder Sensor addiert einen kleinen Versatz, den Schwarzwert, damit das Rauschen um Schwarz nicht abgeschnitten wird. Im Beispiel der Nikon D750 liegt Schwarz bei 600, und der hellste Wert, den der Sensor halten kann, der Weißwert, bei 15.520. Das Allererste, was jeder RAW-Entwickler tut, ist, diese beiden Zahlen auf 0 und 1 zu bringen, für jede Position des Farbfilters, weil manche Kameras jeder ihren eigenen Schwarzwert geben.

Farbe kommt von einem Filter über jeder Fotodiode

Eine Fotodiode misst nur, wie viel Licht ankommt, nie seine Farbe. Um Farbe zu sehen, ist der Sensor mit einem Farbfilter-Array bedeckt: einem winzigen roten, grünen oder blauen Filter über jeder Fotodiode, sodass jede nur einen Teil des Spektrums zählt.

  • Bayer, 1976 von Bryce Bayer bei Kodak patentiert, wiederholt ein Quadrat aus 2 × 2: ein Rot, zwei Grün, ein Blau. Die Hälfte der Fotodioden ist grün, weil unsere Augen den größten Teil ihres Sinns für Details aus der Mitte des Spektrums beziehen, so trägt Grün den Großteil der Schärfe. Fast jede Kamera nutzt dieses Muster, in einer von vier Ausrichtungen (RGGB, BGGR, GRBG, GBRG), die die Datei angeben muss.
  • X-Trans, das Muster von Fujifilm seit 2012, wiederholt ein Quadrat aus 6 × 6 mit Rot, Grün und Blau in jeder Zeile und jeder Spalte. Seine unregelmäßige Anordnung macht Farbmoiré auf feinen, sich wiederholenden Details unwahrscheinlicher, sodass Fujifilm den Weichzeichnungsfilter weglassen kann, den viele Sensoren tragen, um den Preis einer schwierigeren Rekonstruktion.
  • Andere Bauarten: Monochrom-Sensoren haben gar keinen Filter, so sieht jede Fotodiode volles Detail (die Monochrom-Kameras von Leica); der Foveon von Sigma stapelt drei Schichten, die Farbe in verschiedenen Tiefen des Siliziums aufnehmen; viele Smartphones fassen vier Fotodioden einer Farbe zusammen (Quad Bayer) und lesen sie bei wenig Licht als eine.

Ein Bayer-Sensor mit 24 MP zeichnet also 24 Millionen Zahlen auf, jede für eine einzige Farbe: Zwei der drei Farben jedes Pixels fehlen. Aus diesem Mosaik ein Bild zu machen, ist die Aufgabe des Demosaicing, unten.

Was eine RAW-Datei enthält

Ein JPEG ist ein fertiges Bild: Die Kamera hat schon jede Entscheidung getroffen. Eine RAW-Datei behält die Zahlen des Sensors von vor diesen Entscheidungen, mit allem, was nötig ist, um sie später zu treffen:

  • die Messwerte selbst, einer pro Fotodiode, und unter welcher Filterfarbe jeder lag;
  • Schwarz- und Weißwert;
  • den aktiven Bereich (die Fotodioden, die Licht gesehen haben; ein paar Zeilen und Spalten an den Rändern sind absichtlich abgedeckt, um Schwarz zu messen) und den Standardzuschnitt der Kamera;
  • den Weißabgleich, den die Kamera bei der Aufnahme gewählt hat;
  • Farbmatrizen, die sagen, wie das eigene Rot, Grün und Blau dieses Sensors mit den Farben zusammenhängt, die Menschen sehen;
  • eine Vorschau, ein JPEG, das die Kamera selbst gemacht hat, mit eigener Farbe und eigenem Tonwert, dazu die EXIF-Daten.

Jeder Hersteller hat sein eigenes Format, meist auf TIFF aufgebaut und teilweise undokumentiert: CR2 und CR3 (Canon), NEF (Nikon), ARW (Sony), RW2 (Panasonic), ORF (Olympus), RAF (Fujifilm). DNG ist das Format, das Adobe offen veröffentlicht (Version 1.7), genutzt von Ricoh, Leica, Pentax und vielen Smartphones, und dasjenige, dessen Regeln diese Seite folgt.

Fotollection liest DNG mit seinem eigenen Reader, geschrieben nach der Spezifikation, und die anderen Formate werden von rawler entpackt, einer LGPL-Bibliothek, die in Fotollection eingebaut ist. Die Vorschaubilder im Raster berühren die Sensordaten überhaupt nicht: Sie kommen aus der Vorschau in der Datei, in 9 bis 32 ms, und deshalb öffnet sich ein Ordner mit RAW-Dateien so schnell wie ein Ordner mit JPEGs.

Demosaicing: die zwei fehlenden Farben ermitteln

Die zwei fehlenden Farben jedes Pixels aus seinen Nachbarn wiederherzustellen, heißt Demosaicing, und dieser Schritt entscheidet mehr als jeder andere, wie scharf und wie sauber ein RAW-Foto aussieht. Jede Methode steht vor demselben Dilemma: Nachbarn zu mitteln ist in flachen Bereichen sicher, aber über eine Kante hinweg mischt es zwei verschiedene Flächen, die Kunst liegt also darin zu wissen, welche Nachbarn zusammengehören.

  • Bilinear mittelt einfach die nächsten Fotodioden jeder Farbe. Es ist die Untergrenze, an der jede Methode gemessen wird: weich, und mit farbigen Säumen an jeder scharfen Kante, weil Rot, Grün und Blau über leicht verschiedene Stellen gemittelt werden.
  • Malvar–He–Cutler (2004) beginnt mit diesem Mittelwert und korrigiert ihn mit dem Detail der Farbe, die die Fotodiode gesehen hat, über feste Filter aus 5 × 5. Es ist schärfer und noch immer sehr schnell. Fotollection hat bis v0.10.0 damit entwickelt.
  • PPG (Patterned Pixel Grouping) entscheidet zuerst, in welcher Richtung sich das Bild am wenigsten ändert, und interpoliert nur entlang dieser Richtung. rawler nutzt es, und das taten auch die Windows- und Linux-Versionen von Fotollection für die meisten Formate bis v0.10.0.
  • RCD (Ratio Corrected Demosaicing, von Luis Sanz Rodríguez) arbeitet mit Verhältnissen zwischen den Farben statt mit Differenzen, was in hellen wie dunklen Bereichen besser hält, und ist für wenige Artefakte auf feinem Detail bekannt; darktable und RawTherapee bieten es an.
  • Markesteijn, nach Frank Markesteijn, ist die für X-Trans gemachte Methode, in einem Durchgang oder, langsamer und sauberer, in drei.
  • Das Demosaicing von Fotollection seit v0.10.0 übernimmt von RCD die Art, die Richtung zu bestimmen, schätzt dann Grün von jeder Seite, korrigiert um die eigene Farbe der Stelle (wie es Hamilton und Adams taten), gewichtet danach, wie stark sich jede Seite ändert. Wir haben zuerst den eigenen Verhältnisschritt von RCD geschrieben, und er schnitt auf unseren Testbildern schlechter ab, also wird die Variante ausgeliefert, die gewonnen hat, unter ihrem eigenen Namen.

Wenn eine Methode falsch rät, zeigt sich das auf vier typische Arten:

  • Zipper: eine Reihe abwechselnd heller und dunkler Pixel entlang einer scharfen Kante, wo die Methode Nachbarn von beiden Seiten gewählt hat;
  • Labyrinth: ein feines, wurmartiges Muster in flachen Bereichen, wenn die zwei Grün eines Bayer-Quadrats nicht ganz gleich lesen (sie liegen auf Zeilen mit verschiedenen Nachbarn und weichen auf vielen Sensoren um ein oder zwei Prozent ab);
  • Falschfarbe: farbige Punkte oder Säume auf Detail, das eigentlich grau ist, etwa Stoff, Haar, eine Backsteinmauer oder ein ferner Zaun;
  • Moiré: farbige Wellen über sehr feinen, sich wiederholenden Mustern, feiner, als der Farbfilter abtasten kann.

Wie wir eine Methode beurteilen. Unsere Augen lassen sich von einem schärfer wirkenden Ergebnis leicht täuschen, deshalb wird jede Methode an Bildern bewertet, deren Wahrheit genau bekannt ist. Ein Computer zeichnet fünf Testbilder mit 768 px: eine Zonenplatte (Ringe, die zum Rand hin feiner werden, bis zum feinsten Detail, das die grünen Fotodioden halten können), einen Siemensstern mit 72 Speichen, Balken gesättigter Farbe auf Grau in drei Richtungen, weiche Farbverläufe und ein flaches Grau, dessen zwei Grün um 2 % abweichen. Jedes wird in das umgewandelt, was ein Bayer-Sensor aufzeichnen würde, demosaiciert und mit dem Original verglichen. PSNR misst den Gesamtfehler in Dezibel (höher ist besser; alle 6 dB halbieren ihn); Falschfarbe ist die mittlere Farbe, die auf den grauen Testbildern erscheint; der Kantenfehler ist der mittlere Fehler innerhalb von 2 px um eine Kante.

Testbild (768 px) Bilinear Malvar (unseres bis v0.10.0) Unseres seit v0.10.0
Zonenplatte: PSNR, höher ist besser 13,0 dB 17,3 dB 16,5 dB
Zonenplatte: Falschfarbe, niedriger ist besser 65,9 43,0 18,7
Siemensstern: PSNR 21,3 dB 25,2 dB 37,9 dB
Siemensstern: Falschfarbe 9,4 8,4 0,16
Gesättigte Farbbalken: Fehler an den Kanten, niedriger ist besser 11,6 21,6 10,5
Weiche Verläufe: PSNR 78,9 dB 77,5 dB 78,4 dB
Flaches Grau mit Grün-Abweichung: Labyrinth, niedriger ist besser 0,38 0,38 0
Textur mit Hotpixeln: verbleibend pro 10.000, niedriger ist besser 35,8 66,5 0

Malvar ist auf feinem grauem Detail etwa 4 dB besser als bilinear, wie sein Paper verspricht, aber schlechter an Kanten zwischen kräftigen Farben, weil seine Korrektur das Detail einer Farbe für die anderen leiht und annimmt, dass sie sich gemeinsam ändern, was ein rotes Schild an einer grauen Wand nicht tut. Keine der beiden beseitigt das Labyrinth, das kein Problem des Demosaicing ist, sondern ein Unterschied zwischen den zwei Grün, der vorher ausgeglichen werden muss. Das sind die Lücken, die unsere Kette seit v0.10.0 schließt: Hotpixel und das Grün-Ungleichgewicht werden behoben, solange jede Stelle nur hält, was sie gemessen hat, das richtungsabhängige Demosaicing stellt die Farben wieder her, und ein kleiner Median auf den Farbdifferenzen entfernt die verbleibende Falschfarbe. Auf den Testbildern gewinnt es überall außer beim Gesamt-PSNR der Zonenplatte, 0,8 dB unter Malvar nahe dem feinsten Detail, wo jede Methode Aliasing zeigt; selbst dort halbiert sich seine Falschfarbe. Bei den neun echten Dateien bringt es die Entwicklung jeder Bayer-Kamera genauso nah oder näher an das eigene JPEG der Kamera und kostet bei 24 MP etwa 180 ms, gegenüber 40 bei Malvar: ein paar Zehntelsekunden mehr pro Foto, für Abzüge mit saubererem Detail.

Von den Farben der Kamera zu deinen

Rot, Grün und Blau der Kamera sind nicht die deines Bildschirms: Die Filter jedes Sensors nutzen eigene Farbstoffe, und sie überlappen anders als die Zapfen unserer Augen. Die Farbmatrizen in der Datei wandeln die Farben der Kamera in CIE XYZ um, das 1931 definierte Standardmodell des menschlichen Farbsehens, und von dort in sRGB, den Farbraum der meisten Bildschirme und der Fotolabore.

  • Der Weißabgleich kommt zuerst: eine Verstärkung für Rot und für Blau, damit etwas Weißes in der Szene neutral herauskommt. Die Kamera speichert die Verstärkungen, die sie gewählt hat, und Fotollection wendet sie vor dem Demosaicing an, so bleiben die Farbdifferenzen, auf die sich die Methoden oben stützen, klein.
  • Ein DNG trägt meist zwei Matrizen, eine unter warmem Glühlampenlicht gemessen und eine unter Tageslicht. Die richtige für dein Foto liegt dazwischen: Der Entwickler ermittelt das Licht der Aufnahme aus ihrem Weißabgleich, als Farbtemperatur, und mischt die beiden. Fotollection macht dasselbe für die anderen Formate, mit den Matrizen, die rawler für jedes Kameramodell kennt.
  • All das geschieht in linearem Licht, auf der eigenen Skala des Sensors, vor jeder Kurve. Farben in linearem Licht zu mischen, zu skalieren und zu verkleinern ergibt physikalisch richtige Ergebnisse; nach der Kurve getan, verdunkelt es Kanten und verschiebt Farben.

Der Look der Kamera. Das eigene JPEG einer Kamera ist nicht neutral: Jeder Hersteller fügt seinen Kontrast, seine Farbe und seine Hauttöne hinzu, und dieser Look ist ein Teil dessen, warum Menschen eine Marke wählen. Seit v0.10.0 öffnet sich ein RAW-Foto mit einer neutralen Wiedergabe, treu zur Matrix des Sensors, mit der Vignettierungskorrektur und der Belichtung, die die Kamera gewählt hat; Like the camera’s JPEG ist einen Klick entfernt in der Karte RAW colour eines RAW-Fotos, für ein Foto oder für alle RAW auf einmal. (Bis v0.10.0 wurde jedes RAW an das JPEG der Kamera angepasst; ein damals gespeichertes Projekt behält diesen Look.) Diese Wahl passt das JPEG der Kamera auf beide Arten an, eine Kurve und eine Matrix oder eine Kurve pro Kanal, und behält, was für diese Datei näher kommt: Bei der Nikon D750 halbiert sie den Unterschied, von 2,26 auf 1,16 in ΔE2000. Die Vorschaubilder im Raster behalten die eigene Vorschau der Kamera, wie in Lightroom.

Tonwert: von linearen Zahlen zu einem Bild

Lineare Zahlen sehen auf einem Bildschirm dunkel und matt aus, weil eine Verdopplung des Lichts, die der Sensor als doppelte Zahl aufzeichnet, für uns wie eine Stufe Helligkeit aussieht. Eine Tonkurve macht aus der Skala des Sensors ein Bild: Sie legt das mittlere Grau fest, hebt die Tiefen an, lässt die Lichter sanft auslaufen, statt sie auf einmal abzuschneiden, und gibt dem Bild seinen Kontrast. Das Bild wird dann mit der sRGB-Kurve (seinem „Gamma“) gespeichert, die mehr der 256 Stufen eines JPEG für die Tiefen aufwendet, wo unsere Augen Stufen am meisten bemerken.

Zwei Korrekturen, die eine Kamera in ihrem JPEG vornimmt, stehen nicht in den RAW-Daten, und beide sind für Abzüge wichtig:

  • Vignettierung: Jedes Objektiv ist zu den Ecken hin dunkler. Fotollection misst aus der eigenen Vorschau der Kamera, wie stark sie die Ecken aufgehellt hat, als radiale Verstärkung. Als unsere DNG-Entwicklung zum ersten Mal mit dem JPEG der Kamera verglichen wurde, war die Mitte etwa 4 L* zu hell und die Ecken 1,5 zu dunkel; die radiale Verstärkung brachte den Unterschied von ΔE 3,8 auf 2,67, mit jedem Bereich des Fotos innerhalb von ±0,5 L*.
  • Verzeichnung: die leichte Tonnen- oder Kissenform eines Objektivs. Micro-Four-Thirds-Kameras (Panasonic, Olympus) sind darauf ausgelegt, dass die Kamera sie korrigiert, und ihre Dateien halten fest, wie. Auf einem Mac werden diese Dateien von macOS entwickelt, das die Korrektur anwendet; sie in unserer eigenen Entwicklung zu korrigieren, ist geplant (FR-085).

Wie Fotollection ein RAW entwickelt, Schritt für Schritt

Für eine vollständige Entwicklung, die hinter der Druckvorschau, dem Zoom und dem Export steht:

  1. Erkennen des Formats an den ersten Bytes der Datei, nie an ihrem Namen, so wird auch eine umbenannte Datei oder ein RAW, das wie ein einfaches TIFF aussieht, richtig gelesen.
  2. Lesen der Zahlen des Sensors: DNG mit unserem eigenen Reader, die anderen Formate von rawler entpackt. Eine zu große oder beschädigte Datei wird abgelehnt, bevor ein Pixel dekodiert wird, mit einem Fehlercode.
  3. Werte: Schwarz auf 0 und Weiß auf 1, für jede Position des Farbfilters, gezählt ab der Ecke des aktiven Bereichs.
  4. Weißabgleich, dann Demosaicing: zuerst Hotpixel und die Grün-Balance, das richtungsabhängige Demosaicing, der Median gegen Falschfarbe (Markesteijn für X-Trans kommt in v0.15.0).
  5. Farbe: die Matrizen der Kamera, gemischt für das Licht der Aufnahme, in linearem Licht.
  6. Tonwert und Look, angepasst an die Vorschau der Kamera, mit ihrer Vignettierungskorrektur.
  7. Ab hier ist ein RAW-Foto wie jedes andere: Zuschnitt, Datumsstempel, Rahmen, Druckformat und Farbprofil, exportiert in voller Auflösung in 4:4:4 mit Qualität 95.

Ein paar Regeln gelten durchgehend. Es läuft immer nur eine Entwicklung gleichzeitig, verteilt auf jeden Prozessorkern und nie auf dem eigenen Thread des Fensters, so reagiert Fotollection weiter, während ein 30-MP-Foto entwickelt wird. Exporte laufen immer auf dem Prozessor, so kommt ein Abzug auf jedem Computer gleich heraus; die Grafikkarte beschleunigt nur, was du beim Bearbeiten siehst. Und der Code ist unser eigener, geschrieben nach den veröffentlichten Spezifikationen und Papers, nicht aus anderen Projekten kopiert, und dann geprüft: an den synthetischen Testbildern oben, an neun RAW-Dateien von neun Kameras (CC0, von raw.pixls.us) und durch absichtlich abgeschnittene und beschädigte Dateien, damit eine schlechte Datei ein Fehler ist, nie ein Absturz.

Seit v0.10.0: unsere eigene Entwicklung für jede Bayer-Kamera. rawler entpackt nur die Dateien, der Rest ist von Fotollection. Vollständige Entwicklung der neun Beispieldateien, Median aus 3, auf demselben Laptop: unsere Entwicklung mit ihrem saubereren Demosaicing, gegenüber dem einfacheren von rawler und dem von macOS:

Kamera (Format) Fotollections eigene rawler macOS
Panasonic GX9 (RW2, 20 MP) 280 ms 216 ms 436 ms
Panasonic S5 (RW2, 24 MP) 442 ms 301 ms 1.044 ms
Olympus E-M10 III (ORF, 16 MP) 308 ms 364 ms 1.164 ms
Sony A7 III (ARW, 24 MP) 372 ms 241 ms 488 ms
Canon R10 (CR3, 24 MP) 494 ms 360 ms 1.647 ms
Ricoh GR III (DNG, 24 MP) 523 ms 650 ms —
Nikon D750 (NEF, 24 MP) 502 ms 402 ms 412 ms
Canon 5D Mark IV (CR2, 31 MP) 691 ms 565 ms 418 ms
Fujifilm X-T3 (RAF, 26 MP, X-Trans) als Nächstes 524 ms 1.339 ms

Unsere braucht für ihr saubereres Demosaicing und ihre angepasste Farbe eine Zehntel- bis Viertelsekunde mehr als die von rawler und bleibt bei den meisten Kameras schneller als macOS; sie geschieht einmal pro Foto, und ein Regler stellt danach eine bereitgehaltene Kopie in 4 bis 11 ms neu fertig. Auf einem Mac bleiben die Dateien von Panasonic und Olympus wegen der Objektivkorrektur bei macOS, bis unsere eigene Entwicklung die Verzeichnung korrigiert. Die grauen Felder der S5 kommen neutraler heraus als über rawler (ein Farbstich von 1,42 gegenüber 2,43, wobei 0 vollkommen grau ist). Fujifilm X-Trans folgt mit Markesteijn, und danach die Entwicklung auf der Grafikkarte für die Vorschau, mit dem Ergebnis des Prozessors als Referenz.

Vorschläge für die besten Aufnahmen: geprüft an der Wahl eines Menschen

Wir haben 95 echte Fotos von Hand in 22 Momente sortiert und das beste Foto gewählt, wo es ein klares gab. Die Gruppen und Vorschläge von Fotollection wurden dann an dieser Wahl geprüft.

6 von 6Momente mit einem klaren besten: ein akzeptabler Vorschlag
15 von 22Momente gefunden, nie zwei verwechselt
17 msum ein Foto zu analysieren, 28 ms mit Gesichtern
Vorschläge für die besten Aufnahmen, bewertet an von Hand sortierten Fotos
Vorschläge für die besten Aufnahmen, bewertet an von Hand sortierten Fotos7

Wie die Vorschläge entstehen und bewertet werden

Zuerst werden die Momente gefunden. Die Fotos werden nach ihrer Aufnahmezeit geordnet, auf Bruchteile einer Sekunde genau, und ein neuer Moment beginnt, wenn die Pause länger ist als 2 Sekunden oder als das Vierfache der üblichen Pause, wenn Kamera oder Objektiv wechseln oder wenn sich der Ort um mehr als 30 m verschiebt. Jedes Foto bekommt außerdem eine kleine visuelle Signatur, seine Verteilung von Hell und Dunkel und seine Mischung der Farben, und eine Aufnahme gehört nur dann zum Moment, wenn sie den Aufnahmen davor noch ähnelt, wobei ein Schritt zur Seite oder ein Zoom, den die Brennweite erklärt, erlaubt ist.

Dann wird innerhalb eines Moments jedes Foto an einer verkleinerten Kopie gemessen: die Schärfe des Motivs, Verwacklung, Belichtung (ausgefressene Lichter, abgesoffene Tiefen, Helligkeit), Rauschen und, wo Gesichter zu sehen sind, ob die Augen offen und die Gesichter der Kamera zugewandt sind. Jeder Messwert wird nur mit den anderen Aufnahmen desselben Moments verglichen und gewichtet (Motivschärfe 35 %, offene Augen 20 %, Verwacklung 15 %, Belichtung 15 %, ausgefressene Lichter 10 %, der Rest weniger), mit einer kleinsten Stufe, damit ein Unterschied, der auf einem Abzug zu klein zum Sehen ist, nie den Ausschlag gibt. Der Vorschlag kommt mit seiner Begründung, nichts wird gelöscht, und alles läuft auf deinem Computer, in 17 ms pro Foto, 28 ms mit Gesichtern.

Damit das ehrlich bleibt, wurden 95 echte Fotos von Hand in 22 Momente sortiert, mit dem zu behaltenden Foto für die 6 Momente, die eine klar beste Aufnahme hatten. Jede Verbesserung wurde daran gemessen:

Schritt Gefundene Momente (von 22) Falsch zusammengelegt Annehmbare Wahl
Nur Bild-Fingerabdruck 3 0 2 von 2
Plus Aufbau und Farbe 13 0 3 von 4
Plus Zoom aus der Brennweite 15 0 5 von 6
Plus faire Schärfe und verdeckte Gesichter 15 0 6 von 6

Zwei verschiedene Momente werden nie zusammengelegt; die zwei zusätzlichen Gruppen sind Paare, die von Hand als unklar markiert wurden. Die noch verpassten Momente sind solche, in denen sich Pose oder Bildausschnitt stark ändern, etwa ein Gericht, das noch einmal von der anderen Seite fotografiert wurde.

Die Begriffe hinter den Zahlen

Foto- und Druckjargon, so erklärt, wie wir es einem Freund erklären würden.

Was ist ΔE (Delta E)?16

ΔE misst, wie weit zwei Farben für ein menschliches Auge auseinanderliegen, berechnet in einem Farbraum, der unserem Sehen nachgebildet ist (CIELAB, mit der Formel von 2000). 0 heißt identisch. Um 1 liegt der kleinste Unterschied, den ein geschultes Auge im direkten Vergleich erkennt; 2 bis 3 sehen die meisten Menschen; über 5 wirken die Farben verschieden. Der Druckexport von Fotollection liegt im Mittel bei 0,19.

Was ist SSIM?17

SSIM, der Index der strukturellen Ähnlichkeit, vergleicht die Formen und Texturen zweier Bilder statt einzelner Pixel, was näher daran ist, wie wir Unschärfe oder blockige Kompression bemerken. 1 heißt identisch. Über etwa 0,98 können die meisten Menschen die beiden ohne Hineinzoomen nicht unterscheiden.

Wie viele Farben fasst ein JPEG?6,18

Ein JPEG speichert 8 Bit für Rot, Grün und Blau: je 256 Stufen, etwa 16,7 Millionen Farben. Das ist auch das, wovon Fotolabore drucken. Kamera-RAW-Dateien fassen 12 bis 14 Bit, und neuere iPhones können 10-Bit-HEIC speichern, was beim Bearbeiten hilft; für einen fertigen Abzug zeigt ein gut gemachtes 8-Bit-JPEG keine Stufen zwischen den Tönen.

JPG oder JPEG? Und sollte ich PNG nehmen?

JPG und JPEG sind dasselbe Format: Das alte Windows erlaubte nur Endungen mit drei Buchstaben. PNG ist verlustfrei, es wird also nie etwas verworfen, aber ein als PNG gespeichertes Foto ist oft drei- bis fünfmal größer, und die meisten Automaten und Labore erwarten JPEG. Ein JPEG mit Qualität 90 oder mehr und voller Farbauflösung (4:4:4), wie Fotollection es für den Druck exportiert, ist auf Papier nicht vom Original zu unterscheiden.

Was bedeuten 4:4:4 und 4:2:0?

Unsere Augen sehen Details vor allem in der Helligkeit, weniger in der Farbe, deshalb kann JPEG die Farbe mit geringerer Auflösung speichern. 4:4:4 behält die volle Farbauflösung; 4:2:0 behält ein Viertel davon, was Dateien kleiner macht, aber farbige Kanten weicher werden lässt, etwa roten Text oder einen blauen Himmel hinter Blättern. Abzüge verdienen 4:4:4; soziale Medien komprimieren ohnehin alles neu in 4:2:0.

sRGB, Display P3, Adobe RGB und Farbprofile19,20,21

Ein Farbprofil sagt der Software, was die Zahlen in einer Datei bedeuten. sRGB ist der klassische Farbumfang des Webs. Display P3, genutzt von iPhones und neueren Kameras, erreicht etwa 25 % mehr Farben, besonders Rot- und Grüntöne. Verliert ein P3-Foto sein Profil, werden seine Zahlen als sRGB gelesen, und es wirkt ausgewaschen: Das ist der Sättigungsverlust von 13 %, den wir gemessen haben. Adobe RGB, das manche Kameras für die Druckarbeit anbieten, ist ebenfalls größer als sRGB, vor allem bei Grün- und Cyantönen. Fotollection behält für Abzüge das Profil, das ein Foto hat, und wandelt für soziale Medien sauber in sRGB um.

Welche DPI braucht ein Abzug?

DPI gibt an, wie viele Pixel auf jeden Zoll Papier fallen. Bei 300 DPI wirkt ein Abzug selbst aus der Nähe scharf; 150 bis 200 DPI genügen auf Armlänge. Ein 10 × 15-cm-Abzug mit 300 DPI braucht 1.800 × 1.200 Pixel, also reicht jedes Foto von Smartphone oder Kamera; die Größenempfehlung in der App sagt dir, wie groß jedes Foto werden kann.

Warum sehen Fotos auf Facebook schlechter aus?

Facebook verkleinert jedes Foto auf höchstens 2.048 px, komprimiert es mit geringerer Qualität und halbierter Farbauflösung neu und verwirft Farbprofile. Ein Foto, das zu groß ankommt, wird zweimal verkleinert, einmal von dir und einmal von Facebook. Schickst du es schon mit 2.048 px, in sRGB und leicht geschärft, komprimiert Facebook es nur einmal neu, und die Farben stimmen bereits.

Mach die Messungen selbst

Alles lässt sich mit deinen eigenen Fotos wiederholen. Die Skripte laden nie ein Foto hoch und kopieren keins; nur Zahlen werden behalten. Die vollständigen Tabellen, mit jedem Lauf, stehen in RESULT.md.

bench/run.sh ~/Pictures/some-folder 3
uv run bench/quality/audit.py ~/Pictures/some-folder /tmp/out
uv run bench/quality/share_audit.py ~/Pictures/some-folder /tmp/share

RESULT.md auf GitHub lesen Zurück zur Startseite

  1. 1. SIMD (single instruction, multiple data) lässt einen Prozessor an vielen Werten zugleich arbeiten: Ein Befehl wirkt auf mehrere Zahlen, die nebeneinander in einem breiten Vektorregister liegen, etwa das Rot, Grün und Blau vieler Pixel. Prozessoren von Intel und AMD bieten es als SSE und AVX; Apple Silicon und andere Arm-Prozessoren als NEON. Intel, AMD und Arm sind Marken ihrer Inhaber.
  2. 2. Einheiten: px ist ein Pixel, ein Punkt eines Bildes; MP (Megapixel) sind eine Million Pixel, ein 20-MP-Foto hat also etwa 5.472 × 3.648 px; ms ist eine Millisekunde, eine tausendstel Sekunde; MB und GB sind Megabyte und Gigabyte; RAM (Random-Access Memory) ist der Arbeitsspeicher des Computers.
  3. 3. Rust und das Rust-Logo sind Marken der Rust Foundation. Der Kern von Fotollection ist in Rust geschrieben und läuft direkt auf deinem Computer.
  4. 4. EXIF (Exchangeable Image File Format) ist der Standard, gepflegt von Japans JEITA und CIPA, für die Informationen, die eine Kamera in jedes Foto schreibt: Kamera und Objektiv, Datum und Uhrzeit, die Belichtung, oft die GPS-Position, und ein kleines eingebettetes Vorschaubild.
  5. 5. Eine RAW-Datei enthält, was der Sensor der Kamera aufgezeichnet hat, bevor die Kamera daraus ein Bild machte, so lassen sich Farbe, Helligkeit und Details noch später festlegen, ähnlich wie ein Negativ entwickelt wird. Jeder Hersteller hat sein eigenes Format (CR3 bei Canon, NEF bei Nikon, ARW bei Sony, RW2 bei Panasonic und andere); DNG (Digital Negative) ist das offene RAW-Format, veröffentlicht von Adobe.
  6. 6. JPEG ist das Bildformat der Joint Photographic Experts Group, standardisiert als ISO/IEC 10918-1 und ITU-T T.81.
  7. 7. Für jedes Diagramm gilt: Die Werte dienen zur Orientierung, gemessen auf einem gewöhnlichen Laptop (Apple M3, 16 GB); deine hängen von deinem Computer ab.
  8. 8. Adobe, Lightroom und Lightroom Classic sind Marken von Adobe Inc. in den USA und anderen Ländern. Fotollection steht in keiner Verbindung zu Adobe und wird nicht von Adobe unterstützt; es folgt den Tasten und dem Aufbau, die Lightroom-Nutzer schon kennen. Das Lightroom-Logo stammt von Wikimedia Commons, wo es als Textlogo gemeinfrei ist.
  9. 9. Das Fenster der App ist mit Tauri gebaut und wird von der Web-Ansicht des Systems gezeichnet: WebKit (WKWebView) unter macOS, Microsoft Edge WebView2 unter Windows und WebKitGTK, die GTK-Portierung von WebKit, unter Linux. Tauri ist ein Projekt des Tauri Programme innerhalb der Commons Conservancy; WebKit ist eine Marke von Apple Inc.; GTK ist ein Projekt der GNOME Foundation; Microsoft Edge und WebView2 sind Marken der Microsoft Corporation. Der Browservergleich lief mit derselben Aufgabe in Headless Chromium 156, dem Open-Source-Projekt hinter Google Chrome, mit einem Web Worker pro Prozessorkern.
  10. 10. Der Prager Ordner gehört dem Autor und ist nicht veröffentlicht (© @hoangphi01, alle Rechte vorbehalten). Mediane aus 3 Läufen von bench/trip.sh und von measure_folder auf seinen JPEGs, auf einem Apple M3 mit 16 GB, mit anderen geöffneten Apps, am 2026-11-04, mit dem Export von v0.9.7; führ sie zum Vergleich auf einem eigenen Ordner aus.
  11. 11. p50 und p95 sind Perzentile: p50, der Median, ist die Zeit, unter der die Hälfte der Läufe blieb; p95 ist die Zeit, unter der 95 von 100 Läufen blieben, so zeigt sie die langsamen Fälle, die ein Durchschnitt verdeckt.
  12. 12. Adobe DNG Converter wurde für diese Seite nicht ausgeführt. Der Wert ist eine Schätzung Dritter (1.000 CR3-Dateien in 20–30 Minuten auf moderner Hardware, Rechner nicht angegeben), aus dem Blogbeitrag von convertintomp4.com zur Stapelumwandlung von RAW in DNG. Adobe ist eine eingetragene Marke von Adobe Inc.
  13. 13. CMOS und CCD sind die beiden Arten von Bildsensoren, ein Raster lichtempfindlicher Zellen, das Licht in elektrische Ladung umwandelt. Fast jede Kamera und jedes Smartphone nutzt heute CMOS (complementary metal-oxide-semiconductor); CCD (charge-coupled device) war in früheren Kameras verbreitet.
  14. 14. PSNR (peak signal-to-noise ratio, Spitzen-Signal-Rausch-Verhältnis) vergleicht zwei Bilder Pixel für Pixel und gibt ihren Unterschied in Dezibel an: je höher, desto näher. Über etwa 40 dB ist der Unterschied kaum zu sehen.
  15. 15. TIFF (Tagged Image File Format) ist ein flexibles Bildformat, das heute Adobe pflegt; viele RAW-Formate, darunter DNG, bauen auf seiner Struktur auf.
  16. 16. ΔE2000 (CIEDE2000) ist die Farbabstandsformel der Internationalen Beleuchtungskommission (CIE), genormt als ISO/CIE 11664-6; der CIELAB-Farbraum, in dem sie arbeitet, ist ISO/CIE 11664-4.
  17. 17. SSIM wurde von Zhou Wang, Alan C. Bovik, Hamid R. Sheikh und Eero P. Simoncelli eingeführt in Image quality assessment: from error visibility to structural similarity, IEEE Transactions on Image Processing, 13(4), 2004.
  18. 18. HEIF (High Efficiency Image File Format) ist das Bildformat nach ISO/IEC 23008-12; HEIC ist seine mit HEVC (H.265) komprimierte Variante, in der iPhones Fotos standardmäßig speichern. Ein HEIC-Foto ist etwa halb so groß wie ein JPEG ähnlicher Qualität.
  19. 19. sRGB wurde 1996 von HP und Microsoft geschaffen und als IEC 61966-2-1 genormt.
  20. 20. Display P3 ist ein von Apple Inc. definierter Farbraum, der auf dem Farbraum DCI-P3 der Kinoindustrie (SMPTE) beruht.
  21. 21. Adobe RGB (1998) ist ein von Adobe Inc. spezifizierter Farbraum; Adobe ist eine eingetragene Marke von Adobe Inc.

Die Fotoservices bei dm und Rossmann stammen von CEWE, einer Marke der CEWE Stiftung & Co. KGaA. Die Druckformate wurden im Oktober 2026 mit der Preisliste von dm abgeglichen; die Läden können sie ändern.

Die Prager Fotos in den Screenshots (die Straßenbahnen, die Straßen, die Moldau) hat @hoangphi01 im November 2026 mit einer Lumix GX9 aufgenommen: © @hoangphi01, alle Rechte vorbehalten. Sie fallen nicht unter die Lizenz der App und dürfen nicht weiterverwendet werden. Die übrigen Demofotos sind gemeinfrei (CC0) auf Wikimedia Commons, von Dktue (7 Fotos), Pierre Blaché aus Paris, Frankreich (2) und Kate Branch (1). Die Katze in den Screenshots von Druckkorb und bester Aufnahme hat ebenfalls @hoangphi01 mit der GX9 fotografiert, alle Rechte vorbehalten; die weichere, verwackelte und dunklere Kopie daneben wurden aus diesem einen Foto gemacht, um zu zeigen, wie die beste Aufnahme gewählt wird. Jede Datei, ihre Seite und ihre Prüfsumme.

Die RAW-Messungen nutzen neun gemeinfreie Beispiele (CC0) von raw.pixls.us, eines pro Format; scripts/fetch-raw-samples.py lädt und prüft sie.

Die auf dieser Website genannten RAW-Formate gehören den Kameraherstellern, die sie definieren: RW2 (Panasonic Holdings Corporation), CR2 und CR3 (Canon Inc.), NEF (Nikon Corporation), ARW (Sony Group Corporation), RAF (FUJIFILM Corporation) und ORF (OM Digital Solutions Corporation, früher Olympus). DNG ist eine offene Spezifikation, veröffentlicht von Adobe Inc. Fotollection liest sie mit einem in Fotollection eingebauten Reader, unter macOS zuerst über die Codecs des Systems (unter Windows ist Microsofts Raw Image Extension, falls installiert, ein letzter Ausweg); es wird von keinem dieser Unternehmen hergestellt oder unterstützt.

Kameranamen und -logos in den Screenshots und im Info-Rahmen der App sind Marken ihrer Inhaber und werden nur verwendet, um zu zeigen, welche Kamera ein Foto aufgenommen hat: Apple (Apple Inc.), Canon (Canon Inc.), Fujifilm (FUJIFILM Corporation), Hasselblad (Victor Hasselblad AB), Leica (Leica Camera AG), Lumix (Panasonic Holdings Corporation), Nikon (Nikon Corporation), Noritsu (Noritsu Koki Co., Ltd.), Phase One (Phase One A/S), Ricoh (Ricoh Company, Ltd.), Samsung (Samsung Electronics Co., Ltd.) und Sony (Sony Group Corporation).

Apple und macOS sind Marken von Apple Inc.; Windows von Microsoft Corporation; Linux ist die eingetragene Marke von Linus Torvalds in den USA und anderen Ländern; Ubuntu von Canonical Ltd.; Debian von Software in the Public Interest, Inc.; Fedora, Red Hat, RHEL und CentOS von Red Hat, Inc.; openSUSE von SUSE LLC; Pop!_OS von System76, Inc.; Rocky Linux von der Rocky Enterprise Software Foundation; AlmaLinux von der AlmaLinux OS Foundation; ChromeOS von Google LLC; NVIDIA von NVIDIA Corporation; die Namen der anderen Linux-Distributionen gehören ihren Projekten; Facebook und Instagram von Meta Platforms, Inc.; GitHub von GitHub, Inc.; Google Analytics von Google LLC; Lightroom von Adobe Inc.; IrfanView von Irfan Škiljan; VietQR von NAPAS; Wikimedia Commons von der Wikimedia Foundation. Die Zeichen von Apple, Windows und Linux (Tux, zuerst gezeichnet von Larry Ewing) stammen von Simple Icons (CC0) und zeigen nur, um welches System es in einer Spalte oder einem Schritt geht.

Fotollection ist ein unabhängiges Open-Source-Projekt. Es ist mit keinem dieser Unternehmen verbunden und wird von keinem gesponsert oder unterstützt, und jede andere Marke gehört ihrem Inhaber.

Name und Logo von Fotollection kennzeichnen die offizielle App von @hoangphi01. Offizielle Downloads gibt es nur auf fotollection.org und in den GitHub-Releases des Projekts. Die Lizenz GPL-3.0 erlaubt jedem, Kopien weiterzugeben oder zu verkaufen, verändert oder nicht, solange diese Lizenz bleibt und der Quellcode angeboten wird; eine veränderte oder weiterverkaufte Kopie darf Namen oder Logo von Fotollection nicht so verwenden, dass sie wie die offizielle App wirkt.

Du möchtest Fotollection weitergeben, verkaufen oder darauf aufbauen? Sag dem Autor bitte vorher Bescheid, mit einem Issue auf GitHub (github.com/hoangphi01/fotollection/issues). Die App ist kostenlos und in der Freizeit entstanden; eine kurze Nachricht ist der faire Weg, Danke zu sagen.

Du zitierst, testest oder zeigst die App, oder nutzt diese Screenshots? Bitte nenne Fotollection und verlinke fotollection.org.