aiaf / Stillcolor

Disable temporal dithering on your Mac with this lightweight menu bar app. Designed for Apple silicon Macs.
MIT License
407 stars 18 forks source link

Make Stillcolor Monterey compatible #7

Open AlecKinnear opened 5 months ago

AlecKinnear commented 5 months ago

I've found Monterey more stable and easier to use than Ventura. Monterey is still macOS and not some weird hybrid iPadOS/macOS. I plan to stick to Monterey for another productive two or three years.

I am sensitive to monitor flicker (can't use M1 iPad Pro, can't use M1 MBP 16 for more than two hours).

I do have two M1 Mac Studio (Ultra and Max), at home and work. I'd very much like to enable Stillcolor on them in Monterey. I'm prepared to contribute to Stillcolor if you are willing/able to support a Monterey version.

olsgo commented 4 months ago

I've found Monterey more stable and easier to use than Ventura. Monterey is still macOS and not some weird hybrid iPadOS/macOS. I plan to stick to Monterey for another productive two or three years.

I am sensitive to monitor flicker (can't use M1 iPad Pro, can't use M1 MBP 16 for more than two hours).

I do have two M1 Mac Studio (Ultra and Max), at home and work. I'd very much like to enable Stillcolor on them in Monterey. I'm prepared to contribute to Stillcolor if you are willing/able to support a Monterey version.

Any plans to implement this? I'm in a similar boat.

gutofarias commented 4 months ago

Me too!

noizje commented 3 months ago

Same!

GMMDMDIDEMS commented 2 months ago

Monterey/macOS 12.0+ support Let me know whether it works.

gutofarias commented 2 months ago

I can not say for sure but I think it works!

guto@GutoMM ~ % ioreg -lw0 | grep -i enableDither | | | | "enableDither" = No | | | | "enableDither" = No

aiaf commented 2 months ago

Monterey/macOS 12.0+ support Let me know whether it works.

This is amazing! Please submit a pull request into the 1.x-macos12-compat branch where I will review it on my machine. Thank you!!

AlecKinnear commented 2 months ago

Thank you so much. Stillcolor installs on my MacBook Pro M1 Max 12.7.4 and works. The Disable Dithering checkbox is sticky and inconsistent, very difficult to toggle. When switched though it works. Dithering disabled:

alec@AlecMBPro16 local % ioreg -lw0 | grep -i enableDither
    | |   "boot-args" = "enableDither=0"
    | |     "boot-args" = "enableDither=0"
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No

Dithering enabled:

alec@AlecMBPro16 local % ioreg -lw0 | grep -i enableDither
    | |   "boot-args" = "enableDither=0"
    | |     "boot-args" = "enableDither=0"
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes

Here's where it gets even more interesting. BetterDisplay recently added an Image Adjustment setting for dithering.

Now that I have a way to test for dithering with ioreg -lw0 | grep -i enableDither, I decided to test it too.

When dithering is enabled, BetterDisplay can turn it off on a single screen.

alec@AlecMBPro16 local % ioreg -lw0 | grep -i enableDither
    | |   "boot-args" = "enableDither=0"
    | |     "boot-args" = "enableDither=0"
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = Yes

When dithering is disabled, BetterDisplay can turn it on.

alec@AlecMBPro16 local % ioreg -lw0 | grep -i enableDither

    | |   "boot-args" = "enableDither=0"
    | |     "boot-args" = "enableDither=0"
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = Yes
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No
    | |   |   |   "enableDither" = No

So Stillcolor works on Monterey, BetterDisplay works reliably. BetterDisplay's monitor specific disable/enable of dithering supersedes Stillcolor. This seems to be exactly the right behaviour. BetterDisplay is paid software for the advanced features (I've paid) so Stillcolor has its place. BetterDisplay can also be overkill for people with eye issues who are not that into monitor management. It took me a few hours to learn to navigate BetterDisplay's interface as it does so much. It's deep software and I'm still only an intermediate user, not an expert.

Glad to have both of them. Monterey will be on my computers for at least another year.

