Thanks a lot, @Christian-B and @Wilecoyote!
My 2 cents about the merging of these modules 
- I would name the module just âcontrast RGBâ as it what both variants do
- I would rename the tabs to âpyramidalâ (or global) and âper-scaleâ, cause the main difference is whether some of the controls affect all the scales or just one.
Besides, maybe we can do without the tabs and still have the best of both worlds.
IIUC at the moment the only differences between the two implementations are:
- The layout of the controls
- Pyramidal has global scale/refinement controls, whereas per-scale has it per scale
- Pyramidal has per-scale feathering, whereas per-scale doesnât.
- Pyramidal does not expose the feature extractor, whereas per-scale does
While (1) is a matter of preferences, I would say that (3) is a win for Pyramidal, and (2) and (4) are wins for multi-scale. A win in this case is the ability to have more control over the results when this control is needed.
I thought a bit whether there is a better way to unify the UIs while leaving maximum flexibility instead of going the tabs way, and this is my proposal.
- Add a combobox or a slider to specify the number of detail levels (e.g., 1-5). Letâs call this N (it could default to 1, for simplicity).
- Add a checkbox (titled
per-scale controls) to select between global (unchecked and default, because it is simpler) and per-scale (checked). Ideally, the checkbox would show up only if N > 1.
- If
global is selected, then you have N strength sliders, and a unique panel at the bottom to set scale, feathering and refinement for all scales at once.
- If
per-scale is selected, then you have N groups of 4 sliders, i.e., (scale, strength, feathering, refinement) for each detail level.
- At the bottom of the panel, you have the option to configure the feature extractor.
With this setup, with N=5 and global the controls would look like Pyramidal.
With N=3 and per-scale they would look like per-scale (i.e., currently the expert tab).
As an example, for N=2 and global, the controls would be:
- strength1 [mask]
- strength2 [mask]
- â
- (global) scale
- (global) edge refinement
- (global) feathering
- â
- (global) feature extractor
Instead, with per-scale enabled the controls would be:
- strength1 [mask]
- scale1
- edge refinement1
- feathering1
- â
- strength2 [mask]
- scale2
- edge refinement2
- feathering2
- â
- (global) feature extractor
Actually, the feature extractor could also be modified per-scale. So, another possibility would be to include it at a per-scale level when the âper-scaleâ checkbox is selected.
In terms of implementation, one could always have N_{max} * num\_controls logical values. Toggling the checkbox or changing the value of N would just affect how the UI is rendered and how their values are computed from the visible controls.
A nice thing of this approach is that the complexity of the UI is proportional to the complexity of what one is trying to do, and for N=1 the interface would be very simple.
WDYT?
Edit: I had written the post above before considering also @jandrenâs version. There could be another control switching between wavelets and color channels, or it could go in another tab. However, I find this interpretation different enough from the other two to be better suited for a different module (e.g., color contrast rgb).