Here you go, Macbook Air m2 13 inch, "raw-panel-serial-number" = <"FP1241306KN1J8CAZ+5A2A280724A5HD+PROD+Y237323742384+66241136241131241215241210+K52920681Y82120817+6861A2224KL3N400M24HT2347A29M3729+S28E6898BKS28E6898BKS28E6898BKS28E6898">. I guess I have no zeros, but panel is really intensive over time. Basically unusable, only for quick glimpses. But GPU on external monitor also causes neurological tension.

    Donux we've been talking about the M2 Touch Bar MBP, not the M2 Air. The serial numbers for M1/M2 Air are entirely different and not really relevant to what we're talking about.

      DisplaysShouldNotBeTVs Maybe that good panel was a replacement at some point in it's life. If so, you indeed won the panel lottery!

      DisplaysShouldNotBeTVs

      VS6896895 is the base model that does not flicker. I would say the flickering one is not that bad. Its a subtle difference.

      Maybe we should split out the MB Pro TB panel serial number discussions into its own thread for analysis/sharing/discussion of this specific issue. I have two more of these machines coming, so I'll have three total serial numbers to add to the discussion by next week.

      (Kudos to DisplaysShouldNotBeTVs for bringing these machines to everyone's attention, btw. They're great.)

      Donux yeah it seems like the issues with M1 Air and M2/M3 Air are all about that slight PWM-like flicker that is most visible on dark grays through a 240hz slow motion recording (but can also be seen on whites TOO if the camera exposure is turned down a ton! which makes me think it's not dithering).

      For reference, on all the Apple Silicon laptop, Stillcolor doesn't affect this specific flicker issue — it doesn't matter whether it's installed, enabled, disabled.

      The PWM-like flicker is always there on M1/M2/M3 Airs. It's always not there on the M2 Touch Bar Pro.

      it's really obvious that it's a significant factor to strain, because whenever a dark background shows up on the Airs I immediately feel weirdly tired, a bit "smudgy" looking or like I have to readjust. sometimes I can get used to it, but then when I later go back to a light mode screen I have to readjust yet again.

      even my very usable and generally "stable-feeling" Intel 2015 12" MacBook shows the same flicker on camera, and I notice that I have the same issue with dark colors on that screen too! I realized recently that I also have trouble adjusting between light and dark pages on that machine despite this old Mac still being usable and "dither-free" enough to be productive on for the most part! This is what made me really nail down this PWM-like flicker as the culprit…

      because on the other hand, on the M2 Touch Bar Pro which is one of the only Macs I know that does not show this flicker…

      on the M2 TB Pro, dark colors feel the exact same as light colors, even apps with dark modes that i usually hate looking at (like the weird "low-contrast" dark modes used in many Google apps) feel very crisp and "well-defined" on this panel. I don't feel "tired" at all when the color scheme suddenly shifts. I also feel like I have "more freedom" in which color schemes and wallpapers I use, darker areas of wallpapers don't "distract me" as much.

      I've already used many wallpapers on this M2 TB Pro for entire days without thinking much about it — that usually, I would have an urge to "stop using" after only 30 minutes of having them in the background on other laptops and monitors.

      the best metaphor I can use to describe this…

      On a screen that has this "dark gray flicker issue" like the M1 Air or even a usable machine like the 2015 12", if I set a code editor theme with low contrast grays and purples, it "gives off the vibe" of walking through a sleepy lavender flower field at 100 degrees outside while having really bad allergies. Of course I don't mean this literally LOL but hopefully you get the point.

      On a screen without the dark gray flicker on camera, like the M2 TB, the same code editor theme feels like that field but it's after the nicest spring rain ever, it's colder outside with fresh air, the stone pathway (AKA the gray background) has that "wet" smoother dark gray appearance to it, the flowers (AKA the color-coded fragments of code) sparkle independently in crisp and "distinct" colors instead of "hazily blurring together".

      Both laptops at max brightness, both the M1 Air and M2 TB have Stillcolor activated, no True Tone or Night Shift, same color profile.

      This seems to be mostly independent of whether a screen uses temporal dithering or not (however, temporal dithering definitely can make it worse).

      Putting the "dark gray flicker on camera" (M1 Air) and "no dark gray flicker on camera" (M2 TB) screens side by side, the colors I'm actually seeing are calibrated to nearly the same brightness and color temperature — but I feel completely different while looking at dark user interfaces on them. I generally feel like I can "process more distinct colors all at the same time" on the "no flicker" screen (the M2 TB Pro).

      Unfortunately I am not experienced in any significant way with macOS system internals, so I do not know if it is possible at all to prevent this flicker issue on the screens that are affected by it.

      I actually tried messing with as many IOMFB registry properties as I could on both the M1 Air and M2 Air, recording dark gray on camera every time, and none of them would stop the flicker on either laptop.

      But the M2 TB Pro doesn't have the flicker to begin with!

      I also still don't know exactly why the M2 TB does not have the issue. I'm kind of doubting that it's at the OS level, it's probably something to do with the display controller, TCON, or the panel itself.

      I'm leaning towards "display controller or TCON" because now we've seen many M2 TB Pros in this thread, some with very different panel serial numbers, and none of them have the flicker issue on camera on any shade of dark gray.

      On the other hand, all M1/M2/M3 Airs seem to have it to a degree. Even some people I've seen here who thought their Air "didn't have the issue"… after recording it on max brightness and dark gray, they realized their Air actually did have the issue!

        DisplaysShouldNotBeTVs Did you try to mess with this? Might be possible to disable, or change it to your least favorite color. If it is related that is.

        ioreg -l -d0 -w0 -r -c AppleCLCD2 -a \
        | sed -e '/^\t*<data>/,/^\t*<\/data>/ { /^\(\t*\)<data>\(.*\)/ { s//\1<string>_data:\2/; h; d; }; /^\t*<\/data>\(.*\)/! { s/^\t\(.*\)/\1/; H; d; }; /^\t*<\/data>\(.*\)/ { s//\1:data_<\/string>/; H; g; s/\n//g; }; }' \
        | plutil -convert json -r - -o -| grep -i gray

        Lots of these ATP values. Apple Panel Technologies?

        | plutil -convert json -r - -o -| grep -i APT
            "APTDefaultGrayValue" : 255,
            "APTDevice" : true,
            "APTEnableCA" : true,
            "APTEnableCDFD" : false,
            "APTEnableConfigExpired" : true,
            "APTEnableDefaultGray" : true,
            "APTEnableEvents" : false,
            "APTEnableLogs" : false,
            "APTEnablePRC" : true,
            "APTEventsMask" : 0,
            "APTFixedRR" : 0,
            "APTLimitRefreshRate" : false,
            "APTPanicOnChargeOOB" : false,
            "APTPanicOnChargeParity" : false,
            "APTPanicOnStuckPolarity" : false,
            "APTPDCEnable" : true,
            "APTPDCEnablePM" : 1,
            "APTResetCA" : false,

        I also still want to see someone try to modify this. I didn't find out how to edit hierarchical values.

            "BacklightMatching" : {
              "IOPropertyMatch" : {
                "backlight-control" : true
              }
            },

          The APT options does something. This is weird. Confirmed with Quartz Debug.

                  "APTFixedRR" : NSNumber(5),
                  "APTLimitRefreshRate" : true,

          This is weird. Setting this to different values causes different refresh rates:

          0 - 60
          1 - 60
          2 - VRR Minimum 75
          3 - VRR Minimum 80
          4 - 60
          5 - Fixed just below 50
          6 - Fixed at 40
          7 - Unstable just below 35
          8 - Fixed at 30
          9 - Unstable right above 25
          10 - Unstable below 25
          11 - 60

          Maybe it affects other things that makes it easier to capture as well.

            async iirc, I tried all of the APT properties in the IOMFB registry that were possible to change, none would stop the dark gray flicker

              DisplaysShouldNotBeTVs too bad. Might need to close the lid or change color profile for them to get active. Tried setting ADTDisplay to false to disable everything, but it won't let me. At least it doesn't accept false and 0. Also there is a ResetCA that says device busy.

              Hard to filter the logs to get relevant feedback, and still didn't dint a way to access the logs from the ioreg log flags. Maybe this apple Stockholm debug that was present on one of your machines or something is needed

              I've found differences in the M1 Air IOMFB registry compared to M2 TB Pro, particularly relating to backlight and display clock timing. I'm going to try to mess with the specific framebuffer properties I found that differ to see if I can do anything about flicker on M1 Air one more time…

              If somehow I DO figure out how to disable flicker on the Air (which I am not that confident about though…) I would honestly keep the Air instead as aside from the flicker issues, I prefer the lower contrast "less deep" black levels on the M1 Air.

              No guarantees at the moment but I really hope that I can find something here

              (One really funny one is BLNitsCap, it's less on the Air of course, it would be hilarious if the Air's brightness is being artificially limited by the value of this property LOL)

              Differences between M1 Air and 13" M2 Touch Bar Pro:

              Both on Ventura 13.6.6 and same System Firmware

              color-accuracy-index

              air 0x27

              pro 0x52

              -

              MaxVideoSrcDownscalingWidth

              air 0x5002

              pro 0x6ad0

              -

              PDCSaveLongFrames

              air false

              pro true

              -

              M3TimingParameters subgroup

              subframe-interrupt-time-lines

              air 0x62a

              pro 0x62c

              initial-subframe-irq-time-lines

              air 0x62a

              pro 0x62c

              (subframe-duration-nclks 0x61a81 on both Air and Pro)

              (display-lead-time-nclks 0x6443 on both Air and Pro)

              (initial-vbi-advance-lines 0x2 on both Air and Pro - Vertical Blanking Interval)

              (vbi-advance-lines 0x2 on both Air and Pro)

              -

              PixelClock

              air 0x1fca0550

              pro 0x2a704200

              -

              BLMAHMode

              air 0x1

              pro 0x2

              -

              clockRatio

              air 0x40024

              pro 0x5573a

              -

              IOMFBContrastEnhancerStrength

              air 0xc3

              pro 0x0

              NOTE: Pro actually had 0x127 on Ventura 13.2.1 but changed to 0x0 with Ventura 13.6.6 (!!)

              -

              (Entire TimingElements group is exact same between Air and Pro)

              (VideoClock is same between Air and Pro)

              (APTPDCTemperature is 0xa0000 on Pro, does not exist at ALL on Air)

              (PDCDataVersion is 0x200b on Pro, does not exist at ALL on Air)

              -

              BLNitsCap

              air 0x1a50780

              pro 0x215079c

              -

              IOMFBDisplayRefresh subgroup

              displayMinRefreshInterval and displayMaxRefreshInterval…

              air 0x4443914 and 0x4443914 (same)

              pro 0x4443914 and 0x8887229

              displayMinRefreshIntervalMachTime and displayMaxRefreshIntervalMachTime…

              air 0x61a81 and 0x61a81 (same)

              pro 0x61a81 and 0xc3502

              -

              PDCSaveRepeatUnstablePCC

              air False

              pro True

              -

              IONameMatched

              air disp0,t8103

              pro disp0,t8112

              -

              overdriveCompCutoff (Overdrive compensation? Is Air using response time acceleration?)

              air 0x13ec0000

              pro 0x0

                DisplaysShouldNotBeTVs This nits limit on certain XDR presets causes insane flickering on Instagram when videos autoplay here because of EDR, so I guess it could be something similar. Could also be an actual bug where they check some total brightness level too early and keeps readjusting.

                Did you try playing with the Display Calibration as I posted earlier in the thread? Might be able to bypass it by applying a small tint to certain levels of gray there. Also you could try maxing brightness and reducing gain as much as possible in BetterDisplay, as that changes things quite a vit on XDR at least.

                These things would be infinitely easier to test if someone found a way to access he raw pixel data that is sent to the display. That would open the way for apps that monitor for flickering. I'm sure there exists some way. This would probably be answered pretty fast by someone from the Hackintosh community as they have been hacking with how the OS handles graphics cards and other things for 15 years.

                Questions for whoever knows more about the OS, or can get someone relevant into the thread:

                • Where does the logs that are enabled with ioreg flags in the MobileFramebuffer end up? I have yet to find them with either monitoring the filsystem or the log command (with debug logs included). Does it require some other debug mode to be enabled that is usually used by Apple? AppleStockholmDebug? Is there another command? The total output for these are probably pretty high, so it would make sense if they don't automatically start to stream them.
                • What are all the different framebuffer PixelCapture flags? Where does it end up? Is there a way to monitor if enabling it starts writing some new things to the ram that can be monitored?
                • Is there any known ways to reset or restart the framebuffer and related things. Similar to how you would kill the Dock or UIServer. Changing color profile resets a display on timestamp at least. There is a high chance that certain flags simply doesn't affect things while changed without some reset.
                • Is there something like dtruss that can be targeted at the connection between different hardware components? For example for trying to read the pixel stream as late as possible?
                • Is there some way to set these ioreg flags way earlier in case it is only read on startup?
                • Is there some way to trace or log what is setting the different ioreg flags early? That could give a better map of what framework or daemon is using what part of it. Might be possible by setting the stored logs to debug mode. Surely these defaults has to be stored somewhere that the is reads them from. Is there some type of search by strings in the entire disk that works for binaries? I found a way that works in Private Frameworks, but it would be interesting to do it on all daemons as well.
                • Does the UIServer use 10 bit and then converts it to 8 bit for sending? Is there any reliable way to screen record for example HDR content? Could be that some diffs show up if the comparison is done on the full resolution with max bitrate.

                Tagging @waydabber and @aiaf in case you guys still have some energy left here 😄

                  async This nits limit on certain XDR presets

                  FYI I'm testing LCD M1 Air and LCD M2 Touch Bar Pro, I do not own any XDR Mac anymore (sold my 14").

                  I don't think any of this will be relevant for mini-LED as it has many unique properties in the registry that are totally different from what the LCD models use.

                  mini-LED also definitely has additional TCON-level color management weirdness that the LCD models seem to have much less of or lack entirely.

                  (for example, XDR Macs stay at "10-bit" even after activating Stillcolor, but LCD Macs reduce to 8-bit. Since aiaf recently posted a discovery that all Apple Silicon Mac displays only have the bandwidth for 8-bit, this almost certainly means that there's some additional FRC going on that isn't coming from the OS on XDR models.)

                  IMO, mini-LED is a fundamentally flawed technology, and until there is some actual progress in disabling local dimming in a stable way that fully works (the current method doesn't actually disable it entirely), XDR Macs are "unfixable" IMO

                  async Might be able to bypass it by applying a small tint to certain levels of gray there.

                  No, ALL levels of gray flicker on M1/M2/M3 Airs, just more and less noticeable to the camera depending on the level but it's still there. Even white actually flickers too, you just have to turn camera exposure WAY down to be able to see it in a slow motion recording.

                  On M2 Touch Bar Pro, no shades of gray or white flicker at all (on camera), even with camera exposure turned down.

                  dev