I've finally tried ART and it is amazing!

I must confess not knowing/understanding what ART was until I read your post. I tried it and I agree with you @a286: neat, simplified workflow with powerful tools for landscapers, love it, good job Alberto!


This is exactly why I decided to make such a post :blush:

I have some smart 8th graders that need a RAW editor. Would ART be within their grasp?



@agriggio: I would like to learn how to best use the new/improved tools in ART. Can you list what algorithms are being used and related papers, if any?

I am especially interested in Exposure Compensation, Tone Equalizer, Log Tone Mapping, Local Contrast, Texture Boost.

Thanks (and great work!).

Hi @JackH,

well, that’s a lot of modules :slight_smile: I’ll try:

  • exposure compensation is just multiplication of each pixel (as a vector [r, g, b]) by 2^{value}, done in linear space, with no clipping

  • tone equaliser is a bit more complicated. At a high level, this is a parametric tone curve that tries to preserve local contrast. The basic algorithm comes from @anon41087856 of darktable, on top of which I’ve added my own tweaks. In summary:

    1. build a tonal map by taking log_2(luminance([r, g, b]) for each pixel (where luminance is Y in XYZ)

    2. apply some edge-aware smoothing of such map using some guided filters at different scales (this is controlled by the “regularization” slider)

    3. each band in the equaliser corresponds to a Gaussian mask in log space, centered around a specific EV value (e.g. EV 0 for whites, EV -2 for highlights, … and so on). Compute the exposure correction factor for each pixel as the weighted sum of the correction of each band, according to the Gaussian masks

    I took steps 1. and 3. directly from (the first version of) the tone equaliser of darktable (I don’t know if it evolved in the meantime), whereas 2. is my contribution. No reference that I’m aware of

  • log tone mapping applies, well, a tone mapping in log space :-), taken from GitHub - ampas/aces-dev: AMPAS Academy Color Encoding System Developer Resources (ACESutil.Lin_to_Log2 in particular), and then remaps to linear by making sure that toLin(source\_gray) = target\_gray. This is similar to the Filmic module of darktable, here are the main differences (to the best of my knowledge):

    • filmic applies also a “film-like S-curve” and some other look operators (e.g. saturation manipulation), whereas in ART you would do that afterwards with the tone curve

    • remapping from log to linear is done with a “gamma” curve in filmic, i.e. a function y = x^{\gamma}, whereas in ART this is done with an exponential, i.e. y = base^x

    • ART also has a regularization slider which (similarly in concept to tone equaliser, but implemented differently) uses guided filters to preserve local contrast

    • filmic lets you select the pixel norm to use for the tone mapping, in ART this is hardcoded to luminance

  • local contrast comes straight from RawTherapee. It applies a wavelet decomposition in Lab space and manipulates the contrast of the different levels by using the curve (leftmost points correspond to finer detail scales). @jdc can give you more details about this

  • texture boost is somewhat similar to doing sharpening or local contrast with unsharp masks, as described e.g. in Local Contrast Enhancement. Main differences:

    • this is done with a guided filter, which is edge-aware, rather than with gaussian blur

    • I apply two levels of details rather than a single one

    • this is applied in linear RGB (and in fact it can sometimes cause artifacts in the deep blacks – I still have to find a proper solution for this)

    Conceptually, texture boost is also similar to local contrast, the main differences being the methods for doing the extraction of the different detail levels and their amplification/dampening, the working space, and the position in the pipeline.

Hope this helps


Fantastic, thank you very much for the in-depth explanation @agriggio, I really like ART’s vision.


1 Like

I just tried ART seriously for the first time, for a couples portrait shoot. Really liking it, especially the Tone Equalizer and Log Tone Mapping. Also the sharpening tool with default settings and RL Deconvution is excellent. Contrast by Detail Levels seems to be missing, however. I had been using it to slightly soften texture in portraits. Not a huge deal as I can achieve much the same effect by bringing them into Gimp and using a subtle amount of Orton effect, but wondering if there’s a way to achieve this in ART.

1 Like

In ART you can use Local Contrast module with “negative” values (curve points below middle line) to soften the image. Maybe this will give desired effect?

Thanks, that does what I want. :slightly_smiling_face:

Ability to update snapshots
Good morning. I have a suggestion to improve the functionality of snapshots. I often like to keep a number of snapshots (or versions) of a picture, eg Black and White Version, Colourful Version, Faded version. etc. Currently, if I want to tweak and update a version, I need to create a new snapshot, name it, then delete the old one, which can get cumbersome after a while. I wonder if it would be possible to have a quick button or shortcut key to update a snapshot with the current settings. Eg for example if I moved the cursor to the snapshot labelled ‘Colourful version’, then pressed shift and click, it would update ‘Colourful version’ to the current settings.

Just an idea, as always, feel free to ignore it!

You can! Select the snapshot you wish to copy then click on “copy” in the “processing profiles” box. Then select the destination snapshot and click on paste (in the same place as copy) and presto! it is done!

That’s a nice idea! I’ll see what I can do.

I don’t think that does what @spidermonkey wants…

Thanks both. @carafife I tried your suggestion, but when I pasted the profile, it didn’t change the snapshot.
Have a good weekend… :slightly_smiling_face:

isn’t that what you want to do?

Thanks @carafife. After you have gone through the steps you show in your video, click on Instantane 1, and you will find it reverts back to the colour version, ie it hasn’t been updated…(unless I am missing something?)

indeed you are right… :thinking:

Hello, I don’t see the problem here. If I tweak and update an existing snapshot, I’ll save it (Alt+s) as named_snap_v2. And why delete previous snaps?

If I explain the way that I work, it might make more sense why I would think this feature would be useful. It is mostly a question of speeding up working.

Often there are more than one way of doing things - for example, in a high contrast scene, you could use tone equaliser / dynamic range compression / log tone mapping to try and compress the range of values.
So, I might want to try out a few different ways of doing something and compare them, so I will save a different snapshot let’s say for 3 different ways of doing it. I like to update each version and tweak it until I am happy with it. I will often hop between each version as I am doing this to update them. Then I will compare the final result of each version.

Currently, I have to type in a new name for the snapshot to keep track of what I am doing each time I hop between the version and update it, then either end up with a long list of snapshots, or delete some of the old ones. Although it is all easy to do, it does become time consuming after a while. So a quick button to update the version would speed things up. It is a bit like being to just save over a file with your latest version - it would be cumbersome if you always had to create a new file each time.

Maybe I am the only person that works like this, but let’s see what people think…


I think it’s a valid use case. In fact, I have already started working on this – I just need to decide what is the best UI and then it will be available

1 Like