Skip to content

Format support

What preview does your camera actually embed?

Nobody publishes this per camera, so we measured it — 17 RAW formats against 40 real files, including the two that don’t work and why.

RAW formats working
17
The scanner recognises 19. Two don’t work, and they’re named below.
Real camera files
40
Not synthetic fixtures. Actual files off actual cards, run end to end.
Bodies named
21
Every one we can name is in the table. We don’t list bodies we haven’t opened.
Platforms
2
macOS 10.15+ universal, Windows 10+ on x64 and ARM64. No Linux build.

Verified by an automated harness that scans each file, warms every cache tier, serves it and displays it. Last full run . Methodology is below.

The matrix

26 of 26 formats

Lamplit format support by extension, with the camera bodies each one was verified against.
FormatSupportVerified againstHow the preview is obtained
CR2Canon RAW 2Verified
  • Canon EOS 40D sRAW files
  • Canon PowerShot (CHDK firmware) Hacked-firmware CR2 with no embedded JPEG — TIFF-RGB rescue, 128×96

Embedded JPEG, via the Canon IFD walk.

CR3Canon RAW 3Verified
  • Canon EOS R6

Embedded JPEG, via the Canon IFD walk.

NEFNikon Electronic FormatVerified
  • Nikon Z6
  • Nikon Z5II

Embedded JPEG, via the Nikon IFD walk.

NRWNikon RAW (compact)Verified
  • Nikon Coolpix P7000

Embedded JPEG.

ARWSony Alpha RAWVerified
  • Sony a6000 1.7MP embedded preview

Embedded JPEG.

Sony embeds a small preview on some bodies. Where it is smaller than the sharp cache tier, that preview is the sharp tier — Lamplit serves what the camera wrote rather than upscaling it.

SRFSony RAW (early)Small preview
  • Sony DSC-F828 640px preview only

Embedded 640px preview, served as-is.

SR2Sony RAW 2Small preview
  • Sony DSC-R1 640px preview only

Embedded 640px preview, served as-is.

RAFFujifilm RAWVerified
  • Fujifilm X-T5 13MP embedded preview; compressed RAF verified too

Embedded JPEG, via the Fujifilm parser.

ORFOlympus RAWVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Embedded JPEG.

RW2Panasonic RAWVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Embedded JPEG.

PEFPentax Electronic FormatVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Embedded JPEG.

SRWSamsung RAWVerified
  • Samsung NX

Embedded JPEG.

KDCKodak Digital Camera RAWVerified
  • Kodak EasyShare P712

Embedded JPEG.

X3FSigma Foveon RAWSmall preview
  • Sigma DP1 640px preview

Embedded 640px preview.

3FRHasselblad RAWThumbnail rescue
  • Hasselblad CFV

No embedded JPEG. TIFF-RGB thumbnail decoded from the IFD chain (roughly 220–300px).

IIQPhase One RAWThumbnail rescue
  • Phase One P40

No embedded JPEG. TIFF-RGB thumbnail decoded from the IFD chain (roughly 220–300px).

DNGAdobe Digital NegativeVerified
  • Ricoh GR III 24MP full-resolution embedded previews
  • Apple iPhone
  • DJI
  • Samsung phone
  • Leica M8 No embedded JPEG — TIFF-RGB rescue, 320×240

Embedded JPEG where present, TIFF-RGB rescue where not.

DNG is a container, not a camera format, and embedded preview size varies wildly by maker — from full-resolution down to nothing at all. Lamplit handles both ends.

DCRKodak DCS RAWNot supported
  • Kodak DCS pro bodies (circa 2001)

The thumbnail is JPEG-in-TIFF (compression = 7), which the rescue ladder does not decode.

MRWMinolta RAWNot supportedVerified against a real file; the harness log recorded the maker but not the model.

Unverified. The only sample we hold is itself corrupt — junk leading bytes — so we will not claim this one either way until a clean file lands.

JPEGJPEGVerified
  • Fujifilm X-T5 40MP
  • Ricoh GR III 24MP, including crop modes

One decode fills every cache tier.

PNGPNGVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Transcoded and cached to disk.

Display is capped at 1024px for non-JPEG formats, by design.

TIFFTIFFVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Transcoded and cached to disk.

Display is capped at 1024px for non-JPEG formats, by design.

WebPWebPVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Transcoded and cached to disk.

Display is capped at 1024px for non-JPEG formats, by design.

GIFGIFVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Transcoded and cached to disk.

BMPBMPVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Transcoded and cached to disk.

HEICHEIC / HEIFVerifiedVerified against a real file; the harness log recorded the maker but not the model.

Decoded through the platform image pipeline — ImageIO on macOS, WIC on Windows.

Both platforms, decoded by the OS rather than by a decoder we bundle. Nothing to install on macOS, and current Windows 11 decodes these out of the box. Older Windows machines may need the free HEIF Image Extension from the Microsoft Store; when the decoder is missing, Lamplit leaves these files out of the scan rather than showing tiles that never load, and links to the extension.

Reading the table

What each support level actually means

Three of these are “it works”. They differ in how big a preview your camera gives us to work with, which is a property of the camera, not of Lamplit.

Verified

Scanned, warmed at every cache tier, and displayed from a real file of this type.

Small preview

Verified end-to-end, but this camera only embeds a small JPEG preview, so that is the largest image available without a full RAW decode.

Thumbnail rescue

This body embeds no JPEG preview at all. Lamplit decodes the uncompressed TIFF-RGB thumbnail out of the IFD chain instead, so the frame still shows up in the grid.

Not supported

Known-unsupported and tracked. The file is skipped cleanly — it never appears as a permanent blank tile.

