Real camera DNG files used to validate gamut-dng
against images that cameras — not test harnesses — actually wrote.
Consumed as a git submodule at third_party/gamut-dng-samples, by the workspace-excluded
conformance crate tooling/gamut-dng-real-conformance. See gamut issue
#174.
Every image here is CC0-1.0 (public domain dedication), sourced from
raw.pixls.us, whose contributors dedicate their samples to the public
domain. MANIFEST.toml records each file's upstream URL and SHA-256 so provenance stays
checkable. The repository text (this README, MANIFEST.toml) is CC0 as well — see LICENSE.
Nothing here is Adobe-authored: gamut already gates against the Adobe DNG SDK's own
sample_files corpus, which ships inside the SDK ZIP. This repository exists for the cases that
corpus cannot cover — vendor quirks, real MakerNotes, and the layouts real firmware emits.
Six files, chosen so that each one is the only member exercising something:
| Path | Camera | What it is the only file to prove |
|---|---|---|
apple/iphone-12-pro/IMG_1361.DNG |
iPhone 12 Pro (ProRAW) | Big-endian; tiled (504×378, 64 tiles) 12-bit LinearRaw; LinearizationTable; ProfileGainTableMap; a semantic-mask sub-IFD; a real 1268-byte MakerNote |
adobe-dng-converter/canon-5d3/uncompressed.DNG |
Canon EOS 5D Mark III | Compression = 1, a single 5920×3950 16-bit CFA strip |
adobe-dng-converter/canon-5d3/lossless.DNG |
Canon EOS 5D Mark III | Compression = 7 CFA, tiled 256×256 over 384 tiles |
adobe-dng-converter/canon-5d3/lossy.DNG |
Canon EOS 5D Mark III | Compression = 34892 (lossy JPEG) — a deliberate gamut deferral, and the only file whose NewRawImageDigest uses the compressed-chunk rule |
leica/m-monochrom/L1000622.DNG |
Leica M Monochrom | DNG 1.0.0.0; monochrome LinearRaw at 1 sample/pixel; carries no as-shot white balance at all |
leica/m10/f5381888.dng |
Leica M10 | Raw living in IFD0 itself rather than a sub-IFD; three preview sub-IFDs with no RowsPerStrip; a 4096-byte MakerNote |
Total ≈ 178 MiB. They are deliberately kept whole: cropping or re-encoding them would destroy the byte-completeness and stored-digest properties that make them worth testing against.
One [[sample]] block per file carrying provenance (source, sha256, license) and an
[sample.expect] table of what gamut-dng must observe. The conformance harness iterates the
manifest, so adding a sample needs no Rust change.
Verify the corpus against its manifest at any time:
sha256sum -c <(awk -F'"' '/^path/{p=$2} /^sha256/{print $2" "p}' MANIFEST.toml)- Confirm the upstream file is CC0 (raw.pixls.us marks non-CC0 samples explicitly — those are not eligible).
- Add it under
<make>/<model>/, keeping the file byte-identical to upstream. - Add a
[[sample]]block withsource,sha256,license, and theexpecttable. - Say in the table above what it is the only file to prove. If nothing, it is not worth 178 MiB of everyone's bandwidth.