mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-14 19:27:01 -04:00
270 lines
20 KiB
Markdown
270 lines
20 KiB
Markdown
# RAW parity: cameras, formats, demosaic, colour and lens profiles
|
||
|
||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (model-by-model measurement against Adobe's published camera list; use-weighted coverage; variant matrix; colour and lens sections; ranked next cameras) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6 (Camera Raw 18.7)
|
||
|
||
Raw processing is the deepest single dimension of Lightroom parity: a photographer whose camera
|
||
does not decode, or decodes with the wrong colour, cannot switch. This document measures it model by
|
||
model. The numbers feed [target-app-parity.md](target-app-parity.md); individual shortfalls are
|
||
ranked in [gaps.md](gaps.md). Details per format: [cr3.md](cr3.md),
|
||
[raf-compression.md](raf-compression.md), [sony-lens-corrections.md](sony-lens-corrections.md),
|
||
[camera-preview-colour.md](camera-preview-colour.md), [denoise.md](denoise.md).
|
||
|
||
## Headline
|
||
|
||
| Measure | Value | Kind |
|
||
|---|---:|---|
|
||
| Adobe-listed camera models | **1,446** | measured: [raw/adobe-cameras.tsv](raw/adobe-cameras.tsv) |
|
||
| Decoded from sensor data and **verified** on a real file | **234** (16%) | measured: [raw/evidence.tsv](raw/evidence.tsv) |
|
||
| Decoder path should handle it, **unverified** | **943** (65%) | measured from the format rules (632 of them DNG, mostly phones) |
|
||
| **Preview-only** (embedded JPEG) | **233** (16%) | measured |
|
||
| **Unsupported** (not imported, refused or decodes wrongly) | **36** (2%) | measured |
|
||
| Models added since 2017 (Camera Raw 10+): verified / unverified / preview / unsupported | 81 / 641 / 24 / 8 of 754 | measured |
|
||
| **Share of photographers whose camera fully works** (decodes from sensor data), use-weighted | **~84%** | estimated: measured classes × written usage weights × per-format confidence |
|
||
| …of which on a body we have verified | **~40%** | estimated, same weights |
|
||
| Camera colour: Adobe profiles vs ours | 1,500 Adobe Standard profiles, 481 models with Camera Matching profiles vs **4 bundled profiles** + per-file fits + 52 spectral matrices | measured (bundle listing, Adobe list, `assets/camera-profiles`) |
|
||
| Lens profiles: Adobe vs ours | **3,635 vs 0** (in-file corrections only) | measured |
|
||
| **RAW readiness** (decoding 60%, colour 25%, lens 15%) | **~56%** (range 50–60%) | estimated, see [Scores](#scores) |
|
||
|
||
Re-measure with `python3 docs/raw/coverage.py` (standard library only): it classifies every Adobe
|
||
model from the format rules in the script (which mirror `crates/raw/src`) plus the per-model evidence,
|
||
rewrites [raw/coverage.tsv](raw/coverage.tsv) and prints the tables below; `--check` fails when the
|
||
committed table is stale.
|
||
|
||
## How it was measured
|
||
|
||
- **Adobe's list**: helpx "Camera Raw supported cameras" (the live page refuses scripted requests, so
|
||
the Wayback Machine capture of 2026-10-03 was parsed): 1,446 camera rows from 40 makers after
|
||
dropping profile-only rows; maker, model, extension(s), Camera Matching profile, minimum Camera Raw
|
||
version. The year a model was added is approximated from that Camera Raw major version.
|
||
- **What we decode**: the decoders and their refusals in `crates/raw/src` (`lib.rs` routing, `vendor/*.rs`
|
||
coding variants, `crx.rs` CRX limits, `orf.rs` / `srw.rs` compressed refusals), the import list
|
||
`lightcraft_engine::import::EXTENSIONS`, and `KNOWN_UNSUPPORTED` in `crates/raw/tests/corpus.rs`. Doc
|
||
claims were not used.
|
||
- **Verified** means a real file from that body decoded from sensor data in: the corpus test over the
|
||
`RAW_SAMPLES` manifest (`xtask/src/main.rs`, 101 CC0 files; bodies whose sample is in
|
||
`KNOWN_UNSUPPORTED` excluded), `crates/raw/tests/cr3_corpus.rs` (3 bodies, exact), the RAF reference
|
||
check ([raf-compression.md](raf-compression.md)), and the raw.pixls.us bulk checks recorded in issue
|
||
#535 (all 100 Sony bodies there; 87 decode) and PR #215 (every Panasonic / Leica RW2 / RWL / RAW body
|
||
there, 178 files from 118 bodies). Bulk-check body lists were matched to Adobe names through the
|
||
raw.pixls.us folder names. Checks without a body list (≈ 60 NEFs, 35 CR2 bodies for the CFA layout)
|
||
are not counted as verified.
|
||
- **Usage weights** ([raw/usage-weights.tsv](raw/usage-weights.tsv)): maker buckets from 2025 market
|
||
data (Nikkei production: Canon ~36%, Sony ~29%, Nikon ~14%, Fujifilm ~12% of mirrorless; BCN retail:
|
||
Sony 29.9%, Canon 27.4%, Nikon 15.1%), adjusted for the DSLR installed base and for the makers named
|
||
in this repo's 325 user issues (Sony 33, Nikon 31, Canon 26, phones 23, Fujifilm 9, Panasonic / Leica
|
||
8, OM / Olympus 6, Pentax / Ricoh 6). Inside each bucket, 80% goes to the popular bodies of the last
|
||
~8 years (listed in the file), 20% to the bucket's other Adobe models.
|
||
- **Per-format confidence** for unverified bodies (the chance their files decode correctly): DNG, CR2,
|
||
RAF, RW2 0.95; NEF, ARW, PEF 0.9; ORF, SRW, SR2 0.8; **CR3 0.6** (the CRX decoder refuses several
|
||
coding variants and only three bodies are verified; maintainers report the R7 working).
|
||
|
||
## By maker (measured)
|
||
|
||
| Maker | Adobe models | verified | unverified | preview | unsupported | Main reason for preview / unsupported |
|
||
|---|---:|---:|---:|---:|---:|---|
|
||
| Sony | 149 | 86 | 51 | 9 | 3 | DSLR-A200…A390 and A850 12-bit compressed ARW (preview, #535); A100 and DSC-F828 refused (regression #702); SRF not imported |
|
||
| Canon | 134 | 11 | 100 | 21 | 2 | CRW (2000–2004 bodies) preview; EOS-1D / 1Ds TIFF raws not imported |
|
||
| Samsung | 128 | 1 | 118 | 9 | 0 | compressed SRW (NX1, NX30, NX300, NX500, NX2000, NX3000, NX3300, NX mini, Galaxy NX) |
|
||
| Apple | 113 | 1 | 112 | 0 | 0 | — (DNG / ProRAW) |
|
||
| Panasonic | 104 | 93 | 11 | 0 | 0 | — |
|
||
| Nikon | 99 | 5 | 94 | 0 | 0 | — (HE / HE★ is a per-shot setting, preview-only) |
|
||
| Fujifilm | 97 | 16 | 55 | 26 | 0 | pre-X FinePix RAF without a raw IFD (estimated split) |
|
||
| Google | 88 | 1 | 87 | 0 | 0 | — |
|
||
| Olympus | 71 | 3 | 9 | 59 | 0 | **compressed ORF** |
|
||
| Leica | 61 | 13 | 48 | 0 | 0 | — |
|
||
| Xiaomi, Oppo, LG, Huawei, OnePlus, Motorola, Nokia | 139 | 0 | 139 | 0 | 0 | — (DNG) |
|
||
| Pentax / Ricoh | 60 | 4 | 56 | 0 | 0 | — |
|
||
| Hasselblad | 34 | 0 | 2 | 32 | 0 | Hasselblad-compressed 3FR / FFF |
|
||
| Phase One / Leaf / Mamiya | 59 | 0 | 0 | 43 | 16 | IIQ, MOS preview; TIFF raws and MEF not imported |
|
||
| Casio | 26 | 0 | 26 | 0 | 0 | — (DNG) |
|
||
| DJI | 21 | 0 | 21 | 0 | 0 | — (DNG) |
|
||
| OM Digital Solutions | 7 | 0 | 0 | 7 | 0 | **compressed ORF** |
|
||
| Kodak, Konica Minolta, Epson, Sigma, GoPro, Contax, others | 56 | 0 | 14 | 27 | 15 | DCR, GPR not imported; KDC, MRW, ERF, X3F preview |
|
||
| **All** | **1,446** | **234 (16%)** | **943 (65%)** | **233 (16%)** | **36 (2%)** | |
|
||
|
||
## By use (estimated)
|
||
|
||
| Bucket | Weight | Camera fully works | On a verified body | Why |
|
||
|---|---:|---:|---:|---|
|
||
| Canon | 33% | 72% | 16% | 17 of the 22 popular bodies write CR3; 2 of them verified, the rest at 0.6 |
|
||
| Sony | 27% | 98% | 91% | bulk-checked |
|
||
| Nikon | 16% | 91% | 12% | decoders cover every NEF coding but HE; few bodies verified |
|
||
| Fujifilm | 10% | 91% | 45% | |
|
||
| Panasonic | 4% | 100% | 98% | bulk-checked |
|
||
| OM / Olympus | 3% | 3% | 1% | compressed ORF |
|
||
| Phones | 3% | 93% | 1% | DNG |
|
||
| Pentax / Ricoh | 1.5% | 94% | 14% | |
|
||
| Leica | 1% | 95% | 5% | |
|
||
| DJI | 1% | 95% | 0% | |
|
||
| Medium format and others | 0.5% | 23% | 0% | IIQ, 3FR, X3F |
|
||
| **Weighted** | 100% | **84%** | **40%** | |
|
||
|
||
About 5 in 6 raw photographers' cameras decode, but only about 2 in 5 use a body we have actually
|
||
checked, and Canon, the largest bucket, is the weakest of the big four.
|
||
|
||
## Variant matrix (depth per format)
|
||
|
||
✅ decoded and checked on real files · 🟡 decoded, partial or unverified · ⬜ preview-only or refused.
|
||
|
||
| Format | Variant | Status | Evidence |
|
||
|---|---|---|---|
|
||
| CR2 | lossless JPEG slices | ✅ | 8 corpus bodies; CFA phase from `CR2CFAPattern` (#85, 35 bodies); masked-column black level |
|
||
| CR2 | sRAW / mRAW (YCbCr) | ✅ | `vendor/cr2/sraw.rs`, 31 samples from 16 models |
|
||
| CR3 | CRX lossless, version 0x100 | ✅ | M50, R100, R8 exact against a reference |
|
||
| CR3 | C-RAW 0x100 (horizontal tiles), 0x200 (single 14-bit tile, adaptive QP) | ✅ | same 3 bodies exact |
|
||
| CR3 | other CRX variants (vertical tiles, partial subbands, other plane flags, 0x200 multi-tile) | ⬜ | refused in `crx.rs`, falls back to the preview; which bodies write them is unmeasured |
|
||
| CR3 | sRAW / mRAW | ⬜ | 4-plane Bayer only |
|
||
| CR3 | HEIF / HDR PQ | ⬜ | HEVC tracks recognised, not decoded |
|
||
| CR3 | dual-pixel raw | ⬜ | never substituted |
|
||
| CRW | all | ⬜ | preview |
|
||
| NEF | uncompressed, lossless, lossy type 1 / 2, lossy after split | ✅ | D5100, D7000, D7500, Z f corpus; ~60 NEFs by hand; #633 |
|
||
| NEF | packed 14-bit stored under a compressed tag (Z 6II uncompressed) | ⬜ | #769; fix in PR #671 (not merged) |
|
||
| NEF | High Efficiency / HE★ (JPEG XS) | ⬜ | named, preview (#193); needs a JPEG XS decoder |
|
||
| ARW | uncompressed, cRAW (ARW2), lossless LJ92 (L / M / S) | ✅ | 86 bodies (#535); M/S black level 1024 |
|
||
| ARW | packed 12-bit (A900) | ✅ | one CC0 file; A850 unmeasured |
|
||
| ARW | 12-bit compressed of DSLR-A200…A390 | ⬜ | preview (#535) |
|
||
| ARW | A100 ARW; SRF (F828, V3) | ⬜ | refused (#702); SRF not imported |
|
||
| ARW | ARQ pixel shift | ⬜ | no code |
|
||
| SR2 | DSC-R1 | ✅ | CC0 3221 sample |
|
||
| RAF | uncompressed, lossless and lossy compressed; Bayer and X-Trans; GFX 14/16-bit | ✅ | 24 files from 13 bodies exact |
|
||
| RAF | pre-X FinePix without a raw IFD | ⬜ | `raf.rs` refuses (26 Adobe models, estimated split) |
|
||
| ORF | uncompressed 16-bit, 12-bit packed, two-field 12-bit, 12.8 bpp | ✅ | E-1, E-400, XZ-2 corpus; #651 |
|
||
| ORF | **compressed** (every Olympus / OM body since ~2008) | ⬜ | `orf.rs` refuses; the E-M1 and E-M10 III corpus files are `KNOWN_UNSUPPORTED` |
|
||
| RW2 / RWL / RAW | formats 2, 4, 5, 6, 7, 8 and 16-bit words | ✅ | 118 bodies (#215) |
|
||
| PEF | uncompressed, Huffman, packed 12-bit | ✅ | K10D, K-3, K-5 IIs |
|
||
| PEF / DNG | Pentax pixel shift | ⬜ | frames not combined |
|
||
| SRW | uncompressed, 12-bit packed | ✅ | EX1 corpus; NX10, NX20 |
|
||
| SRW | compressed 32770 / 32772 / 32773 | ⬜ | refused |
|
||
| DNG | uncompressed, LJ92, lossy JPEG / Smart Preview, Deflate incl. float, LinearRaw, tiles / strips, row / column interleave | ✅ | 6 corpus DNGs; 4 ILCE-6400 JXL DNGs |
|
||
| DNG | JPEG XL (DNG 1.7, lossless and lossy) | ✅ | synthetic bit-exact; real lossless and lossy files |
|
||
| DNG | Apple ProRAW (incl. semantic mattes) | ✅ | iPhone 12 Pro corpus; ProfileGainTableMap read but off (ΔE00 19 against Lightroom with it on) |
|
||
| DNG | phone DNGs (Pixel, Galaxy, Xiaomi…) | 🟡 | Pixel 2 XL only; white-level pile-up fix #548 |
|
||
| DNG | GoPro GPR (VC-5) | ⬜ | refused |
|
||
| 3FR / FFF | DNG-like layouts | 🟡 | decoded when uncompressed or LJ92 |
|
||
| 3FR / FFF | Hasselblad compression | ⬜ | preview |
|
||
| IIQ, MOS, MRW, ERF, KDC, X3F | all | ⬜ | preview |
|
||
| DCR, MEF, MFW, DXO, GPR, TIFF raws | all | ⬜ | not imported |
|
||
|
||
### Compressed ORF: a clean-room starting point
|
||
|
||
Two Olympus patents by Takashi Ishikawa describe the *method* of lossless RAW compression in prose; neither names ORF
|
||
and neither gives the file layout. See the closed #240 and the open #360 for why a decoder has to be derived from the
|
||
files and prose rather than from dcraw-family code.
|
||
|
||
- [US7333035B2](https://patents.google.com/patent/US7333035): lossless RAW compression for SLR cameras:
|
||
median-edge-detector prediction from the left, upper and upper-left neighbours, a separately coded sign, Golomb-Rice
|
||
codes whose parameter `k` comes from flatness run counters, counters reset per line.
|
||
- [US7715639B2](https://patents.google.com/patent/US7715639B2/en): a sibling with predictor variants, `k` derived from
|
||
neighbouring positions, raw low-order bits and a correction filter.
|
||
|
||
They give the algorithm's shape; constants, the bit layout and the stream header still have to be established from CC0
|
||
sample files. A pointer for contributors, not legal advice.
|
||
|
||
## Demosaic, levels, crops and lens metadata
|
||
|
||
| Stage | Target | LightCraft | Status |
|
||
|---|---|---|---|
|
||
| Bayer demosaic | Adobe's own, plus AI "Raw Details" | AHD (default), PPG, bilinear (`crates/raw/src/demosaic`) | 🟡 quality unmeasured against Lightroom; no Raw Details |
|
||
| X-Trans demosaic | ✅ | in-house edge-weighted directional | 🟡 unmeasured |
|
||
| Foveon | ✅ (older bodies) | — | ⬜ |
|
||
| Monochrome / LinearRaw | ✅ | handled, no demosaic | ✅ |
|
||
| Pixel shift (Sony ARQ, Pentax, OM high-res, Nikon) | ✅ (Sony, Pentax, Nikon) | — | ⬜ |
|
||
| Black and white levels | per model, calibrated | read from each file (masked columns, maker notes, SR2SubIFD, CMP1) | 🟡 per-body bugs keep surfacing: A450–A700 SR2 black level and M/S ARW pedestal (#535, fixed); 5D Mark IV CR2 renders dark (#455, open); white-level pile-up in phone DNGs (#548, fixed) |
|
||
| Crop masks and aspect | ✅ | DefaultCrop, Sony recorded size, Canon AspectInfo, Panasonic in-camera crops, Nikon CropArea | 🟡 7RM3 / 7RM4 crop origin 8–32 px off (cosmetic) |
|
||
| Lens metadata | ✅ read for profile selection | EXIF lens fields read; used only for the in-file corrections below | 🟡 |
|
||
| Highlight reconstruction | ✅ | neutral clip, chromaticity diffusion (`highlight.rs`) | 🟡 tuned by eye |
|
||
| AI denoise | ✅ Bayer and X-Trans, model bundled | Bayer only, user-installed weights, pure-Rust CPU / GPU | 🟡 no X-Trans, no shippable weights |
|
||
| Super Resolution | ✅ | — | ⬜ |
|
||
| HDR / panorama merge to raw DNG | ✅ | linear DNG (float16 HDR) with the source's colour tags | ✅ |
|
||
| Convert to DNG | ✅ | uncompressed or LJ92 tiles (`dngwrite.rs`) | ✅ (no lossy DNG) |
|
||
|
||
## Colour
|
||
|
||
| Item | Adobe | LightCraft |
|
||
|---|---|---|
|
||
| Default profile per model | Adobe Standard for every model (1,500 profile names in the bundle) | the DNG's own matrices; else a pooled profile (**4 bundled**: ILCE-7CR, ILCE-7M4, X-H2S, X-T4); else a guarded per-file fit to the camera's embedded JPEG; else spectral matrices (**52 models**, rawtoaces-data); else a neutral matrix |
|
||
| Camera Matching looks | 481 models (plus phone-maker looks) | none (the per-file JPEG fit imitates the camera's own look) |
|
||
| Creative profiles | Adobe Color, Portrait, Landscape, Vivid, Monochrome… | our own looks (Color, Neutral, Vivid, Landscape, Portrait, Monochrome) |
|
||
| DCP / dual-illuminant model | ✅ | dual-illuminant DNG colour (ColorMatrix / ForwardMatrix 1-2, CameraCalibration, AnalogBalance), HueSatMap, LookTable, ProfileToneCurve; external `.dcp` never loaded (clean-room) |
|
||
| White balance in Kelvin | ✅ for every model | absolute Kelvin only where matrices exist; per-file fits give relative WB (#296, #730) |
|
||
|
||
**How far the default rendering is from Adobe's** (CIE ΔE; measured where stated):
|
||
|
||
- Against the camera JPEG (what the fit targets): the Sony bulk check (#535) accepted fits on 81 of 87
|
||
bodies, median ΔE 5.1, ΔL\* +0.2; rejected fits fall back to a neutral matrix at median ΔE 18.5,
|
||
ΔL\* −11, chroma ×0.39. RW2 140 of 174 files accepted, median 5.0. NEF 13 of 13, 2.9–7.8. RAF 23 of
|
||
24, pooled X-H2S 1.62 / X-T4 2.34. SRW 2.2–7.6.
|
||
- Against Lightroom itself (few): Sony DRO median ΔE76 7.5 → 3.3; Olympus E-1 vs Lightroom Classic
|
||
ΔE00 11.25 → 8.30; ProRAW with its gain map ΔE00 19 (why the map is off). No measurement against
|
||
Adobe Standard across models exists.
|
||
- User evidence: 33 open issues about raw colour or rendering (wrong colours, dark, flat, green,
|
||
desaturated), the largest group of open core-path issues.
|
||
|
||
**Colour score ~35%** (estimated): most decoded files start close to the camera's own look (ΔE ~5),
|
||
about 10% start far off (ΔE ~18), nothing is calibrated, Kelvin WB is missing for fitted cameras, and
|
||
the distance to Adobe Standard is unmeasured. In the readiness numbers this becomes a colour factor
|
||
of ×0.85 for a working photographer (they correct colour by hand, at a cost) and ×0.75 for the
|
||
essentials user (the default look is what they keep).
|
||
|
||
## Lens profiles
|
||
|
||
| Item | Adobe | LightCraft |
|
||
|---|---|---|
|
||
| Profile database | 3,635 profile files, 56 makers, auto-selected | **0** (Adobe LCPs never used; no database of our own) |
|
||
| In-file corrections | ✅ | DNG opcodes (WarpRectilinear, FixVignetteRadial, GainMap…) applied; Panasonic / Leica RW2 distortion (79 photos, 13 bodies, 11 lenses); Sony tag 0x7037 distortion for the ILCE-7RM4A (2 lenses) |
|
||
| Vignetting / lateral CA from maker notes | ✅ | ⬜ |
|
||
| Manual distortion, vignetting, CA, defringe | ✅ | ✅ |
|
||
|
||
**Lens score ~10%** (estimated): automatic correction reaches roughly Panasonic / Leica, phone and
|
||
drone DNG users (~9% of photographers by the weights above); Adobe reaches nearly everyone.
|
||
|
||
## Scores
|
||
|
||
| Part | Weight | Score | Basis |
|
||
|---|---:|---:|---|
|
||
| Decoding | 60% | **76%** | use-weighted 84% × 0.9 for per-body decode bugs still surfacing (levels, crops, WB: #535, #455, #461, #702) |
|
||
| Colour | 25% | **35%** | see [Colour](#colour) |
|
||
| Lens profiles | 15% | **10%** | see [Lens profiles](#lens-profiles) |
|
||
| **RAW readiness** | 100% | **~56%** (range 50–60%) | 45.6 + 8.75 + 1.5; demosaic and highlight quality unmeasured |
|
||
|
||
The previous estimate (earlier on 2026-10-10) was ~50%, with decoding at ~78% weighted by maker
|
||
from the format list alone. Measured model by model, decoding comes out about the same; the change is
|
||
the written decomposition, not new decoding.
|
||
|
||
## Remaining work, ranked by photographers unlocked per hour
|
||
|
||
Hours are Opus 5.5 agent hours, calibrated on this repo's raw PRs: RW2 every format 6.5 h (#215),
|
||
compressed RAF 8.6 h (#282), CR3 CRX 10 h (#279), NEF lossy after split 4.7 h (#633), ORF 12.8 bpp
|
||
1.7 h (#651), HEIC 7 h (#609). "Gain" is the change in the use-weighted share whose camera fully
|
||
works, from [raw/usage-weights.tsv](raw/usage-weights.tsv).
|
||
|
||
| # | Camera / variant | Gain (points of photographers) | Hours | Gain per hour | Needs |
|
||
|---:|---|---:|---:|---:|---|
|
||
| 1 | Compressed ORF (every Olympus / OM body since ~2008) | +2.6 | 8–15 | ~0.20 | CC0 samples (have 2) |
|
||
| 2 | CR3: remaining CRX variants, then verify the 17 popular CR3 bodies | +6.5 | 25–45 | ~0.19 | samples per body (raw.pixls.us has most) |
|
||
| 3 | Verify popular Nikon, Fujifilm, Canon CR2 and Pentax bodies (one CC0 file each, fix what breaks) | +2.0 | 8–15 | ~0.17 | public samples |
|
||
| 4 | Nikon packed 14-bit under a compressed tag (Z 6II uncompressed, #769) | +0.2 | 1–2 | ~0.13 | PR #671 exists |
|
||
| 5 | Sony DSLR-A200…A390 / A850 12-bit compressed ARW | +0.4 | 3–6 | ~0.08 | samples on raw.pixls.us |
|
||
| 6 | Pre-X FinePix RAF | +0.6 | 4–8 | ~0.08 | samples |
|
||
| 7 | Sony A100 and DSC-F828 regression (#702) | +0.1 | 1–2 | ~0.07 | samples on raw.pixls.us |
|
||
| 8 | Canon CRW (2000–2004 bodies) | +1.2 by the uniform tail weight, far less by real use | 6–12 | ≤ 0.1 | samples |
|
||
| 9 | Nikon HE / HE★ NEF (Z 8, Z 9, Z 6III, Z f, Z50II, Z5II set to HE) | +1.1 | 20–40 | ~0.04 | a pure-Rust JPEG XS decoder |
|
||
| 10 | Compressed SRW, Hasselblad 3FR, IIQ, X3F, MRW, KDC, ERF, DCR, MEF, GPR | +0.6 together | 45–85 | ~0.01 | samples; low use |
|
||
|
||
Beyond decoding:
|
||
|
||
| Gap | Hours | Needs |
|
||
|---|---:|---|
|
||
| Measured colour calibration for the ~60 popular bodies, Kelvin WB, render-fidelity suite against Lightroom | 80–150 | chart shots per camera (a human with cameras) or licensable measured data |
|
||
| Lens profile database of our own (fitting tools, data format, top 100 lenses), maker-note vignetting / CA | 40–80 | calibration shots (a human with lenses) |
|
||
| Demosaic and highlight quality measured against Lightroom; X-Trans AI denoise | 15–30 | |
|
||
| **Total RAW** | **255–480 h** (decoding list above 120–220 h; ~60% parallelizes) | |
|
||
|
||
## Revision history
|
||
|
||
| Date | Change | Summary |
|
||
|---|---|---|
|
||
| 2026-10-10 | minor | Compressed ORF: pointer to the two Olympus patents that describe the method, as a clean-room starting point |
|
||
| 2026-10-10 (later) | major | Model-by-model measurement against Adobe's published list (1,446 models: 234 verified, 943 unverified, 233 preview, 36 unsupported); `docs/raw/` data and re-measure script; use-weighted share 84% (40% on verified bodies); variant matrix; colour and lens sections with scores; ranked next cameras; RAW readiness ~56% from written parts |
|
||
| 2026-10-10 | major | Created: formats, makers, demosaic, colour and lens checklists; target counts from the installed Lightroom 9.6 bundle listing |
|