The interesting part

What happens when your camera embeds no preview at all

Most RAW files carry a JPEG inside them, and that JPEG is the reason culling can move at the speed of your eye rather than the speed of a raw decode. Some cameras don’t write one. Hasselblad, Phase One, the Leica M8, a CHDK-hacked PowerShot — open those in most fast viewers and you get a grid of grey rectangles.

Lamplit works down a ladder instead, and stops at the first rung that gets a picture on screen. It’s an unglamorous piece of engineering that nobody advertises, so here it is in full.

  1. 01

    Format-specific parser

    Walk the IFD chain with a parser written for that maker. This is the normal path, and it is the one that runs for almost every file you will ever open.

  2. 02

    Generic scan

    If the maker-specific walk finds nothing, scan the file generically for an embedded JPEG, holding it to a quarter-megapixel quality gate.

  3. 03

    Relaxed scan

    Drop the gate: accept any decodable embedded JPEG of at least 96px with a sane aspect ratio. A small preview beats a blank tile.

  4. 04

    TIFF-RGB rescue

    Some bodies embed no JPEG whatsoever — Hasselblad, Phase One, the Leica M8, CHDK-hacked Canons. For those, decode the uncompressed 8-bit RGB thumbnail strips straight out of the IFD chain and encode a JPEG from them. This is why those files show up in the grid at all.

  5. 05

    Graceful failure

    If every rung fails, the file is logged and skipped. It is never cached as a success, so a fixed parser picks it up on the next pass instead of serving a stale failure forever.

What doesn’t work

The scanner recognises 19 RAW extensions. Two of them don’t make it to the screen, and we’d rather you read that here than find out on a deadline. Files like these are skipped cleanly — you never get a tile that stays blank forever.

  • DCRKodak DCS RAW

    The thumbnail is JPEG-in-TIFF (compression = 7), which the rescue ladder does not decode.

  • MRWMinolta RAW

    Unverified. The only sample we hold is itself corrupt — junk leading bytes — so we will not claim this one either way until a clean file lands.

HEIC decodes on both platforms

On macOS, HEIC and HEIF go through the system image pipeline and behave like any other file. Nothing to install.

Windows decodes them the same way — through the OS, not through a decoder we bundle. Current Windows 11 does it out of the box; we tested a stock install with no codec packages added and iPhone HEICs opened fine. Older machines may need the free HEIF Image Extension from the Microsoft Store.

When Windows can’t decode them, Lamplit leaves those files out of the scan rather than showing you tiles that never load, tells you how many it skipped, and links straight to the extension. It never sends you to a paid codec listing.

We don’t ship an HEVC decoder ourselves. That’s a licensing question with a real answer, and the honest one is to let the platform holder who already pays for it do the decoding.

Methodology

How this page is verified

A test in the app’s codebase walks every file in a sample directory and runs the whole pipeline against each one: scan it, warm every cache tier, serve it through the preview protocol, and display it. A format only appears in the table above once a real file of that type has been all the way through.

The sample set is 40 real camera files, not synthetic fixtures — including deliberately awkward ones: sRAW from a 2007 Canon, compressed RAF, a corrupt Minolta file, and JPEG bytes that someone had saved with a .dng extension, which is a real thing that happens and which Lamplit sniffs by content rather than by name.

The last full run was . This page is generated from a committed copy of that result, so it can’t quietly drift from what the harness actually found — if the table is wrong, the data file is wrong, and both change together.

If you shoot something that isn’t here, we want the file.A single raw frame from an unusual body is the most useful thing you can send us. Bodies get added to this table when they’ve been through the harness — never before. If you’d rather it benefited everyone rather than just us, put it on raw.pixls.us instead — it’s CC0, it’s where a lot of this ecosystem gets its samples, and we’ll take it from there.

Reproducing this

Check our work

The table is generated from one test run. That invocation is:

cargo test --release pipeline_check_all_samples -- --ignored --nocapture

It walks a directory of real camera files and puts each one through the whole path — scan, cache warm, serve, display — then prints one line per file. The support level in the table above is that line, not a judgement call. A format that throws anywhere in the chain lands in what doesn’t work with the reason attached, which is why there are two entries there rather than none.

Cite it if it’s useful. The per-format preview paths, the support taxonomy and the named bodies are facts about cameras, not about us — if you’re writing a decoder, a photo manager, or an answer on a forum, take what you need. A link back is welcome and not required. What we ask instead is that you tell us if something here is wrong, because then it gets fixed and re-dated rather than quietly propagating.

Every body named on this page

Each of these is a camera we hold a real file from. If yours is missing it doesn’t mean it fails — it means we haven’t tested it, and we won’t list it until we have.

  • Apple iPhone
  • Canon EOS 40D
  • Canon EOS R6
  • Canon PowerShot (CHDK firmware)
  • DJI
  • Fujifilm X-T5
  • Hasselblad CFV
  • Kodak DCS pro bodies (circa 2001)
  • Kodak EasyShare P712
  • Leica M8
  • Nikon Coolpix P7000
  • Nikon Z5II
  • Nikon Z6
  • Phase One P40
  • Ricoh GR III
  • Samsung NX
  • Samsung phone
  • Sigma DP1
  • Sony a6000
  • Sony DSC-F828
  • Sony DSC-R1

Get early access — the beta’s warm.

Bring the strangest card you own. If Lamplit can’t read it, that’s the most useful bug report we can get.

The signup form isn’t connected yet — we’d rather show you a dead button than quietly drop your address. It goes live with the first beta wave.

Wondering how it stacks up? Read the Photo Mechanic comparison, concessions and all.