In terms of the effect on eyes. The monitor does look better but that could be psychosomatic. With all the playing with gradients I tried I couldn't find one which gave me a clear sign that it was in 8-bit or 10-bit. The best online gradient tool which I've found is Eizo's test. The opening test pattern has a smooth gradient but it looks fine with dithering disabled. The main gradient section are 256 colour gradients so they should have lines (and do).

If anyone knows of a clear visual test for FRC dithering 8-bit to 10-bit, please share.

GMMDMDIDEMS commented 2 months ago

@AlecKinnear thank you very much for the detailed feedback. What do you mean by

The Disable Dithering checkbox is sticky and inconsistent, very difficult to toggle.

Could you upload an image to illustrate the issue?

I recently opened PR #12 to add Monterey support, fixing some bugs compared to the version on my Stillcolor fork. So potentially these issues may already be fixed and will be available as soon as the PR is merged and a Monterey-compatible version is released.

AlecKinnear commented 2 months ago

@ GMMDMDIDEMS I'm glad the feedback helps.

Could you upload an image to illustrate the issue?

Difficult, it would have to be a video. What happens is that I go click click click and the Disable Dithering checkbox does not toggle. Eventually it does, ten or twelve click later. A double click usually works but that toggles the checkbox on and off. Fortunately turning dithering on and off (except when testing!) is not a regular activity.


Here's a better full-width 10-bit colour gradient. What worries me is that even with dithering disabled the gradient is smooth. Perhaps the HP U32 4K does internal dithering. If that's the case, turning off software dithering would still be an advantage as running two dithering functions at the same time would not work well. By trying to do the same thing they would interfere with one another.

Browsing some high quality images locally (original NEF raw files in DxO Photolab) I don't see any quality difference when dithering is disabled. Strange. Open to insights from others about why the absence of dithering doesn't seem to matter much. Certainly better for the eyes with it off (the flicker). I see a little bit more colour depth in my skies (touch darker/richer) if I look carefully but that's it. Even as a photographer, working in 8-bit colour would not be a barrier to preparing my images (my work is people and sport and landscape, not abstracts or design where precise gradients would matter most).

What does matter is reducing eye strain though, to allow longer work sessions, so I'm very happy to be able to turn off dithering and disable PWM (using the BetterDisplay technique of combining hardware and software dimming).

aiaf commented 2 months ago

@AlecKinnear @GMMDMDIDEMS There's a few things to keep in mind when it comes to dithering and gradients, these are all my recent discoveries for silicon Macs:

I will incorporate support for macOS 12 in the Stillcolor 1.x branch, but Stillcolor 2.0 which is under development and will have per-display color control will only support macOS 13+.

If backwards compatibility is a concern I definitely recommend using BetterDisplay- it's not a drop-in solution and will require some set up, but it's excellent software and actively supported.

Edit: @AlecKinnear the LCDTech gradient test you linked to is flawed. Those gradients are built with static dithering. Edit 2: the LCDTech gradient is generated with CSS, and on Chrome and Safari (Blink & Webkit based browsers), they demonstrate static dithering. Firefox however does not use static dithering and will show appropriate banding.

AlecKinnear commented 1 month ago

@aiaf Thanks for your answers.

I will incorporate support for macOS 12 in the Stillcolor 1.x branch, but Stillcolor 2.0 which is under development and will have per-display color control will only support macOS 13+.

No problem. Some basic support for Monterey is all we ask for. It's not necessary for Monterey to get all the new bells and whistles.

the LCDTech gradient test you linked to is flawed. Those gradients are built with static dithering. Edit 2: the LCDTech gradient is generated with CSS, and on Chrome and Safari (Blink & Webkit based browsers), they demonstrate static dithering. Firefox however does not use static dithering and will show appropriate banding.

I'm not getting much banding even in Firefox 113.0.1 on macOS 12.6.9 with dithering turned off on that LCDTech gradient test. Is there a test you would prefer we used which specufically shows when dithering is on and off more clearly?