Color Eq & Mouse moved

Hello,

Here’s an old idea that’s resurfaced in my mind: an adaptation of the color equalizer module inspired by the tone equalizer module.

I’ve implemented the ability to correct a color by selecting it directly on the photo, on the fly. Needless to say, the AI has been a big help.

You can test it on my lab version, what do you think?

Greetings from the Luberon

13 Likes

Looks like another great improvement.

1 Like

This sounds super! One thing that might need addressing is the positioning of the nodes. In my experience to accurately manipulate certain colours the nodes need to be moved.

1 Like

Hello,
All of the module’s features remain unchanged; here, the mouse pointer selects a color, which is displayed in the small circle, and depending on its position relative to the nodes, it applies the correction proportionally to the neighboring nodes
Christian

1 Like

Hey good idea … installed the ARM version on M1 Mac
DT crashes at start up … !!
Something wrong with your compiling ?

Regards Andreas

Looks really intuitive and easy to use, while powerful. Me gusto mucho :grinning:

:+1:
I think your great idea could further benefit from displaying the current hovered colour as a line in the modules diagram (similar to using the picker).

1 Like

Unfortunately, I don’t know how to test it, but I’ll analyze the script and keep you informed.

1 Like

I wonder if for this you wanted to be the most accurate for a certain color could you have a key modifier so that when you click the closes node moves with the node shift to align with the selected color …it could be confusing I guess as you wouldn’t want to do it a second time and you look to be doing multiple colors on the same instance…

2 Likes

Agree! I once started a Feature request for the issue of easily setting the nodes right but it went nowhere. I solved the problem for myself by having set zz for the colour picker to check where the target colour lies and z+scroll to adjust the node placement.

I fear automatically shifting the nodes upon first scroll-activation introduces a lot of potential for confusion.

For me personally showing the current hovered colour (like the picker currently does) would enable me to mouseover and z+scroll the nodes to the right place easily. But I guess I am a much more hardcore-keyboard-shortcutter then most :wink: .

Thank you very much for putting this into practice. The idea had come up time and again but had always been rejected until now. So it’s great to see that someone has taken the initiative to make it happen! Brilliant.

Here is the crash report … not sure if this might help ?

Translated Report (Full Report Below)

Process: darktable [2012]
Path: /Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable
Identifier: org.darktable
Version: (.)
Code Type: ARM-64 (Native)
Role: Default
Parent Process: launchd [1]
Coalition: org.darktable [2313]
User ID: 501

Date/Time: 2026-03-27 18:12:42.3888 +0100
Launch Time: 2026-03-27 18:12:42.3507 +0100
Hardware Model: Mac13,1
OS Version: macOS 26.3.1 (25D771280a)
Release Type: User

Crash Reporter Key: 8C607135-F7C4-297A-C030-4A8E25D2A9F2
Incident Identifier: 07F5057D-4B83-4B28-962A-50E0295AA83D

Time Awake Since Boot: 780 seconds

System Integrity Protection: enabled

Triggered by Thread: 0

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Termination Reason: Namespace DYLD, Code 1, Library missing
Library not loaded: @executable_path/…/Resources/lib/liblibre-dt-lab.dylib
Referenced from: <574E0050-D485-3584-9D34-C265880B0142> /Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable
Reason: tried: ‘/Applications/darktable_local_contrast_BH.app/Contents/Resources/lib/liblibre-dt-lab.dylib’ (no such file)
(terminated at launch; ignore backtrace)

Dyld Error Message:
1

Thread 0 Crashed:
0 dyld 0x19b8ba940 __abort_with_payload + 8
1 dyld 0x19b941538 abort_with_payload_wrapper_internal + 104
2 dyld 0x19b94156c abort_with_payload + 16
3 dyld 0x19b8c3500 dyld4::halt(char const*, dyld4::StructuredError const*) + 312
4 dyld 0x19b8bf430 dyld4::prepare(dyld4::APIs&, mach_o::Header const*) + 3840
5 dyld 0x19b8bdd04 start + 7104

Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000001 x2: 0x000000016b91a4b0 x3: 0x0000000000000093
x4: 0x000000016b91a0b0 x5: 0x0000000000000000 x6: 0x0062696c79642e62 x7: 0x0000000000000000
x8: 0x0000000000000020 x9: 0xc0110908170a00a3 x10: 0x0000000000001cb0 x11: 0x0000000207cbc0a0
x12: 0x0000000000020000 x13: 0x000000019b8b5000 x14: 0x0000000000000001 x15: 0x0000000000000000
x16: 0x0000000000000209 x17: 0xcadd00016b919da8 x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x000000016b91a0b0 x21: 0x0000000000000093 x22: 0x000000016b91a4b0 x23: 0x0000000000000001
x24: 0x0000000000000006 x25: 0x000000001f070004 x26: 0x0000000000000000 x27: 0x000000016b91af28
x28: 0x0000000000000000 fp: 0x000000016b91a080 lr: 0x000000019b941538
sp: 0x000000016b91a040 pc: 0x000000019b8ba940 cpsr: 0x80001000
far: 0x0000000000000000 esr: 0x56000080 (Syscall)

