Formats
Inputs are matched by extension, case-insensitively; anything else found in a scanned directory is ignored.
RAW
| Brand | Extensions |
|---|---|
| Canon | crw cr2 cr3 |
| Fujifilm | raf |
| Leica | rwl (and natively dng) |
| Nikon | nef nrw |
| Sony | arw srf sr2 |
| Cross-brand | dng — Adobe’s open RAW format, shared by many brands |
Standard images
jpg jpeg png tif tiff bmp webp
Decode paths
The tool never develops (demosaics) RAW data. RAW files are scored from the JPEG image the camera already embedded, which is faithful for sharpness purposes and orders of magnitude faster to read. Each input takes the cheapest decode path available:
CR3 (Canon). The camera stores a full-resolution JPEG rendition inside the CR3’s BMFF container. That JPEG is located directly — first sample of the first track, the same place rawler’s own preview extraction looks — and decoded by zune-jpeg straight to its luminance plane, skipping the color processing entirely. A malformed container index degrades to rawler’s generic preview extraction below instead of failing. A JPEG that then fails to decode is a real error: for example, CR3 files shot in HDR PQ embed an HEIF preview that no decoder in the tool reads, so they are reported as error rows.
Other RAW formats (crw, cr2, raf, rwl, dng, nef, nrw, arw, srf, sr2). rawler extracts the embedded preview image, falling back internally to the largest embedded image when no preview exists. The decoded RGB pixels then go through the BT.601 grayscale conversion.
Standalone JPEG. Decoded by zune-jpeg straight to the luminance plane, exactly like a CR3 preview. JPEGs without a luminance plane (CMYK, …) fall back to the generic path below.
Other standard images (png, tif, bmp, webp). Decoded by the image crate to RGB, then converted to grayscale with the BT.601 weights.
Why luminance only? Sharpness is measured on the luminance channel. For a YCbCr JPEG, the Y plane is the BT.601 luminance the encoder computed from the original pixels, so decoding it directly gives the same signal while skipping the chroma upsampling and the RGB round trip — see Score Stability for how this shortcut was validated.
No raw development
There is deliberately no raw-development fallback: a RAW file without a decodable JPEG preview becomes an error row rather than being demosaiced. This keeps the pipeline fast and its scores tied to one well-defined source image per file. See Reports for how error rows behave.