I disabled dithering on Apple silicon + Introducing Stillcolor macOS M1/M2/M3
- Edited
Did anyone ever see a working solution for overlay shaders on Mac? I know there are a ton that work inside games, and ofc lots of them on windows. BetterTouchTool can do color shifts with Metal overlay, but I have no idea how well Metal would be for more advanced use cases.
If someone knows a rough direction that probably will work for overlaying a texture on everything that is white or similar do tell. I can ofc do some sort of screen capture in Electron and just use overlay effects, but it will probably kill whatever CPU you have.
Experimenting a bit with adjustments that makes horrible migraine inducing patterns like this one stop blinking. I think I've found some things that work.
Possibly. I may have spoke to soon. Today i installed premiere which comes with Adobe media encoder. It seems to have flipped a switch again. And toggling 8bit does not help. I'll try reinstalling the OS when I have time. I think something changes on an OS level. My work supplied intel imac pro is unusable now as it upgraded the firmware
- Edited
async No rebooting did nothing. I tried toggling everything I could. Luckily I have a Mac Mini M1 working atm which I'd migrated the air setup to before I installed Adobe Media encoder. I thought the Mini did not work for me but it was on 10bit color mode so changing that to 8bit seemed to fix it. It's annoying some apps trigger something for me.
thorpee in BetterDisplay. Try switching resolution, toggling hidpi and enabling color profile support in settings and changing it back and forth. If that doesn't help see if there are login items for premiere that could be disabled. You could also try to cover the light sensor next to the webcam to see if that improves it, as that chabge the screen. I'm pretty certain things switch on the macbook, but it's quite hard to pinpoint what is actually happening.
- Edited
async Have you checked this?
https://github.com/belvederef/visual-snow-relief-overlay/releases/tag/v1.6.1
It is not that heavy on the CPU, but the most annoying thing for me is that it is seen as a "space" in Mission Control.
It helped me in the past, but it's not a true solution. If you find a way to incorporate your overlay, let me know.
- Edited
anon123 I'll check it out. I have visual snow, but it's pretty mild. Noise pattern definitely does something. The plan is to package the different overlays in some app where others can experiment as well.
I've tried a lot of things and I'm sure there are modifications that can be done that either provide relief, or assist in some sort of adaptation. I usually use a shadow around the edge of the screen and feel that it helps quite a bit. I've also experimented with what changes prevents visual distortions from happening, as it is easily testable to see when patterns are blinking and not. Diagonal patterns can also be used to remove botching thar is present on Mac.
Tbh after spending a lot of time with overlays on scaled resolutions on Mac I'm getting the feel that it's the closest you can get to living inside a compressed jpg hellhole. Just try the inverted framebuffer in BetterDisplay if anyone wants to see just how much shit there is. Currently I only do retina or native scaling, but need to get a 220 ppi monitor to make it better.
Apart from this there is a lot of things that can give pixel inversion flicker. Especially when not using scaled resolutions that smooths out things. Overlays can mitigate some of this.
I do need to find a way to do more advanced overlays tho, as there is no reason you couldn't do shaders that doesn't shade images, or just affects pure whites. Mening you could make everything feel like paper without breaking images, or just pattern all white backgrounds.
I also think there is benefit to be gained from shifting whites and blacks differently. For example adjusting the gamma curve so blacks are more blue and whites are more red, or applying different patterns on them.
I've been pondering a bit around adaptation after seeing this where they have shown adaptations for months after minutes of exposure. https://michaelbach.de/ot/col-McCollough/
This is also super interesting in relation to high gamut colors on high contrast displays. At a certain threshold you get the depth effect that might be contributing. They also note something about the size of pixels and the wavelengths for it to happen. Might be one more clue as to why certain screens work better. https://www.frontiersin.org/journals/psychology/articles/10.3389/fpsyg.2015.00337/full
- Edited
async Just try the inverted framebuffer in BetterDisplay if anyone wants to see just how much shit there is
Strangely, I've noticed that using the inverted grayscale framebuffer option (specifically the BetterDisplay one, not the normal Mac Invert Colors option) helps reduce strain somewhat on M1 Air when running at a scaled resolution like 1440x900 (yes, I do mean the extremely "compressed JPEG" ones you mentioned). This is probably because -- although all of the post-processing and sharpening is still there -- everything including the post-processing (and even the black bars in non-native aspect ratio resolutions) gets inverted and at least some of it is converted to monochrome which probably reduces the effects of some of the processing. It doesn't "fix" the M1 Air, and I still vastly prefer the 2016 13" MBP which is very usable for me, but it definitely reduces my strain by a small but noticeable amount. The non-monochrome inverted framebuffer also seems to improve something too but the grayscale one works even better.
After using the framebuffer invert, you can use an invert colors browser extension to make your browser look "normal". BTW this is also the closest you can get to the iOS "double invert" technique on a Mac. This will actually highlight the compression artifacts even more -- this directly and visually exposes what the Mac is "secretly" doing to the screen.
Interesting semi-related find that I can't test at the moment: search "scaler" in IORegistryExplorer, and within one of the results, you can actually find a property called "DisableDeringing" that for some reason is one of the few display-related flags that's elsewhere instead of within the usual IOMobileFramebuffer flags. Not sure what this does but I wonder if it affects the artifacts in some way.
- Edited
Check these out.
Proof it has been used by Samsung since 2011 + a real-time algorithm that splits every frame of display input into foreground, middle, and background layers and then applies color fringing to create a false 3D effect
Let me know if you want the PDF if it isn't loading for you.
Proof that a very similar real-time algorithm has been used by Intel (!!)
https://jov.arvojournals.org/article.aspx?articleid=2749907
This may explain issues with Intel integrated graphics.
It also may have been exactly what was implemented with this 2013 driver update on a ThinkPad x220.
Proof that it affects text readability
https://core.ac.uk/download/pdf/81129309.pdf
I was going to post about this soon…
I believe that this is the #1 ISSUE with modern displays, much worse than either PWM or temporal dithering.
I do get "some" strain from very old (pre-2010) devices that use PWM, but — unlike modern devices — never in a way that makes the screen feel blurry or 3D, causes extreme brain fog, or impacts my reading ability.
And on the few "very comfortable" modern devices I've managed to find, all of them seem to have little to no false 3D effect, and I cannot easily see color fringing (except for the standard RGB pixel structure itself).
Finally, on every modern screen I find either uncomfortable or unusable, I always see extra, very noticeable (to me) red and blue color fringing, even around pure black and white sharp pixel lines, and it remains even if I set the screen to a software "grayscale mode". This fringing shows up on everything — not just subpixel text — and it will remain even if subpixel text is disabled.
All post-2011 Apple devices are the worst offenders (except for specifically my 2016 13" MacBook Pro, which is fine for whatever reason and looks very flat to me) but I've also seen it on multiple Android devices (both LCD and OLED) and Windows laptops.
There is also most likely equivalent implementations in software -- on Windows 11, which is much worse for me than Windows 10, I see even more obvious color fringing. On some laptops, both Windows 1809 and 22H2 have issues, but 22H2 makes it even worse than it already was on 1809.
Until something is done about this, the only way to "consistently" get around it (i.e. without the trial-and-error of scavenging for the rare modern devices that work), is to find some kind of way to use a truly monochrome display without RGB subpixels like a monochrome LCD or e-ink.
Or for a less effective but still extremely helpful workaround you can use strong monochrome color filter glasses (I have pure red glasses that eliminate almost all colors except red, and they consistently make many unusable screens at least "tolerable" to me and sometimes even better than that in some cases. FYI, the "monochrome filter glasses" that work for me are very different from the more common "blue light" glasses that only tint things orange and keep colors -- those ones don't work for me at all.)
Now I'm very sure that the reason why reducing displays to physically monochrome works so well is that it significantly reduces the possibility that this effect can be created.
- Edited
DisplaysShouldNotBeTVs This is super interesting. I'll review everything at home.
I posted some things about the scaler at some point. Searched a lot for somewhere to config it. I think things like surface compression, max framebuffer layers etc are involved in when it decides to do excessive compression.
One thing I really would like to see is for someone with a capture card to capture the same screen with both a screenshot and with the capture card.
DisplaysShouldNotBeTVs These values can be changed with this too RehabMan/OS-X-ioio: Command-line utility for setting ioreg properties via IOService::SetProperties (github.com)
ioio -s AppleM2ScalerCSCDriver DisableDeRinging false
ioio -s AppleM2ScalerCSCDriver DisableSIMDOptimizations false
ioio -s AppleM2ScalerCSCDriver EnableFiltersNoRewriteMode true
Didn't really see any changes when switching around things. But there might be caching of rendered tiles and similar going on at the same time. If I remember correctly I had some cases when playing around where I could see the cached ones being replaces gradually.
I tried to modify ioio at some point to allow changing dictionary values, but couldn't get it to work. If someone with more Xcode / MacOS experience wants to take at shot at tormenting ChatGPT until that works feel free. There are many hierarchical / dictionary values that no one tried changing.
- Edited
async Yes, I use a low level API for that. There are actually several APIs to manage Presets, including a high level one that Apple made for System Settings - it's a bit clumsy but otherwise works fine. If you are interested, I can send you the details, but you'll need to do heavy coding to utilize it.
FNP7 Thank you! Many of the techniques should work on iOS/iPadOS as well, but did not experiment with it.
Donux Yes, you can use terminal commands. Download betterdisplaycli
or just use the binary inside the app bundle. Example:
betterdisplaycli set -n=displayname -quantization=0.5
Here is more help: https://github.com/waydabber/BetterDisplay/wiki/Integration-features,-CLI
async I was planning to add some shader effects to BetterDisplay. Right now if Metal overlays are enabled in the app (a bit difficult to make that happen now as you need to change some awkward settings) you can do some simple color adjustments with it only (temperature, RGB control etc) - I primarily added this to support a night shift like effect on non-native displays (on which gamma table adjustments don't work) but did not expand the featureset much. So much to do…