[PlayRaw] Sunset on ferry

Photoflow (Hue preserved but some banding on the left)

IMG_3129.pfi (47.2 KB)

Darktable with no preserving chrominance v5 (very smooth gradients but yellow hue-shift)

Darktable with no preserving chrominance v6

IMG_3129.CR2.xmp (9.4 KB)

wow seems to be hard to get colour right on this one. tried vkdt:

using a spectral input profile and set white balance to around 4000K such that it wouldn’t only be red.


Gimp 3.10.32

thanks for posting
darktable 4.0

IMG_3129_02.CR2.xmp (19.5 KB)

Add a new one

IMG_3129_08.CR2.xmp (29.0 KB)

My quick play with this image. Filmulator then into GIMP.

1 Like

Thanks for sharing!

dt 3.9.0 + sigmoid

IMG_3129_02.CR2.xmp (11.0 KB)

a slightly warmer version by tweaking color calibration:

IMG_3129.CR2.xmp (10.6 KB)


IMG_3129_01.CR2.xmp (12.5 KB)

I really like the soft tones and the colours in this one.

Thank you @age for bring this nice image up after 3 years :slight_smile:

Hier is my edit:

Darktable 4.0.0 IMG_3129.CR2.xmp (21.3 KB)



IMG_3129.CR2.xmp (13.9 KB)


for the fun, my two tries with the new release of RethinkRAW

and in BW



edit: a little change in the white balance

1 Like

Little improvement on my tonemapping using the power-norm for smoother gradients (no more banding on the wall on the left)
IMG_3129.pfi (49.8 KB)


rtm=(1-(pivot/((r/gray)^power+pivot))) // tone mapping  or simple tone curve on the red channel
gtm=(1-(pivot/((g/gray)^power+pivot)))// tone mapped or simple tone curve on the green channel
btm=(1-(pivot/((b/gray)^power+pivot)))// tone mapped  or simple tone curve on the blu channel





That’s very nice! It’s your tool open source? Do you have a link? :slight_smile:

Right now it is a G’mic script that I use in Photoflow from the G’mic interpreter

-fill power=1.40;gray=0.18;pivot=(1-gray)/gray;max=max(i0,i1,i2);min=min(i0,i1,i2);lum=(i0^3+i1^3+i2^3)/(i0^2+i1^2+i2^2);i0tm=(1-(pivot/((i0/255/gray)^power+pivot)))*255;i1tm=(1-(pivot/((i1/255/gray)^power+pivot)))*255;i2tm=(1-(pivot/((i2/255/gray)^power+pivot)))*255;crgbtm=[i0tm,i1tm,i2tm];maxtm=max(i0tm,i1tm,i2tm);mintm=min(i0tm,i1tm,i2tm);lumtm=(i0tm^3+i1tm^3+i2tm^3)/(i0tm^2+i1tm^2+i2tm^2);chromatm=1-(mintm/lumtm);chroma2=1-(min((i0-lum+lumtm),(i1-lum+lumtm),(i2-lum+lumtm))/lumtm);chromamult=if(chromatm==0||chroma2==0,0,chromatm/chroma2);chromamult=if(chromamult<0,0,chromamult);i=[i0,i1,i2];i=((i-lum)*chromamult+lumtm)*0.60+crgbtm*0.40;
1 Like

Color profile turned off.
White point picked on grey deck in foreground.
Black point reset to 0
Enhanced Edges and Residual contrast in Wavelets
L*a*b* color stretch, shift cyan sky to blue.
HSV Hue channel bumped pink sunset color to more natural yellow-orange gradient.
IMG_3129.jpg.out.pp3 (16.3 KB) ← RT dev


Another , and sadly I will not continue to try something new, is to copy the hue from CIE xyY to the rgb tonemmaped image
(Edit: It seems the copying the hue from xyy is better for noisy images)
in this case I blended the hue from xyY at only 60% strength
IMG_3129xyy.pfi (47.7 KB)

CIE xyY is not a perceptual color space so if we blend the hue at 100% strength we could get pinkish colors, for example the fire test image turn to this

Blended at 60%


Hi @age, it’s been nice to follow your experiments. The results look quite nice. I would like to ask for a couple of clarifications:

  • Is your tone-mapping followed by some hue-preserving gamut-mapping (or chroma clipping) operation (in a perceptual colorspace)? Pardon my ignorance here, I’m not very familiar with Photoflow.
  • I’m curious about the way you handle chroma here - you seem to use the difference between the norm and individual channels as the representation of chromaticity. Is there a particular reason you chose to do this rather than just multiply the original RGB ratios (i.e. (r / norm, g / norm, b / norm) by the tonemapped norm? I.e. final RGB (color preserving) = tonemapped norm / original norm * (r, g, b). This is the way it’s done in filmic. If I understand correctly, your approach is to rather adjust the amount of white in the pixel.
  • Blending in the individually processed RGB channels with the color-preserving tone-mapping results seems to be a nice way to achieve bit of that desaturation of highlights that is often desired or even required for some images and restoring the original hue (partially), even if done in xyY which is not a hue-linear color space, allows to avoid the color shifts caused by individual RGB processing
  • Are there any research papers / other resources you’ve found useful or followed in developing the tone-mapping operation?
  • Have you experimented with tone-mapping (or just the hue preservation) in perceptual color spaces such as Oklab?

The reason I’m curious because there have ideas thrown around in IRC about a possible filmic v7 which would allow the user to mix between the individual RGB processing result and the norm-preserving result, and additionally a control for the degree of hue preservation. This shares some similarity with your approach and would certainly allow for some flexibility over a strict chromaticity preserving approach.

P.S. moderators, if you see this spinning totally off-topic for this thread, please feel free to split it. However I wanted to ask here because @age has posted nice results from their tone-mapping and also code in this thread so the context is here.

1 Like

No, I just let rgb channels hard clipping

Yes, sadly when used with a sigmoid shaped tonemapper shadows looks too much desaturated and highlights have too much or too low saturation.

My approach is simply copy the hue channel from the image before tonemapping to the rgb per channel tonemapped image

I don’t think, however the film-like curves used in Rawtherappe (developed by Adobe) are just the equivalent of blending the hue from the HSV color space to the rgb tonemapped image


The main issue with this method is that it removes way too much saturation from red,orange,yellows hues

However copying only the hue from oklab to the rgb tonemapped image it would be better , I haven’t test it, yet

1 Like

Sunset on ferry_IMG_3129.CR2.xmp (9.9 KB)