How to get Darktable sharpness to match Lightroom

I fully agree. It took me about 2 years (asking questions, reading the code) to have a superficial understanding of what is going on in DoS.

This is what happens, roughly (I think):

  1. central radius and radius span select a range of frequencies, \mathrm{central} \pm \mathrm{span}. Call the edges (maybe?) “low” and “high”.
  2. the channels are decomposed into wavelets, the operation only affects the range above.
  3. directions for anisotropy are defined using the “low” and “high” frequency layers. Each layer has anisotropies defined in two directions, so you have two sliders for each, eg “2nd order” direction affects what happens to “low” but takes the direction from the “high”. The "speed"s then control the direction of each.
  4. Intermediate frequency wavelet diffusion parameters seem to be interpolated from the “high” and “low”.
  5. “Edge management” protects edges as described, using local gradients (I think).

The 1st, 2nd, etc labels are not informative at all. I mix them up even after understanding the process (which was the low of the high again?). The “laplacian of the laplacian” kind of explanations in the manual are hard to connect to what’s happening in the code.

I opened an issue about this, first I was told that it is too complex and would only confuse the users, then to just read the code, then came to the conclusion that the module is not documented well because the dev who did it left the project and no one understands all the details. This is what prevents me from making a docs PR: I don’t understand all the details either. There was a lengthy discussion which uncovers a lot of details though.

5 Likes