u/Aggressive-Win-6351

Image 1 — Reverse-engineering camera color pipelines instead of making LUTs by eye
(Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)
Image 2 — Reverse-engineering camera color pipelines instead of making LUTs by eye
(Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)
Image 3 — Reverse-engineering camera color pipelines instead of making LUTs by eye
(Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)
Image 4 — Reverse-engineering camera color pipelines instead of making LUTs by eye
(Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)
Image 5 — Reverse-engineering camera color pipelines instead of making LUTs by eye
(Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)
▲ 71 r/Lumix

Reverse-engineering camera color pipelines instead of making LUTs by eye (Ricoh GR II, Pentax, Leica M9, Hasselblad HNCS-style rendering)

Been reverse engineering some camera color pipelines lately instead of building LUTs the normal way.

Mostly:
Ricoh GR II Positive Film / Vivid,
Pentax JPEG styles,
Leica M9 rendering,
some Hasselblad-style color response,
older Pentax DSLR looks, etc.

This wasn't done by matching screenshots or dragging Lightroom sliders around.

Most of it came from firmware analysis, runtime tracing, DCU validation, and rebuilding parts of the pipeline mathematically.

One thing that started bothering me after a while is that most LUT workflows online don't really reproduce a RAW pipeline at all.

They're mostly reproducing an output look.

Stuff like:
manual grading,
Hald CLUT generation,
SG140 fitting,
Lightroom preset export...

can definitely make something look close on a few images.

But internally it's usually nowhere near what the camera pipeline is actually doing.

Especially once you start seeing things like:
luma-dependent behavior,
dynamic saturation,
opponent-space operations,
selector-based processing,
nonlinear contrast reconstruction,
hidden base color mapping,
style-dependent weighting, etc.

Ricoh GR II Positive Film was the thing that pushed me deepest into this rabbit hole.

At first I thought it was mostly a tuned LUT + tone curve.

Turned out it was much more structured than that.

A heavily simplified reconstruction pipeline ended up looking something closer to:

Input RGB

→ weak Ricoh matrix residual
→ bundle-like precondition
→ luma selector
→ dynamic code routing
→ normalized opponent-space consumer
→ tone reconstruction
→ style residual injection
→ adaptive strength control
→ RGB clamp
→ output

A lot of the behavior changes depending on luminance and image state.

Which is also why a simple RGB→RGB LUT usually can't fully reproduce the original rendering logic.

So after a while I stopped asking:
"how do I make this image look similar?"

and started asking:
"what is the pipeline actually doing internally?"

That's basically the direction now.

Right now everything I'm releasing is built around:
sRGB / Rec709,
gamma 2.4,
cross-camera compatibility.

Mostly because if I start maintaining:
camera-specific transforms +
multiple gamut versions +
multiple working spaces,

then every LUT turns into 50-100 variants and the whole thing becomes impossible to manage.

A few things people keep asking:

"What about sensor differences?"

Obviously sensors differ.
I'm not trying to make every camera mathematically identical.
The goal is perceptual consistency, not scientific identity.

"What about white balance?"

Honestly just use reasonable WB / auto WB.

People online obsess over tiny WB shifts way more than real camera pipelines ever do.

"What about lenses?"

Lenses matter, but that doesn't suddenly invalidate pipeline reconstruction.

"Why not just use Lightroom presets?"

Because presets are usually output-space grading.
I'm more interested in reconstructing processing behavior.

"Can you share the reverse-engineering workflow?"

Some parts are public knowledge already:
firmware analysis,
IDA,
runtime tracing,
AI-assisted analysis, etc.

But the actual reconstruction process is way messier and more time-consuming than people imagine.

"What about skin tones?"

This one comes up constantly.

But honestly, reconstructed LUTs don't really have a "skin tone problem" in the way people online usually talk about it.

A lot of people have spent years using handcrafted Lightroom presets built around a few curated portrait shots.

After a while that becomes their reference for what skin is "supposed" to look like.

But that's grading bias, not pipeline behavior.

If a LUT only looks good on a few carefully selected portraits, that's usually not a good sign.

Anyway, still refining everything as more firmware/runtime behavior gets validated.

If people are interested I can post more comparisons and breakdowns later.

And if you test the LUTs, feel free to post images/results in the comments.

Between VPN, Reddit access, and translation, I probably won't be able to reply to everything quickly.

u/Aggressive-Win-6351 — 5 days ago