Mérések, nem ígéretek
Teljesítmény
Ezen az oldalon minden szám valódi fotókból származik, egy átlagos laptopon (Apple M3, 16 GB), az ezeket előállító szkriptek pedig a tárolóban vannak, így bárki újra lefuttathatja őket. Minden diagram alatt ott áll, mit jelent a nyomataidra nézve, a végén pedig a számok mögötti fogalmak.
Miért gyors a Fotollection
Semmi varázslat. Néhány döntés, amely még az első kódsor előtt megszületett, és mindegyik mérve.
Natív kód minden magon
A Fotollection munkája Rustban fut, a processzorodra fordítva és minden magjára elosztva, a processzorok pixelekhez kínált vektorutasításaival (SIMD).1,2,3
23,5 / sexportált fotó 16 MP-nél
Csak ami kell
Egy mappa megnyitása minden fájlnak csak az EXIF-jét és a kis beágyazott bélyegképét olvassa be, sosem a teljes fotót. A bélyegképek egy lemezes gyorsítótárba kerülnek.4
0,12 s1000 fotó megnyitása
Sosem több pixel, mint a képernyő
Egy előnézet legfeljebb 1600 px, egy memóriában tartott 2048 px-es másolatból készül. A teljes fotót csak nagyításkor olvassa be, részenként.
17 msegy előnézet újrarajzolása
Kész, mielőtt kattintasz
Amint a bélyegképek elkészültek, minden fotó előnézete elkészül a háttérben és a lemezre kerül, a memória negyede pedig a képernyőn lévő fotó körüli fotókat tartja.
27 msbármelyik fotó megnyitása
Semmi sem készül kétszer
Egy színcsúszka csak a színt változtatja, a méretet sosem. Minden színcsúszka egyetlen 33 × 33 × 33 színből álló táblába olvad össze, így tíz csúszka annyiba kerül, mint egy.
2 mstíz színcsúszka egy előnézeten
Memória a kereten belül
A Fotollection egyszerre csak annyi teljes méretű fotón dolgozik, amennyit a memóriakerete megenged; ezt az exportálás legnagyobb fotója határozza meg.
1,45 GBmemóriacsúcs 5035 fotóval
Méréssel hangolt kódolók
A nyomtatási fájlok kihagynak egy táblaoptimalizálást, amely 1 %-nál kevesebbel tette kisebbé őket, és a kódolási idő harmadába került.
−33 %kódolási idő a nyomtatási fájloknál
Szerkesztés közben a videokártya
Amíg egy színcsúszka mozog, a videokártya a mag által felépített táblából rajzol. Az exportálás a processzoron marad, így egy nyomat minden gépen ugyanaz.
1–2 mscsúszkalépésenként, 26 ms helyett
Akár 20× gyorsabb. A memória új használata.
A v0.11.0 újragondolja, hogyan tartja a Fotollection a fotóidat. Minden fotó előnézete elkészül a háttérben, amint a bélyegképe kész, és a lemezre kerül, a géped memóriájának negyede a látott fotó körüli fotókat tartja, a képernyőn lévő fotó pedig mindig elsőként jön. Az eredmény: bármelyik fotó, közeli vagy távoli, JPEG vagy RAW, 27 ezredmásodperc alatt nyílik meg. Egy RAW megnyitása akár 20-szor gyorsabb, mint a v0.9.0-ban, egy JPEG-é 10-szer, ugyanazon az egy út során készült 422 fotón mérve.5,6
Előtte: minden fotót a kattintáskor dekódolt
A v0.10.0-ig az előnézet akkor készült el, amikor kérted: a fájl beolvasása, a fotó dekódolása (a RAW kidolgozása), felállítása, 2048 px-esre méretezése és sRGB-be alakítása, majd a vágás, a színezés, a bélyegzés és a képernyőre kódolás. Egy Lumix GX9 20 MP-es fotóján ez JPEG-nél 274–278 ms, RAW-nál 440–531 ms volt, valahányszor olyan fotót nyitottál meg, amely nem volt az utolsó nyolc között. Egy fotóhoz elég gyors; egy út átfutásához nem.
Standard előnézetek, ahogy a Lightroom tartja őket
A v0.11.0 óta a munka, amelyre a felhasználó vár, elkészül, mielőtt kérné. Amint egy mappa bélyegképei megvannak, a Fotollection a háttérben elkészíti minden fotó 2048 px-es másolatát, szálanként egyszerre egy fotót, és a lemezen, a bélyegképek mellett tartja, kb. 0,66 MB-os JPEG-ként (az egész útra kb. 280 MB). Egy kattintás bármelyik fotóra, közelire vagy távolira, ebben a munkamenetben vagy a következőben, ebből a másolatból indul: 27 ms JPEG-nél és RAW-nál egyaránt. Ami marad, az az előnézet saját munkája (vágás, átméretezés, szín, dátumbélyeg és kódolás), ugyanaz a 27 ms, mint a memóriából. A lemezes másolatból készült előnézet átlagosan 1,35 szinttel tér el (255-ből) egy frissen készülttől, ami túl kevés ahhoz, hogy látszódjon.8
Jól használt memória, nem a lehető legkevesebb
Egy fotónézegető, amely egy 16 GB-os laptopon nyolc fotót tart a memóriában, pazarolja a laptopot. A Fotollection most a gép memóriájának negyedét adja az előnézetnek (egy 16 GB-os Macen kb. 190 fotót 2048 px-en, 20 RAW-kidolgozást a csúszkáik kedvéért, és 600 MB-ot a nagyításhoz), bájtban számolva, és a legrégebbit szabadítja fel először. Amikor egy fotó a képernyőn van, a mozgásod irányában a következő kettő és a mögötte lévő egy is betöltődik, így a nyílbillentyűk sosem várnak. A 2 GB-os plafon az exportálásra továbbra is érvényes.
A képernyőn lévő fotó az első
Egyszerre csak egy RAW kidolgozása fut, hogy egy köteg RAW-fotó beférjen a memóriába. Korábban a sor rendje a szerencsén múlt: egy épp készülő előnézet, az export méretbecslése vagy egy exportálás megvárakoztathatta a fotót, amelyre kattintottál. Most minden kidolgozás megmondja, ki vár rá, és a háttérmunka félreáll, valahányszor a képernyőn lévő fotónak szüksége van egyre. Ugyanez a munka két ritka elakadást is felszínre hozott, amelyek mára megszűntek: az egyikben minden szál egy olyan kidolgozásra várt, amelynek már nem maradt szála a futáshoz, a másikban a képernyő egy olyan képre várt, amelyet sosem kért.
| Verzió | JPEG p50 / p95 | RAW p50 / p95 | Hogyan |
|---|---|---|---|
| v0.9.0 | 274 / 286 ms | 531 / 550 ms | Kattintáskor dekódolva; a RAW a macOS-en át |
| v0.10.0 | 278 / 293 ms | 440 / 471 ms | Kattintáskor dekódolva; a RAW a saját kidolgozásunkkal |
| v0.11.0 | 27 / 32 ms | 27 / 30 ms | A lemezen lévő standard előnézetből vagy a memóriából |
Mérve a tulajdonos prágai útján (396 JPEG és 26 RAW, 20 MP) egy Apple M3-on a measure_browse segítségével: a v0.9.0 a saját címkéjéből építve, a v0.10.0 a kódján közvetlenül e változtatás előtt.
Sebesség: ezer fotó egy szempillantás alatt
Egy mappa megnyitása minden fotónak csak az EXIF-jét és a kis beágyazott bélyegképét olvassa be, nem a teljes képet, egy módosított beállítás pedig csak az előnézetet rajzolja újra. A natív Rust egy ugyanezt végző webböngészőt is megelőz: ugyanaz az exportálási sebesség, gyorsabb előnézet és negyedével kevesebb memória.9
Mi történik, amikor megnyitsz egy mappát
Egy fotómappát a Fotollection nem olvas be egészben. Minden fájlnál az EXIF-adatait (dátum, gép, hely) és azt a kis bélyegképet olvassa be, amelyet minden fényképezőgép a fájlba ment, mást nem: 1000 fotó 0,12 s, szemben azzal az 1 s-os kerettel, amelyet a kód megírása előtt szabtunk meg. Ezután a háttérben élesebb, 400 px-es bélyegképek készülnek, két szálon, hogy a Fotollection gyors maradjon, és egy lemezes gyorsítótárba kerülnek, így egy újra megnyitott mappa azonnal ott van. 5035 fotónál az importálás 383 ms-ig, a beágyazott bélyegképek 236 ms-ig tartottak.
Hová megy egy előnézet 17 ms-a
Egy beállítás módosítása az előnézetet a fotó memóriában tartott 2048 px-es másolatából rajzolja újra, sosem a teljes fájlból. Az ehhez szükséges 16,7 ms-ból a vágás és a Lanczos-szűrős átméretezés 9,7 ms, a dátumbélyeg 0,1 ms alatt, az előnézet JPEG-be kódolása a képernyőhöz pedig 7,0 ms. Ezt a kódolót méréssel hangoltuk: az export beállításaival (teljes színfelbontás és optimalizált táblák) 16,2 ms-ig tartott; a képernyőnek ezekre nincs szüksége, ezért az előnézet felezett színt és sima táblákat használ, az exportok viszont teljes színnel (4:4:4) készülnek. Kipróbáltunk egy olcsóbb átméretező szűrőt is, de ezen a processzoron lassabbnak bizonyult (12,5 ms), így maradt a Lanczos.
Natív kód egy böngészővel szemben
Ugyanazt a feladatot (dekódolás, 2:3-ra vágás, dátumbélyeg, JPEG 95-ös minőséggel) ugyanazon a 95 fotón futtattuk le a Fotollectionben és Chromiumban, magonként egy workerrel. Az exportálás sebessége ugyanannyi lett, 18,0 a 17,9 fotóval szemben másodpercenként, ami megcáfolta az első feltevésünket: a böngésző nem lassú. A natív kód melletti érvek máshol vannak: a Fotollection teljes színfelbontású 4:4:4-es fájlokat ír, ahol a böngésző kódolója felezi a színt, megtartja minden fotó színprofilját, a fájlokat közvetlenül a lemezre írja, és negyedével kevesebb memóriát használt (1,35 GB az 1,78 GB-tal szemben). Azóta a nyomtatási kódoló még gyorsabb lett: 16 MP-en másodpercenként 23,5 fotó.
Szerkesztéskor a videokártya, exportáláskor minden mag
Amíg egy színcsúszkát húzol, a videokártya ugyanabból a táblából rajzolja a lookot, amelyet a Fotollection magja épít, és amikor elengeded, a pontos renderelés veszi át a helyét. Az exportálás a processzoron marad, így egy nyomat minden gépen ugyanúgy jön ki.
Tíz csúszka egynek az áráért
Minden színcsúszka (fényerő, kontraszt, melegség, telítettség, fakítás, színezett árnyékok és csúcsfények, fekete-fehér) egyetlen 33 × 33 × 33 színből álló táblába sűrűsödik: 35 937 pontba, amelyek megmondják, hová kerül az egyes szín. Ha ezt egy fotóra alkalmazzuk, minden pixelnek megkeressük a celláját a táblában, és a cella négy sarka között interpolálunk (tetraéderes interpoláció), így tíz csúszka annyiba kerül, mint egy. A tábla felépítése minden csúszkával beállítva kb. 2,6 ms; alkalmazása egy 1600 px-es előnézetre 2,2 ms-nál kevesebb, egy 24 MP-es exportra kb. 24 ms.
Miért tűnt még lassúnak a húzás, és mit változtatott a videokártya
Lépésenként mérve egy csúszkamozdulat kb. 26 ms-ba került, és ebből maga a szín csak 2 ms volt: a többi az előnézet JPEG-be kódolása (7–11 ms) és az ablakban való újbóli dekódolása (9–15 ms). A videokártya mindkettőt megszünteti. Amikor egy húzás elkezdődik, a sima előnézet és egy maszk arról, hol van a fotó (nem a dátumbélyeg, a keret vagy a szegély), egyszer kerül át a videokártyára; minden lépésnél csak az új tábla követi, és egy kis WebGL2-program interpolálja, pontosan úgy, ahogy a mag: lépésenként 1 ms a macOS WebKitjében, 2 ms Chromiumban. Amikor elengeded, a mag pontos renderje lép a helyére. A kettőt egy erős lookon hasonlítottuk össze, minden csúszkát elmozdítva: átlagosan 0,13-mal térnek el ΔE2000-ben, a 99. percentilisen 0,77-tel, messze az 1 alatt, amelyet a szem egymás mellett még észrevesz.
Semmilyen kapcsolóra nincs szükség. Az első húzáskor a Fotollection maga ellenőrzi: ha nincs WebGL2, ha szoftveres a renderelő, vagy ha egy próbalépés 8 ms-ig vagy tovább tart, a munkamenet végéig a processzor útján marad. Egy szoftveres renderelő a tesztben lépésenként 16,5 ms-ot igényelt, így ott helyes a processzornál maradni.
Exportálás minden magon
Egy fotó dekódolása és kódolása egy-egy magon fut, így az exportálás akkor gyors, ha egyszerre több fotón dolgozik. Hogy hányon, az a memórián múlik: 24–26 MP-es fotókon 2 egyszerre másodpercenként 4,9 fotót adott, 4 9,4-et, 6 11,5-öt, 8 pedig 12,5-öt, miközben a memória 0,49-ről 1,21 GB-ra nőtt. A Fotollection a számot egy 1,6 GB-os memóriakeretből és a legnagyobb fotó méretéből választja, és 6-nál megáll, mert egy valódi út fotóin 8 egyszerre nem volt gyorsabb, és 0,2 GB-tal több memóriát használt. Az exportálás sosem használja a videokártyát: egy nyomatnak minden gépen ugyanolyannak kell lennie, és az exportokat bájtról bájtra összevető tesztek erre épülnek.
Egy valódi út: 422 fájl Prágából
A tesztkészletek szépíthetnek, ezért íme egy mappa pontosan úgy, ahogy egy prágai hétvége után lekerült egy Lumix GX9-ről: 396 darab 20 MP-es JPEG, egyenként kb. 11 MB, mellettük 26 RAW fájl, összesen 4,7 GB. Megnyitáskor 0,23 másodperc alatt beolvasódik minden fájl EXIF-je. Az előnézet 19 ms alatt rajzolódik újra, egy RAW 0,35 másodperc alatt dolgozódik ki, tíz képeslap pedig 21 ms alatt rajzolódik újra. 2026. november 3-án ezeken a nagy fájlokon két szám nem fért bele a keretébe: az exportálás másodpercenként 7,6 fotót készített, a memóriacsúcs pedig 2,14 GB volt. Az ok kiderült, és a v0.9.7 javította: a JPEG-ek exportálása most másodpercenként 10,1, és a teljes futás 1,31 GB alatt marad.10,11
Két elszalasztott keret, és amit találtunk
Ezeken a 20 MP-es fájlokon az első futás két keretet nem teljesített: az exportálás másodpercenként 7,6 fotóval ment, a memória csúcsa pedig 2,14 GB volt, a 2 GB-os plafon felett. Egy fotó minden szakaszának időmérése megmutatta, hová megy az idő: a dekódolás kb. 100 ms, a vágás 2 ms, a nyomat kódolása 203 ms. A nyomtatási kódoló egy második menetben optimalizálta a tábláit, amihez a kép minden együtthatóját a memóriában tartotta, fotónként kb. 160 MB-ot, hat fotónál egyszerre kb. 1,5 GB-ot, mindössze 0,9 %-kal kisebb fájlokért. A standard táblákkal sávokban írja a fájlt: 138 ms, ugyanaz a hiba a renderelt képhez képest, néhány kilobájttal több.
A memória egy része egyáltalán nem a Fotollectioné volt. A benchmark minden magon készítette a bélyegképeit, ahol a Fotollection két háttérszálat használ, és a saját előnézeti méréseit az exportálás alatt is életben tartotta; úgy mérve, ahogy a Fotollection dolgozik, 0,35–0,39 GB marad, mielőtt egy exportálás elindul. A v0.9.7 óta az egyszerre feldolgozott fotók száma az export legnagyobb fotójához is igazodik (nagyon nagyoknál kevesebb), így a csúcs bármilyen méretnél a plafon alatt marad: ennél a mappánál másodpercenként 10,1 fotó és 1,31 GB.
Memória: 5035 fotó, és egyenletes marad
A Fotollection fotónként csak néhány bájtot tart a memóriában, a bélyegképeket lemezes gyorsítótárba írja, és egyszerre csak annyi teljes méretű képen dolgozik, amennyi a memóriakeretébe belefér. Így a memória egyenletes marad, ahogy egy út több ezer fotóra nő.
Miért nem nő a memória a mappával
A Fotollection fotónként néhány bájtot tart a könyvtárában (5035 fotóra 13 MB), a bélyegképeket nem a memóriában tartja, hanem egy lemezes gyorsítótárba írja, korlátozott számú előnézetet tart a memóriában, és egyszerre csak annyi teljes méretű fotón dolgozik, amennyi belefér a keretébe. A képernyőn lévő rács virtuális: csak a látható csempék léteznek. A teszthez ugyanazt a 95 fotót 53-szor linkeltük be egy 5035 fájlos mappába:
| 95 fotó | 5035 fotó | |
|---|---|---|
| Importálás és EXIF | 5 ms, 7 MB | 383 ms, 13 MB |
| 400 px-es bélyegképek a lemezes gyorsítótárba | 47,8 fotó/s | 46,4 fotó/s |
| Exportálás, 6 egyszerre | 18,0 fotó/s | 15,4 fotó/s, 0 sikertelen |
| A teljes futás csúcsmemóriája | 1,35 GB | 1,45 GB |
53-szor több fotó 0,1 GB-tal több memóriába került. A hosszú exportálás fotónként csak azért kicsit lassabb, mert több mint öt percig futott, és egy laptop processzora tartós terhelés alatt lelassul.
Nyomtatási minőség: a nyomat olyan, mint a fotó
A webes szerkesztővel készült nyomatok gyakran fakónak tűnnek: a szerkesztő elhagyja a színprofilt, 2000 px-re kicsinyíti a fotót, és 80-as minőséggel, felezett színnel menti. A Fotollection megtartja a profilt, és teljes felbontásban, 4:4:4-ben exportál.
Miért tűnnek laposnak a webes szerkesztőből készült nyomatok
A teszt 20 fényképezőgépes fotót és 5 Display P3-as változatot (a friss telefonok és Macek szélesebb színterét) exportál a Fotollection valódi exportján keresztül, majd mindkét fájlt egy független dekóderrel olvassa be, a színprofiljukon át CIELAB-ba alakítja, és pixelről pixelre összeveti az eredetivel. Egy tipikus webes szerkesztő exportja ugyanezen az összevetésen megy át: a profil elhagyva, 2000 px-re kicsinyítve, majd a nyomtatáshoz visszanagyítva, 80-as minőséggel és felezett színnel (4:2:0) mentve.
| Medián | Fotollection, sRGB | Webes szerkesztő | Fotollection, Display P3 | Webes szerkesztő |
|---|---|---|---|---|
| ΔE2000 (színhiba, 1 alatt láthatatlan) | 0,19 | 1,39 | 0,31 | 2,15 |
| PSNR | 52,6 dB | 37,9 dB | 50,8 dB | 37,0 dB |
| Megmaradt telítettség | 100 % | 99,9 % | 99,9 % | 86,8 % |
| Megmaradt finom részletek | 99,8 % | 13 % | 100 % | 18 % |
Két ok magyarázza a lapos hatást. A 2000 px-re kicsinyítés és a labornak való visszanagyítás eldobja a finom részletek 87 %-át, amelyektől egy nyomat élesnek látszik. A színprofil elhagyása pedig egy Display P3-as fotót úgy olvas be, mintha sRGB volna, ami elveszi a telítettsége 13 %-át. A Fotollection megtartja a profilt (25 fájlból 25-nél), a fotó teljes felbontásán, teljes színnel (4:4:4) exportál 95-ös minőséggel (akkor így mértük; a v0.13.0 óta alapból 90, ami még mindig a látható különbség alatt van), és a nagyobb hibái csak az éles széleken vannak, ahol minden JPEG a legkeményebben dolgozik. Még hátravan: valódi iPhone HEIC-fájlok, és spektrofotométerrel mért nyomatok.
Fényképezőgépes RAW: nyisd meg úgy, ahogy van
A Fotollection kilenc elterjedt fényképezőgép RAW fájljait nyitja meg úgy, ahogy vannak, konvertálás nélkül, Windowson és Linuxon pedig telepítés nélkül is. A v0.10.0 óta a teljes kép a saját kidolgozása minden Bayer-érzékelős gépnél, a gép saját adataiból készítve, ahogy egy RAW-szerkesztőben, míg az Adobe DNG Converter csak egyik RAW fájlt alakítja át egy másikká.12,13,14,15
Mit rögzít valójában egy érzékelő
A fényképezőgép érzékelője apró kutak, úgynevezett fotodiódák (photosite-ok) millióiból álló rács. Amíg a zár nyitva van, mindegyik összegyűjti a rá eső fényt, és elektromos töltéssé alakítja; amikor bezárul, egy átalakító minden töltésből egy számot csinál. Az összefüggés lineáris: kétszer annyi fény kétszer akkora számot ad. A szemünk egyáltalán nem lineáris, a fényerőt arányokban ítéli meg, ezért néz ki egy RAW fájl sötétnek és laposnak, amíg ki nem dolgozzák.
Kétféle érzékelő olvassa ki ezt a rácsot:
- A CCD (charge-coupled device, töltéscsatolt eszköz) minden fotodióda töltését soronként a chip szélén lévő egyetlen erősítőhöz tolja. Ez volt az első digitális gépek és sok korai középformátumú hátfal érzékelője: tiszta képek, de lassú kiolvasás és nagy energiaigény.
- A CMOS minden fotodiódának saját erősítőt ad, és egyszerre sokat olvas ki közülük. Gyorsabb, kevesebb energiát fogyaszt és olcsóbb gyártani, így ma szinte minden fényképezőgépben és telefonban ez van. A legtöbb CMOS-érzékelő egymás után olvassa ki a sorait, ezért dőlhet meg egy gyorsan mozgó téma az elektronikus zárral készült fotón (ez a rolling shutter), és ezért dőlnek kevésbé a sokkal gyorsabban kiolvasó, rétegzett (stacked) érzékelők.
A számoknak sokkal több lépcsőjük van, mint egy JPEG-nek. Egy fényképezőgép fotodiódánként 12 vagy 14 bitet tárol, 4096 vagy 16 384 szintet, ahol egy JPEG 8 bitet, 256 szintet tart meg. Ezek a plusz szintek teszik lehetővé, hogy sávosodás nélkül emelj meg egy árnyékot vagy húzz vissza egy világos eget. És a fény hiánya sem nulla: minden érzékelő hozzáad egy kis eltolást, a feketeszintet, hogy a fekete körüli zaj ne vágódjon le. A Nikon D750 mintájában a fekete 600, a legnagyobb érték pedig, amelyet az érzékelő tárolni tud, a fehérszint, 15 520. Bármely RAW-kidolgozó legelső dolga, hogy ezt a két számot 0-ra és 1-re hozza, a színszűrő minden pozíciójára külön, mert egyes gépek mindegyiknek saját feketeszintet adnak.
A szín az egyes fotodiódák fölötti szűrőből jön
Egy fotodióda csak azt méri, mennyi fény érkezik, a színét soha. Hogy színt lásson, az érzékelőt egy színszűrő-tömb fedi: minden fotodióda fölött egy apró piros, zöld vagy kék szűrő, így mindegyik csak a színkép egy részét számolja.
- A Bayer-minta, amelyet Bryce Bayer szabadalmaztatott a Kodaknál 1976-ban, egy 2 × 2-es négyzetet ismétel: egy piros, két zöld, egy kék. A fotodiódák fele azért zöld, mert a szemünk a részletek érzékelésének nagy részét a színkép közepéből veszi, így a zöld hordozza az élesség nagy részét. Szinte minden fényképezőgép ezt a mintát használja, négy irány egyikében (RGGB, BGGR, GRBG, GBRG), amelyet a fájlnak meg kell adnia.
- Az X-Trans, a Fujifilm 2012 óta használt mintája, egy 6 × 6-os négyzetet ismétel, minden sorban és minden oszlopban pirossal, zölddel és kékkel. Szabálytalan elrendezése miatt a finom, ismétlődő részleteken kevésbé valószínű a színes moaré, így a Fujifilm elhagyhatja azt a lágyító szűrőt, amelyet sok érzékelő hordoz, egy nehezebb rekonstrukció árán.
- Más megoldások: a monokróm érzékelőkön egyáltalán nincs szűrő, így minden fotodióda a teljes részletet látja (a Leica Monochrom gépei); a Sigma Foveonja három réteget rak egymásra, amelyek a szilícium különböző mélységeiben nyelik el a színeket; sok telefon négy azonos színű fotodiódát csoportosít (Quad Bayer), és gyenge fényben egyként olvassa ki őket.
Egy 24 MP-es Bayer-érzékelő tehát 24 millió számot rögzít, mindegyiket egyetlen színre: minden pixel három színéből kettő hiányzik. Ebből a mozaikból képet csinálni a demozaikolás dolga, lásd lent.
Mit tartalmaz egy RAW fájl
A JPEG kész kép: a gép már minden döntést meghozott. A RAW fájl az érzékelő számait e döntések előttről őrzi meg, mindazzal együtt, ami ahhoz kell, hogy később meghozzuk őket:
- magukat a mintákat, fotodiódánként egyet, és hogy melyik színszűrő alatt ült mindegyik;
- a fekete- és a fehérszintet;
- az aktív területet (azokat a fotodiódákat, amelyek fényt kaptak; a szélein néhány sor és oszlop szándékosan le van takarva, hogy a feketét mérjék) és a gép alapértelmezett vágását;
- a fehéregyensúlyt, amelyet a gép a fotó készítésekor választott;
- a színmátrixokat, amelyek megmondják, hogyan viszonyul ennek az érzékelőnek a saját pirosa, zöldje és kékje az ember által látott színekhez;
- egy előnézetet, egy JPEG-et, amelyet maga a gép készített a saját színével és tónusával, plusz az EXIF-adatokat.
Minden gyártónak saját formátuma van, többnyire TIFF-alapú és részben dokumentálatlan: CR2 és CR3 (Canon), NEF (Nikon), ARW (Sony), RW2 (Panasonic), ORF (Olympus), RAF (Fujifilm). A DNG az a formátum, amelyet az Adobe nyilvánosan közzétesz (1.7-es verzió), és amelyet a Ricoh, a Leica, a Pentax és sok telefon használ; ennek a szabályait követi ez az oldal.
A Fotollection a DNG-t a saját, a specifikációból megírt olvasójával olvassa, a többi formátumot pedig a rawler bontja ki, egy LGPL-es könyvtár, amely a Fotollectionbe van építve. A rács bélyegképei egyáltalán nem nyúlnak az érzékelő adataihoz: a fájlban lévő előnézetből jönnek, 9–32 ms alatt, ezért nyílik meg egy RAW-mappa olyan gyorsan, mint egy JPEG-mappa.
Demozaikolás: a két hiányzó szín kiszámítása
Minden pixel két hiányzó színének újraépítését a szomszédaiból demozaikolásnak hívják, és minden más lépésnél jobban eldönti, mennyire éles és tiszta egy RAW-fotó. Minden módszer ugyanazzal a dilemmával néz szembe: a szomszédok átlagolása sík területeken biztonságos, de egy élen át két különböző felületet kever össze, így a művészet abban rejlik, hogy tudjuk, mely szomszédok tartoznak össze.
- A bilineáris módszer egyszerűen átlagolja az egyes színek legközelebbi fotodiódáit. Ez az alap, amelyhez minden módszert mérnek: lágy, és minden éles él mentén színes szegélyeket hagy, mert a pirosat, a zöldet és a kéket kissé eltérő helyeken átlagolja.
- A Malvar–He–Cutler (2004) ebből az átlagból indul, és rögzített 5 × 5-ös szűrőkkel korrigálja annak a színnek a részleteivel, amelyet a fotodióda látott. Élesebb, és még mindig nagyon gyors. A Fotollection a v0.10.0-ig ezzel dolgozott ki.
- A PPG (patterned pixel grouping) először eldönti, melyik irányban változik a legkevésbé a kép, és csak abban az irányban interpolál. A rawler ezt használja, és a v0.10.0-ig a legtöbb formátumnál a Fotollection Windowsos és Linuxos változata is.
- Az RCD (ratio corrected demosaicing, Luis Sanz Rodrígueztől) a színek közötti arányokkal dolgozik, nem a különbségekkel, ami világos és sötét területeken egyaránt jobban tart, és arról ismert, hogy finom részleteken kevés hibát hagy; a darktable és a RawTherapee is kínálja.
- A Markesteijn, Frank Markesteijn után, az X-Transra készült módszer, egy menetben vagy, lassabban és tisztábban, háromban.
- A Fotollection demozaikolása a v0.10.0 óta az RCD-től veszi az irány eldöntésének módját, majd a zöldet mindkét oldalról becsüli meg, az adott pont saját színével korrigálva (ahogy Hamilton és Adams tették), aszerint súlyozva, mennyire változik az egyes oldal. Először az RCD saját arány-lépését írtuk meg, és az rosszabbul teljesített a tesztábráinkon, így a nyertes változat az, amelyik kiadásra került, a saját nevén.
Ha egy módszer rosszul tippel, az négy jellegzetes módon látszik:
- cipzár: váltakozó világos és sötét pixelek sora egy éles él mentén, ahol a módszer mindkét oldalról vett szomszédokat;
- labirintus: finom, féregszerű minta sík területeken, amikor egy Bayer-négyzet két zöldje nem egészen ugyanazt olvassa (eltérő szomszédú sorokban ülnek, és sok érzékelőn egy-két százalékkal eltérnek);
- álszín: színes pöttyök vagy szegélyek valójában szürke részleteken, például szöveten, hajon, téglafalon vagy egy távoli kerítésen;
- moaré: színes hullámok nagyon finom, ismétlődő mintákon, amelyek finomabbak annál, amit a színszűrő mintavételezni tud.
Hogyan ítélünk meg egyet. A szemünket könnyen becsapja egy élesebbnek tűnő eredmény, ezért minden módszert olyan képeken pontozunk, amelyeknek pontosan ismert a valósága. Egy számítógép öt tesztábrát rajzol 768 px-en: egy zónalemezt (a széle felé finomodó gyűrűk, egészen a legfinomabb részletig, amelyet a zöld fotodiódák meg tudnak tartani), egy 72 küllős Siemens-csillagot, telített színsávokat szürkén három irányban, sima színátmeneteket, és egy sík szürkét, amelyben a két zöld 2 %-kal eltér. Mindegyiket átalakítjuk arra, amit egy Bayer-érzékelő rögzítene, demozaikoljuk, és összevetjük az eredetivel. A PSNR decibelben méri a teljes hibát (a több a jobb; minden 6 dB felezi); az álszín a szürke ábrákon megjelenő átlagos szín; az élhiba az él 2 px-es körzetén belüli átlagos hiba.
| Ábra (768 px) | Bilineáris | Malvar (a miénk a v0.10.0-ig) | A miénk a v0.10.0 óta |
|---|---|---|---|
| Zónalemez: PSNR, a több a jobb | 13,0 dB | 17,3 dB | 16,5 dB |
| Zónalemez: álszín, a kevesebb a jobb | 65,9 | 43,0 | 18,7 |
| Siemens-csillag: PSNR | 21,3 dB | 25,2 dB | 37,9 dB |
| Siemens-csillag: álszín | 9,4 | 8,4 | 0,16 |
| Telített színsávok: hiba az élek mentén, a kevesebb a jobb | 11,6 | 21,6 | 10,5 |
| Sima átmenetek: PSNR | 78,9 dB | 77,5 dB | 78,4 dB |
| Sík szürke zöld eltéréssel: labirintus, a kevesebb a jobb | 0,38 | 0,38 | 0 |
| Textúra beragadt pixelekkel: ennyi marad 10 000-enként, a kevesebb a jobb | 35,8 | 66,5 | 0 |
A Malvar kb. 4 dB-lel jobb a bilineárisnál a finom szürke részleteken, ahogy a cikke ígéri, de rosszabb az erős színek közötti éleken, mert a korrekciója az egyik szín részleteit kölcsönzi a többinek, és feltételezi, hogy együtt változnak, amit egy szürke falon lévő piros tábla nem tesz. Egyik sem tünteti el a labirintust, amely nem demozaikolási probléma, hanem a két zöld közötti különbség, amelyet előtte kell kiegyenlíteni. Ezeket a hiányokat zárja be a láncunk a v0.10.0 óta: a beragadt pixeleket és a zöld egyensúlyhiányát akkor javítjuk, amikor még minden pont csak azt tartalmazza, amit mért, az irányfüggő demozaikolás újraépíti a színeket, és egy kis medián a színkülönbségeken eltünteti a maradék álszínt. A tesztábrákon mindenhol nyer, kivéve a zónalemez teljes PSNR-jét, amely a legfinomabb részletek közelében 0,8 dB-lel alacsonyabb a Malvarénál, ahol minden módszer aliasol; az álszíne még ott is a felére esik. A kilenc valódi fájlon minden Bayer-gép kidolgozását ugyanolyan közel vagy közelebb hozza a gép saját JPEG-jéhez, és 24 MP-en kb. 180 ms-ba kerül, szemben a Malvar 40 ms-ával: fotónként néhány tized másodperccel több, tisztább részletű nyomatokért.
A gép színeitől a tieidig
A gép pirosa, zöldje és kékje nem azonos a képernyőd színeivel: minden érzékelő szűrői saját festékeket használnak, és másképp fedik át egymást, mint a szemünk csapjai. A fájlban lévő színmátrixok a gép színeit CIE XYZ-be alakítják, az emberi színlátás 1931-ben meghatározott szabványos modelljébe, onnan pedig sRGB-be, a legtöbb képernyő és a fotólaborok színterébe.
- Először a fehéregyensúly jön: egy erősítés a piroson és a kéken, hogy ami a jelenetben fehér, semlegesnek tűnjön. A gép rögzíti az általa választott erősítéseket, és a Fotollection ezeket a demozaikolás előtt alkalmazza, így a fenti módszerek által használt színkülönbségek kicsik maradnak.
- Egy DNG általában két mátrixot hordoz, az egyiket meleg izzólámpafényben, a másikat nappali fényben mérték. A fotódhoz illő a kettő között van: a kidolgozó a fehéregyensúlyból színhőmérsékletként kiszámítja a felvétel fényét, és összekeveri a kettőt. A Fotollection ugyanezt teszi a többi formátumnál, azokból a mátrixokból, amelyeket a rawler minden gépmodellhez ismer.
- Mindez lineáris fényben történik, az érzékelő saját skáláján, bármilyen görbe előtt. A színek keverése, skálázása és átméretezése lineáris fényben ad fizikailag helyes eredményt; ha a görbe után történik, az élek sötétebbek lesznek, a színek pedig elcsúsznak.
A gép saját lookja. Egy gép saját JPEG-je nem semleges: minden gyártó hozzáadja a saját kontrasztját, színeit és bőrtónusait, és ez a look része annak, amiért az emberek egy márkát választanak. A v0.10.0 óta egy RAW-fotó semleges megjelenítéssel nyílik meg, hűen az érzékelő mátrixához, az objektív vignettálásával és a gép által választott expozícióval; a Like the camera’s JPEG egy kattintásra van egy RAW-fotó RAW colour kártyáján, egy fotóra vagy egyszerre minden RAW-ra. (A v0.10.0-ig minden RAW-ot a gép JPEG-jéhez igazítottunk; az akkor mentett projekt megtartja ezt a lookot.) Ez a választás kétféleképpen igazít a gép JPEG-jéhez, egy görbével és egy mátrixszal vagy csatornánként egy görbével, és azt tartja meg, amelyik közelebb jut az adott fájlnál: a Nikon D750-en felezi a különbséget, ΔE2000-ben 2,26-ról 1,16-ra. A rács bélyegképei a gép saját előnézetét tartják meg, ahogy a Lightroomban.
Tónus: lineáris számokból kép
A lineáris számok sötétnek és fakónak tűnnek a képernyőn, mert a fény megduplázása, amelyet az érzékelő kétszer akkora számként rögzít, nekünk csak egy fokozatnyi világosodásnak látszik. Egy tónusgörbe alakítja az érzékelő skáláját képpé: elhelyezi a középszürkét, megemeli az árnyékokat, a csúcsfényeket lágyan lekerekíti ahelyett, hogy egyszerre levágná őket, és megadja a kép kontrasztját. A képet ezután az sRGB-görbével (a „gammájával”) tároljuk, amely egy JPEG 256 szintjéből többet szán az árnyékokra, ahol a szemünk a lépcsőket a legjobban észreveszi.
Két korrekció, amelyet a gép a JPEG-jében elvégez, nincs benne a RAW-adatokban, és mindkettő számít a nyomatoknál:
- Vignettálás: minden objektív sötétebb a sarkok felé. A Fotollection a gép saját előnézetéből méri meg, mennyire világosította ki őket a gép, sugárirányú erősítésként. Amikor a DNG-kidolgozásunkat először vetettük össze a gép JPEG-jével, a közép kb. 4 L*-gal volt túl világos, a sarkok pedig 1,5-del túl sötétek; a sugárirányú erősítés a különbséget ΔE 3,8-ról 2,67-re vitte, a fotó minden részét ±0,5 L*-on belül tartva.
- Torzítás: az objektív enyhe hordó- vagy párnaformája. A Micro Four Thirds gépeket (Panasonic, Olympus) úgy tervezték, hogy a gép korrigálja, és a fájljaik rögzítik, hogyan. Macen ezeket a fájlokat a macOS dolgozza ki, amely alkalmazza a korrekciót; a saját kidolgozásunkban való korrigálása tervben van (FR-085).
Hogyan dolgoz ki a Fotollection egy RAW-ot, lépésről lépésre
Teljes kidolgozásnál, amely a nyomtatási előnézet, a nagyítás és az exportálás mögött áll:
- Felismerés: a formátumot a fájl első bájtjaiból ismeri fel, sosem a nevéből, így egy átnevezett fájl vagy egy sima TIFF-nek látszó RAW is helyesen olvasódik be.
- Beolvasás: az érzékelő számai, a DNG a saját olvasónkkal, a többi formátum a rawler kibontásával. A túl nagy vagy sérült fájlt elutasítja, mielőtt egyetlen pixelt dekódolna, egy hibakóddal.
- Szintek: a fekete 0-ra, a fehér 1-re, a színszűrő minden pozíciójára, az aktív terület sarkától számolva.
- Fehéregyensúly, majd demozaikolás: először a beragadt pixelek és a zöld egyensúlya, aztán az irányfüggő demozaikolás, végül az álszín-medián (az X-Trans Markesteijnje a v0.15.0-ban jön).
- Szín: a gép mátrixai, a felvétel fényéhez keverve, lineáris fényben.
- Tónus és look, a gép előnézetéhez igazítva, a vignettálásával együtt.
- Innentől egy RAW-fotó olyan, mint bármely másik: vágás, dátumbélyeg, keret, nyomtatási méret és színprofil, teljes felbontásban, 4:4:4-ben, 95-ös minőséggel exportálva.
Néhány szabály végig érvényes. Egyszerre csak egy kidolgozás fut, minden processzormagra szétosztva, és sosem az ablak saját szálán, így a Fotollection akkor is válaszol, amikor egy 30 MP-es fotó kidolgozása zajlik. Az exportálás mindig a processzoron fut, így egy nyomat minden gépen ugyanolyan lesz; a videokártya csak azt gyorsítja, amit szerkesztés közben látsz. És a kód a sajátunk, a közzétett specifikációkból és cikkekből írva, nem más projektekből másolva, majd ellenőrizve: a fenti szintetikus ábrákon, kilenc gép kilenc RAW fájlján (CC0, a raw.pixls.us oldalról), és fájlok szándékos megcsonkításával és elrontásával, hogy egy rossz fájlból hiba legyen, sosem összeomlás.
A v0.10.0 óta: saját kidolgozás minden Bayer-gépre. A rawler csak kibontja a fájlokat, a többi a Fotollectioné. A kilenc mintafájl teljes kidolgozása, 3 futás mediánja, ugyanazon a laptopon: a mi kidolgozásunk a tisztább demozaikolásával, szemben a rawler egyszerűbb megoldásával és a macOS-ével:
| Gép (formátum) | A Fotollection sajátja | rawler | macOS |
|---|---|---|---|
| Panasonic GX9 (RW2, 20 MP) | 280 ms | 216 ms | 436 ms |
| Panasonic S5 (RW2, 24 MP) | 442 ms | 301 ms | 1044 ms |
| Olympus E-M10 III (ORF, 16 MP) | 308 ms | 364 ms | 1164 ms |
| Sony A7 III (ARW, 24 MP) | 372 ms | 241 ms | 488 ms |
| Canon R10 (CR3, 24 MP) | 494 ms | 360 ms | 1647 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) | következik | 524 ms | 1339 ms |
A miénk egy tized–negyed másodperccel tovább tart a rawlerénél a tisztább demozaikolás és az igazított szín miatt, és a legtöbb gépen gyorsabb marad a macOS-nél; fotónként egyszer történik meg, utána egy csúszka 4–11 ms alatt dolgozza újra a megtartott másolatot. Macen a Panasonic és az Olympus fájljai a macOS-nél maradnak az objektívkorrekció miatt, amíg a saját kidolgozásunk nem korrigálja a torzítást. Az S5 szürke foltjai semlegesebbek lesznek, mint a rawleren át (1,42-es színeltolódás a 2,43-mal szemben, ahol a 0 a tökéletes szürke). A Fujifilm X-Trans a Markesteijnnel következik, utána pedig az előnézet kidolgozása a videokártyán, a processzor eredményével mint referenciával.
A legjobb kép ajánlásai: egy ember választásához mérve
95 valódi fotót kézzel 22 pillanatba soroltunk, és ahol volt egyértelmű legjobb, kiválasztottuk. Ezután a Fotollection csoportjait és ajánlásait ehhez a választáshoz mértük.
Hogyan születnek a javaslatok, és hogyan pontozzuk őket
Először a Fotollection megkeresi a pillanatokat. A fotók a készítésük ideje szerint, a másodperc törtrészéig sorba kerülnek, és új pillanat kezdődik, ha a szünet hosszabb 2 másodpercnél vagy a szokásos szünet négyszeresénél, ha a gép vagy az objektív változik, vagy ha a helyszín több mint 30 m-rel odébb kerül. Minden fotó kap egy kis vizuális ujjlenyomatot is, a világos és sötét részek elrendezését és a színek keverékét, és egy kép csak akkor kerül a pillanatba, ha még mindig hasonlít az előtte lévőkre, megengedve egy oldalra lépést vagy egy zoomot, amelyet a gyújtótávolság megmagyaráz.
Ezután egy pillanaton belül minden fotót egy kicsinyített másolaton mér meg: a téma élességét, a bemozdulást, az expozíciót (beégett csúcsfények, bebukott árnyékok, fényerő), a zajt, és ahol arcok vannak, azt, hogy nyitva van-e a szem, és a gép felé fordulnak-e az arcok. Minden mértéket csak ugyanannak a pillanatnak a többi képével vet össze, és súlyoz (a téma élessége 35 %, a nyitott szem 20 %, a bemozdulás 15 %, az expozíció 15 %, a beégett csúcsfények 10 %, a többi kevesebb), egy legkisebb lépéssel, hogy egy nyomtatásban nem látható különbség soha ne döntsön. A javaslat az indoklásával együtt érkezik, semmi sem törlődik, és minden a gépeden fut, fotónként 17 ms alatt, arcokkal 28 ms alatt.
Hogy őszinte maradjon, 95 valódi fotót kézzel válogattunk szét 22 pillanatba, és annál a 6 pillanatnál, amelynek egyértelmű legjobbja volt, kijelöltük a megtartandó fotót. Minden fejlesztést ehhez mértünk:
| Lépés | Megtalált pillanatok (22-ből) | Hibás összevonások | Elfogadható választások |
|---|---|---|---|
| Csak a kép ujjlenyomata | 3 | 0 | 2-ből 2 |
| Plusz elrendezés és szín | 13 | 0 | 4-ből 3 |
| Plusz zoom a gyújtótávolságból | 15 | 0 | 6-ból 5 |
| Plusz igazságos élesség és rejtett arcok | 15 | 0 | 6-ból 6 |
Két különböző pillanat soha nem kerül egy csoportba; a két plusz csoport olyan pár, amelyet kézzel bizonytalannak jelöltünk. A még kihagyott pillanatok azok, ahol a póz vagy a képkivágás sokat változik, például ha egy ételt a másik oldalról is lefényképeznek.
A számok mögötti fogalmak
Fotós és nyomdai szakszavak, úgy elmagyarázva, ahogy egy barátnak magyaráznánk.
Mi az a ΔE (Delta E)?16
A ΔE azt méri, mennyire különbözőnek látszik két szín az emberi szem számára, egy olyan színtérben számolva, amely a látásunkhoz igazodik (CIELAB, a 2000-es képlettel). A 0 azonosat jelent. Kb. 1 a legkisebb különbség, amelyet egy gyakorlott szem egymás mellett észrevesz; 2–3 a legtöbb ember számára látható; 5 fölött a színek eltérőnek tűnnek. A Fotollection nyomtatási exportja átlagosan 0,19.
Mi az az SSIM?17
Az SSIM, a strukturális hasonlósági index, két kép formáit és textúráit veti össze egyes pixelek helyett, ami közelebb áll ahhoz, ahogy az elmosódást vagy a kockás tömörítést észrevesszük. Az 1 azonosat jelent. Kb. 0,98 fölött a legtöbb ember nagyítás nélkül nem tudja megkülönböztetni a kettőt.
Hány színt tud tárolni egy JPEG?6,18
Egy JPEG a vörös, a zöld és a kék mindegyikére 8 bitet tárol: egyenként 256 szintet, összesen kb. 16,7 millió színt. A fotólaborok is ebből nyomtatnak. A fényképezőgépes RAW fájlok 12–14 bitet tárolnak, az újabb iPhone-ok pedig 10 bites HEIC-et is menthetnek, ami szerkesztéskor segít; egy kész nyomathoz egy jól elkészített 8 bites JPEG nem mutat lépcsőket a tónusok között.
JPG vagy JPEG? És használjak PNG-t?
A JPG és a JPEG ugyanaz a formátum: a régi Windows csak hárombetűs kiterjesztéseket engedett. A PNG veszteségmentes, így soha semmi nem vész el, de egy PNG-ként mentett fotó gyakran három-ötször nagyobb, és a legtöbb kioszk és labor JPEG-et vár. Egy legalább 90-es minőségű, teljes színfelbontású (4:4:4) JPEG, amilyet a Fotollection nyomtatáshoz exportál, papíron megkülönböztethetetlen az eredetitől.
Mit jelent a 4:4:4 és a 4:2:0?
A szemünk a részleteket főleg a fényerőben látja, kevésbé a színben, ezért a JPEG kisebb felbontásban tárolhatja a színt. A 4:4:4 megtartja a teljes színfelbontást; a 4:2:0 a negyedét tartja meg, amitől a fájlok kisebbek, de a színes élek, például egy piros szöveg vagy a levelek mögötti kék ég, elmosódnak. A nyomat 4:4:4-et érdemel; a közösségi média úgyis mindent 4:2:0-ra tömörít újra.
sRGB, Display P3, Adobe RGB és színprofilok19,20,21
A színprofil megmondja a szoftvernek, mit jelentenek a fájlban lévő számok. Az sRGB a weben használt klasszikus színtartomány. A Display P3, amelyet az iPhone-ok és az újabb fényképezőgépek használnak, kb. 25 %-kal több színt ér el, főleg a vörösökben és a zöldekben. Ha egy P3 fotó elveszíti a profilját, a számait sRGB-ként olvassák, és fakónak tűnik: ez az a 13 %-os telítettségvesztés, amelyet mértünk. Az Adobe RGB, amelyet egyes gépek nyomdai munkához kínálnak, szintén szélesebb az sRGB-nél, főleg a zöldekben és a ciánokban. A Fotollection nyomtatáshoz megtartja a fotó profilját, bármi legyen is, közösségi médiához pedig rendesen sRGB-re alakít.
Hány DPI kell egy nyomathoz?
A DPI azt adja meg, hány pixel jut a papír egy hüvelykére. 300 DPI-nél egy nyomat közelről is élesnek tűnik; 150–200 DPI karnyújtásnyiról elég. Egy 10 × 15 cm-es nyomathoz 300 DPI-nél 1800 × 1200 pixel kell, így bármely telefonos vagy gépes fotó elég; az alkalmazás méretjavaslata megmondja, mekkorára nagyítható egy-egy fotó.
Miért néznek ki rosszabbul a fotók a Facebookon?
A Facebook minden fotót legfeljebb 2048 px-re méretez át, gyengébb minőséggel és felezett színfelbontással tömöríti újra, és elhagyja a színprofilokat. Egy túl nagyként érkező fotót kétszer méreteznek át, egyszer te, egyszer a Facebook. Ha eleve 2048 px-en, sRGB-ben és enyhén élesítve küldöd, a Facebook csak egyszer tömöríti újra, és a színek már eleve jók.
Futtasd le magad a méréseket
Minden megismételhető a saját fotóidon. A szkriptek sosem töltenek fel és nem másolnak fotót; csak számok maradnak meg. A teljes táblázatok, minden futással, a RESULT.md fájlban vannak.
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