Binary Images:
0x1044e4000 - 0x1044f7fff org.darktable () <574e0050-d485-3584-9d34-c265880b0142> /Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable
0x19b8b5000 - 0x19b954713 dyld (
) <044cd67e-3a0a-3ca4-8bb3-a9687d5328fe> /usr/lib/dyld
0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=588.1M resident=0K(0%) swapped_out_or_unallocated=588.1M(100%)
Writable regions: Total=8288K written=96K(1%) resident=96K(1%) swapped_out=0K(0%) unallocated=8192K(99%)

                            VIRTUAL   REGION 

REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
STACK GUARD 56.0M 1
Stack 8176K 1
__DATA 5K 1
__DATA_CONST 46K 2
__DATA_DIRTY 14K 1
__LINKEDIT 587.4M 2
__TEXT 720K 2
__TPRO_CONST 128K 1
dyld private memory 16K 1
page table in kernel 96K 1
=========== ======= =======
TOTAL 652.4M 13


Full Report

{“app_name”:“darktable”,“timestamp”:“2026-03-27 18:12:42.00 +0100”,“app_version”:“”,“slice_uuid”:“574e0050-d485-3584-9d34-c265880b0142”,“build_version”:“.”,“platform”:1,“bundleID”:“org.darktable”,“share_with_app_devs”:1,“is_first_party”:0,“bug_type”:“309”,“os_version”:“macOS 26.3.1 (25D771280a)”,“roots_installed”:0,“name”:“darktable”,“incident_id”:“07F5057D-4B83-4B28-962A-50E0295AA83D”}
{
“uptime” : 780,
“procRole” : “Default”,
“version” : 2,
“userID” : 501,
“deployVersion” : 210,
“modelCode” : “Mac13,1”,
“coalitionID” : 2313,
“osVersion” : {
“train” : “macOS 26.3.1”,
“build” : “25D771280a”,
“releaseType” : “User”
},
“captureTime” : “2026-03-27 18:12:42.3888 +0100”,
“codeSigningMonitor” : 1,
“incident” : “07F5057D-4B83-4B28-962A-50E0295AA83D”,
“pid” : 2012,
“translated” : false,
“cpuType” : “ARM-64”,
“procLaunch” : “2026-03-27 18:12:42.3507 +0100”,
“procStartAbsTime” : 18924687904,
“procExitAbsTime” : 18925547958,
“procName” : “darktable”,
“procPath” : “/Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable”,
“bundleInfo” : {“CFBundleShortVersionString”:“”,“CFBundleVersion”:“.”,“CFBundleIdentifier”:“org.darktable”},
“storeInfo” : {“deviceIdentifierForVendor”:“94072C8E-5536-5C92-8E6E-169983D9C049”,“thirdParty”:true},
“parentProc” : “launchd”,
“parentPid” : 1,
“coalitionName” : “org.darktable”,
“crashReporterKey” : “8C607135-F7C4-297A-C030-4A8E25D2A9F2”,
“appleIntelligenceStatus” : {“state”:“available”},
“developerMode” : 1,
“codeSigningID” : “org.darktable”,
“codeSigningTeamID” : “”,
“codeSigningFlags” : 570425857,
“codeSigningValidationCategory” : 10,
“codeSigningTrustLevel” : 4294967295,
“codeSigningAuxiliaryInfo” : 0,
“instructionByteStream” : {“beforePC”:“eAAAALwAAAAoAQAAcAAAAAABAABoAAAAGAEAADgBAAAwQYDSARAA1A==”,“atPC”:“AwEAVH8jA9X9e7+p/QMAkRb1/5e/AwCR/XvBqP8PX9bAA1/WEC2A0g==”},
“bootSessionUUID” : “7A254E4B-E5C8-45AC-870F-4A6AC2740358”,
“fatalDyldError” : 1,
“sip” : “enabled”,
“exception” : {“codes”:“0x0000000000000000, 0x0000000000000000”,“rawCodes”:[0,0],“type”:“EXC_CRASH”,“signal”:“SIGABRT”},
“termination” : {“code”:1,“flags”:518,“namespace”:“DYLD”,“indicator”:“Library missing”,“details”:[“(terminated at launch; ignore backtrace)”],“reasons”:[“Library not loaded: @executable_path/…/Resources/lib/liblibre-dt-lab.dylib”,“Referenced from: <574E0050-D485-3584-9D34-C265880B0142> /Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable”,“Reason: tried: ‘/Applications/darktable_local_contrast_BH.app/Contents/Resources/lib/liblibre-dt-lab.dylib’ (no such file)”]},
“extMods” : {“caller”:{“thread_create”:0,“thread_set_state”:0,“task_for_pid”:0},“system”:{“thread_create”:0,“thread_set_state”:0,“task_for_pid”:0},“targeted”:{“thread_create”:0,“thread_set_state”:0,“task_for_pid”:0},“warnings”:0},
“faultingThread” : 0,
“threads” : [{“triggered”:true,“id”:32387,“threadState”:{“x”:[{“value”:6},{“value”:1},{“value”:6099674288},{“value”:147},{“value”:6099673264},{“value”:0},{“value”:27700462331637346},{“value”:0},{“value”:32},{“value”:13839853060237164707},{“value”:7344},{“value”:8720728224},{“value”:131072},{“value”:6904565760},{“value”:1},{“value”:0},{“value”:521},{“value”:14617839971614170536},{“value”:0},{“value”:0},{“value”:6099673264},{“value”:147},{“value”:6099674288},{“value”:1},{“value”:6},{“value”:520552452},{“value”:0},{“value”:6099676968},{“value”:0}],“flavor”:“ARM_THREAD_STATE64”,“lr”:{“value”:6905140536},“cpsr”:{“value”:2147487744},“fp”:{“value”:6099673216},“sp”:{“value”:6099673152},“esr”:{“value”:1442840704,“description”:“(Syscall)”},“pc”:{“value”:6904588608,“matchesCrashFrame”:1},“far”:{“value”:0}},“frames”:[{“imageOffset”:22848,“symbol”:“__abort_with_payload”,“symbolLocation”:8,“imageIndex”:1},{“imageOffset”:574776,“symbol”:“abort_with_payload_wrapper_internal”,“symbolLocation”:104,“imageIndex”:1},{“imageOffset”:574828,“symbol”:“abort_with_payload”,“symbolLocation”:16,“imageIndex”:1},{“imageOffset”:58624,“symbol”:“dyld4::halt(char const*, dyld4::StructuredError const*)”,“symbolLocation”:312,“imageIndex”:1},{“imageOffset”:42032,“symbol”:“dyld4::prepare(dyld4::APIs&, mach_o::Header const*)”,“symbolLocation”:3840,“imageIndex”:1},{“imageOffset”:36100,“symbol”:“start”,“symbolLocation”:7104,“imageIndex”:1}]}],
“usedImages” : [
{
“source” : “P”,
“arch” : “arm64”,
“base” : 4367204352,
“CFBundleShortVersionString” : “”,
“CFBundleIdentifier” : “org.darktable”,
“size” : 81920,
“uuid” : “574e0050-d485-3584-9d34-c265880b0142”,
“path” : “/Applications/darktable_local_contrast_BH.app/Contents/MacOS/darktable”,
“name” : “darktable”,
“CFBundleVersion” : “.”
},
{
“source” : “P”,
“arch” : “arm64e”,
“base” : 6904565760,
“size” : 653076,
“uuid” : “044cd67e-3a0a-3ca4-8bb3-a9687d5328fe”,
“path” : “/usr/lib/dyld”,
“name” : “dyld”
},
{
“size” : 0,
“source” : “A”,
“base” : 0,
“uuid” : “00000000-0000-0000-0000-000000000000”
}
],
“sharedCache” : {
“base” : 6903480320,
“size” : 5820792832,
“uuid” : “f3e3cb1b-1c09-3cc5-ad72-f0800f1f475f”
},
“vmSummary” : “ReadOnly portion of Libraries: Total=588.1M resident=0K(0%) swapped_out_or_unallocated=588.1M(100%)\nWritable regions: Total=8288K written=96K(1%) resident=96K(1%) swapped_out=0K(0%) unallocated=8192K(99%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nSTACK GUARD 56.0M 1 \nStack 8176K 1 \n__DATA 5K 1 \n__DATA_CONST 46K 2 \n__DATA_DIRTY 14K 1 \n__LINKEDIT 587.4M 2 \n__TEXT 720K 2 \n__TPRO_CONST 128K 1 \ndyld private memory 16K 1 \npage table in kernel 96K 1 \n=========== ======= ======= \nTOTAL 652.4M 13 \n”,
“legacyInfo” : {
“threadTriggered” : {

}
},
“logWritingSignature” : “eec2ba2768b0a5f4f849faf8ee71e2600b90a6aa”,
“roots_installed” : 0,
“bug_type” : “309”,
“trmStatus” : 8192,
“trialInfo” : {
“rollouts” : [
{
“rolloutId” : “648cada15dbc71671bb3aa1b”,
“factorPackIds” : [
“65a81173096f6a1f1ba46525”
],
“deploymentId” : 240000116
},
{
“rolloutId” : “67d07cd6a7affa169ae21f45”,
“factorPackIds” : [

  ],
  "deploymentId" : 240000002
}

],
“experiments” : [

]
}
}

Model: Mac13,1, BootROM 13822.81.10, proc 10:8:2:0 processors, 64 GB, SMC
Graphics: Apple M1 Max, Apple M1 Max, Built-In
Display: PA322UHD-2, 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition), Main, MirrorOff, Online
Display: IP270ex, 2560 x 1440 (QHD/WQHD - Wide Quad High Definition), MirrorOff, Online
Memory Module: LPDDR5, Hynix
AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x4387), wl0: Dec 6 2025 00:30:11 version 20.131.5.0.8.7.216 FWID 01-a933af2f
IO80211_driverkit-1540.16 “IO80211_driverkit-1540.16” Jan 27 2026 21:02:00
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Ethernet, Ethernet, en0
PCI Card: pci2646,5028, NVM Express Controller, Thunderbolt@3,0,0
PCI Card: pci1b21,625, AHCI Controller, Thunderbolt@3,0,0
Serial ATA Device: G-RAID with Thunderbolt, 24 TB
Thunderbolt Bus: Mac Studio, Apple Inc.
Thunderbolt Bus: Mac Studio, Apple Inc.
Thunderbolt Bus: Mac Studio, Apple Inc.
Thunderbolt Device: G-RAID Thunderbolt 3 USB 3.1, G-Technology, 1, 40.2
Thunderbolt Bus: Mac Studio, Apple Inc.
Thunderbolt Device: Echo 13 Thunderbolt 5 SSD Dock, Sonnettech, 1, 59.59

Very good improvement. In fact, I always thought this was always coming to the module, because without it, it appears incomplete.

One suggestion: I think it would be useful to specify how “wide” the adjustment is: meaning when using the mouse to target a colour on the image, does scrolling the wheel only move 1 slider, the immediately neighbouring sliders, or all the sliders? The contract equalizer already permits this exact thing:

1 Like

Hi Christian …
latest build does work well , no installation issue !!!

Just two questions … or suggestions from my side .
Personally I think having the options tab in the same order as the HSB tabs is not ideal from my POV … as I have to leave the HSB tabs to access the options for tuning the optional sliders . I would prefer to have it below , like in the original module ?!
Secondly … in your demo video you have these lovely sliders for each color range active or present ?!
But in the current build it is not visible … ?! Or at least I do not know how to access the slider window / panel !

Other than that … very nice working with the mouse cursor picking color and changing them !!!

Would be a very good thing to be in master .

Right now your build is my top notch favorite … with the new color equalizer and the local contrast of yours !!!

Love it

Andreas

You get the sliders by middle-clicking the modules diagram.

Oops … thx for the tip , it is actually noticed in the tips of the module .
I am a dummie , who is able to read has an advantage … LOL .
BUT … the maybe next dumb question , what is actually a " middle click " ?
I have no idea … but will ask mr google !

Click with the middle mouse button.

That is a click with the mouse wheel

THX for your reply folks …
a do use Apple´s Magic Mouse , so no wheel and natively no middle click available . And not supported by Apple .
Found a little helper app … to create this , and it worked .
But now I am in slider window … and can´t revert back to graph view , LOL !!!
Oh man … that’s tricky
Any idea how I do get back to graph view ?

Me again … I guess it´s a bug in this version .
It does work perfectly with the stable version , as it should !!!

So Christian … just to let you know that