Skip to content

Instantly share code, notes, and snippets.

@GetVladimir
Last active March 23, 2024 09:27
Show Gist options
  • Save GetVladimir/c89a26df1806001543bef4c8d90cc2f8 to your computer and use it in GitHub Desktop.
Save GetVladimir/c89a26df1806001543bef4c8d90cc2f8 to your computer and use it in GitHub Desktop.
Force RGB Color on M1 Mac

Force RGB Color on M1 Mac

How to Force RGB Color Output instead of YPbPr on your M1 Apple Silicon Mac for an External Monitor.

This step-by-step video tutorial will guide you through the procedure of forcing RGB color output on your M1 Mac.

Force RGB Color on M1 Mac

Here is the direct link to the video tutorial: https://www.youtube.com/watch?v=Z1EqH3fd0V4

The video also has Closed Captions (Subtitles) that you can enable, to make it easier to follow if needed.



Please note that you're doing any changes on your own risk.

Terminal commands used in the video

Here are each of the Terminal commands mentioned in the tutorial, so that you can just copy and paste them:

open /Library/Preferences

plutil -convert xml1

plutil -convert binary1

plutil -lint



The step-by-step procedure on how to force RGB Color Output on M1 and M2 based Macs with Terminal commands

  1. Open Terminal and use this command to make Finder select the displays plist file:
    open -R /Library/Preferences/com.apple.windowserver.displays.plist

  2. Drag and drop the com.apple.windowserver.displays.plist file to Desktop manually. Don't use the cp command, as it won't add your current user with writing privileges.

  3. Convert the file to XML:
    plutil -convert xml1 ~/Desktop/com.apple.windowserver.displays.plist

  4. Open the converted file with the default plain text editor (avoid using the built-in TextEdit app if possible, since it might modify the file and make it unreadable by the system)
    open -t ~/Desktop/com.apple.windowserver.displays.plist
    or
    open -a CotEditor.app ~/Desktop/com.apple.windowserver.displays.plist

  5. Copy and paste the missing LinkDesription Key under the current display (check the screenshot below for an example of how it should look like):

				<key>LinkDescription</key>
				<dict>
					<key>BitDepth</key>
					<integer>8</integer>
					<key>EOTF</key>
					<integer>0</integer>
					<key>PixelEncoding</key>
					<integer>0</integer>
					<key>Range</key>
					<integer>1</integer>
				</dict>
  1. Save the file and then convert it to binary again:
    plutil -convert binary1 ~/Desktop/com.apple.windowserver.displays.plist

  2. Check if the plist file is valid:
    plutil -lint ~/Desktop/com.apple.windowserver.displays.plist

  3. Open the /Library/Preferences/ folder again:
    open /Library/Preferences/

  4. Drag and drop the updated com.apple.windowserver.displays.plist file from Desktop to the Library folder manually. Don't use the cp command, as it won't add your current user with writing privileges.

  5. Right Click on the com.apple.windowserver.displays.plist file in the Library folder and click on Get Info

  6. Check the boxes for Stationery and Locked.

  7. Reboot the Mac.

That's it!



(Alternative) Terminal commands to force RGB Color Output on M1 and M2 based Macs and workaround for losing RGB color after waking up from sleep

  1. Open Terminal

  2. Paste the following commands to edit the User's displays plist file com.apple.windowserver.displays.[UUID].plist using the built-in PlistBuddy function in macOS:

/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth 8" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
  1. Reboot your Mac

(Workaround) If your Mac loses RGB color after waking up from sleep mode, either Reboot your Mac (recommended) or use this Terminal command to stop the WindowServer and login again (not recommended):

sudo killall -HUP WindowServer



End result

The end result is having your M1 mac output RGB color to your external monitor instead of YPbPr, potentially making the colors more accurate and the text a bit more crisp, even on older 1080p monitors.

Hopefully this tutorial would be useful to someone.

Please feel free to ask in the comment section if you have any questions regarding this procedure.



Background

While doing a lot of testing on how the Dual-Cable workaround makes RGB to work on M1, I've discovered what changes it makes to macOS, and managed to create a more streamlined workaround without the need to use a second cable.

To make things easier, I've created a step-by-step video tutorial of the whole procedure that should force RGB color output on your M1 Mac connected to an external monitor, and works on an HDMI-to-HDMI cable connection.

Credits

Big thanks goes to the amazing community and all their help over the years to solve issues like this:
https://gist.github.com/ejdyksen/8302862
https://gist.github.com/adaugherity/7435890

Useful Sources

Apple Open Source Project Files for Displays and Graphics
https://opensource.apple.com/source/IOKitUser/IOKitUser-1445.60.1/graphics.subproj/IODisplayLib.c
https://opensource.apple.com/source/IOGraphics/IOGraphics-517.17/IOGraphicsFamily/IOFramebuffer.cpp.auto.html

How to Edit and Convert binary plist files
http://hints.macworld.com/article.php?story=20050803111126899
https://apple.stackexchange.com/questions/155393/how-to-beautify-binary-dict-files
https://discussions.apple.com/thread/1768480

How to Edit plist files using defaults and PlistBuddy
https://ss64.com/osx/defaults.html
https://github.com/mathiasbynens/dotfiles/blob/master/.macos

Apps based on this method

@sudowork has created an awesome script written in Phyton that automates the steps and checks for duplicate files.
You can find more info about it here: https://github.com/sudowork/fix_m1_rgb

@dangh has created an alernative script for fishshell.
You can find more info about it here: https://github.com/dangh/force-rgb.fish

@GetVladimir I've also created a Shortcut to Force RGB Color Output using the built-in Shortcuts app.
You can find how to create the Shortcut here: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8?permalink_comment_id=4531552#gistcomment-4531552

@entropyconquers has created a script based on this method written in Phyton that automates the steps, makes a backup and checks for duplicate files.
You can find more info about it here: https://github.com/entropyconquers/Force-RGB-Color-on-M1-M2-Mac-Script

Additional notes

Multiple PixelEncoding and Range keys in the same plist file
Note that there might be multiple instances of the PixelEncoding and Range keys in the same file, one for each output of your monitor and for different AirPlay devices. You might need to update the integer on each one to get RGB color output on all displays.

Getting RGB color only before login
There might be multiple duplicate plist files with the same name in different locations.

Make sure that you only have the main modified file in:
/Library/Preferences

Then make a backup and remove duplicate displays plist files from these locations (if any):
~/Library/Preferences
or
/Users/username/Library/Preferences
and
/Users/username/Library/Preferences/ByHost


Please note that you'll need to have administrator privileges in order to modify the file in /Library/Preferences. Thanks goes to @keegandent and @StrategicalIT for pointing this out.

Updates regarding macOS Monterey

USB-C to DisplayPort
From what I've seen, it seems that macOS Monterey 12.0.1 finally outputs RGB color by default on some monitors when using USB-C to DisplayPort cable on M1 Apple Silicone Macs.

You might need to make a backup and delete these 2 files:
/Library/Preferences/com.apple.windowserver.displays.plist
and
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Restart your Mac and it should properly output RGB color on the monitor on the next boot.

HDMI to HDMI
The situation with HDMI seems to got a bit more complicated. Now the whole section for the LinkDescription might be missing from the com.apple.windowserver.displays.plist on a clean install and doesn't seem to be recreated when rotating the screen either.

Luckily, the solution still works, but you might need to manually add this whole section in the displays plist file:

					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>



The section usually goes right under the CurrentInfo key, and it should look something like this:

pixelencoding

This should get your RGB color output working on M1 Mac mini, even when connected with HDMI to HDMI cable.

Multiple monitors when one them is using HDMI to HDMI
Additional thanks goes to @somogyi-ede who tested this with multiple monitors and confirmed that the LinkDescription key needs to be added under each monitor instance in order for all of them to receive RGB color output. Link to the comment

Updates regarding macOS 13 Ventura

USB-C to DisplayPort
The macOS 13 Ventura beta seems to outputs RGB color by default on some monitors when using USB-C to DisplayPort cable on M1 Apple Silicone Macs.

You might need to make a backup and delete these 2 files:
/Library/Preferences/com.apple.windowserver.displays.plist
and
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Restart your Mac and it should properly output RGB color on the monitor on the next boot.

HDMI to HDMI
Similar as macOS Monterey, the situation with HDMI on macOS Venturs seems a bit more complicated. Usually the whole section for the LinkDescription might be missing from the com.apple.windowserver.displays.plist on a clean install and doesn't seem to be recreated when rotating the screen either.

Luckily, the solution still works, and you still need to manually add this whole section in the displays plist file:

					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>



The section usually goes right under the CurrentInfo key, and it should look something like this:

pixelencoding

This should get your RGB color output working on M1 Mac mini, even when connected with HDMI to HDMI cable.

(Optional) Lock the plist file and set it as stationary
After the macOS Ventura 13.3 update, the plist file seems to get overwritten on reboot.

After you make the edits in the file, you can try setting the file /Library/Preferences/com.apple.windowserver.displays.plist as Stationery pad and Locked, so that it doesn't get overwritten on every reboot

Stationery Pad Locked

To do this, right click on the plist file, click on Get Info and check the boxes next to Stationery pad and Locked

This requires further testing and might cause some issues, like not being able to remember new resolutions or display settings. Please note that you're making any changes at your own risk.

Updates regarding macOS 14 Sonoma Beta

USB-C to DisplayPort
The macOS 14 Sonoma seems to outputs RGB color by default when using USB-C to DisplayPort cable.

HDMI to HDMI
The macOS 14 Sonoma seems to outputs YCbCr color by default when using HDMI to HDMI cable.

  • Forcing RGB Color Output still seems to work with the original procedure of modifying the plist files

  • Modifying the display plist files still works with the alternative version

  • After the plist files are modified, putting the Mac to sleep and waking it, it seem to keep the RGB Color output (this seems to be fixed at least on a M1 Mac mini)

If you have any additional questions, please feel free to contact me.

@GetVladimir
Copy link
Author

@ChangHyun-Yoo thank you for your comment and for the details.

I would recommend making a backup and deleting both plist files.

After that, reboot the Mac and repeat the procedure again. It's very possible that there are more UUIDs in the same plist file that need to have the PixelEncoding key added to it.

If nothing else works, the last resort is to get an USB-C to DisplayPort cable for the U2723Q, but then both USB-C ports on the Mac mini would be in use by the Monitors.

@ChangHyun-Yoo
Copy link

@GetVladimir With your recommendations, It works!! Thank you for your help.

You're my best

@GetVladimir
Copy link
Author

@ChangHyun-Yoo Thank you so much for your comment and I'm glad to hear that you got RGB color output working

@poenagit
Copy link

I was able to get it to work with HDMI-HDMI and then HDMI - hub

but when I unplug and plug it back in it reverts back and even with a restart.

I had to redo the plist again to get it to work

@GetVladimir
Copy link
Author

@poenagit thank you for the update. Glad to hear that you got it working without the hub.

You might wan to do a backup of the display plist file when it works, so that you can restore it when needed.

@Doogooder
Copy link

Hello,
Thank you so much for the fix.
Pretty disappointing something so simple is so hard with a Mac :/
I had an interesting outcome where the changes were made but I found the login screen was RGB but once login had completed it changed back to YPbPr.

I am using a Pioneer 508XDA via HDMI.

Code FYI is:

DisplayAnyUserSets Configs CurrentInfo Depth 8 High 768 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1360 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 Rotation 0.0 UUID 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 UnmirrorInfo Depth 8 High 768 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1360 Orientations 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 0 Underscan 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 1 Version 1 DisplayUUIDMappings 4B4F77C8-2A95-E78F-0F93-5A69417CA049 7C0A4999-38E9-4CD6-B79B-7DD367454923 7D070E19-D819-1E00-0F93-5A69417CA049 567570E8-8F36-4C5A-9B0D-A853A5E28DC9 9B603E2E-98E1-E840-0F93-5A69417CA049 D25EA30C-5D91-4599-B843-16A5FF6148C0

@GetVladimir
Copy link
Author

GetVladimir commented Apr 1, 2022

@Doogooder thank you for your comment and I’m glad if you found the tutorial useful.

From what you've described, it seems like you have a duplicate displays plist file in /Users/yourname/Libraries/Preferences/ByHost

Make a backup of the displays plist file there and either edit it as you did with the first, or simply delete it. After the next reboot, you should have RGB color output after login as well

@Doogooder
Copy link

@Doogooder thank you for your comment and I’m glad if you found the tutorial useful.

From what you've described, it seems like you have a duplicate displays plist file in /Users/yourname/Libraries/Preferences/ByHost

Make a backup of the displays plist file there and either edit it as you did with the first, or simply delete it. After the next reboot, you should have RGB color output after login as well

Sorry I didn't realise Apple hide all of those duplicate files in hidden folders.
Crikey they work hard to make this stuff as difficult as possible.
Interestingly the login is YPbPr while the after login screen is RGB.
I will take it :)
The blacks are now beautiful again.
Thank you.

@GetVladimir
Copy link
Author

GetVladimir commented Apr 1, 2022

@Doogooder Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working.

You might want to do a backup of the working displays plist file now, so that you can easily restore it in the future if needed, without having to edit the file again

@nvcken
Copy link

nvcken commented Apr 15, 2022

@GetVladimir
I have 2 monitor ( DELL & LG TV), I only have problem non RGB color when connect to LG TV.
So with this method, it will effect for any external monitor that I connect to MBP M1 or just only my problem monitor ?

@nvcken
Copy link

nvcken commented Apr 15, 2022

Hi @GetVladimir
I tried this already, but did not help, even more washed out than before patch, then I have to reverted back.
Could you check to see any further I can do? this is my specs

MacOS: Big Sur 11.6.5 (20G527)
MacBook Pro (13-inch, M1, 2020)
I connect to LG TV with this hub
https://www.amazon.com/HyperDrive-MacBook-Windows-Laptop-Devices/dp/B098NNLVZL
LG TV HDMI <-> Hub HDMI and Hub Thunderbolt <-> MBP Thunderbolt

@GetVladimir
Copy link
Author

GetVladimir commented Apr 15, 2022

@nvcken thank you for your comment and for the details.

First, check if you have HDR on your TV and disable it. You won't be able to use RGB and HDR at the same time.

Next, you'll need to update to at least the latest version of macOS Monterey. Big Sur is missing a lot of display properties for the M1 based Macs. Even though this is not a guarantee that it will work.

Finally, if nothing else works, it's very likely that your M1 MacBook is not fully compatible with the Hub when it comes to displays. You'll want to try with an USB-C to HDMI cable instead.

Also, please note that the M1 MacBook only supports 1 external display officially

Copy link

ghost commented May 11, 2022

Hi @GetVladimir!

Thanks a mil!

I had to do a bunch of troubleshooting to get my monitor to output RGB.

The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.

Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).

This is for anyone reading this thread that might not have done this!

Again, thank you so much, the display looks a ton better now!

@GetVladimir
Copy link
Author

@TheeKuZu you're very welcome! Thank you so much for your comment and I'm glad to hear that you got RGB color output working on HDMI to HDMI connection

@Vladutu
Copy link

Vladutu commented May 15, 2022

Hi @GetVladimir ,
I have an m1 chip macbook pro with monterey (12.3.1) installed and I'm connected to my external monitor (lenovo Y25f) with hdmi. I tried the python script which deletes all those files from the other locations and also manually added the "LinkDescription" section in the file from /Library/Preferences, but it doesn't change anything. In display settings I have a color profile section and the best looking is "Rec.ITU-R BT.709-5" but it still doesn't look very good. On my previous intel chip mac the script "patch-edid" worked very good from the first try. Do you have any other solution that I can try? Thank you

@GetVladimir
Copy link
Author

Hi @Vladutu and thank you for your comment.

Can you tell me more about the connection? Is it an USB-C to HDMI cable or does it go through a hub/adapter?

@Vladutu
Copy link

Vladutu commented May 15, 2022

@GetVladimir I tried with both direct connection (hdmi-hdmi)from the monitor to the laptop (laptop has a hdmi port) and also through an adapter. With the adapter is HDMI to usb-c

@GetVladimir
Copy link
Author

@Vladutu thank you for the reply.

Please try one more time with the direct cable connection. Redo the whole procedure, making sure that there are no leftover files and settings.

The issue with the hubs/adapters usually is that the M1 isn't fully compatible with them and assigns them a different UUID every time you connect them, which makes is difficult to change the correct settings in the plist file

@Vladutu
Copy link

Vladutu commented May 15, 2022

Hi @GetVladimir,
I used direct cable connected and I ran the python script again. It gave me the following lines:

2022-05-15 18:12:18    INFO] Fixing /Library/Preferences/com.apple.windowserver.displays.plist
[2022-05-15 18:12:18    INFO] Skipping `/Library/Preferences/com.apple.windowserver.displays.plist`. No `LinkDescription` found in display config. Try rotating your display from Display settings to generate the field in the plist.

After this I manually put the LinkDescription part into the file and ran the python script again. This time I got:

[2022-05-15 18:18:19    INFO] Fixing /Library/Preferences/com.apple.windowserver.displays.plist
[2022-05-15 18:18:19    INFO] Fixing config for Display 37D8832A-2D66-02CA-B9F7-8F30A301B230
[2022-05-15 18:18:19    INFO] Did not fix Display 37D8832A-2D66-02CA-B9F7-8F30A301B230. Values for PixelEncoding and Range not as expected.
[2022-05-15 18:18:19    INFO] Fixing config for Display 1E01BA94-FC77-41C2-A2F1-11960BFF4C97
[2022-05-15 18:18:19    INFO] Fixed Display 1E01BA94-FC77-41C2-A2F1-11960BFF4C97
[2022-05-15 18:18:19    INFO] Resulting XML output for `/Library/Preferences/com.apple.windowserver.displays.plist`:
<plist version="1.0">
<dict>
	<key>DisplayAnyUserSets</key>
	<dict>
		<key>Configs</key>
		<array>
			<array>
				<dict>
					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>982</real>
						<key>Hz</key>
						<real>120</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>1920</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1512</real>
					</dict>
					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>
					<key>Rotation</key>
					<real>0.0</real>
					<key>UUID</key>
					<string>37D8832A-2D66-02CA-B9F7-8F30A301B230</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>982</real>
						<key>Hz</key>
						<real>120</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1512</real>
					</dict>
				</dict>
				<dict>
					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>7</integer>
						<key>High</key>
						<real>1080</real>
						<key>Hz</key>
						<real>144</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>
					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>10</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>
					<key>Rotation</key>
					<real>0.0</real>
					<key>UUID</key>
					<string>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>7</integer>
						<key>High</key>
						<real>1080</real>
						<key>Hz</key>
						<real>144</real>
						<key>IsLink</key>
						<false />
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>
				</dict>
			</array>
		</array>
		<key>Orientations</key>
		<dict>
			<key>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</key>
			<integer>0</integer>
			<key>37D8832A-2D66-02CA-B9F7-8F30A301B230</key>
			<integer>0</integer>
		</dict>
		<key>Underscan</key>
		<dict>
			<key>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</key>
			<real>1</real>
			<key>37D8832A-2D66-02CA-B9F7-8F30A301B230</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>1</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>9B603E2E-98E1-E840-0F93-5A69417CA049</key>
		<string>BE1DC10F-0A44-49DE-B3B5-822E92C8EACF</string>
		<key>E3395906-27BF-11DF-0F93-5A69417CA049</key>
		<string>1E01BA94-FC77-41C2-A2F1-11960BFF4C97</string>
	</dict>
</dict>
</plist>

After restart the current profile called (Y25f) was deleted and I had selected by default Rec.ITU-R BT.709-5.
But, it seems to work somehow as the color is pretty good now.

My monitor is connected with a display port to my gaming pc and i switched between hdmi and display port and the colors look pretty similar. I don't know what it did but it did something.

Thank you for your time and help!

@GetVladimir
Copy link
Author

@Vladutu Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working.

You might want to make a backup of the working plist file now, so that you can easily restore it in the future if needed

@MrTweaks
Copy link

@GetVladimir - Hi, First of all - Thank you for this valuable topic - you rock and are awesome
Having said that, I have a different issue (not the RGB coloring) and I would appreciate any insight you might have on this issue - I'll explain; I have a M1 macbook Air and I use a Dell 6000 docking station w/ 3x Dell U3011
The 2 U3011's connected to DP work fine, but the HDMI one is limited to 1900 x 1200 in resolution - which is annoying but better than nothing.

However - When mirroring (either 3x the same) the monitor displays the 2560x1600 resolution. Not as sharp, but it would work fine for me, for now. It gets even better, when using BetterDummy, I can mirror the 2 monitors on either side - and keep the central monitor separate)

i would like to have THAT mode - whether it's 1920x1200 displaying 2560x1600 or otherwise - as an extended monitor.
Any ideas on how to approach this?

@MrTweaks
Copy link

A small addition - I can locate the U3011 in Ioregexplorer, attached to the D6000 - coming from bundle com.apple.driver.AppleMobileDispH13G-DCP

I can also confirm I can see height/width there - would this imply I have to override them in this kext here?

@GetVladimir
Copy link
Author

GetVladimir commented May 19, 2022

@MrTweaks thank you so much for your comment and for the details!

It's actually pretty impressive that you got it to work with 3 screens at all, since the MacBook Air M1 is limited to a maximum of 1 external display with up to 6K resolution at 60Hz (at least according to its official info): https://www.apple.com/macbook-air/specs/

I'm not sure what exactly is the issue, but it seems it also might be the bandwidth of the Dell 6000 dock: https://www.dell.com/en-us/shop/dell-universal-dock-d6000s/apd/452-bdtm/pc-accessories

According to its specs, it can support either:

  • 5120 x 2880 - 60 Hz (Single Display)
  • 3840 x 2160@60Hz, 3840 x 2160@60Hz - 60 Hz (Dual Display)
  • 3840 x 2160@60Hz, 3840 x 2160@60Hz, 3840 x 2160@30Hz (Triple Display)

While mirroring sometimes does get some interesting results, I'm not sure if there is a way to overcome the limit of the dock (or the M1 Air) when using native resolution.

Perhaps you can try connecting the 3rd monitor directly to the MacBook Air M1 with the USB-C to DisplayPort cable and see if any new configurations show up? It's not something that I would recommend, this is only if you'd like to test it for yourself

@MrTweaks
Copy link

@GetVladimir
Thanks, well - Its not really my achievement; however, I have been running these screens for ages now, and encountered lots of 'challenges' during my hackintosh days - One really needs to know what you're dealing with, so in that sense - I can do some pretty good pre-buy research, if you will ;-)

As for your answer, thank you - It got me thinking differently; i think that de specs on the dell site are 'maxed specifications' as per maximum res. per 1/2/3 screen(s) - However, in terms of datatransfer/bandwidth - there are more configurations possible, albeit (I suspect)not going beyond bandwidth limits. My screens do 2560x1600@60 max. compared tot the max, it should be possible to run them on max. What I see now, and have misconfigured/not given any thought yet, is the @30hz.... perhaps this is the real limitation/incompatibility...
I'm gonna check If I can work w/ that - Thanks again;-)

@GetVladimir
Copy link
Author

@MrTweaks not a problem, glad if it helps even a bit :) Thank you for the comment

@kikikkstudio
Copy link

Thanks for the solution!
and is there any way to fix the problem of recognizing the monitor as a TV without an Intel Mac?

@GetVladimir
Copy link
Author

@kikikkstudio thank you for your comment.

You can try creating a display override file and use this option:

<key>DisplayIsTV</key>
<false/>

so that the full override plist looks something like this example plist:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>DisplayProductName</key>
  <string>DELL U2415 (RGB)</string>
  <key>DisplayIsTV</key>
  <false/>
  <key>IODisplayEDID</key>
  <data>AP///////wAQrLigTEY0MCUYAQSlNCB4IgSVqVVNnSYQUFSlSwBxT4GAqUDR
wNEAAQEBAQEBKDyAoHCwI0AwIDYABkQhAAAeAAAA/wAwOERYRDQ5NzA0RkwK
AAAA/ABERUxMIFUyNDE1CiAgAAAA/QAxPR5TEQAKICAgICAgAGo=
</data>
  <key>DisplayVendorID</key>
  <integer>4268</integer>
  <key>DisplayProductID</key>
  <integer>41144</integer>
</dict>
</plist>

Here are more details on how to create the display override file:
https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8?permalink_comment_id=4070896#gistcomment-4070896

And here is workaround script from @mfaughn that might help you to create the override file directly on a M1 Mac:
https://gist.github.com/mfaughn/57d95a8c06620a88fd2e651167a2c2ed

@GetVladimir
Copy link
Author

@kikikkstudio Not a problem, glad if it helps.

Yes, you can try the workaround script to create the override file directly on M1 Mac here (without the need of x86 Mac):
https://gist.github.com/mfaughn/57d95a8c06620a88fd2e651167a2c2ed

@kikikkstudio
Copy link

thank you! i try it

@kikikkstudio
Copy link

kikikkstudio commented May 24, 2022

i get error like this

can't convert nil into Integer (TypeError)

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:50:in block in

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in. each

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in each_with_index

from /Library/Displays/Contents/Resources/Overrides/edid_rename_display.rb:13:in

So I tried to manually create folders and files by reading the script and finding the vendor id and product id.
But I don't know where to find 'IODisplayEDID' because of my weak scripting skills.

@GetVladimir
Copy link
Author

@kikikkstudio ok, you can manually do this instead:

  1. Open Terminal
  2. Type ioreg -l -w0 -d0 -r -c AppleCLCD2
  3. Press CMD + F
  4. Type DisplayAttributes and press return
  5. Look for the values for LegacyManufacturerID and ProductID
  6. Use an online calculator to convert the values to hexadecimals (for example, you can use this link)
  7. Create the file and folder for the display overrides based on those values

For example:
If LegacyManufacturerID=4268, then the hex is 10ac
If ProductID=41144, then the hex is a0b8

So the name and location of the Display Override file should be:
/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-10ac/DisplayProductID-a0b8

Inside that file called DisplayProductID-a0b8, you need the decimal values for VendorID (LegacyManufacturerID) and ProductID. So, for example, it should look something like this:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>DisplayProductName</key>
  <string>DELL U2415 (RGB)</string>
  <key>DisplayIsTV</key>
  <false/>
  <key>DisplayVendorID</key>
  <integer>4268</integer>
  <key>DisplayProductID</key>
  <integer>41144</integer>
</dict>
</plist>

Make sure to do a backup beforehand, and please note that you're doing any changes at your own risk.

@kikikkstudio
Copy link

In your way, I have succeeded. Thank you very much!

@GetVladimir
Copy link
Author

@kikikkstudio you're very welcome! Thank you for the reply and I'm glad to hear that you got the display override working

@rohit267
Copy link

rohit267 commented Jun 7, 2022

@GetVladimir I tried the above steps, HDMI to HDMI, Mac Pro m1. Doesn't seem to be working. I have 27ml600s which is 1920 x 1080.

I added the xml at 8 places but after restart, only five places have that xml.

Another question: Should I perform it while the monitor is connected or disconnected ?

Copy link

ghost commented Jun 7, 2022

Hi @GetVladimir!

Thanks a mil!

I had to do a bunch of troubleshooting to get my monitor to output RGB.

The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.

Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).

This is for anyone reading this thread that might not have done this!

Again, thank you so much, the display looks a ton better now!

@rohit267 try what I mentioned here perhaps?

@rohit267
Copy link

rohit267 commented Jun 7, 2022

TheeKuZu

I don't think I have the /ByHosts
Screenshot 2022-06-07 at 5 09 41 PM

@GetVladimir
Copy link
Author

@rohit267 thank you for your comment. Please try in /Users/username/Library/Preferences/ByHost instead.

@TheeKuZu thank you so much for the suggestion and for helping. I think that might be the correct solution in this case

Copy link

ghost commented Jun 7, 2022

@rohit267 it's under /users/YOURUSERNAME/Library/preferences/byhosts @GetVladimir mentioned it in his additional notes section.

I was having the same problem. So first, I deleted the same file found in "ByHosts" you can simply use the search and type in "display" should show a single file in that folder. Then delete that. Then in the normal /Library/Preferences - make the changes he mentions in his video. In my case the entire "LinkDescription" section was missing and I had to add it manually.

@rohit267
Copy link

rohit267 commented Jun 9, 2022

@rohit267 it's under /users/YOURUSERNAME/Library/preferences/byhosts @GetVladimir mentioned it in his additional notes section.

I was having the same problem. So first, I deleted the same file found in "ByHosts" you can simply use the search and type in "display" should show a single file in that folder. Then delete that. Then in the normal /Library/Preferences - make the changes he mentions in his video. In my case the entire "LinkDescription" section was missing and I had to add it manually.

Tried everything. None worked. Used betterDummy to reduce the resolution to 1504*846. Feels good now.

@april
Copy link

april commented Jun 9, 2022

This worked great for me. It's so dumb -- my Dell U2720Q worked great, but my U2720QM didn't.

Same exact monitor, same exact firmware, one came up as RGB and the other came up as YPbPr.

@GetVladimir
Copy link
Author

@april Thank you so much for your comment and I'm glad to hear that you got RGB color output working on both monitors

@Averyy
Copy link

Averyy commented Jun 10, 2022

@rohit267 thank you for your comment. Please try in /Users/username/Library/Preferences/ByHost instead.

Thank you so much, this has been driving me nuts.

I was trying everything and could not get it working despite following all steps. Then I saw this comment and after deleting the display file in there then the overrides finally applied and I was able to get it output in RGB.

@GetVladimir
Copy link
Author

@Averyy Awesome! Thank you so much for the comment and I'm glad that you got RGB color output working

@eramdam
Copy link

eramdam commented Jun 16, 2022

Thanks for this! I'm trying to apply it but my situation is a bit weird because my two displays (Dell S2722DC) end up in YCbCr after my M1 Pro MBP wakes up from sleep and when they're connected to my CalDigit USB-C hub with USB-C cables. Would the fix apply to my situation? If so, which one should I follow?
I'm trying to follow the solution that adds the LinkDescription section in the plist file but there are a lot of display sections in there and I'm having trouble telling which ones are actually used or not 😅

Copy link

ghost commented Jun 16, 2022

@eramdam So the exact process I followed is the following, after unplugging the displays and plugging them back in, the RGB profile got set back to YCbCr.

So:

  1. Delete both files in the Library/Preferences and /users/YOURUSERNAME/Library/preferences/byhosts folder. Restart.
  2. There will be a new file in Library/preferences, in my case it was empty, so I followed what @GetVladimir's video said and did the rotation.
  3. If your file does not have the LinkDescription section - what I did is to add them to ALL of the external monitor's sections where it started with , however, of course not to the MacBooks display. For some odd reason, I also have a lot of them, even with a clean file.
  4. Restarted and bam, it got fixed.

Hope this helps!

@eramdam
Copy link

eramdam commented Jun 16, 2022

@eramdam So the exact process I followed is the following, after unplugging the displays and plugging them back in, the RGB profile got set back to YCbCr.

So:

1. Delete both files in the Library/Preferences and /users/YOURUSERNAME/Library/preferences/byhosts folder. Restart.

2. There will be a new file in Library/preferences, in my case it was empty, so I followed what @GetVladimir's video said and did the rotation.

3. If your file does not have the LinkDescription section - what I did is to add them to ALL of the external monitor's sections where it started with , however, of course not to the MacBooks display. For some odd reason, I also have a lot of them, even with a clean file.

4. Restarted and bam, it got fixed.

Hope this helps!

Thanks! It seems to have worked, I'll be sure next time I leave my Macbook asleep and wake it up hours later 👍

@GetVladimir
Copy link
Author

How to enable HiDPI on M1 based Macs on any resolution

I have some interesting news: I found a solution to enable HiDPI on M1 based Macs on any resolution, even on 1080p screens, without the need to use mirroring or other workarounds.

Here is an example of HiDPI running on a Dell U2415 monitor that only supports a maximum resolution of 1920x1200:
1200p HiDPI

What you need to do is to edit the com.apple.windowserver.displays.plist file located in
/Library/Preferences/com.apple.windowserver.displays.plist

and change the key <key>Scale</key> to have a value of 2.

This is an example of how the section in the displays plist file should look like after the change:

					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>1200</real>
						<key>Hz</key>
						<real>60</real>
						<key>IsLink</key>
						<false/>
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>2</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>

Make sure that you change only the Scale key for the monitor that you need, and nothing else.

You can follow the step-by-step video tutorial on how to make the changes in the displays plist file here:
https://www.youtube.com/watch?v=Z1EqH3fd0V4

After that, restart your Mac and you should get HiDPI and noticeably more crisp and anti-aliased text, and the high resolution macOS icons.

An easy way to confirm that the HiDPI changes work is by looking at the Safari icon on the dock. If the HiDPI version of the icon is enabled, it will have a lot more sections in the compass than the low resolution icon. It should look something like this:
Safari HiDPI

Please note that while this might make the image look better even on 1080p screens, they will still be running at 1080p resolution, so the change might not be as drastic as running on a higher resolution screen.

If you have any questions about the procedure, please feel free to contact me or comment below.

@keegandent
Copy link

For anybody having issues with the Dell S2721DGF or similar monitors, the procedure I finally got working was extremely tiresome, but I think all of the following is necessary. Make sure you keep "Smart HDR" set to "Desktop" in the OSD settings.

  1. Backup your /Library/Preferences/com.apple.windowserver.displays.plist and ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist as advised
  2. Delete the original copies in that folder and restart.
  3. Edit your display preferences to correctly align and manipulate displays how you want. This is the time to make any ordinary changes you want to keep.
  4. Enable High Dynamic Range for the S2721DGF. Everything will look washed out and terrible, but ignore it. At this point the display should still show as YPbPr on the OSD.
  5. Restart.
  6. At this point, follow the .plist editing instructions to change or add the LinkDescription setting. Also, if you see any setting for the S2721DGF where Depth is set to 7, change it to 8. It won't surprise me if it's not required, but I don't personally feel like testing this whole process again without it, and it doesn't hurt anything.
  7. Replace both plists with your edited & compiled copies and restart for hopefully the final time.
  8. When you log in again, the OSD should say RGB. Congratulate yourself on not doing a violence to computer hardware.

@GetVladimir
Copy link
Author

@keegandent Thank you so much for the detailed steps and I'm glad to hear that you got RGB color output working

@Hr46ph
Copy link

Hr46ph commented Jul 7, 2022

Hello, I tried your guide several times on my Macbook Pro M1 with Montery. I use its HDMI output to an Iiyama G-Master ultrawide but it doesn't seem to do anything? Nothing changes visually. The image does look grainy and washed out. Also, some light gray shades look yellowish. Weird thing also is that when I configure the hdmi input range on the monitor to 'limited' instead of 'full' it acutally looks a little better. I'm not sure what the problem is but looks horrible and I am really hoping there is a fix. Can you help? Thanks!

@keegandent
Copy link

@Hr46ph Can you try (backing up and then) deleting the two *.plist files and restarting to reset your display settings to factory? Then make sure you disable HDR for that monitor.

@StrategicalIT
Copy link

Hi @GetVladimir thanks for all your amazing work on this. I'm trying to get this working on my setup but I have a question please:
M1 Mac Mini (MacOS 12.3.1) HDMI -> HDMI using a Dell U4320Q.

My problem is I have a basically blank windowserver.display.plist file, even after trying the rotation trick.

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>C6509A39-06DF-B92D-0F93-5A69417CA049</key>
		<string>7F878A30-4357-4DFD-8BF0-1E5CF9BC123A</string>
	</dict>
</dict>
</plist>

So from your notes I've read about having to manually add the LinkDescription, but given I don't even have a CurrentInfo section I don't really know were/how to add this.

Any advice appreciated. Cheers :-)

@keegandent
Copy link

@StrategicalIT I had a issues with that file not getting updated from settings changed in System Preferences, and the solution was usually to just do a reboot.

@GetVladimir
Copy link
Author

@StrategicalIT Thank you so much for your comment!

Yes, if the file doesn't get generated right away, it's best to try a reboot as @keegandent suggested.

If that doesn't work, you can try to AirPlay to another device (like an Apple TV) or add an iPad as a second screen (Sidecar). This should generate the file.

If nothing else works, you can test the example plist file and replace the resolution, refresh and placeholder UUIDs with your own (Fully at your own risk, I don't recommend using this):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DisplayAnyUserSets</key>
	<dict>
		<key>Configs</key>
		<array>
			<array>
				<dict>
					<key>CurrentInfo</key>
					<dict>
						<key>Depth</key>
						<integer>8</integer>
						<key>High</key>
						<real>1200</real>
						<key>Hz</key>
						<real>60</real>
						<key>IsLink</key>
						<false/>
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1920</real>
					</dict>
					<key>LinkDescription</key>
					<dict>
						<key>BitDepth</key>
						<integer>8</integer>
						<key>EOTF</key>
						<integer>0</integer>
						<key>PixelEncoding</key>
						<integer>0</integer>
						<key>Range</key>
						<integer>1</integer>
					</dict>
					<key>Rotation</key>
					<real>0.0</real>
					<key>UUID</key>
					<string>0283FB79-6CDA-45AC-9193-C57F848688E5</string>
					<key>UnmirrorInfo</key>
					<dict>
						<key>Depth</key>
						<integer>4</integer>
						<key>High</key>
						<real>1</real>
						<key>Hz</key>
						<real>60</real>
						<key>IsLink</key>
						<false/>
						<key>OriginX</key>
						<real>0.0</real>
						<key>OriginY</key>
						<real>0.0</real>
						<key>Rotation</key>
						<integer>0</integer>
						<key>Scale</key>
						<real>1</real>
						<key>Wide</key>
						<real>1</real>
					</dict>
				</dict>
			</array>
		</array>
		<key>Orientations</key>
		<dict>
			<key>0283FB79-6CDA-45AC-9193-C57F848688E5</key>
			<integer>0</integer>
		</dict>
		<key>Underscan</key>
		<dict>
			<key>0283FB79-6CDA-45AC-9193-C57F848688E5</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>1</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>975F020A-2B06-A110-0F93-5A69417CA049</key>
		<string>0283FB79-6CDA-45AC-9193-C57F848688E5</string>
	</dict>
</dict>
</plist>

That being said, there was an issue with certain older macOS versions and generating the display files. You might want to update to macOS 12.4 or 12.5 if you haven't done that already.

@keegandent Thank you so much for the reply and for the useful suggestions! I appreciate them a lot

@StrategicalIT
Copy link

@keegandent and @GetVladimir thank you both so much for you fast response. I had tried a reboot, but I hadn't done an MacOS update, so updating to 12.4 now and will try again. Cheers :-)

@GetVladimir
Copy link
Author

@StrategicalIT Awesome! Let us know how it goes.

@StrategicalIT
Copy link

@StrategicalIT Awesome! Let us know how it goes.

SUCCESS :-)

So post update (MacOS 12.4) and reboot I tried the rotate trick and sidecar (mirror) to my iPad (via USB) and neither had the desired result of adding info to the windowserver.display.plist file.

At this point I wondered if it might be a user/permission type problem... the user account I use on my Mac has no admin privledges, so I logged out and logged in with my admin account, did the rotation trick and success, fully populated windowserver.display.plist file.

I copied the new plist file to a shared folder were my standard user could access it, logged out admin and login as standard user.

Run through the steps above including having to manually add the LinkDescription section (as per HDMI -> HDMI notes) and I now have RGB colour space.

Thanks again for all your help @GetVladimir & @keegandent

@keegandent
Copy link

@GetVladimir Could you add a note to the gist saying that admin is required? I think for those not used to *nix systems it might not be obvious.

@GetVladimir
Copy link
Author

@StrategicalIT Thank you for the update and I'm glad to hear that you got RGB color output working!

@GetVladimir
Copy link
Author

GetVladimir commented Jul 20, 2022

@keegandent Thank you for pointing this out! Good suggestion, I've added it to the gist under Additional Notes (with credit, hope that is ok)

@StrategicalIT
Copy link

@keegandent Thank you for pointing this out! Good suggestion, I've added it to the gist under Additional Notes (with credit, hope that is ok)

No problem. Glad I was able to help.

@dangh
Copy link

dangh commented Jul 21, 2022

If anyone use fishshell, I have a script to patch the plist files here https://github.com/dangh/force-rgb.fish

@GetVladimir
Copy link
Author

@dangh Nice work! Thank you for creating and for sharing the script.

I've added it to the Apps based on this method section in this gist with a link to your profile.

I've looked over the code, but I'm not sure what happens when there is a plist file in /Library/Preferences/, but no file found in ~/Library/Preferences/ByHost/. Does it skip the second one and continues?

@dangh
Copy link

dangh commented Jul 21, 2022

@GetVladimir yes it will proceed with existing files only.

@n1trousx
Copy link

Hi @GetVladimir!
Thanks a mil!
I had to do a bunch of troubleshooting to get my monitor to output RGB.
The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.
Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).
This is for anyone reading this thread that might not have done this!
Again, thank you so much, the display looks a ton better now!

@rohit267 try what I mentioned here perhaps?

This worked for me on my M1 Pro 16". Thank you so much!!!

@aurimasniekis
Copy link

Hi @GetVladimir!
Thanks a mil!
I had to do a bunch of troubleshooting to get my monitor to output RGB.
The displays file in /ByHosts was overriding the file in the normal /Preferences files. This seems to happen if you've fiddled with something like BetterDummy.
Deleted both files in both locations, redid the tutorial and it finally worked! (HDMI to HDMI).
This is for anyone reading this thread that might not have done this!
Again, thank you so much, the display looks a ton better now!

@rohit267 try what I mentioned here perhaps?

This worked for me on my M1 Pro 16". Thank you so much!!!

Did same just now, with all the possible tips here, but I can't get any of the monitors to go into RGB mode on M1 Pro 16" :(

@dangh
Copy link

dangh commented Aug 10, 2022

@aurimasniekis did you check the plist files after reboot? For me after patching the files using script, I had to copy the file to desktop, and copy it back for macOS to stop overriding my changes. Then I have to log out, then shutdown for it to work. A normal restart doesn't do it for me.

@aurimasniekis
Copy link

@dangh I have checked after reboot, and nothing has changed, but I haven't tried logout and then restart

@aurimasniekis
Copy link

aurimasniekis commented Aug 10, 2022

Okay, the logout and reboot didn't help, but I figured it out in the end. So even changing plist file in /Library/Preferences which after reboot did nothing (even with deleted all window files), I managed to get it work with trying to edit also the ~/Library/Preferences/ByHost file and it worked

EDIT: I know now the reason it didn't work, the RGB only works with Native resolution enabled (Most space). Tried all other scalings and none of them worked, only with native resolution 3840x2160

@dangh
Copy link

dangh commented Aug 10, 2022

@aurimasniekis it works for me. I delete the file in ~/Library/Preferences/ByHost, change the /Library/Preferences after I set the scale to 5k for my 4k monitor.

@TheFermi0n
Copy link

TheFermi0n commented Aug 12, 2022

apparently, if you close your MBP m1's lid and use the external monitor as standalone display. The RGB thing doesn't work but the HiDPI ( Scaled 2 ) trick is working and I can finally see things properly in this external display!!

Edit: Never mind it's fixed.

What you need to do is, after macOS finishes overwriting your file when you close the lid. Add the codes shown here once again to the same file under the newly added display settings also change the scaled to 2. and it's done.

@GetVladimir
Copy link
Author

Thank you for the comment and the info, and I'm glad to hear that you got RGB color output and HiDPI working

@GetVladimir
Copy link
Author

@JO-KENNEDY thank you for your comment and the details.

From what you've posted, it seems that you have done everything correctly.

I saw that you have multiple UUID entries in the plist file, which might make things more complicated.

What I can suggest is to do a backup of the displays plist file and delete it. Then do a restart of the Mac, so that it will generate a fresh displays plist file.

Usually, direct USB-C to USB-C connections don't need any modifications to work.

If that doesn't work, you might want to check if any options are enabled on the monitor itself, like HDR or cool blue filter.

If none of that works, you might want to connect the monitor to a different device, just to make sure whether the issue is with the Mac or with the Monitor.

@GetVladimir
Copy link
Author

@JO-KENNEDY thank you for the update.

Try disabling HDR in the macOS settings and see if that helps.

Other than that, you might need to start the Mac in safe mode and see if that will make any difference: https://support.apple.com/en-ie/guide/mac-help/mh21245/mac

Still worth to try connecting the Monitor to a different device to check if it still shows the same

@GetVladimir
Copy link
Author

@JO-KENNEDY It's very likely an issue with the Monitor or the Monitor built-in settings.

If it has an HDMI or DisplaysPort, try connecting to it instead. But if not, you might need to call in the warranty

@Cybermonkey342
Copy link

I have bought a Mac Mini M1. One of my monitors showed a greenish picture. It's connected via HDMI. I started the Python script and afterwards everything is allright. That's great! My question is: I am still on Big Sur, when I update to Monterey will the change still be applied or do I have to fiddle again with the terminal?

@GetVladimir
Copy link
Author

@MarkusMangold thank you for your question and I'm glad to hear that you got RGB color output working.

Usually, the changes will be persistent between updates, so you can upgrade to Monterey or Ventura.

Please note that the plist file might be overwritten if you change the resolution though.

To be safe, you can just make a backup of the displays plist file located in /Library/Preferences so that you can easily restore it in the future if needed

@Cybermonkey342
Copy link

@GetVladimir; Thanks for your answer. Now I feel rather stupid ... 🙂 Of course I can just backup the plist file ... 🤦‍♂️

@GetVladimir
Copy link
Author

@MarkusMangold No worries about it :) The important thing is that you got RGB color output working.

Thank you for the reply

@bombjoke
Copy link

bombjoke commented Oct 8, 2022

My new 14in 2021 M1 MBP displays an inch black border all around my new samsung UJ59 monitor.
im using samsung recommended hdmi cable.
works great, but the diagonal is 28.5in instead of 31.5in. annoying!

with my old 2018 MBP the monitor displays perfectly, filling whole screen, with no black border.
I've tried all the Monterey preferences, and the hardware monitor menu settings. cannot find anyone else complaining about this in apple forums, samsung, or amazon reviewers.
do you have any guidance?

@GetVladimir
Copy link
Author

@bombjoke Thank you for your question.

From what you've posted, if you've already tried all the settings and the procedure above, and you're sure there is no underscan setting, your next option would be to check with an USB-C to DisplayPort cable to connect to this specific monitor

@bombjoke
Copy link

bombjoke commented Oct 9, 2022

thanks for reply! i just bought that cable and it works. my monitor doesn't not a have an over/underscan control, and it seems that the control has also been removed from Monterey. https://discussions.apple.com/thread/253364474
so, your suggestion is the best, and you helped me understand the situation rapidly as someone who has been away from display tech for over a decade.
i guess there MAY be a way to manually change the underscan value in a plist file, but you would have suggested it.

@GetVladimir
Copy link
Author

GetVladimir commented Oct 9, 2022

@bombjoke thanks for the reply! Awesome, glad to hear that you got it working properly.

The underscan slider in System Preferences only seemed to show on older versions if you have very specific resolutions selected (like 1080p) and the monitor is being detected as a TV. Getting it to show and work wasn't always reliable.

Either way, don't regret getting the USB-C cable, as it solved the issue and it might have solved other issues as well, now that it detects the monitor properly

@Cybermonkey342
Copy link

@GetVladimir
Okay, now I upgraded to macOS Monterey. As I feared, my old monitor again shows the greenish and purple color. Unfortunately nothing helped. I copied the plist file and used the Python script again. But the one display doesn't show the correct colors anymore. I hope I can go somehow back to Big Sur.

@GetVladimir
Copy link
Author

@MarkusMangold thank you for the update.

You usually don't need to make any changes after the update. Just copy over your backup plist file and make sure there is no duplicate plist file in the ByHost folder

@Cybermonkey342
Copy link

@GetVladimir Yes, that is what I've done (in the first place). I think I know what the problem is, it seems when booting the resolution is different than before. Anyway I could solve it, but this only works for me. Since my monitor has a DVI input I am now using a HDMI-to-DVI cable. I learned that DVI is RGB only. And what shall I say: it now works flawlessly without changing anything. 🙂
It was a bit of fiddling since there are three computers sharing the monitors but it works and I coudn't be happier. Let's hope Ventura does not change anything here.

@GetVladimir
Copy link
Author

@MarkusMangold You're right, DVI is RGB only, so that's a good solution.

Funny thing how an older technology saves the day and works better with the M1. Glad to hear that you got it working

@danielgbr
Copy link

danielgbr commented Oct 17, 2022

I'm using an external HDMI DELL display on MacOS 12.6 Macbook Pro 16" M1 and editing the plist hasn't worked. From what I understand my plist is registering multiple formats of my display. I was able to identify which display is which by maintaining orintation to 90º. Even so, I was unable to get it working. Here's how my Plist is currently:

`

DisplayAnyUserSets Configs CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1920 Hz 60 IsLink OriginX -1080 OriginY -1080 Rotation 0 Scale 1 Wide 1080 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 PixelEncoding 0.0 Range 1 Rotation 0.0 UUID 8BCACC85-9FA3-4E52-89E2-DB9743795D49 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 720 Hz 60 IsLink OriginX 1728 OriginY 0.0 Rotation 0 Scale 1 Wide 1280 Rotation 0.0 UUID 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B UnmirrorInfo Depth 4 High 1 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1 CurrentInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 Rotation 0.0 UUID 37D8832A-2D66-02CA-B9F7-8F30A301B230 UnmirrorInfo Depth 8 High 1117 Hz 120 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 2 Wide 1728 CurrentInfo Depth 4 High 921 Hz 60 IsLink OriginX 1728 OriginY 0.0 Rotation 0 Scale 1 Wide 1228 Rotation 0.0 UUID 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB UnmirrorInfo Depth 4 High 921 Hz 60 IsLink OriginX 0.0 OriginY 0.0 Rotation 0 Scale 1 Wide 1228 Orientations 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 0 37D8832A-2D66-02CA-B9F7-8F30A301B230 0 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B 0 8BCACC85-9FA3-4E52-89E2-DB9743795D49 90 Underscan 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 1 37D8832A-2D66-02CA-B9F7-8F30A301B230 1 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B 1 8BCACC85-9FA3-4E52-89E2-DB9743795D49 1 Version 1 DisplayUUIDMappings 25DD932C-22DE-4153-0F93-5A69417CA049 377CA1AA-88C6-4855-ACFD-C2B9D4A43BBB 9B603E2E-98E1-E840-0F93-5A69417CA049 E5C091A1-93C3-45B5-9AC4-B3826E516DF9 B42D5FF6-E50E-D8A2-0F93-5A69417CA049 7B3CCC39-7B95-4000-B05C-BD1BAF887A8B FA8FEBE2-00C2-6D27-0F93-5A69417CA049 8BCACC85-9FA3-4E52-89E2-DB9743795D49 `

@GetVladimir
Copy link
Author

@danielgbr thank you for the comment and the details.

Can you tell me more how is the connection to the Dell monitor? Is it using a direct USB-C to HDMI cable or goes through an adapter/dock?

If it's using a direct connection, please check if there is a duplicate plist file in /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist that needs to be edited or deleted (after making a backup)

@danielgbr
Copy link

@danielgbr thank you for the comment and the details.

Can you tell me more how is the connection to the Dell monitor? Is it using a direct USB-C to HDMI cable or goes through an adapter/dock?

If it's using a direct connection, please check if there is a duplicate plist file in /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist that needs to be edited or deleted (after making a backup)

Im using HDMI - HDMI and the /ByHost/ doesn't exist

@GetVladimir
Copy link
Author

@danielgbr that's very interesting, thank you for the reply. I would have expected the HDMI to HDMI connection not to cause such issues.

Please make a backup and delete the display plist file. Then reboot the Mac and it should recreate a new file. Apply the procedure on it again and RGB color output should work.

Let me know if it starts to show multiple UUIDs again on the newly created plist file.

@danielgbr
Copy link

danielgbr commented Oct 17, 2022

I just deleted the plist file. When I restart it is showing multiple UUIDs again (a total of 5 UUIDs) after I rotate the extended external monitor. What should I do?

@GetVladimir
Copy link
Author

@danielgbr you can try to repeat the steps as you did before and change/add the PixelEncoding to the UUID of the external monitor.

Be careful and please know that you're doing any changes at your own risk.

@rodogd
Copy link

rodogd commented Oct 25, 2022

image

I receive the following error after converting the file back to binary1. I'm using a MacBook Air M2. Copied and pasted the whole LinkDescription section

Using mac OS Ventura

@GetVladimir
Copy link
Author

@rodogd Thank you for your comment.

Please try to edit the plist file with another plain text editor and make sure there are no missing characters.

You can use the free and open source CotEditor that is available on the Mac App Store.

@rodogd
Copy link

rodogd commented Oct 25, 2022

@GetVladimir Thanks for the quick response. It worked using CotEditor. However, when I changed the resolution to 4k, the issue came up again and I'm still not able to fix it. Will try switching back to 1080p and will let you know

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

Since macOS Ventura (final version) this doesn't work any more, unfortunately. Even when LinkDescription etc. is present for all displays in all relevant com.apple.windowserver.displays.plist files, it switches back to YPbPr as soon as the MacBook comes back from standby. Only after rebooting it goes back to RGB, but on first standby and wake it's back to YPbPr. This didn't happen in Monterey. Any ideas?

@GetVladimir
Copy link
Author

@rodogd Great, glad to hear that you got it working.

If you change the resolution, it overwrites the plist file. Set the resolution that you want to use and modify the plist file afterwards.

Once you get it working, make a backup of the working plist file so that you can easily restore it

@GetVladimir
Copy link
Author

GetVladimir commented Oct 25, 2022

@m1norgb thank you for your comment. Awesome username BTW :)

I've tested it on the public release on Ventura yesterday and the procedure still works. When the Mac goes to sleep and wakes, it seems to keep the RGB color output.

Can you check if there is a duplicate plist file in the ByHosts folder? Or are there more UUID entries that need to have the LinkDescription after waking from sleep?

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

@GetVladimir : There's no duplicate plist file in the ByHosts folder (I created one there manually, but that didn't help either, so I removed it again). The problem is the main /Library/Preferences/com.apple.windowserver.displays.plist file. Whenever the Macbook comes back from sleep, the LinkDescription section gets removed there and the monitor is back to YPbPr. That wasn't the case in Monterey.

I've now ordered a CalDigit Thunderbolt Dock and plan to connect the Macbook to the dock and the dock to the monitor via Displayport. Maybe this will finally solve the problem.

@GetVladimir
Copy link
Author

@m1norgb thank you for the update and for the details.

I'm not sure whether or not the dock will solve the issue. Let us know how it goes

@m1norgb
Copy link

m1norgb commented Oct 25, 2022

@GetVladimir I'll report back on the dock. If it doesn't solve the problem I'm going to send it back.

I just hope that Apple will soon fix this bug. Apparently it's been reported to Apple already more than a year ago.

I also wonder whether the Apple Studio Display does have this issue as well?

@gavingt
Copy link

gavingt commented Oct 30, 2022

I'm on Ventura. I've tried everything recommended here, deleting all possible duplicate plist files. I've also done a search that includes system files and found no other duplicates.

My Dell S3221QS monitor correctly displays in RGB mode at the MacOS login screen, but as soon as I log in it switches back to YPbPr. The /Library/Preferences/com.apple.windowserver.displays.plist file gets overwritten at login time.

EDIT: I got it working! The key was not to delete the ByHosts version of the file, but to modify it in the same way as the Library/Preferences file.

@GetVladimir
Copy link
Author

@gavingt Thank you so much for your comment and for the updated solution! I'm glad to hear that you got RGB color output working

@m1norgb
Copy link

m1norgb commented Oct 30, 2022

@gavingt : Is it still in RGB mode when you put your Mac to sleep and wake it again? That's where it switches back to YPbPr for me.

@GetVladimir
Copy link
Author

GetVladimir commented Oct 30, 2022

@gavingt Yes, for me on M1 Mac mini it keeps it RGB after going to sleep and wake up.

However, other users have reported that on MacBook and on Ventura 13.0 it might revert back to YPbPr after waking up.

A real fix need to be added in future Ventura updates.

A suggested workaround was either to prevent the Mac from going to sleep when the display goes to sleep, or to lock only the displays plist file in ByHost from editing, but I haven't tested this myself and I can't recommend it.

Locking it might cause issues, so please note that you'll be doing any changes fully at your own risk.

@gavingt
Copy link

gavingt commented Oct 30, 2022

@m1norgb Unfortunately, it did revert to YPbPr upon waking from sleep.

@xilopaint
Copy link

Hey @GetVladimir, I'm thinking about purchasing this monitor. Could you tell me if I would have any problem getting it to work on macOS Ventura?

@GetVladimir
Copy link
Author

@xilopaint thank you for your question.

From what I could find from the LC49RG90SSLXZD model number, it seems to be an Ultrawide 1440p resolution 144Hz monitor.

While this resolution might be great for gaming, it's very likely for macOS to have scaling, font clarity and refresh issues with it.

However, this is just based on the technical specifications I could find. I haven't used or tested this monitor myself, so I can't really tell how well it will work

@xilopaint
Copy link

@GetVladimir thanks for your fast reply! As you understand I would need this "Force RGB" hack to make it working on macOS Ventura and the new MacBook Pro M2?

@GetVladimir
Copy link
Author

@xilopaint you're very welcome, glad if it helps.

Yes, you will need that if you use HDMI-to-HDMI connection or a dock/adapter.

If you use an USB-C to DisplayPort cable, you might not need to make any modifications

@xilopaint
Copy link

xilopaint commented Nov 2, 2022

@GetVladimir my MacBook Pro M2 doesn't have HDMI ports, only two thunderbolt/USB-C ports so I have this hub. Will I need the hack if I use it with a HDMI cable?

@GetVladimir
Copy link
Author

@xilopaint Yes, if you use HDMI and a dock, it's very likely M2 will not recognize it properly and you'll need to force RGB color output manually

@xilopaint
Copy link

@GetVladimir the reason why I need a big monitor is for day trading (good resolution to avoid eye strain and more space for multiple charts) so before purchasing such a pricey monitor I just want to make sure I won't have any big issues with my M2 Mac that I can't fix. What's your opinion?

@GetVladimir
Copy link
Author

@xilopaint If static text is important to you, you're probably better off looking for a 4K resolution monitor that can scale properly with HiDPI.

As to which specific monitor to recommend, it would be better to ask other users or check reputable online reviews that have personal experience with them.

@xilopaint
Copy link

@GetVladimir at the moment I have two old 23" 1920 x 1080 @ 60 Hz monitors. Do you think the text will look worse in this pricey 49" 5,120 x 1,440 @ 120 Hz than it looks in my old monitors?

@GetVladimir
Copy link
Author

@xilopaint I don't really know that. Could be if it doesn't scale right. It's best to try it in store first if possible

@xilopaint
Copy link

@xilopaint I don't really know that. Could be if it doesn't scale right. It's best to try it in store first if possible

@GetVladimir unfortunately it's not possible as I found the monitor in an online promotion on Samsung website.

Could you just tell me if this 3 min video proves the monitor will scale properly on macOS and I won't have problems with the text looking?

Sorry for bugging btw, I'm just planing to take advantage of a nice promotion that ends today.

@ChangHyun-Yoo
Copy link

I'm now using Mac mini(M1) and One 4K monitor with USB-C to C and other one 4K monitor with HDMI to HDMI,
before update to Ventura, I can get RGB with HDMI to HDMI thanks to this write.

But after update to Ventura, I tried all PixelEncoding to 0 and all Range to 1 and even Preferences, ByHost.
But only YPbPr shown

How can i overcome this problem..?

@GetVladimir
Copy link
Author

@ChangHyun-Yoo thank you for your comment and for the details.

Other users also reported similar issue on Ventura 13.0 when using 2 monitors and when waking up from sleep.

There seems to be some bugs in macOS Ventura 13.0.

If possible, please make a backup of the working plist and try it again on Ventura 13.1 when it's released

@GetVladimir
Copy link
Author

@xilopaint If you can't try it and can't find other users/reviews with that specific model, it's best not to buy it. Seems like looking for trouble. The choice and risk is ofcourse yours

@xilopaint
Copy link

@GetVladimir in my country we have a 7-day guarantee to cancel any purchase made online and return the product. I just asked if the YouTube video I linked seems to address the scaling issue you talked about. I have very poor knowledge about displays. :(

@somogyi-ede
Copy link

somogyi-ede commented Nov 15, 2022

Hello @GetVladimir, once again I confirm that the solution for macOS Ventura works, tested on two separate Dell monitors, one HDMI and one USB-C. Kudos and thank you!

@GetVladimir
Copy link
Author

@somogyi-ede Thank you so much for testing this and for the confirmation that it works on macOS Ventura too!

@jackson-57
Copy link

jackson-57 commented Nov 16, 2022

I may be wrong, but it seems as if the issue might be properly fixed in the latest macOS Ventura patch (as in, no workarounds needed). I tried plugging my laptop into a DVI monitor I've never used before and it worked immediately. I tried two more HDMI monitors (one of which I had modified the plist for) and RGB mode seemed to persist across display setting changes.

@GetVladimir
Copy link
Author

GetVladimir commented Nov 16, 2022

@jackson-57 Thank you so much for the update.

From my testing, I did a clean install on Ventura 13.0 and updated to 13.0.1, but the issue with HDMI doesn't seem to be fixed. It still requires the displays plist modifications.

That being said, DVI only seems to support RGB color, so it might be forcing the Mac to output properly to it.

When you connected the Mac again after the DVI to an HDMI monitor, you might have achieved the Dual-cable method to Force RGB Color on M1 Mac described here: https://gist.github.com/GetVladimir/ed6b7daa09b1092608fee82fd0559098

Let me know if that is the case

@jackson-57
Copy link

I'm not exactly sure what's going on, but I don't think the dual-cable workaround is at play. I only had one external display connected at a time to my MacBook Air, and whether or not I unplugged my USB-C hub between tests didn't seem to change anything.

I deleted the plist files and restarted, and tested everything again. It seems to always work on my 1080p HDMI monitor, but not on my 4K HDMI monitor. If I set the 4K monitor to 30hz, it uses RGB mode. I then retested the plist workaround (which thankfully is working again), so I imagine the reason the 4K monitor worked initially was that I had the plist modified. As for why my 1080p monitor works, I have no idea, maybe it uses DVI internally?

I know that previously, one DVI monitor I tested refused to work at all on 13.0 unless I messed with the plist, which got promptly reverted the moment the machine went to sleep. I haven't had the opportunity to test with that monitor on 13.0.1. My other DVI monitor seems to work perfectly, but I don't know if it worked on 13.0, because I never tested it. I'll have to check tomorrow whether both DVI monitors are working properly on 13.0.1.

Thank you for looking into this. It's definitely a confusing problem.

@GetVladimir
Copy link
Author

@jackson-57 thank you for the detailed explanation. That is indeed interesting.

There might be some older monitors that don't have support for YCbCr color at all, so that might also force the M1 Mac to output properly in RGB color.

Let us know if you find out what exactly is causing this, or if you need anything tested on another setup.

Either way, great find and thank you so much for sharing this.

@csergiu
Copy link

csergiu commented Nov 16, 2022

Thanks so much for this! The difference is night and day.

@GetVladimir
Copy link
Author

@csergiu you're very welcome! Thank you so much for your comment and glad to hear that you got RGB color output working

@ahuse
Copy link

ahuse commented Nov 17, 2022

I can sadly confirm, the editing of the plists worked for me (M1 MacBook Air, Dell P3421W) until i recently updated to Ventura. Now it is resetting the plist every time i plug in my USB-C cable. I have to copy the modified plist to /Library/Preferences and reboot to restore RGB.

Has anyone tested 13.1 Beta?

@GetVladimir
Copy link
Author

@ahuse thank you for your comment.

Yes, other users also reported that the plist gets deleted after waking from sleep on Ventura 13.0.1

It seems to affect Macs that don't have/don't use the built-in HDMI port.

The workaround at the moment is to create a backup of the working displays plist so that you can easily restore it, and to disable sleep (which is not ideal)

We'll see if it gets fixed in the next macOS update

@somogyi-ede
Copy link

somogyi-ede commented Nov 17, 2022

Hello @GetVladimir, @ahuse,
as I mentioned in my previous comment, it used to work for me initially as well, but I just noticed that it did indeed revert to YCbCr after waking from sleep/restarting.
Unfortunately it does affect the built-in HDMI ports as well as the monitor in question is connected via HDMI to an M1 Mac Mini. (I also have another monitor connected via the USB-C port, that one continues to be fine). None of the monitors have been disconnected physically, the only change that happened on my end was a couple of sleeps / restarts.

I have to mention that I didn't immediately notice that the monitor was reverted to YCbCr as it looks pretty much the same, no immediately visible artifacts on my end (aside from font smoothing, which sucks on macOS anyway and it doesn't seem to look better on RGB either).

I'm on Ventura 13.0.1.

@GetVladimir
Copy link
Author

@somogyi-ede Thank you for the update and the details.

I can't seem to replicate the issue on my end with an HDMI-to-HDMI connection on M1 Mac mini and Ventura 13.0.1

It seems to continue outputting in RGB color even after sleep/wake and restart.

I only have one modified displays plist file in /Library/Preferences and use only one monitor

@jackson-57
Copy link

I was able to test with my first DVI monitor (the one requiring plist editing on 13.0). On 13.0.1, it still doesn't work without plist editing, and the changes still don't persist properly. I think I jumped to conclusions too soon when I suggested that 13.0.1 fixed the problem, because now that I've tested more monitors, 13.0.1's behavior doesn't seem to be any different than 13.0, as far as I can tell. At least one takeaway from my testing is that not all monitors are affected by the issue. It doesn't seem to matter whether the monitor is using HDMI or DVI, some work and some don't. Same goes with whether the plist changes persist. As an example, I applied the fix just once to my 4K monitor, and it's kept working across reboots and sleep.

I do however have a potential workaround for the plist getting overwritten. I don't know if this works for all affected monitors (and it might not be practical in some scenarios), but what has worked for me is unplugging my monitor (or USB-C hub) before I close the lid on my laptop. That way, after the laptop resumes from sleep, I can just plug the monitor back in and it'll work.

I hope I haven't confused anyone too much with all of this! I'm certainly looking forward to a proper fix from Apple.

@GetVladimir
Copy link
Author

@jackson-57 thank you so much for testing this in detail and for the results!

Also, great find regarding removing the monitor/dock before sleep to prevent the plist overwriting on Ventura. This could help in finding a more persistent workaround

@csergiu
Copy link

csergiu commented Nov 19, 2022

Hmm, it seems that if I disconnect the cable (USB-C <-> USB-C), and then plug it back in, it resets to YPbPr and I have to edit the plist file again. Anyone have any idea how to force it to stay in RGB? I'm on Monterey 12.4. Thanks!

@GetVladimir
Copy link
Author

@csergiu thank you for your comment.

As a workaround, you can make a backup of the working displays plist file, so that you can restore it more easily when needed.

You can also check if it assigns a different UUID each time you connect the cable, which might also be causing the issue

@xilopaint
Copy link

Hey @GetVladimir I just received my new monitor. How can I check if my M2 Mac is outputting RGB color to the monitor?

@GetVladimir
Copy link
Author

GetVladimir commented Nov 19, 2022

@xilopaint thank you for the question and congrats on the new Mac!

The most reliable way is if there is a On-Screen Display menu (OSD) on the monitor itself where it shows the color output.

If it doesn't have the feature, then you can also tell from your Mac by going into Settings > Display and check the Color profile drop-down menu.

When you open the drop-down menu, if there is a color profile with the name starting with SD 170M-A close to the very top of the list, then your Mac is most likely outputting YCbCr color.

If the SD 170M-A profile is all the way down on the list, then it's most likely outputting correctly in RGB color.

@xilopaint
Copy link

xilopaint commented Nov 19, 2022

When you open the drop-down menu, if there is a color profile with the name starting with SD7xxx close to the very top of the list, then your Mac is most likely outputting YCbCr color.

@GetVladimir the first option is my monitor's model name and the second one is SD 170M-A. What does it indicate?

@GetVladimir
Copy link
Author

@xilopaint thanks for checking. Yes, that means it outputs in YCbCr color.

When the Mac outputs RGB color, you will just see the monitor name on top above the line. The SD 170M-A color profile will be way down on the list.

I'll update the correct name in the original comment.

@xilopaint
Copy link

@GetVladimir choosing Generic RGB Profile is not enough for fixing the issue?

@GetVladimir
Copy link
Author

@xilopaint good question. That only changes the color profile, but not the actual color output of the Mac. It still outputs in YCbCr even if you select that profile. The colors might be even less accurate in that case

@xilopaint
Copy link

@GetVladimir now I see I don't have the SD 170M-A option if I choose 100Hz as refresh rate instead of 120 Hz. Also, the colors seem to improve. Is there any other way (maybe some file I can check) to make sure my Mac outputs RGB using 100 Hz? I don't see anything like that on the display's built-in menu.

@GetVladimir
Copy link
Author

@xilopaint it's very likely that your Mac outputs in RGB color when you no longer see the SD 170M-A profile near the top. You can also notice the color difference right away, as you've said.

Except those 2 ways, there is no other easy method (that I know of) that confirms RGB color output

@xilopaint
Copy link

@GetVladimir ok, I think I feel comfortable with the colors now. Thanks for all the the fast and kind answers!

@GetVladimir
Copy link
Author

@xilopaint not a problem, glad if it helps and I'm happy to hear that you got RGB color output working

@sarabveer
Copy link

sarabveer commented Nov 20, 2022

Currently on Ventura 13.0.1. I tested my Dell S2721QS with a USB-C to DP cable. It defaults to 60Hz (not Variable which causes flickering) and the color mode shows RGB in the OSD. Seems like the issue has been fixed.

@GetVladimir
Copy link
Author

@sarabveer Awesome, thank you for the details and for the confirmation that RGB color output works on Ventura 13.0.1 with USB-C to DisplayPort cable

@skorphil
Copy link

Ventura 13.0 + Macbook Air 2020 M1 + DELL S2722QC + USB-C cable

You might need to make a backup and delete these 2 files:
/Library/Preferences/com.apple.windowserver.displays.plist
and
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Not working. After restart i still get ycbcr input format in monitor OCD and default of 40-60hz in monitor settings in MacOs

@GetVladimir
Copy link
Author

@skorphil Thank you for your comment and the info.

Could you tell me more about the connection? Is it a direct USB-C to USB-C cable or are there any docks/adapters?

@skorphil
Copy link

@skorphil Thank you for your comment and the info.

Could you tell me more about the connection? Is it a direct USB-C to USB-C cable or are there any docks/adapters?

It’s a direct connection usb-c to usb-c cable. This connection also used for charging macbook via monitor and to communicate with stuff connected to usb port inside monitor

@skorphil
Copy link

skorphil commented Nov 23, 2022

@GetVladimir i don't know the major reason why i were able to set up RGB mode, but it seems like setting up USB(in monitor OSD) to prioritise "high resolution" over "high speed data transfer" allowed my MBA M1 to use RGB mode.

So now i have RGB mode selected in monitor OSD, but i sacrificed the speed of usb ports in my monitor - now they are usb 2.0 instead of 3.1

My hypothesis is that usb-c connection is not ideal and there is not enough bandwidth to transfer RGB and data(usb 3.1) simultaneously. And ycbcr use less bandwidth than RGB

@GetVladimir
Copy link
Author

@skorphil thank you so much for the update and the details regarding the solution.

So when selecting to prioritize High Resolution on the OSD of the monitor, it allows for RGB color output over USB-C to USB-C cable.

Otherwise, if high speed data transfer is selected, it compression the color output to YCbCr instead.

That is very interesting and it kinda makes sense. Good to know there is a solution for that specific monitor.

Thanks again for your comment and I'm glad to hear that you got RGB color output working

@skorphil
Copy link

skorphil commented Nov 23, 2022

@GetVladimir thank you for creating and maintaining this space. Seems like it's the largest collection of information regarding to this issue with YCBCr. I had problems with flickering and noisy image on some yellowish colors(Night shift mode on mac or warm preset on monitor) and now they are solved with rgb mode. This page helped a lot.

I checked one more time - ycbcr used with "high speed data transfer" mode and rgb - with "high resolution" mode.

I'm wondering why ycbcr have such bad quality... seems like bug. I believed ycbcr is like more "advanced" way to transfer video data and surprised it is performing worse than old rgb. Is it just bad Dell's implementation

UPD: Nah, my Dell monitor still flicker sometimes during night shift (at particular temperature), but anyway its much better with RGB. For future me - don't buy dell monitors anymore! )

@GetVladimir
Copy link
Author

@skorphil thank you so much! I'm glad if it's useful

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir I have a monitor Gigabyte m28u which supports 4K 144Hz, and my MacBook is 2015 pro 13 inch which supports 4K 60Hz through a mini dp to dp cable.

But when I use m28u as my external monitor, I only get 4K 24Hz(by mini dp to dp cable), and 4K 30Hz(by Hdmi to Hdmi cable) . The monitor was recognized as a 61 inch monitor when connected by mini dp to dp cable.

I follow your method in youtube ("color on M1 Mac") and try to modify the resolution and refresh rate in com.apple.windowserver.plist(I can only find this file in Catalina 10.15.7 while ......displays.plist doesn't exist). But after the modifications and reboot, I found nothing changed and the resolution and refresh rate in the file of com.apple.windowserver.plist recovered to before.

I also tried the method in patch-edid.md, it indeed changed, but made my resolution to only 1920*1080 FHD. I had tried many ways to recover from that resolution but all failed. Then I had to recover the system using TimeMachine.

Would you like to tell me have to fix the resolution and refresh rate to 4K 60Hz when I connect macbook to my monitor? Many thanks.

@GetVladimir
Copy link
Author

@kadepig thank you for your comment.

Please note that this works only on M1/M2 based Macs. The plist file is not being generated on x86 based Macs and the EDID patch with displays override works better for them.

Regarding your specific use case, you might want to try a different cable or try installing macOS Mojave, which had support for a bit more devices that were later removed from macOS.

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir Thanks for your reply.

I try a lot of cables(mini dp to dp) as well as macOS higher than Catalina, and all get the same results.

Is there a solution by modified the certain system files which can determine the real resolution and refresh rates?

Thanks for your suggust of macOS Mojave, I'll try that.

@GetVladimir
Copy link
Author

@kadepig not a problem, glad if it helps.

Only the display override files seems to work for x86 Macs. I'm don't know if any other system files can be modified to make better changes.

Are you certain that the MacBook supports 4K 60Hz? I know that the Mac mini late 2014 doesn't seem to support more than 4K 30Hz with similar specifications.

If you can test also, it might be worth to try installing Windows via Bootcamp, just to check if it can detect and drive the monitor at 4K 60Hz

@kadepig
Copy link

kadepig commented Dec 6, 2022

@GetVladimir Thanks for your kind help.

I saw some posts about macbook 2015 pro, and they said it support 3840x2160 @ 60 Hz via a mini dp to dp cable or up to 4K 30Hz via hdmi to hdmi cable.

see:
https://apple.stackexchange.com/questions/314891/can-i-do-4k60hz-with-my-early-2015-macbook-pro-retina
and https://forums.macrumors.com/threads/enable-4k-60hz-on-2015-macbook-pro-13.1991196/

My specific case is that the resolution is only up to 4K 24Hz via mini dp to dp which refresh rate is even less than that via hdmi to hdmi cable. It's very strange, and I think this is due to the poor compatibility of the monitor m28u with old macbook.

I'll take your advise and see whether win10 via Bootcamp can support 4K 60Hz.

@GetVladimir
Copy link
Author

@kadepig you're very welcome. Thank you for the reply and for the details.

Let us know how it goes with Bootcamp if you try it.

Also, please check on your Monitor's built-in menu if you need to enable DisplayPort 1.4 manually (in case it's set to an older DisplayPort version for compatibility).

Another alternative would be to try MiniDP-to-HDMI cable instead

@joevt
Copy link

joevt commented Dec 7, 2022

@kadepig use AllRez to determine if the connection to the display is a full HBR2 x4 instead of HBR2 x2.
https://github.com/joevt/AllRez (for Intel Macs)
zip the result and attach to a post.
Depending on the results, a solution might be to connect a DisplayPort 1.4 MST hub between the Mac and the display.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir I installed macOS Mojave, and found the resolution and refresh rate was the same as before 3840*2160(UI Looks like: 1920 x 1080 @ 24 Hz), and it took a long time to recovery by Time machine. And I will try Bootcamp soon.

I tried MiniDP-to-HDMI cable before, and it was all the same as the HDMI to HDMI one.

My monitor have the options for Type-C compatibility(on or off) and HDMI Version(2.1 or 2.0), but I don't find an option for DisplayPort compatibility.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@joevt Thanks for your help.

I don't know how to use AllRez, and just double clicked it, then it run in the terminal. I copied the text result to a text file, and zip it, but it can't be attached to the post for it only supports GIF, JPEG, JPG,MOV......

So I Forked from your githubjoevt/AllRez and upload it as a file. Please see the link below

https://github.com/kadepig/AllRez/blob/e051729d615d92f9368a0d4548108ba8d0728de7/AllRezResult.txt.zip

The result is too long, and thanks for your reading.

@GetVladimir
Copy link
Author

GetVladimir commented Dec 7, 2022

@joevt thank you so much for the suggestion and for the app! This is pretty useful.

@kadepig thanks for the update and the info on Mojave and MiniDP-to-HDMI.

Let us know how it goes with the suggestion from @joevt or with Bootcamp if you decide to test it

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir Thanks. I now try to use "windows to go" to install win10 on an external u disk, so that the disk of my mac won't be changed. However it will takes a long time to create windows to go usb drive.

@joevt Thanks for the advise. Would you like to tell me what is "a DisplayPort 1.4 MST hub"? Does the hub contains HDMI or mini DP port in one side when having DP 1.4 male port in the other side? And I have tried the mini DP to DP 1.4 cables which gives the same resolution 4K and 24Hz before.

@kadepig
Copy link

kadepig commented Dec 7, 2022

@GetVladimir I just installed win10, via mini dp to dp cable, win10 supports up to 4K 60Hz, and via hdmi to hdmi, up to 4K 30Hz.

It seems the macOS can't recognize the right information of the monitor via mini dp to dp cable.

@GetVladimir
Copy link
Author

@kadepig that is awesome! Thanks for the info and good to know that it supports 4K 60Hz.

macOS always seemed to have issues with detecting monitors properly and setting the correct color output, resolution and refresh rate.

If they can't get it to work, they should just allow all this to be set manually in the System Settings, without arbitrary restrictions

@joevt
Copy link

joevt commented Dec 8, 2022

@kadepig I don't think an MST hub will help in your case since the display is accepting 4 lanes of HBR2 which should be sufficient for 4K60.

The AllRez output shows two displays connected to your Intel MacBook Pro 2015.

Monitor[0] is the built-in display (DisplayVendorID, DisplayProductID, DisplayProductName), it has dimensions (dims) 2560x1600, is 60Hz with pixel clock 268.500MHz (DetailedTimingInformation), and connects as HBR (LINK_BW_SET) x4 (LANE_COUNT_SET). The connector doesn't have timing limits (Hz and kHz are unbounded IOFBTimingRange) except pixel clock max is 348MHz. The Intel GPU (Monitor[0] path) doesn't support DSC (IOFBTimingRange).

Monitor[1] is the GIGABYTE M28U. It has:
macOS accepted scaled modes up to 6720x3780.
macOS accepted resolutions up to 3840x2160 (look at the (not scaled) modes)
macOS accepted refresh rates up to 143.853Hz for 1920x1080 (326.62 MHz).
macOS accepted refresh rates up to 119.879Hz for 2560x1440 (486.29 MHz).
macOS accepted refresh rates up to 24Hz for 3840x2160 (297 MHz which is a HDMI 1.4 timing). This is a problem.
None of the modes use DSC since the Intel GPU doesn't support DSC.

The display is connected with HBR2 x4 using 2560x1440@119.875Hz. It supports HBR3 (02201h MAX_LINK_RATE).
It has DSC support with all the color formats and bits per component, 8 slices at 340 Mp/s = 2720MHz possible and 2560 pixels per slice = 20K width. DSC_MAX_BITS_PER_PIXEL is 0. Maybe that means there's bpp limit? macOS usually always uses 12bpp for DSC.
IOFBTimingRange says the connector supports up to 540MHz pixel clock (normal for Intel DisplayPort 1.2 GPUs). A 4 lane HBR2 connection should support up to 720MHz for 8bpc and 576MHz for 10bpc but 540MHz should be sufficient for 4K60 using CVT-RB timing (533MHz).

edid-decode can be used to decode the EDID (IODisplayEDIDOriginal).

One problem I see in the EDID is that the 3840x2160@60Hz mode uses a pixel clock of 567MHz. To achieve 4K60 for this display connected to an Intel DisplayPort 1.2 GPU in macOS, you'll need to use SwitchResX to create a custom timing that macOS and the Intel GPU will accept (use CVT-RB timing). I don't think 567MHz should be a problem for Apple Silicon Macs since those support HBR3.

EDID says the max refresh is 144Hz and the max pixel clock is 1340 MHz. It says the min & max horizontal refresh rate is 246kHz which needs to be ignored. Hopefully macOS is ignoring this. SwitchResX has options to override the ranges.

The EDID has 144MHz modes for 1080p (326.62Mhz), 1440p (594.88MHz), and 4K (324kHz, 1270.08MHz).

It's got VRR from 48 to 144Hz. If you have a GPU that supports VRR on macOS, then you should see a VRR option for any accepted resolution that has an accepted 144Hz refresh rate. macOS won't let you use VRR for a mode that has a max refresh rate that is less than the max VRR refresh rate.

Besides the Detailed Timings (already discussed), Established Timings, and Standard Timings, the display also has these CTA-861 timings:

    VIC   3:   720x480    59.940060 Hz  16:9     31.469 kHz     27.000000 MHz
    VIC   4:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz
    VIC  47:  1280x720   120.000000 Hz  16:9     90.000 kHz    148.500000 MHz
    VIC  16:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz
    VIC  63:  1920x1080  120.000000 Hz  16:9    135.000 kHz    297.000000 MHz
    VIC  97:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz
    VIC 118:  3840x2160  120.000000 Hz  16:9    270.000 kHz   1188.000000 MHz
    VIC  93:  3840x2160   24.000000 Hz  16:9     54.000 kHz    297.000000 MHz
    VIC  32:  1920x1080   24.000000 Hz  16:9     27.000 kHz     74.250000 MHz

So you see where the 4K 24Hz option is coming from. It's the only 4K timing with a pixel clock less than the 540MHz accepted by the macOS Intel GPU driver for your MacBook Pro 2015.

@kadepig
Copy link

kadepig commented Dec 8, 2022

@GetVladimir Thanks! I total agree with you that macOS should not set so many restrictions to an external monitor.

@kadepig
Copy link

kadepig commented Dec 8, 2022

@joevt Many Thanks!

AllRez is so powerful that all the information about compatibility between M28u and MacBook is output! Thanks for your careful reading!

I just download the SwitchResX app, and try to create a custom resolution with 38402160 and UI look likes 19201080 @ 60Hz scaled. Would you like to tell me whether the options "Use simplified settings" and "Interlaced" should be selected? Before reboot, I saved from "File"-"save settings", but the status is "Not installed". I don't know why and after reboot, I can't see HiDP 1920*1080 on the "Current Resolutions".

image

image

@kadepig
Copy link

kadepig commented Dec 8, 2022

@joevt I find the status of the custom resolutions is always "not installed". After I click "Activate immediately", it said "Display configuration modified.......All unsaved preferences are thus invalid and have been discarded." I have tried SwitchResX 4.12.2 and 4.10.0.

image

@joevt
Copy link

joevt commented Dec 9, 2022

@kadepig Your settings look correct for the custom resolution. Interlaced is for old TVs. CVT-RB is usually correct for LCDs. GTF is for old CRTs. CVT is also mostly for CRTs. Did you register SwithResX? If not then you may be limited in the number of resolutions you can add. You don't need the scaled modes for now. Just include your custom 3840x2160@60Hz timing. Instead of Activate Immediately you can try just disconnecting and reconnecting the display.

@kadepig
Copy link

kadepig commented Dec 10, 2022

@joevt Thanks for the setup guide and advise.

I use the unregistered SwitchResX. After I deleted all the other custom setting except the 3840x2160@60Hz timing, I disconnected and reconnected the display by replug the cable, and it still reminded me "Display configuration modified. ....been discarded". I also disabled SIP or rebooted, but the status was always "Not installed". Is the version of app(above 4.10.0) not compatible with macOS 10.15.7 or Intel64?

@joevt
Copy link

joevt commented Dec 10, 2022

I think 4.10.0 should be fine, but you can easily replace it with the latest 4.12.2. Maybe quit SwitchResX. Then go to /Library/Displays/Contents/Resources/Overrides to delete the overrides for the 1c54 / 2800 product. Then try SwitchResX again.

@kadepig
Copy link

kadepig commented Dec 10, 2022

@joevt Thanks so much!

I deleted all setup about M28U before, and recovered everything from SwitchResX, then reinstalled the latest version 4.12.2 with helper tool. Finally the 4K 60Hz works greatly with custom resolution of SwitchResX.

@GetVladimir
Many thanks for You and joevt have spent a lot of time to help me. Words cannot express my gratitude and appreciation to you!

@GetVladimir
Copy link
Author

@kadepig that is awesome! Glad to hear that you got 4K 60Hz working.

Thank you for the comment and thanks goes to @joevt for the solution

@changrui0608
Copy link

changrui0608 commented Dec 12, 2022

Update:
I did two things, it's now RGB, not sure which one really makes the sense:

  1. Removed the "MonitorControl" (an application can control monitor's brightness and contrast ratio, may using DDC/CI or something like that). After remove the "MonitorControl", it seems like /Library/Preferences/com.apple.windowserver.displays.plist is not overwritten anymore.
  2. I found that the effect file for me is the /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist, I edited the file and restart, now it's RGB.

I'm on Ventura. I've tried everything recommended here, deleting all possible duplicate plist files. I've also done a search that includes system files and found no other duplicates.

My Dell S3221QS monitor correctly displays in RGB mode at the MacOS login screen, but as soon as I log in it switches back to YPbPr. The /Library/Preferences/com.apple.windowserver.displays.plist file gets overwritten at login time.

EDIT: I got it working! The key was not to delete the ByHosts version of the file, but to modify it in the same way as the Library/Preferences file.

I have exactly the same issue, RGB before login and YCrBr after login, but the "modify it in the same way" method not working for me, The main /Library/Preferences file still gets overwritten.
I also tried remove these files in ~/Library/Preferences and ~/Library/Preferences/ByHost, still not working.

Any ideas?
MacBook Air M1 2020 + macOS Ventura 13.0.1 + Dell SE3223Q (should similar to S3221QS)

@GetVladimir
Copy link
Author

@raaay0608 thank you for your comment.

If there is something that changes the resolution or connection after login (like the dock), it might overwrite the plist file.

Focus on the displays plist file located in the ByHosts folder. This is the one that affects the color output after login.

Try again to delete it or to modify it and see if it makes any changes

@changrui0608
Copy link

Provides some information here:

I seek methods to force RGB, to find out if it's the YCbCr mode makes my monitor flickering on dark scenes:

The result for me was no, it still flickering under RGB, but the flickering happens on different scenes, also it seems RGB flickering milder than YCbCr, the YCbCr sometimes flicking dramatically.

I also find a interesting thing that the RGB / YCbCr do affects colors. Under RGB, the color profile with my monitor's name ("SE3223Q") shows same color with the "Color LCD" profile, but they are different under YCbCr.

I'm still seeking for solution about the dark scenes flicking. I would appreciate notifying me for any new information here about the flickering problem.

Also, thanks for creating and maintaining this space, it's really helpful.

@GetVladimir
Copy link
Author

@raaay0608 thank you for the additional details and update, and I'm glad that you got RGB color output working.

Regarding the flickering, I'm not sure what is the cause of it.

It will be interesting to see if we can install another OS on the M1/M2 based Macs like ChromeOS/Linux/Windows Arm in the future and see if they solve the issues. This will give us more info on whether it's a hardware or macOS issue

@Viktor-Osika
Copy link

Any solution for colors getting reset to ycbcr after waking up from sleep yet? Using usb-c to displayport cable and modified plist files.
Regretting the update to Ventura...

@GetVladimir
Copy link
Author

@Viktor-Osika Thank you for the question.

The bug is still there on macOS Ventura 13.0.1, but there is a new 13.1 update that should be released this week.

@Viktor-Osika
Copy link

@GetVladimir no luck with 13.1 unfortunately

@GetVladimir
Copy link
Author

@Viktor-Osika thank you for checking with the update and for the confirmation that it's not fixed

@syifan
Copy link

syifan commented Dec 19, 2022

@GetVladimir I can also confirm that the solution does not work for 13.1.

@GetVladimir
Copy link
Author

@syifan The solution still seems to work on macOS 13.1, at least for M1 Mac mini and HDMI-to-HDMI connections.

The issue is when waking up from sleep on some devices, especially when connected via a dock.

Could you post more details about your connection and on which device?

@syifan
Copy link

syifan commented Dec 20, 2022

I have M1 Mac Mini and a Dell U2713H, directly connecting using an HDMI-to-HDMI connection.

I can briefly get RGB mode to work. But whenever I change anything small in the display setting, the windoeserver plist file entry is updated back to the state without LinkDescription.

Waiting for a solution to this problem.

@GetVladimir
Copy link
Author

@syifan thanks for the update and the details! I'm glad to hear that you got RGB color output working on the M1 Mac mini.

That is correct. If you change the resolution from the Settings, it overwrites the plist file.

A workaround for this is to create a backup of the working display plist file, so that you can restore it easily if needed

@syifan
Copy link

syifan commented Dec 20, 2022

@GetVladimir What is even more annoying is that the color mode will change back if I turn off the display and turn it back on. Only restarting will fix it.

@GetVladimir
Copy link
Author

@syifan Yes, that is indeed a bug since macOS Ventura. It hasn't been fixed with 13.1 either.

What would be best is if the monitor support works out of the box in macOS, so that we don't need to jump through hoops and modify plist files just to make RGB color output working

@op0815
Copy link

op0815 commented Dec 27, 2022

Hi,
I am using a MacBook Pro M1 with an (old) 27" Monitor (Acer K272HUL), macOS Ventura 13.0.1.
I have tried to add the above section (LinkDescription …) to my com.apple.windowserver.displays.plist to force the output to RGB.
But: After restart the lines just disappear and the output i still flat.
Is there a solution?

@GetVladimir
Copy link
Author

@op0815 thank you for your question and the details.

Yes, there are a few things you can try:

  • Please make sure to use a plain text editor to make the changes. If you don't have have one, you can use the free, open source CotEditor, that's available on the Mac App Store: https://apps.apple.com/us/app/coteditor/id1024640650?mt=12
  • Try to edit both the plist file in:
    /Library/Preferences/com.apple.windowserver.displays.plist
    and in
    /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist
  • Use a direct USB-C to DisplayPort or USB-C to HDMI cable from the MacBook to the monitor. Avoid using a dock, hub or adapters
  • Update to macOS 13.1, just to be on the latest version

Let us know how it goes or if you have any additional questions.

Wish you a Merry Christmas and Happy New Year holidays!

@op0815
Copy link

op0815 commented Dec 27, 2022

@GetVladimir thank for your tips.

But: Did not work …

  • I am using BBedit
  • I have edited both files, after the restart (after the update) only the file in the ByHost-folder contained the "LinkDescription"-section, the one in the /Library/Preferences/ this section "disappeared" again
  • the monitor is connected by a HDMI cable, I have tried USB-C to HDMI (unfortunately: with Adapter): the monitor "says": No Signal
  • I have updated to macOS 13.1

Merry Christmas and Happy New Year to you too!

@GetVladimir
Copy link
Author

@op0815 Thank you :) Also, thanks for the update and the details.

Something seems to be overwriting the plist file on boot. Do you have any apps installed that might be changing the resolution or something similar?

@op0815
Copy link

op0815 commented Dec 28, 2022

@GetVladimir I hope: No. (I had installed SwitchResX: I uninstalled this app some days ago)

Now: After today's restart the /Library/Preferences/ contained the "LinkDescription"-section and the result seems OK
Although: the modification date of the file com.apple.windowserver.displays.plist was set to boot-time …

@GetVladimir
Copy link
Author

@op0815 Awesome! Thanks for the update and I'm glad to hear that you got RGB color output working

@simprince
Copy link

simprince commented Jan 4, 2023

It doesn't work for me on Ventura 13.1. After I put the modified file back to the Preferences/ folder and re-plug my monitor, the system overrides the file (I can tell from the new timestamp of the file). Then if I open the new file, the LinkedDescription section is completely gone.

Context: I am connecting my MBP 16" to two identical Dell U3014 monitors. One of them works and the other one doesn't. If I switch ports, the monitor that works doesn't work.

UPDATE: I change the broken monitor's cable from HDMI-HDMI to DP-USBC so that I connect both monitors to MBP with DP-USBC and it works without any overrides.

@GetVladimir
Copy link
Author

@simprince thank you for your comment and for the updated solution! I'm glad to hear that you got RGB color output working on both monitors

@fecabianchi
Copy link

@GetVladimir you can get RGB with USBC-HDMI cable or is fixed only with USBC-DP?

@GetVladimir
Copy link
Author

@fecabianchi only the USB-C to DisplayPort cable seems to work without the need to modify the plist files

@yackinn
Copy link

yackinn commented Jan 12, 2023

Using usb-c to hdmi (Samsung TV) and mDP to DisplayPort (4k Dell Monitor via dock) outputs non-rgb mode on the TV.
When the Dell Monitor is unplugged the TV outputs rgb correctly.

When I change the plist file and restart it works fine until the Dell Monitor is turned on. The plist file changes will revert and the rghb mode on the TV won't work.

Does anyone has a similar issue and a potential solution?

@GetVladimir
Copy link
Author

@yackinn thank you for the comment and the details.

There seems to be an issue with macOS 13.1 that overwrites the plist files when waking up from sleep or connecting/turning on a monitor after the Mac powers on.

The workaround is to get a USB-C to DisplayPort cable (without using a dock) for the monitor.

The other alternative at the moment is to keep a backup of the working display plist files and restore them as needed.

@yackinn
Copy link

yackinn commented Jan 12, 2023

Thanks for your response.

That's the current setup:
Monitor 1: Samsung 4k TV (only HDMI available)
Monitor 2: Dell UP2715KT (only mDP available when used in 4k mode)

What would you suggest how to connect both monitors?
USB-C wouldn't be possible as there's no matching port on the monitors.

@GetVladimir
Copy link
Author

GetVladimir commented Jan 12, 2023

@yackinn Thanks for the reply.

Are you using a Mac mini or MacBook?

If you're using a Mac mini, you can use an HDMI-to-HDMI cable for the Samsung TV and USB-C-to-miniDisplayPort for the Dell Monitor.

You might still need to modify the plist files.

If you already have an USB-C-to-HDMI cable, you can use that for the Samsung TV instead of the HDMI-to-HDMI.

This will occupy both USB-C ports on the Mac mini though.

@yackinn
Copy link

yackinn commented Jan 12, 2023

I tried to do that.

Using usb-c to hdmi (directly connected from Macbook to Samsung TV) also doesn't work if the Dell Monitor is connected as well.
I'm not sure why the rgb mode only works if the Dell Monitor is not connected.

Do you have an idea if it might get fixed so the plist file won't get overridden on startup?

@GetVladimir
Copy link
Author

@yackinn If you're using an M1 MacBook, I think it only can support 1 external display with full 4K60 RGB resolution.

Connecting more than 1 external display will limit the bandwidth or just not work properly.

Source: https://support.apple.com/en-ie/HT202351

@yackinn
Copy link

yackinn commented Jan 12, 2023

That's odd. It used to work before I updated to Ventura though.

@GetVladimir
Copy link
Author

@yackinn there does seem to be some issues with macOS 13.1.

If you had it working before, there is a chance it might work in a future update.

Their official specification is that it only allows for 1 external displays. The dock that you use however perhaps provides its own display output

@cyan-gorilla
Copy link

cyan-gorilla commented Jan 17, 2023

Hi,
I'm on a MacStudio which I had updated recently, thus losing the modifications I had initially done last year. The way I got it to stick was by setting both files to Read Only and Locking them.

So far, so good. Thank you so much for this fix!

@GetVladimir
Copy link
Author

@cyan-gorilla thank you so much for your comment and for the solution for locking the plist file!

I'm glad to hear that you got RGB color output working properly

@ahuse
Copy link

ahuse commented Jan 19, 2023

The way I got it to stick was by setting both files to Read Only and Locking them.

This is not working for me on my MacBook Air M1. Unplugging and Re-plugging the monitor still resets the file, despite of setting all permissions to read-only.

@cyan-gorilla
Copy link

permissions to read-only.

Did you also lock it?
I don't really disconnect my main display all that often, but I do with the second one and the file hasn't changed yet (my second display is an iPad Pro).

@ahuse
Copy link

ahuse commented Jan 22, 2023

Did you also lock it? I don't really disconnect my main display all that often, but I do with the second one and the file hasn't changed yet (my second display is an iPad Pro).

Thanks. I was not aware of locking files in MacOS. Indeed the file is not changed/overwritten anymore. But the monitors is only in RGB-Mode after restarting the macbook. If i disconnect or open and close the lid it goes right back to YPBPR until restart.

For everyone having this problem. Please file a bug report with apple. The more the better.

@sobotka
Copy link

sobotka commented Jan 23, 2023

I am 80% sure that HDR mode is performing a double up encoding leading to incorrect output with HDR mode on.

It seems like the signal that is output has encoded primaries inset and the result is a lack of chroma, due to this potential double up. Setting the characterization to “Generic RGB” seems to get the results closer, but is still wrong.

Curious if anyone else has explored this error? One potential solution would be to create a device link characterization for HDR, if it can be determined where the double up encoding is happening.

@GetVladimir
Copy link
Author

@sobotka thank you for your comment and for the info.

That is an interesting finding. I don't know of a proper way to check and confirm this on my setup.

Perhaps if other users had more experience with HDR issues can confirm this or mention if there is any workaround.

@austintackaberry
Copy link

I'm on a brand new Macbook Air M2 Ventura 13.0 connecting to Dell UltraSharp 27 Monitor via USB-C. The setup was working for me for about a day without any issues or overrides.

Randomly, I started to experience this issue, and I tried the steps here (thanks for sharing) but they did not work. LinkDescription did not exist for me so I added it and also /Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist file does not exist for the UDID of my external monitor (I see the Mac screen, but not the external monitor).

When I reboot, and check the file, my changes to /Library/Preferences/com.apple.windowserver.displays.plist are gone. Anyone else encounter this?

@GetVladimir
Copy link
Author

GetVladimir commented Jan 26, 2023

@austintackaberry Thank you for your comment.

There are indeed a lot of issues with Ventura 13.0. If possible, try updating to Ventura 13.2 and this might solve your issue without the need to edit the plist files.

If you must stay on 13.0, you can try making a backup of both plist files, delete them and then reboot so that macOS can regenerate then from beginning.

@austintackaberry
Copy link

@GetVladimir Thanks for your reply! I have upgraded to Ventura 13.2 and unfortunately have the same problems.

Monitor is still YPbPr and LinkDescription does not exist for me in /Library/Preferences/com.apple.windowserver.displays.plist so I added it. And /Users/yourname/Library/Preferences/ByHost/ does not have any files for the UDID of my external monitor (I see files for the Mac screen, but not the external monitor).

I have also tried to delete /Library/Preferences/com.apple.windowserver.displays.plist and reboot, but still not working for me

@GetVladimir
Copy link
Author

@austintackaberry thanks for the update.

Check in the plist file if there are multiple UUIDs where you need to add the Link Description key. It might need to be added more than once.

Also, do you use a direct USB-C to USB-C cable to connect to your monitor, without any adapters or docks in between?

@austintackaberry
Copy link

austintackaberry commented Jan 26, 2023

Check in the plist file if there are multiple UUIDs where you need to add the Link Description key. It might need to be added more than once.

By multiple UUIDs do you mean the one UUID shown more than once? If so, then yes added the LinkDescription key and value to both. I tried connecting via a different port which I think created another UDID and then added a UDID mapping. I changed rotation to 90 and added the LinkDescription to both dicts that had the 90 rotation. Still not working

Also, do you use a direct USB-C to USB-C cable to connect to your monitor, without any adapters or docks in between?

It is a USB-C to HDMI cable

@GetVladimir
Copy link
Author

GetVladimir commented Jan 26, 2023

@austintackaberry Yes, that is what I meant, you've done everything correctly.

The only other thing I can suggest is to try with a different cable, perhaps an USB-C to DisplayPort and check if that will make it detect the required color output properly

@austintackaberry
Copy link

@GetVladimir I am ordering one now, thanks again!

@GetVladimir
Copy link
Author

@austintackaberry not a problem, let us know how it goes

@austintackaberry
Copy link

I found a DP to USBC lying around and it worked!

@GetVladimir
Copy link
Author

@austintackaberry Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working

@sobotka
Copy link

sobotka commented Jan 26, 2023

The only other thing I can suggest is to try with a different cable, perhaps an USB-C to DisplayPort and check if that will make it detect the required color output properly

The output from USB-C to DisplayPort is completely wrong colourimetry on macOS. The HDR mode will trigger on the display, but the colourimetry is most certainly wrong, and doesn’t appear isolated to only a few machines judging from the posts online.

If anyone is familiar with colourimetry, it would be excellent to diagnose it here.

@ArtKun
Copy link

ArtKun commented Jan 27, 2023

I'm using a Xiaomi Curved Gaming monitor with a USB-C to DisplayPort cable and struggling to get the colors right. I don't know whether I'm on RGB on YPbPr as there doesn't seem to be a way to check on the display itself but I know the colors aren't even close to the iMac no matter what I do.
Vladimir, I made a comment on YouTube and your advice was to look for the SD 170M-A profile but there isn't such profile on the list.

Mac Mini M1, Ventura 13.2

@GetVladimir
Copy link
Author

@ArtKun thank you for your comment.

The SD 170M-A color profile is one of the defaults in macOS and should always show in the drop-down list.

The only difference is whether it's at the top of the list (which usually means M1 outputs YCbCr color) or near the bottom of the list (which usually indicates that M1 outputs RGB color).

To check this, on your Mac mini, click on the Apple menu > System Settings, then click Displays in the sidebar on the left.

Click the drop-down menu next to “Color profile” on the right and check for SD 170M-A

Please double check this, and if it doesn't show, please let me know which color profiles it showed or add a screenshot

@jackson-57
Copy link

Is it relevant whether macOS identifies the monitor as a TV? I believe it specifies this in System Information, but I'm not sure if it indicates whether it's using YCbCr.

@LetrixZ
Copy link

LetrixZ commented Jan 27, 2023

The SD 170M-A color profile is one of the defaults in macOS and should always show in the drop-down list.

The only difference is whether it's at the top of the list (which usually means M1 outputs YCbCr color) or near the bottom of the list (which usually indicates that M1 outputs RGB color).

I'm using a G27Q 1440p 144 Hz with a CalDigit SOHO dock. Tried with DP and HDMI but no difference.
In my case, it won't show SD 170M-A unless I use 120/144 Hz, and when it does, it show under the G27Q color profile in the same section.

imageimage

I'm using BetterDisplay to enable HiDPI resolutions over 720p, but they still look blurry compared to 720p.
Colors look fine, it's just the text that looks bad.
60 Hz looks the best while 120/144 Hz changes the colors a bit and makes everything a bit more blurrier.

I tried to take a photo of the screen to see the difference.

Windows
image

macOS
image

Both are using the same terminal font Fira Code.

@GetVladimir
Copy link
Author

@jackson-57 thank you for your question.

No, whether or not the monitor is detected as TV doesn't indicate what color is outputted to it. Many TVs support RGB color output and my Mac mini also outputs RGB color to the 4K TV.

@LetrixZ thank you so much for the screenshot and for the details.

The screenshot where it shows the SD 170M-A color profile on the 2nd position is almost certainly YCbCr color output. This might be on purpose in order to compress the bandwidth in order to fit the higher resolution and refresh rate.

Having a dock in between can definitely affect the output, as the Mac detects the port on the dock, and not on the monitor itself.

@LetrixZ
Copy link

LetrixZ commented Jan 27, 2023

Having a dock in between can definitely affect the output, as the Mac detects the port on the dock, and not on the monitor itself.

So a proper USB-C to DisplayPort should do the trick?

@GetVladimir
Copy link
Author

@LetrixZ Most of the time, yes. Sometimes even without any modifications to plist needed

@speteman
Copy link

speteman commented Jan 29, 2023

@GetVladimir Thanks for this tutorial and putting in all the work to find a solution. Unfortunately, my Macbook Pro M1 connected to an LG C2 42" OLED TV does not respond to any of the suggestions. In the plist file (only one of them existing in the main /Library/Preferences folder, and not separate one in the user preferences folder) there are a list of like 12 DisplayConfig sections each with different UUIDs, and each with a section that does not contain the LinkDescription section you suggest be added. Do you think I should add that snippet of config to each section as a next step? Or is there a way to determine which one to add it to? I did add that snippet to the top section as your screen shot shows, but it did not work. I am connecting using USB-C to HDMI (no DisplayPort on the TV). Thanks!

UPDATE: @GetVladimir I ended up finding a plist file in the user preferences folder that was in the format of "com.apple.windowserver.displays.[UUID].plist" that somehow I had not noticed. After removing this file, the TV reported that it was displaying RGB color! The only other issue I now need to figure out is how to enable the 60Hz mode in Display Preferences, as it currently only shows 30, 25, and 24Hz.

@GetVladimir
Copy link
Author

@speteman thank you for your comment and for the details.

Make a backup of the displays plist file and delete it. Then reboot the MacBook and it should generate a new file with only couple of UUID instances.

This should make it easier to add the LinkDescription key to the correct display.

Let us know how it goes or if you have any additional questions

@randallb
Copy link

I am 80% sure that HDR mode is performing a double up encoding leading to incorrect output with HDR mode on.

It seems like the signal that is output has encoded primaries inset and the result is a lack of chroma, due to this potential double up. Setting the characterization to “Generic RGB” seems to get the results closer, but is still wrong.

Curious if anyone else has explored this error? One potential solution would be to create a device link characterization for HDR, if it can be determined where the double up encoding is happening.

I think you are right. I only get proper colorspace w/o HDR.

@wdormann
Copy link

wdormann commented Feb 8, 2023

In my experience (USB-C to Displayport cable, M1 Macbook), this trick (editing the com.apple.windowserver.displays.[UDID].plist file) works when the Mac is first booted. The OSD on my monitor will show whether it's RGB or YPrPb. However, if I unplug the monitor and plug it back in again, or if I let the Mac put the display to sleep, when it comes back up again, it's back to YPrPb mode. I have to reboot to get back to RGB mode.

  1. Is there any way to make this change persistent across sleep/unplug cycles?
  2. Why on earth would Apple be preferring a YPrPb colorspace on a DISPLAYPORT connection? Unless the choice of USB-C to Displayport has some effect on how the display connection presents itself to the computer? I see no HDR option in my Mac settings, FWIW.

@GetVladimir
Copy link
Author

@wdormann Thank you for your comment.

  1. Yes, it seems to be a known issue with the recent macOS versions. Earlier versions didn't have a problem when going to sleep/reconnecting the monitor. At the moment, there doesn't seem to be a workaround for this other than restarting
  2. Good question. USB-C to DisplayPort should always default to RGB color output. Unless there is a Dock or Adapter in the middle that alters the connection, it's very likely a bug in macOS

@traderdude123
Copy link

traderdude123 commented Feb 9, 2023

Hi All,

Where do I begin, I am currently running a Hackintosh with 6800 XT connected to my LG CX. I am using DP 1.4 to HDMI 2.1 adapter and let me tell you the colours are fantastic. So natural and wonderful. I am able to get RGB or YCBCR with EDID override method with the Hackintosh. Both RGB and YCBCR give same colours and looks fantastic.

Recently, bought the new Mac book pro M2 16 inch with has a HDMI 2.1 port. Sure enough connected to the LG CX and let me tell you I have tried every method mentioned here in this thread and I am not able to force RGB. with hdmi 2.1 on Mac book pro connnected to LG CX, the colours look washed out and complete shit. I am able to get 4k/120hz/RGB/10 bit here. note the 4k = 1080p retina resolution.

Text is nice , but colours are total shit.

So I got a USB-C to HDMI 2.1 8k adapter , and with this I am not even getting 10 bit color no matter what I do. I tried changing bit depth in the com window server plist file with correct display ID , no luck. Everytime I make a change and reboot , it just gets overridden. I always get YCBCR422 8b. This makes colours look bad and text is crisp and still not good enough.

BTW I m on Ventura 13.2 both on Hackintosh and Mac book pro M2.

Somehow I feel the AMD 6800 xt is giving better colours than the M2 GPU. But this requires more testing to confirm. Even with hdmi 2.1 full bandwidth on the Mac book pro m2 connected to LG CX, the colours are washed out.

Anyone have these kind of issues and observations , please share.

Till today no proper support for external displays from apple. For a trillion dollar company , that is abysmal.

@traderdude123
Copy link

@GetVladimir Thanks for this tutorial and putting in all the work to find a solution. Unfortunately, my Macbook Pro M1 connected to an LG C2 42" OLED TV does not respond to any of the suggestions. In the plist file (only one of them existing in the main /Library/Preferences folder, and not separate one in the user preferences folder) there are a list of like 12 DisplayConfig sections each with different UUIDs, and each with a section that does not contain the LinkDescription section you suggest be added. Do you think I should add that snippet of config to each section as a next step? Or is there a way to determine which one to add it to? I did add that snippet to the top section as your screen shot shows, but it did not work. I am connecting using USB-C to HDMI (no DisplayPort on the TV). Thanks!

UPDATE: @GetVladimir I ended up finding a plist file in the user preferences folder that was in the format of "com.apple.windowserver.displays.[UUID].plist" that somehow I had not noticed. After removing this file, the TV reported that it was displaying RGB color! The only other issue I now need to figure out is how to enable the 60Hz mode in Display Preferences, as it currently only shows 30, 25, and 24Hz.

I m not able to find the com.apple.windowserver.displays.[UUID].plist in the /Library/Preferences. I searched the entire system. cannot find this file. How does this file get generated?

@GetVladimir
Copy link
Author

@traderdude123 Thank you for your comment.

Yes, it's very weird that this is still an issue with Macs, while RGB color output is the default on everything else.

Regarding the plist file that needs to be modified, you can find it in either /Library/Preferences/com.apple.windowserver.displays.plist
or
/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

Please note that the plist file only gets generated on Apple Silicon based Macs.

The x86 based Macs don't have this file and use the display Override files instead.

@traderdude123
Copy link

traderdude123 commented Feb 9, 2023

Some good news, the latest Better Display app has the ability to edid override for apple silicon. Finally, this is huge upgrade.

Now I m able to get full 10 bit RGB with HDR on my Mac book pro m2 after edid override.

My observations

All TV settings were set the same for both AMD 6800 XT and apple GPU.

with Apple GPU , with hdmi 2.1 4k@120hz / 10 bit / RGB / HDR , the colors were dull compared to the AMD 6800 XT.
with Apple GPU , USB-C to hdmi2.1 , I could only get 10 bit RGB 4k @ 30hz , but the colours were still dull compared to the AMD 6800 XT.

I tried the best to calibrate the TV with Apple M2 GPU to match the AMD 6800 XT output , but no go. The colors are simply dull and dark with low brightness compared to AMD 6800 XT.

This leads me to believe that Apple's M2 GPU drivers still need work. Still very disappointing and sad that apple M2 GPU comes no where near to output color quality of AMD 6800 XT.

I was planning to buy the M2 Mac mini based on my test results , but that is a no go now.

@GetVladimir
Copy link
Author

@traderdude123 that is interesting news indeed.

Try setting up your color output to be RGB but without HDR. This might solve the issues with the dull colors on Apple Silicon based Macs.

@traderdude123
Copy link

@GetVladimir

But isn't that like a downgrade?

@GetVladimir
Copy link
Author

@traderdude123 if the colors are better without it, then not really. macOS UI is not really made for HDR anyway at the moment, so you're not loosing much. Usually, it mostly affects videos and games, and only the ones that support it.

@traderdude123
Copy link

traderdude123 commented Feb 9, 2023

@GetVladimir

you were right about not enabling HDR on apple silicon Macs.

After a lot of testing and calibration , I managed to get the same output as my 6800 XT.

Thanks a lot for the suggestion.

So on apple silicon Macs, HDR gives washed out colours. but on 6800 XT , HDR works correct. This means it's a GPU driver issue in MacOS.

I also had to tweak a lot with color profiles to match the 6800 XT output , but its doable.

Also, very important point to note on the m2 Macs that only HDMI 2.1 port can give you 4k/120hz/RGB/10 bit.
on the usb-c to HDMI 2.1 adapter , i can get 10 bit color at 30hz only. if I go above it , it switches to 8 bit color. probably due to limited bandwidth on the usb-c port.

@GetVladimir
Copy link
Author

@traderdude123 thank you so much for the update and for the details.

I'm glad that you got a decent RGB color output without HDR

@traderdude123
Copy link

traderdude123 commented Feb 9, 2023

But another issue I m facing now is with text.

Text is a bit hard to read without hdr.

edit: Disabled font smoothing. Slightly better to read now.

@GetVladimir
Copy link
Author

@traderdude123 You might need to look into enabling HiDPI for the text clarity or to remove any font smoothing changes that were might have been applied earlier

@traderdude123
Copy link

oh never mind. Its fine. Display reverted back to YCBCR after rebooting. you will need to auto enable uploaded edid in better display app.

Text is crisp and fine in RGB 10 bit, but not in YCBCR 10 bit.

@traderdude123
Copy link

For anyone interested , if you have a LG OLED display and want to use it with M2 Mac. use the following settings with M2.

  1. use RGB mode. Do not use YCBCR as text is hard to read.
  2. use DCI-P3 color profile for LG OLEDs. for best image calibration. Do not use other profile including the LG TV SSCR2 profile created by default. DCI-P3 color profile is built in and a standard.
  3. adjust the brightness and color of you TV as per your room lighting.

You will probably have to buy the better display app to keep the edid override settings.

@waydabber
Copy link

Hi guys, here is a brief step by step on how to force RGB with EDID override on Apple Silicon:

waydabber/BetterDisplay#1473 (comment)

Somewhat related, an other example of how to use EDID overrides on Apple Silicon is to force 4K@120Hz with an external HDMI 2.1 dongles on M1 Macs:

https://forums.macrumors.com/threads/mac-mini-4k-120hz.2267035/post-31952813

As @traderdude123 pointed out, EDID overrides is somewhat different on Apple Silicon, it is not applied as a display override like in the past but requires active involvement from an app to apply the new EDID (communicate it to the DCP) and reconnect the display with it - so if you want to enjoy the benefits you'll need to set BetterDisplay to auto start and also enable Automatically apply custom EDID upon detection of this display in the app. The positive of this is that the EDID can be applied on the fly and the factory EDID can be reapplied any time also on-the-fly, so it's super easy to experiment with various settings and EDID mods, no need to reboot all the time like on Intel - it literally takes about a second to apply the new EDID (the app will disconnect and reconnect the display briefly).

@GetVladimir
Copy link
Author

@waydabber thank you so much for the comment and for the additional info.

I'm glad that applying EDID on-the-fly is now an option

@Viktor-Osika
Copy link

Viktor-Osika commented Feb 10, 2023

Thanks @waydabber it works! I just followed your steps and edited the EDID.
I can finally have RGB output without restarting every time I unplug my display or put my mac to sleep!

Now only if there was a way to bring back subpixel font smoothing...

@LetrixZ
Copy link

LetrixZ commented Feb 10, 2023

Hi guys, here is a brief step by step on how to force RGB with EDID override on Apple Silicon:

waydabber/BetterDisplay#1473 (comment)

Is there any way to do it manually without BetterDisplay to check if it looks different? The trial just ended today.
I have a Gigabyte G27Q and have no way to check if it's using RGB or YPbPr.

@waydabber
Copy link

Hi @LetrixZ - for a configuration based approach @GetVladimir's solution is the way to go. The method for EDID override that worked on Intel (simply adding a display override configuration item) does not work on Apple Silicon, there is only a rather convoluted programmatic solution to the problem (there might be other ways of course that I am not aware of, but might be discovered in the future, or Apple may add a configuration based solution in the future). Vladimir's solution should yield the same result in terms of forcing RGB as the EDID override approach so if you want to see if there is any difference with your display, why not do that?

@traderdude123
Copy link

traderdude123 commented Feb 14, 2023

I m still facing the text fringing issue. It the same over DP and HDMI and also YCBCR or RGB makes no difference.

1080p HiDpi - Text is fine.
anything about 1080p HiDpi , text is not clear and fringing on my LG CX(4k) OLED. I believe that Apple removed the sub pixel rendering.

Windows has some tools to fix this i believe, but what about MacOS.

After googling, it looks i m stuck with 1080p resolution.

Does anyone have any solution to this problem?

Edit: I used the same hdmi 2.1 cables and DP1.4 Adapters to check with my hackintosh with 6800 XT. At 1440p HiDPi , there is NO TEXT FRINGING.

So clearly this is now an issue between intel and apple silicon Macs.

I hope someone can find a fix.

Latest Edit: I finally found the issue with text fringing on higher resolution. This was happening due to gamma. I adjusted the gamma and now i get clear and proper text at higher resolution(1440p HiDpi and above) on Apple Silicon. Although this gamma issue is not there in Intel/Hackintosh Macs.

So anyone reading this and has a text rendering issue , please check you gamma with external monitors.

@traderdude123
Copy link

Another observation and reporting.

I cannot believe the issues apple has created with M Series chips.

The M Series connected to External monitors use 24 bit by default. Switchres and http://www.lagom.nl/lcd-test/display_settings.php both confirm this.

The same test in my hackintosh gives billions of colors in switchresx. But M chips dont.

I had to enable hdr to get 10 bit mode.

you can test 10 bit mode here only http://www.lagom.nl/lcd-test/display_settings.php.

The 24 bit mode was giving dull and dark colors on my desktop. After enabling hdr , the colors were correct on the UI.

I wished apple stuck with intel instead of making their own chips.

@GetVladimir
Copy link
Author

@traderdude123 Thank you for your comment and for the additional info.

Please note that the color output is also not correct on x86 based Macs by default. They still require a display override or using Bootcamp in order to display RGB color output over HDMI. The issue seems to be more with macOS and the software.

Perhaps someone that has tested Asahi Linux on M1 based Macs can confirm if the color is also fixed with the software.

@traderdude123
Copy link

@GetVladimir

Yes, M2 feels like a downgrade.

LG TV shows 10 bit RGB, but macos is sending 24bit True colors(million colors).

if i enable HDR, i get 30bit(billion colors) , but then colors are washed out.

This is very bad.

@Jasshl
Copy link

Jasshl commented Feb 17, 2023

Hi All,

Where do I begin, I am currently running a Hackintosh with 6800 XT connected to my LG CX. I am using DP 1.4 to HDMI 2.1 adapter and let me tell you the colours are fantastic. So natural and wonderful. I am able to get RGB or YCBCR with EDID override method with the Hackintosh. Both RGB and YCBCR give same colours and looks fantastic.

Recently, bought the new Mac book pro M2 16 inch with has a HDMI 2.1 port. Sure enough connected to the LG CX and let me tell you I have tried every method mentioned here in this thread and I am not able to force RGB. with hdmi 2.1 on Mac book pro connnected to LG CX, the colours look washed out and complete shit. I am able to get 4k/120hz/RGB/10 bit here. note the 4k = 1080p retina resolution.

Text is nice , but colours are total shit.

So I got a USB-C to HDMI 2.1 8k adapter , and with this I am not even getting 10 bit color no matter what I do. I tried changing bit depth in the com window server plist file with correct display ID , no luck. Everytime I make a change and reboot , it just gets overridden. I always get YCBCR422 8b. This makes colours look bad and text is crisp and still not good enough.

BTW I m on Ventura 13.2 both on Hackintosh and Mac book pro M2.

Somehow I feel the AMD 6800 xt is giving better colours than the M2 GPU. But this requires more testing to confirm. Even with hdmi 2.1 full bandwidth on the Mac book pro m2 connected to LG CX, the colours are washed out.

Anyone have these kind of issues and observations , please share.

Till today no proper support for external displays from apple. For a trillion dollar company , that is abysmal.

Do you have RGB + 4k 120hz with your hackintosh? If so could you share exactly how you made that work? I am trying to accomplish the same thing with rx 6600 but have been unsuccessful so far.

@traderdude123
Copy link

@Jasshl

With hackintosh (6800XT) i m using DP1.4 to HDMI 2.1 adapter. I m only getting 4k/60/10bit/RBG. I m on 13.2 on hackintosh.

@traderdude123
Copy link

traderdude123 commented Feb 17, 2023

@GetVladimir

I finally found a fix for LG OLED.

The issue was with color cablibration. I switched to Rec2020-rec1886.icc profile downloaded from the color.org. The UI is now showing proper colors and also did gradient test from Lagom LCD Test Webpage. The profile gives better contrast and smoother gradients.

The BT2020 profiles that comes built in with macos give very muted colors with LG OLDED.

The Rec2020-rec1886.icc corrected the colors and gamma.

I m now getting a xrite colorimeter to better build a color profile for my LG OLED.

The text is also very smooth and readable now at higher resolutions.

Getting 4k/120/10bit was a big hurdle , but getting the correct color profile with LG OLEDs is EQUALLY important, otherwise there is no benefit of higher refresh rates or resolution.

Also disabling font smoothing gives very clear and crisp text.

@GetVladimir
Copy link
Author

@traderdude123 thank you for the update and the suggestion regarding the custom profile.

That is an interesting workaround, but please note that if the signal itself is not RGB, the colors will not be accurate, regardless of which color profile you use. They might look better though.

Let us know how it goes with the color calibration

@traderdude123
Copy link

@GetVladimir

Signal is RGB. I have the M2 MacBook Pro with hdmi 2.1 port. I m getting 4k/120/10bit/RGB on my LG CX using the EDID modification method.

Now , the issue is with color calibration, since none of the profiles that come with macOS will correctly match LG OLEDs. you can use reference icc profiles like the one I mentioned , but looks like I have to calibrate it to get the best out of the display.

Will let you know how the calibration goes.

@GetVladimir
Copy link
Author

@traderdude123 awesome that it's already RGB. Thank you so much, I'm curious to know how it will work

@traderdude123
Copy link

@GetVladimir

But isn't RGB same as YCBCR444. I tried YCBCR444 and could not find any difference from RGB.

But to be sure of full chroma , RGB is preferred.

@GetVladimir
Copy link
Author

@traderdude123 No, RGB represents colors as combinations of red, green and blue signals, while YCbCr represents colors as combinations of a brightness signal and two chroma signals.

They might look similar, but you can notice a distinct difference, especially when displaying gray colors.

On M1 Macs, you might also notice a noise in darker colors when set to YCbCr

@traderdude123
Copy link

@GetVladimir

Interesting, never noticed that before.

Also, does HDMI or USB-C/DP makes any difference with M1?

@GetVladimir
Copy link
Author

GetVladimir commented Feb 18, 2023

@traderdude123 Yes, usually USB-C to DisplayPort connections are more easily recognized by the M1 and have a better chance to default to RGB color output without the need to modify the plist file

@traderdude123
Copy link

@GetVladimir

I mean in terms of signal quality. Does USB-C gives a better quality image/text?
After few days of usage now, text is still blurry and discomforting at resolutions above 1080p HiDpi. So the text blurry issue still exists.

I m wondering

  1. Can text blurriness be avoided or reduced using USB-C instead of hdmi at higher resolutions.
  2. Can USB-C connection give better colors than hdmi, even though i am not able to notice the difference between two.
  3. Also i m not getting billion colors on my M2 , but on hackintosh i can see billion colors in switchresx.

@GetVladimir
Copy link
Author

@traderdude123 The only difference when using USB-C to DisplayPort specifically is to help the M1 Mac to recognize the connection properly and output RGB color by default. Other than that, don't expect too much of a difference.

The easiest way would be to just test it out if you already have a cable and see how it works for you and your specific setup. Please note that I talk about USB-C to DisplayPort cable specifically, and not USB-C to USB-C. I don't recommended buying new equipment just to test that

@traderdude123
Copy link

traderdude123 commented Feb 20, 2023

@GetVladimir

I got the X-Rite Display Plus calibrator and let me tell you, its fantastic.

I could never get the macOS UI colors correctly before, all colors were too saturated and no matter what i did could not fix it.I struggled for days to get the proper colors for general usage.

With calibration , all colors are perfect now. It amazing.

After calibration , the UI colors , the gamma all look correct and prefect now.

If you have a mac and an external monitor/TV, i highly recommend the ColorChecker Display Plus for calibration and yes this is just for general purpose usage.

Also, this is just in first 3 attempts, I m still experimenting with HDR. But for SDR , it fixed the colors for now.

@entdark
Copy link

entdark commented Feb 20, 2023

Hi @GetVladimir.

Trying to resolve the issue on a relatively old monitor Acer GD245HQ connected via HDMI-HDMI. The monitor HDMI version is 1.4.

I had to insert LinkDescription property manually into com.apple.windowserver.displays.plist since the file didn't have that property at all. I inserted the property in all configuration blocks.
I managed to achieve getting RGB in pre-login screen but it gets reset back to YPbPr after logging in.
I triple checked I don't have dupes in the listed folders. Any clue what could I be missing?

Thanks.

@GetVladimir
Copy link
Author

@traderdude123 Awesome! Thanks for the info and I'm glad to hear that color calibration helps. Do you calibrate on SDR or HDR mode to achieve the good colors?

@entdark thank you for your comment and I'm glad to hear that you got RGB color output working before login. You've already done most of your work.

Please manually check again the ByHost folder and see all the files there. Don't use the Go To folder function.

If there is a display plist file there, either delete it or modify the LinkDescription as you did on the other file.

If the is no plist file, it's also possible that you might have an app or setup that changes your resolution after login and removes the plist changes.

@traderdude123
Copy link

@GetVladimir

I did both SDR and HDR calibration. SDR gave the best result. HDR is ok , but not as good as SDR.

I think macOS implementation of HDR require more work.

But i now prefer the SDR Calibrated mode. This makes a huge difference compared to the native profile generated by macOS when you connect the LG OLED.

if you want the calibrated SDR profile, let me know.

@entdark
Copy link

entdark commented Feb 20, 2023

@GetVladimir

Unfortunately, all 3 folders did not have duplicates. Each time I log in I see the file got edited and the very first configuration block has LinkDescription removed. Although LinkDescription still exists in the other blocks. I also tried to remove write permissions to the file for System user but it did not help.

@GetVladimir
Copy link
Author

@traderdude123 I thought the same and I also prefer SDR. Thank you for the reply and for the confirmation.

@entdark thanks for the update. Can you tell me more about the connection? Is it an HDMI-to-HDMI cable connected between an M1 Mac mini and a Monitor?

@entdark
Copy link

entdark commented Feb 20, 2023

@GetVladimir It is an M1 Mac Mini indeed and an HDMI-to-HDMI connection. Both HDMI connectors are full sized.
OS: macOS Ventura 13.0.1

@GetVladimir
Copy link
Author

@entdark thank you for the details.

Everything seems good with the connection, as long as there are no adapters or docks in between.

If possible, you might want to check with a more recent version of macOS. The 13.0.1 had a lot of issues

@traderdude123
Copy link

@entdark

update Ventura to 13.2 and install BetterDisplay. BetterDisplay allows you to extract EDID of your monitor and edit the EDID to remove all references to YCBCR and keep only RGB and upload the modified EDID using the BetterDisplay tool. This is how we force RGB mode now.
I m using M2 Macbook pro with HDMI-to-HDMI with my LG OLED and i m getting RGB.

@entdark
Copy link

entdark commented Feb 20, 2023

Thanks, guys, I will try.

@ahuse
Copy link

ahuse commented Feb 20, 2023

update Ventura to 13.2 and install BetterDisplay. BetterDisplay allows you to extract EDID of your monitor and edit the EDID to remove all references to YCBCR and keep only RGB and upload the modified EDID using the BetterDisplay tool. This is how we force RGB mode now. I m using M2 Macbook pro with HDMI-to-HDMI with my LG OLED and i m getting RGB.

Thanks @traderdude123! This is working for me (MacBook AIr M1, USB-C to USB-C). Is there any way of auto-uploading the EDID without BetterDisplay?

@traderdude123
Copy link

@ahuse ,

If there is , i m not aware of it.

I assume you are asking this because auto-uploading EDID is a paid feature. I guess that guy deserve the payment for even making something like this work because apple in its entire existence , never once thought we should give users to set RGB/YCBCR like we have in windows. I guess they never will , because they really don't care about 3rd party external displays.

I suggest you support him.

@entdark
Copy link

entdark commented Feb 22, 2023

@traderdude123 thank you. Exporting and editing EDID did the trick!

For anyone interested what I did:

  1. Downloaded and installed BetterDisplay
  2. Downloaded and installed AW EDID Editor.
  3. Opened Display Settings in BetterDisplay with my monitor selected.
  4. Clicked Export EDID Binary... in Retrieve display EDID.
  5. Opened the EDID binary file in AW EDID Editor.
  6. Edited Header block by toggling off YCrCb 4:4:4 and YCrCb 4:2:2.
  7. Saved the EDID binary file.
  8. Opened Display Settings in BetterDisplay with my monitor selected again.
  9. Clicked Upload EDID Binary... in Custom display EDID.
  10. Clicked Apply EDID Now.
  11. The issue got resolved.

@raducotescu
Copy link

Any idea why none of these suggestions work when the display is connected using a DisplayPort to USB-C adapter to a CalDigit TS4 dock? If I connect the display directly to the MacBook (M1 Pro), then macOS 13.2.1 will use RGB. As soon as I move the display to the dock, it switches to YPbPr.

@GetVladimir
Copy link
Author

GetVladimir commented Feb 22, 2023

@raducotescu Thank you so much for your question.

From what I've seen so far, it seems that the M1 has some issues detecting the dock, and also assigns to it a different UUID every time it connects to the Mac.

Since it doesn't detect the dock correctly, it doesn't output RGB color and goes to the YCbCr that is set as default.

It also makes it more difficult to manually add the LinkDescription in the displays plist file for the correct UUID and force RGB color output, since the UUID changes each time.

On some adapters and docks, there might be a limited number of UUIDs that the Mac can assign. In these situations, it's possible to add the LinkDescriptions on all the generated UUIDs and it might work on the next reboot. However, it might require quite a lot of time and reboots to do that.

@raducotescu
Copy link

raducotescu commented Feb 23, 2023

From what I've seen so far, it seems that the M1 has some issues detecting the dock, and also assigns to it a different UUID every time it connects to the Mac.

The UUIDs I see in the com.apple.windowserver.displays.plist file are identical no matter how many time I disconnect and reconnect the dock. Do you refer to other UUIDs?

Even more frustrating is that if I use a normal DisplayPort cable, the MacBook will use RGB. However, the CalDigit TS4 has only one DisplayPort and I have two Dell P2715Q monitors. If one is using RGB and the other YPbPr there's a noticeable difference in colours.

@GetVladimir
Copy link
Author

GetVladimir commented Feb 23, 2023

@raducotescu thank you for the reply.

Yes, those are the UUIDs that I'm referring to. If more UUIDs don't show up even after reboot, you might be able to add the LinkDescription key in the plist and try again.

However, I'm not sure that you can have both Monitors connected to the Dock at the same time and output RGB color.

There also seems to be a limit for the M1 Pro MacBook of what mixed combinations and ports for external monitors it can use at the same time (https://www.apple.com/macbook-pro-14-and-16/specs/)

To drive both external monitors at the same time with RGB color output, it seems that you will need to sacrifice two USB-C ports on the M1 Pro MacBook itself, using an USB-C to DisplayPort cable and avoid the dock

@traderdude123
Copy link

@GetVladimir

Any idea where the EDID is stored in Apple silicon macs?

Is it documented anywhere?

For intel macs , it was documented and Apple allowed EDID overrides. Why they have hidden it in Apple Silicon? Shouldn't it be documented?

Windows allows EDID overrides and instructions on how to are documented by MS. Why Apple has not done the same?

@joevt
Copy link

joevt commented Feb 25, 2023

@traderdude123 , BetterDisplay.app has EDID override for Apple Silicon Macs. I don't think the method is documented. There's undocumented APIs to get the EDID. Search for IOAVServiceCopyEDID. Not sure what IOAVServiceSetVirtualEDIDMode does.
The IOKit.framework has all the IOAVService APIs. It also has other APIs such as IODPDevice for doing DisplayPort stuff.

Each API works on a different service in ioreg. I think they are:

API : Service
IOAVAudioDriver : DCPAVAudioDriver
IOAVAudioInterface : DCPAVAudioInterfaceProxy
IOAVController : DCPAVControllerProxy
IOAVDevice : DCPAVDeviceProxy
IOAVService : DCPAVServiceProxy
IOAVVideoInterface : DCPAVVideoInterfaceProxy
IODPController : DCPDPControllerProxy
IODPDevice : DCPDPDeviceProxy
IODPService : DCPDPServiceProxy

@traderdude123
Copy link

@joevt Thanks for the info.
But shouldn't apple make it clear to the users how to override edid. I mean apple silicon is out for years now.
There are many people who use external monitors and edid override should be quite clear by now.

Any idea when they will make it public for the users.

@vittau
Copy link

vittau commented Feb 25, 2023

Since upgrading to Ventura this gets broken every time, adding the LinkDescription section just gets undone. I suspect this has to do with the fact that the lock screen always comes up at the wrong resolution during boot, it's at a very low resolution. And then when I log in, the proper resolution gets used.
EDIT: Disabling the YCrCb headers in AW EDID Editor did not work. The monitor is a Samsung Odyssey G5, 3440x1440.
It's interesting that 3440x1440 appears as LoDPI in BetterDisplay:
image

Will using the monitor directly from a USB-C to HDMI cable fix this issue? It's currently being used via an Ugreen dongle.

@fecabianchi
Copy link

@vittau only USB-C to DisplayPort will work.

@vittau
Copy link

vittau commented Feb 25, 2023

@vittau only USB-C to DisplayPort will work.

Great, so I have to buy a DP switcher too (because my monitor only has 1 DP). Thanks a lot Apple...

@traderdude123
Copy link

I can understand for a TV which usually have a hdmi connection and YCBCR is the default format , but for a monitor I assume the defaults to be DisplayPort and RGB as format.

This data is present and configured by default in the monitors EDID which should say to the source that I accept RGB for a DP connection. In which case the source (macOS in this case) should send a RGB signal to the monitor.

I assume it's because of HDMI connection , that you are getting YCBCR.

your best bet is always a DP connection to get RGB signal.

For a monitor ALWAYS use DP even if it has a HDMI port. For TVs we have no choice but to use HDMI. Hence we always get YCBCR as default.

@traderdude123
Copy link

@GetVladimir

I have something even more shocking to report now.

I just got my M2 Mac Mini Pro with hdmi 2.1 and i m in shock.

Its running at 4k 120hz YCBCR444 HDR and all colors are just perfect. There is no text fringing even at 4k HiDpi. There is no washed out colors in HDR. In Both SDR and HDR modes, text and colors are perfect and i m not even switching the color profiles. WTF!!!

Shockingly HDR IS PERFECT!!! How is this possible? On the macbook pro , HDR was washed out , even after countless switching of color profiles , the HDR was just not good.

But the Mac mini, whole different story.

I could never get this good text/colors/HDR with M2 Macbook pro with the same cable on the hdmi 2.1 port.

All this happened out of the box. No configuration or color calibration done. All though the color calibrated profile give better color contrast. but that is only because of fine tuning the color calibration. but other than that HDR is amazing!!

This only means that apple is somehow deliberately limiting HDR and other resolutions on the macbook pro. I feel kind of cheated.

I m investigating more. But after countless test with macbook pro M2 and now the mac mini. I am observing significant difference in the output signal.

The text was hard to read on higher resolutions(1080p HiDPi and higher) when connected with macbook pro m2 , but with mini even at higher resolutions like 3200x1800 , the text is crisp and clear and very enjoyable to read.

I am a at a loss of words , somehow the macbook pro is limiting the bandwidth compared the mini.

Any idea how this is possible or may be i m doing something wrong.

@GetVladimir
Copy link
Author

@traderdude123 congrats on the new Mac mini and I'm glad to hear that it works good.

Is it possible the MacBook needed a clean install of macOS or there is indeed something different with the hardware?

What color profile does the new Mac mini use by default?

@traderdude123
Copy link

@GetVladimir

MacBook Pro is also recent about a month. It was an also a fresh install when I got it.

Is there anyway to check the check the internal hdmi chips used?

Mac mini uses the profile created by macOS when you first connect the external display.

What I m observing is that HDR works perfectly with default color profile on Mac mini(No calibration done) but NOT on MacBook Pro. I suspect there is some bandwidth issue when you enable HDR. MacBook Pro could be limiting the bandwidth when you enable HDR.

The strange part is there is no washed out color when I enable HDR on Mac mini, but with MacBook Pro all washed out color even after using different color profiles AND after doing calibration in HDR mode.

The issue is I have no objective way to test the text clarity and colours in SDR mode. The difference is definitely there , but I can't tell you for sure how much of a difference is there.

I need to do two things.

  1. Check for hardware differences between Mac mini and MacBook Pro. Obviously the sys report in this regard doesn't help much.
  2. Objectively test for text clarity and colours in both SDR and HDR modes.

I'll keep you posted.

@traderdude123
Copy link

@GetVladimir

While HDR is good on mac mini, but useless because i can't keep 120hz and higher resolution above 1080p Hidpi. I need to downgrade to 60hz to keep HDR and Higher resolutions.Otherwise everything is too big.

Switching back to SDR to keep higher resolutions and 120hz. The color calibrated profile works just fine in SDR mode.

This retina is a real problem for external monitors. Retina scaling is still a big issue. Apple should really give an option for external monitors.

@nilgarcia
Copy link

I have a Mac Studio. I was able to put it in RGB and YCbCr444 but it randomly goes back to to YCbCr 422 8b after puting to sleep. And it keeps creating new plist files.
Using MacOS Ventura 13.2.1 (22D68)

IMG_1946

@GetVladimir
Copy link
Author

@nilgarcia Thank you for your comment and the screenshot.

Yes, that is indeed an issue with the latest macOS versions. A temporary solution is to reboot the Mac and it should get back to RGB color output (unless it overwrites both display plist files).

Using a different connection, like an USB-C to DisplayPort cable might also help in some combinations

@nilgarcia
Copy link

@GetVladimir thanks for your answer. I concluded that when I am in HDR mode I never get RGB but when I turn off HDR it automatically switches to YCBCR 4444. Both with USB-C or HDMI

@GetVladimir
Copy link
Author

@nilgarcia thank you for the update.

That makes sense, as it seems RGB color output and HDR are not available at the same time

@nilgarcia
Copy link

nilgarcia commented Mar 17, 2023

@GetVladimir what I do not understand is why when having HDR active icons get so blurry. in SDR i get very sharp retina.

@GetVladimir
Copy link
Author

@nilgarcia macOS UI elements don't seem to be very optimized for HDR. It's mostly used for playing video on it.

Also, it's very possible that when using HDR, macOS actually outputs YCbCr 4:2:2 or 4:2:0 instead of 4:4:4 Chroma Subsampling (even though the monitor expects 4:4:4).

@traderdude123
Copy link

I have a Mac Studio. I was able to put it in RGB and YCbCr444 but it randomly goes back to to YCbCr 422 8b after puting to sleep. And it keeps creating new plist files. Using MacOS Ventura 13.2.1 (22D68)

IMG_1946

I too am facing the same issue on my Mac mini m2. I have to then toggle HDR on and off. then it goes back to ycbcr444.

@GetVladimir
Copy link
Author

GetVladimir commented Mar 29, 2023

Updates regarding macOS Ventura 13.3

It seems the new 13.3 update overwrites the displays plist file on every reboot now.

It also seems to have removed some of the old color profiles that helped to identify if the Mac is outputting in YCbCr color.

There might be a temporary workaround, built upon the original suggestion from @cyan-gorilla to lock the file and other comments on the YouTube video:

(Optional) Lock the plist file and set it as stationery

After you make the edits in the file, you can try setting the file /Library/Preferences/com.apple.windowserver.displays.plist as Stationery pad and Locked, so that it doesn't get overwritten on every reboot

Stationery Pad Locked

To do this, right click on the plist file, click on Get Info and check the boxes next to Stationery pad and Locked

The Mac will still switch from RGB color output to YCbCr after sleep, but at least it will revert to RGB after reboot if the plist file is locked.

This requires further testing and might cause some issues, like not being able to remember new resolutions or display settings. Please note that you're making any changes at your own risk.

@traderdude123
Copy link

For me on my Mac mini m2. No matter what I change in the /Library/Preferences/com.apple.windowserver.displays.plist and lock it. It has no effect. I tried changing to RGB. No effect. It reads from EDID.

macOS does whatever it wants. it simply ignores the changes made in this file.

How are changes affecting for others?

@silviu-bucsa
Copy link

Based on my setup, Ventura 13.3 on MacBook Pro 16 M1 Max with 3 monitors, one connected directly via USB-C and two of them connected via HDMI - to - USB-C cable, file locking the /Library/Preferences/com.apple.windowserver.displays.plist file works after a reboot, all monitors output RGB.

If I disconnect any monitor from the computer, USB-C one always keeps RGB but the HDMI - to - USB-C switches from RGB to YCbCr.
After a reboot, the ones that remained connected output RGB.

Setup Details
MacBook Pro 16 M1 Max
Ventura 13.3

Monitors:
Dell U2719DC - connected via USB-C for power
Dell S2721DGF - connected via HDMI - to - USB-C cable
Dell S2721DGF - connected via HDMI - to - USB-C cable

@GetVladimir
Copy link
Author

GetVladimir commented Mar 29, 2023

@traderdude123 Thanks for the reply. The plist file has no effect only if there is a typo, an invalid setting or if HDR is enabled. You can try again to modify the displays plist file with another plain text editor (avoid using TextEdit, as it can modify the file, which then ends up being ignored)

I've updated the tutorial with the step-by-step procedure using Terminal commands: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#the-step-by-step-procedure-on-how-to-force-rgb-color-output-on-m1-and-m2-based-macs-with-terminal-commands

@silviu-bucsa Thank you so much for the confirmation. I'm glad to hear that it works after Reboot when locking the file.

On my side, testing with an M1 Mac mini, I also get the same results. Sleep or disconnect of the cable will switch it from RGB to YCbCr.

However, as long as the plist file is Stationery and Locked, it will return to RGB color output after reboot.

@traderdude123
Copy link

@GetVladimir

Thanks for that input. I will try that.

Another observation is that I get the LinkDescription key only if I enable HDR. if I disable HDR, the LinkDescription goes away.

@traderdude123
Copy link

traderdude123 commented Mar 30, 2023

@GetVladimir

I tried the steps exactly as you mentioned, Still no change from YCBCR to RGB on mac mini m2.

Here is my plist file. I edited with cot editor.

DisplayAnyUserSets Configs DisplayConfig CurrentInfo Depth 7 High 1800 Hz 120 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 2 Wide 3200 LinkDescription BitDepth 8 EOTF 0 PixelEncoding 0 Range 1 Rotation 0.0 UUID 4F822EA0-20D9-4047-99E9-29FDCC444D00 UnmirrorInfo Depth 7 High 1800 Hz 120 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 2 Wide 3200 DisplayConfig CurrentInfo Depth 4 High 1080 Hz 60 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 1 Wide 1920 Rotation 0.0 UUID A7DD20E3-5186-4F5D-904D-85448A089CDB UnmirrorInfo Depth 4 High 1080 Hz 60 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 1 Wide 1920 Underscan 4F822EA0-20D9-4047-99E9-29FDCC444D00 1 A7DD20E3-5186-4F5D-904D-85448A089CDB 1 Version 2 DisplayUUIDMappings 2DE29A1B-1580-091E-0F93-5A69417CA049 4F822EA0-20D9-4047-99E9-29FDCC444D00 9B603E2E-98E1-E840-0F93-5A69417CA049 A7DD20E3-5186-4F5D-904D-85448A089CDB

I only have one display(LG CX) connected to my mac mini. I check the display ID from colorsync utility and its present correctly in plist file.

What am i doing wrong?

Link to my plist file ---> https://textdoc.co/XK6EWzjeAhcpxNmO

@GetVladimir
Copy link
Author

GetVladimir commented Mar 30, 2023

@traderdude123 Can you attach the unmodified plist file here instead? You can just drag and drop it in the comment or use the <> icon. Make sure to delete it afterwards if you don't want your UUID to show.

@traderdude123
Copy link

traderdude123 commented Mar 30, 2023

unmodified :
@GetVladimir

link to file ---> https://textdoc.co/oAq3Cmk0jiXnJHha

DisplayAnyUserSets Configs DisplayConfig CurrentInfo Depth 7 High 1800 Hz 120 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 2 Wide 3200 Rotation 0.0 UUID 4F822EA0-20D9-4047-99E9-29FDCC444D00 UnmirrorInfo Depth 7 High 1800 Hz 120 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 2 Wide 3200 DisplayConfig CurrentInfo Depth 4 High 1080 Hz 60 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 1 Wide 1920 Rotation 0.0 UUID A7DD20E3-5186-4F5D-904D-85448A089CDB UnmirrorInfo Depth 4 High 1080 Hz 60 IsLink IsVRR OriginX 0.0 OriginY 0.0 Scale 1 Wide 1920 Underscan 4F822EA0-20D9-4047-99E9-29FDCC444D00 1 A7DD20E3-5186-4F5D-904D-85448A089CDB 1 Version 2 DisplayUUIDMappings 2DE29A1B-1580-091E-0F93-5A69417CA049 4F822EA0-20D9-4047-99E9-29FDCC444D00 9B603E2E-98E1-E840-0F93-5A69417CA049 A7DD20E3-5186-4F5D-904D-85448A089CDB

@GetVladimir
Copy link
Author

@traderdude123 The file might seem to be truncated on the external link. Please use the comment here instead.

@traderdude123
Copy link

traderdude123 commented Mar 30, 2023

@GetVladimir

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DisplayAnyUserSets</key>
	<dict>
		<key>Configs</key>
		<array>
			<dict>
				<key>DisplayConfig</key>
				<array>
					<dict>
						<key>CurrentInfo</key>
						<dict>
							<key>Depth</key>
							<integer>7</integer>
							<key>High</key>
							<real>1800</real>
							<key>Hz</key>
							<real>120</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>2</real>
							<key>Wide</key>
							<real>3200</real>
						</dict>
						<key>Rotation</key>
						<real>0.0</real>
						<key>UUID</key>
						<string>4F822EA0-20D9-4047-99E9-29FDCC444D00</string>
						<key>UnmirrorInfo</key>
						<dict>
							<key>Depth</key>
							<integer>7</integer>
							<key>High</key>
							<real>1800</real>
							<key>Hz</key>
							<real>120</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>2</real>
							<key>Wide</key>
							<real>3200</real>
						</dict>
					</dict>
				</array>
			</dict>
			<dict>
				<key>DisplayConfig</key>
				<array>
					<dict>
						<key>CurrentInfo</key>
						<dict>
							<key>Depth</key>
							<integer>4</integer>
							<key>High</key>
							<real>1080</real>
							<key>Hz</key>
							<real>60</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>1</real>
							<key>Wide</key>
							<real>1920</real>
						</dict>
						<key>Rotation</key>
						<real>0.0</real>
						<key>UUID</key>
						<string>A7DD20E3-5186-4F5D-904D-85448A089CDB</string>
						<key>UnmirrorInfo</key>
						<dict>
							<key>Depth</key>
							<integer>4</integer>
							<key>High</key>
							<real>1080</real>
							<key>Hz</key>
							<real>60</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>1</real>
							<key>Wide</key>
							<real>1920</real>
						</dict>
					</dict>
				</array>
			</dict>
		</array>
		<key>Underscan</key>
		<dict>
			<key>4F822EA0-20D9-4047-99E9-29FDCC444D00</key>
			<real>1</real>
			<key>A7DD20E3-5186-4F5D-904D-85448A089CDB</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>2</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>2DE29A1B-1580-091E-0F93-5A69417CA049</key>
		<string>4F822EA0-20D9-4047-99E9-29FDCC444D00</string>
		<key>9B603E2E-98E1-E840-0F93-5A69417CA049</key>
		<string>A7DD20E3-5186-4F5D-904D-85448A089CDB</string>
	</dict>
</dict>
</plist>

@GetVladimir
Copy link
Author

GetVladimir commented Mar 30, 2023

@traderdude123 Awesome! I see on the current display that the depth value is 7. Haven't seen that before. You can try out this one. Make sure to set this plist as Locked and Stationery, and delete the duplicate plist file in the ByHosts folder. Please note that you're making any changes fully at your own risk.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DisplayAnyUserSets</key>
	<dict>
		<key>Configs</key>
		<array>
			<dict>
				<key>DisplayConfig</key>
				<array>
					<dict>
						<key>CurrentInfo</key>
						<dict>
							<key>Depth</key>
							<integer>7</integer>
							<key>High</key>
							<real>1800</real>
							<key>Hz</key>
							<real>120</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>2</real>
							<key>Wide</key>
							<real>3200</real>
						</dict>
						<key>LinkDescription</key>
						<dict>
							<key>BitDepth</key>
							<integer>8</integer>
							<key>EOTF</key>
							<integer>0</integer>
							<key>PixelEncoding</key>
							<integer>0</integer>
							<key>Range</key>
							<integer>1</integer>
						</dict>
						<key>Rotation</key>
						<real>0.0</real>
						<key>UUID</key>
						<string>0000000-0000-0000-0000-0000000000000</string>
						<key>UnmirrorInfo</key>
						<dict>
							<key>Depth</key>
							<integer>7</integer>
							<key>High</key>
							<real>1800</real>
							<key>Hz</key>
							<real>120</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>2</real>
							<key>Wide</key>
							<real>3200</real>
						</dict>
					</dict>
				</array>
			</dict>
			<dict>
				<key>DisplayConfig</key>
				<array>
					<dict>
						<key>CurrentInfo</key>
						<dict>
							<key>Depth</key>
							<integer>4</integer>
							<key>High</key>
							<real>1080</real>
							<key>Hz</key>
							<real>60</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>1</real>
							<key>Wide</key>
							<real>1920</real>
						</dict>
						<key>Rotation</key>
						<real>0.0</real>
						<key>UUID</key>
						<string>0000000-0000-0000-0000-0000000000000</string>
						<key>UnmirrorInfo</key>
						<dict>
							<key>Depth</key>
							<integer>4</integer>
							<key>High</key>
							<real>1080</real>
							<key>Hz</key>
							<real>60</real>
							<key>IsLink</key>
							<false/>
							<key>IsVRR</key>
							<false/>
							<key>OriginX</key>
							<real>0.0</real>
							<key>OriginY</key>
							<real>0.0</real>
							<key>Scale</key>
							<real>1</real>
							<key>Wide</key>
							<real>1920</real>
						</dict>
					</dict>
				</array>
			</dict>
		</array>
		<key>Underscan</key>
		<dict>
			<key>0000000-0000-0000-0000-0000000000000</key>
			<real>1</real>
			<key>0000000-0000-0000-0000-0000000000000</key>
			<real>1</real>
		</dict>
		<key>Version</key>
		<integer>2</integer>
	</dict>
	<key>DisplayUUIDMappings</key>
	<dict>
		<key>0000000-0000-0000-0000-0000000000000</key>
		<string>0000000-0000-0000-0000-0000000000000</string>
		<key>0000000-0000-0000-0000-0000000000000</key>
		<string>0000000-0000-0000-0000-0000000000000</string>
	</dict>
</dict>
</plist>

@traderdude123
Copy link

@GetVladimir

Still shows YCBCR. Its not taking effect.

you can see file is locked and changes are present in the preview section.

image

@GetVladimir
Copy link
Author

@traderdude123 Please try to reboot the Mac and check again

@traderdude123
Copy link

@GetVladimir

Rebooted multiple times. No effect at all.

@GetVladimir
Copy link
Author

@traderdude123 Check if there is a duplicate plist file in

/Users/yourname/Library/Preferences/ByHost/com.apple.windowserver.displays.[UDID].plist

that could cause issues

@traderdude123
Copy link

@GetVladimir

I deleted the plist file in. ByHost folder.

After deletion , i rebooted. No effect.

@GetVladimir
Copy link
Author

@traderdude123 are you sure there is no other app that starts up on login and could modify the settings?

If there isn't, there is not much else left to try. Of course, HDR must be disabled in order for any of this to work

@traderdude123
Copy link

@GetVladimir

I disabled all items in login items and rebooted. Still no effect.

HDR is always disabled, since i never use it.

I think this method does not work for TVs, probably works only for Monitors.

@GetVladimir
Copy link
Author

@traderdude123 thanks for the update.

No, it works for monitors and TVs too, as I've used it on a 4K Sony TV XF85 with HDMI to HDMI cable and has RGB color output with the plist edit.

The only thing I haven't seen before is the depth of 7. It's usually supposed to be 8.

You can edit out your comments and remove the UUIDs if you like. I'll edit out the comment also to replace them with 0000 if needed.

@traderdude123
Copy link

@GetVladimir

Yes, that bit depth of 7 is weird. I did change it to 8 and 10 even. But nothing happened.

I don't mind the UUIDs, since that changes if i reconnect the cable.

@GetVladimir
Copy link
Author

@traderdude123 Not a problem. I've changed the UUIDs in the comment to 0000000-0000-0000-0000-0000000000000 anyway, just to be safe.

I think I've noticed what might be the issue in your specific setup. I've noticed from the plist file that the resolution is both wide screen and has 120Hz refresh rate. It doesn't seem that you can use with an HDMI-to-HDMI cable and have it run in RGB color output.

It's possible that you can use it if you have an USB-C to DisplayPort cable, but then the TV doesn't accept that type of connection.

@traderdude123
Copy link

@GetVladimir

So what you are saying is if I use HDMI-HDMI connection , bit depth is 7 and if I use USB-C-HDMI, bit depth could be 8?

also for RGB output , should the bit depth be 8 or can it be RGB for bit depth 7?

Also ,bit depth of 8 is understandable, but what does bit depth of 7 mean in this case?

I have an USB-C to HDMI adapter. But that only gives me 4k 60Hz.

@GetVladimir
Copy link
Author

@traderdude123 Interesting, try in Setting to set the refresh rate to 60Hz with your current HDMI-to-HDMI cable and redo the display plist if possible.

This might get you both depth of 8 and RGB color output.

I'm not sure if that affects it, but I've only seen depth of 8 in most configurations with RGB color output.

If that doesn't work, do try with the USB-C to HDMI cable. Even if it's 60Hz, just to try if we can get RGB color output working at least

@nfilipek
Copy link

Updates regarding macOS Ventura 13.3

It seems the new 13.3 update overwrites the displays plist file on every reboot now.

It also seems to have removed some of the old color profiles that helped to identify if the Mac is outputting in YCbCr color.

There might be a temporary workaround, built upon the original suggestion from @cyan-gorilla to lock the file and other comments on the YouTube video:

(Optional) Lock the plist file and set it as stationery

After you make the edits in the file, you can try setting the file /Library/Preferences/com.apple.windowserver.displays.plist as Stationery pad and Locked, so that it doesn't get overwritten on every reboot

Stationery Pad Locked

To do this, right click on the plist file, click on Get Info and check the boxes next to Stationery pad and Locked

The Mac will still switch from RGB color output to YCbCr after sleep, but at least it will revert to RGB after reboot if the plist file is locked.

This requires further testing and might cause some issues, like not being able to remember new resolutions or display settings. Please note that you're making any changes at your own risk.

I tryed this and it is working like you described. I have tryed to compare RGB with YCbCr 444 and they look the same to me on my DELL 2721D monitor. I see no diference in text clarity or color changes. I would like to try with EDID change method but 18 ¢ pay for Betterdisplay just to test. If this EDID change method realy works I would pay for this program.

@GetVladimir
Copy link
Author

@nfilipek thank you for the comment and glad to hear that you got RGB color output working with editing the display plist file.

For me, it's very noticeable on gradient colors and on gray colors. A nice example also are the green boxes on the Xbox website (https://www.xbox.com/en-US/) where you might notice lines/noise when using YCbCr, but they are solid color when using RGB.

Regarding the paid EDID app, I haven't tried it myself, so I can't really say if it will make a difference.

@nfilipek
Copy link

nfilipek commented Mar 31, 2023

@GetVladimir no no, thank you for providing this patch so we cann use RGB. It is YPbPr instead of YCbCr, my mistake. I did test xbox page and switched between RGB and YPbPr and did not notice any lines or noise just solid greed boxes. I have connected HDMI to HDMI and USB C to DP so I cann compare. I have used your method till Ventura 13.3 but now it reverts back to YPbPr every time it wakes from sleep and it is anoying so I will wait so maybe there will be solution to this. Cann you send me some examples where you see the problems so I cann look at this on my monitor? Thank you.

@GetVladimir
Copy link
Author

GetVladimir commented Mar 31, 2023

@nfilipek I'm very glad if it helps.

And you're right. On Dell monitors, it shows YPbPr instead of YCbCr in the On Screen Display menu.

You don't notice any noise on the green boxes on the Dell 2721D? That model has a native resolution of 1440p, right?

green noise

On my side, I do notice the color noise when running in YPbPr on Dell 2415U in 1920 x 1200 (native resolution), but that could be something specific to my setup.

@nfilipek
Copy link

nfilipek commented Mar 31, 2023

@GetVladimir No I dont notice any noise on green boxes. I look on DP RGB and HDMI YPbPr and they look exsactly the same without any noise. It is on native 1440p resolution and 60Hz.
I made a picture with phone.
IMG_3076

@GetVladimir
Copy link
Author

@nfilipek Thanks for the confirmation. That is good to know.

It's possible because of the different models and resolution.

I'm curious to know, is there a difference in the light and dark Gray colors on your specific monitor? For example, is this color slightly off when you see it in YPbPr compared to RGB:
light gray

@nfilipek
Copy link

@GetVladimir I dont see any diference they are the same light gray

@GetVladimir
Copy link
Author

@nfilipek Thank you so much for checking, for the image and for the confirmation! I appreciate that a lot.

That's very interesting. It means that either your monitor is rendering the colors differently from mine (which is possible), or both its DP and the HDMI connections output in RGB color.

@nfilipek
Copy link

@GetVladimir no problem. I checked DP is on RGB and HDMI is on YPbPr color imput format. Maybe there is a diference in monitors because I use Mac Mini M1 like you so the machines are no diferent.

@GetVladimir
Copy link
Author

@nfilipek It's very likely a difference caused by the monitors.

I've just tested with a USB-C to DisplayPort cable also to compare it with the HDMI to HDMI, and can confirm that on the Dell 2415U there is a difference in the colors when using YPbPr and RGB color output.

Thanks again for checking all this and for the confirmation. Good to know

@nfilipek
Copy link

@GetVladimir Thank you. I would love to have HDMI to HDMI in RGB so I hope this problem with Ventura 13.3 reverting back to YPbPr on wake up from sleep will be solved somehow.

@GetVladimir
Copy link
Author

@nfilipek Yes, indeed. It's been a few macOS versions since the wake from sleep issue was introduced that switched the color to YPbPr, and it's not fixed yet from Apple.

@traderdude123
Copy link

traderdude123 commented Apr 1, 2023

@GetVladimir and @nfilipek ,

For the longest time, I also have this doubt about RGB and YCBCR on my LG CX. I have tried using HDMI-HDMI and USB-C-HDMI and I don't see any difference between RGB and YCBCR444. I also did this test using a windows machine with 6800 XT GPU. No noticeable difference in windows either. The black Level is set to Auto. So the TV will adjust the black level depending on the input and this is the recommended settings for black levels on LG OLEDs.

So this makes me wonder why I am trying to force RGB if there is no difference.

I want to see if there any test that can objectively identify any difference(if any) between RGB and YCBCR444, but so far I have not found any test that can confirm the differences.

By difference I mean in color and text clarity.

So basically, Even if you get RGB output , how will you confirm its any better compared to YCBCR444?.

Also, YPBPR is analog version of YCBCR. so there could be some difference between YPBPR and YCBCR. But since both RGB and YCBCR444 are digital, there cannot be difference. Correct me if I am wrong here.

Let me know your inputs.

@GetVladimir
Copy link
Author

@traderdude123 For me personally, it's very noticeable when the color output is YPbPr, as the colors are a bit off.

I can notice this easily on both my monitor and my TV.

I don't know of a specific test though. I notice the difference most obviously in dark gray and light gray colors.

On my TV for example, the dark background of the YouTube app looks like it has a greenish hue when on YPbPr color output.

When using RGB color output, the grays are true gray colors.

On my TV specifically, it's also very obvious in text clarity and outline when using RGB color output.

Don't know if this video helps to explain it better: https://youtu.be/3dET-EoIMM8

@nfilipek
Copy link

nfilipek commented Apr 1, 2023

@traderdude123 I dont know. To me, the screen looks the same on RGB or YPbPr color imput but I would love to have RBG trough HDMI because I work with images and video and it is important to have good color acuracy. As for now Ventura 13.3 breaks a patch every time it overwrites the plist files at sleep wakeup. I would love to try EDID change method but I dont know if it would work because pro version that lets you upload a EDID from betterdisplay cost 18¢. I dont whant to spend 18¢ on s program that I will not use anymore.

@traderdude123
Copy link

@nfilipek

if the screen looks same irrespective of RGB or YPbPr, then you don't need RGB output. Since HDMI is usually used with TVs , the default color space used is YCbCr/YPbPr.

But yes , macOS should allow to switch between RGB and YCbCr , if the monitor/TV supports both, because for color accuracy work ,you need RGB and for video content work you might need YCbCr/YPbPr. The color spaces have their own uses cases.

What i fail is understand how Apple can miss or ignore such a feature when they cater mostly to the photo and video industry. Even Nvidia/AMD/Intel allow you to switch between RGB and YCbCr on windows and this feature has been their on windows since forever.

Why this basic feature which is present since beginning in windows , is STILL not available in macOS in 2023.? Shame on Apple for this.

I called apple support regarding this , they said they are looking into and i asked them why there is no documented method to change to RGB. They agreed there should be a method and it should be documented and that was the end of it. There is no timeline when they will provide this feature. I guess emojis are more important in the macOS updates.

You are also correct in saying that one should not pay for a feature that should be built in macOS.Since apple owns the GPU, they are responsible for providing this feature.

However, i did try BD with EDID modification and i was able to get RGB with EDID modifications and i could not find ANY difference between RGB and YCbCr on LG CX. No difference in text clarity or colors.

But i will tell you this, i also have a hackintosh with 6800 XT and the output from that compared to my mac mini m2 is night and day difference when it comes to text clarity. But no difference in colors. Also in hackintosh even with 6800 XT having a hdmi 2.1 port, you are limited to 4k/60Hz. Again going from 60 to 120hz is a huge difference in user experience.

In any case , until apple takes this issue seriously we are stuck with whatever macOS defaults to and one should buy BD only if it makes a big difference between RGB and YCbCr. otherwise its not worth the money.

@GetVladimir , Regarding the 7 bit depth. I could not get it to set 8 , no matter what. its even ignoring the locked file. macOS seem to take some default value if it cant read the plist file or if its locked.

@nfilipek
Copy link

nfilipek commented Apr 1, 2023

@traderdude123 So you say you have tryed BD with EDID modification and it is working? So it stays on RGB after reboot or wake from sleep or changing resolution? If this is so then I would go for BD 😁

@traderdude123
Copy link

@nfilipek , you can take a trial and test it for week then decide if it worth it.

Regarding reboot, the EDID modification stays. but after every reboot the screen will flicker once to enable RGB.

Regarding wake/sleep, i don't know.

@nfilipek
Copy link

nfilipek commented Apr 1, 2023

@traderdude123 The problem is that I have installed this program a long ago just to see what it is and what it cann do and now my trial is over.

@traderdude123
Copy link

@nfilipek

I forgot to mention a very important point.

Its more important you color calibrate your monitor when using mac. This by far will make the biggest difference in text clarity and color accuracy. RGB or YCbCr won't matter much.

I had lots of issues with color and text readability due to incorrect gamma and color calibration. Once i did a thorough color calibration using my XRite Display colorimeter. It made a night and day difference. I feel probably this factor alone will make the RGB and YCbCr output match correctly.

I wouldn't bother with BD if your trial has expired. it won't make much difference i like you hope it would. I would suggest you color calibrate.

@490398290
Copy link

Seems a bit odd but after i apply and lock the file, all good till i shut down the tv, an LG OLED C2. After that, even that I have fish script already set and the plist isnt modified, i have to restart mac again to re-gain RGB. May be a bug in LG firmware or some misconfiguration ovverride between apple and LG HDMI port override.

@GetVladimir
Copy link
Author

@490398290 you did everything correctly actually.

That is a bug in the newer versions of macOS, where it reverts to YCbCr color output if the monitor or the Mac goes to sleep.

At the moment, the only way to fix it is to reboot the Mac or not to let it go to sleep

@490398290
Copy link

My Mac mini M1, its on 24/7 but the problem is, if i power off the tv, i will also have to restart the Mac to re-gain RGB with the patch already in place. Practically to have rgb after tv is switched off I have to possibilities:
Screen Off the tv without actually power off
Power off tv and restart the Mac when I need RGB spectrum.

:(

@GetVladimir
Copy link
Author

@490398290 yes, you're right.

It's as if it counts it as a new connection when the monitor turns on again and ignores the plist file.

I guess might as well turn off the Mac when you turn off the TV, so that it will start fresh on next boot

@490398290
Copy link

Finally I managed to fix the bug with a combo of BetterDisplay app edid export and patch and and edited plist files.
Priamry you have to export edid with betterdisplay app, edit it with an app like AW EDID and after that run patched edit thru better display. For the modification to preserve after the tv is turned off you have to also have patched plists on both locations ByHost user library preferences and /library preferences.

More info and how to patch and run custom edid on M1 here in the comments below:

waydabber/BetterDisplay#1473

Thanks Vladimir, and great creators of betterdisplay app.

I mark the problem as solved for now.

@GetVladimir
Copy link
Author

@490398290 thank you so much for the update and I'm glad to hear that you got RGB color output working even after the monitor is turned off/on and without the need to reboot

@GetVladimir
Copy link
Author

(Alternative) Terminal commands to force RGB Color Output on M1 and M2 based Macs and workaround for losing RGB color after waking up from sleep

  1. Open Terminal

  2. Paste the following commands to edit the User's displays plist file com.apple.windowserver.displays.[UUID].plist using the built-in PlistBuddy function in macOS:

/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth 8" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
  1. Reboot your Mac

(Workaround) If your Mac loses RGB color after waking up from sleep mode, either Reboot your Mac (recommended) or use this Terminal command to stop the WindowServer and login again (not recommended):

sudo killall -HUP WindowServer




Update 2023-04-09: I've added a newer method to edit the displays plist file using the built-in PlistBuddy function in macOS, without the need to manually edit the files with a text editor (even though it's good to know that option for future versions of macOS that might change the layout).

I've also added a workaround that might help with restoring RGB color output after waking up from sleep, based on the suggestion by @490398290, but more testing might be needed, as it's not really recommended to stop the WindowServer process manually.

@490398290
Copy link

490398290 commented Apr 9, 2023

Vladimir, your new method seems to work after I turn tv back on it remains on RGB wo old fisher script rgb-fix or EDID patch.

Thank you!

@GetVladimir
Copy link
Author

@490398290 thank you so much for trying it and for confirming that it works!

@GetVladimir
Copy link
Author

GetVladimir commented Apr 9, 2023

In case this is helpful, I've also created a version to force RGB Color Output on M1 and M2 based Macs with the built-in Shortcuts app, for users that prefer not to use Terminal or to edit the plist manually:

How to Force RGB Color Output on Apple Silicon M1 or M2 based Mac using the Shortcuts app

Force RGB Color Output on Apple Silicon M1 or M2 Mac

  1. Open the built-in Shortcuts app and create a new shortcut by clicking on + from the Top Bar
  2. In the Search field on the right, type shell and drag and drop "Run Shell Script" to the left
  3. (Optional) Click on Open Preferences and check "Allow Running Scripts" if this is the first time you setup a script in the Shortcuts app
  4. Select the text echo "Hello World" and replace it with this code (copy and paste over it):
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth 8" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist
  1. Name the Shortcut "Force RGB Color Output" or however you like
  2. Click on ▶ Run from the Top Bar
  3. Reboot your Mac

That's it!

If done correctly, this should modify the User's displays plist file com.apple.windowserver.displays.[UUID].plist and force RGB color output to the monitor.

Please note that you're doing any changes at your own risk.

As there is now a saved Shortcut for it, it's easier to apply the fix if the RGB color output is lost when updating macOS or changing the display settings.

Source to the post on the Shortcut app subreddit:
https://www.reddit.com/r/shortcuts/comments/12gx1o1/how_to_force_rgb_color_output_on_apple_silicon_m1/

@490398290
Copy link

@GetVladimir This bug is so nasty, your new method is good but still not persistant. After a while it reverts to Ycbcr when I shut down TV. In combination with EDID patch and plist editing it persists.

@GetVladimir
Copy link
Author

@490398290 Thank you for the update, I appreciate that a lot!

At this point, I'm not sure if it's going to be fixed with a future update of macOS.

Either way, I'm glad to hear that you got it working

@GetVladimir
Copy link
Author

GetVladimir commented Apr 11, 2023

Prototype Color Profile for Reducing Temporal Dithering

I was looking into how to reduce Temporal Dithering on newer Apple Silicon M1 and M2 Macs, since there doesn't seem to be a way to disable it completely.

On my older Mac mini late 2014, there doesn't seem to be any temporal dithering when connecting to my TV or the monitor. I went ahead and extracted the color profile used on it and applied it to the M1 Mac mini connected to a Dell U2415 monitor with HDMI-to-HDMI cable.

From what I can notice on my specific setup, the temporal dithering is reduced, the colors are solid and the gradients are smoother.
Prototype Color Profile

I'm not sure how good is the color accuracy on it, as this is specifically aimed toward reducing the temporal dithering.

If someone else want to test the color profile, you can download it from here:
https://www.getvladimir.com/uploads/1/8/8/4/18841988/reduce_temporal_dithering.icc

To use the color profile:

  1. Copy the Reduce Temporal Dithering.icc file to /Library/ColorSync/Profiles/Displays
  2. Go to System Settings > Displays > Color Profile and select the Sony TV *00 - Forced RGB Mode color profile from the list
  3. Check the colors where you usually notice temporal dithering on your monitor and write a comment if they are reduced or if you have any issues and questions

Update: There doesn't seem to be enough confirmation that the color profile to reduce temporal dithering works for other systems or configurations, so I can't recommend using it

@traderdude123
Copy link

@GetVladimir
Is this temporal dithering required to do if you TV is calibrated using colorimeter?

@GetVladimir
Copy link
Author

GetVladimir commented Apr 12, 2023

@traderdude123 not sure. Easiest way to check would be to try the color profile without changing anything on the monitor/TV itself and see how it works on your specific setup.

The color accuracy will probably not be the same.

You can always switch back to your old color profile if needed though.

@traderdude123
Copy link

@GetVladimir

I tested the temporal dithering icc.

What is observed is that compared to my calibrated icc, the colors are slightly more saturated as a result i m losing detail in images. other than that i don't see much difference.

may i ask how/where you obtained this temporal dithering icc? in colorSync utility it says Apple and mine says X-Rite.

@GetVladimir
Copy link
Author

@traderdude123 thank you so much for testing this and for the info!

Yes, the end result is to reduce temporal dithering on some color gradients. It basically reduces the number of colors in order to reduce temporal dithering.

I've extracted the profile from my old Mac mini late 2014 connected to a TV with RGB color output.

@traderdude123
Copy link

traderdude123 commented Apr 13, 2023

@GetVladimir

Few more important observations.

I just got a kabeldirect USB-C to HDMI 2.1 Adapter cable with the VM700 Chipset. I flashed a firmware(v112) i got on the mac rumors thread and guess what i am now getting RGB mode if i connect usb-c to hdmi 2.1 cable and if i connect the hdmi-hdmi cable i get ycbcr444.

I then compared both outputs to see if there was any difference. Note that macOS creates a new profile if you connect or make new connection via hdmi or usb-c port. I made sure both outputs had my calibrated icc profile. I did a lot of comparison test with colors , images and text.

I could NOT find any difference between RGB and YCBCR444.

What this means that is people need to color calibrate their monitors irrespective of connecting mac to TV/monitor using usb-c or hdmi. The issues in color accuracy came from improper calibration and NOT because of RGB or YCBCR444. Because both signals are digitally same , so the TV or monitor should produce the same output. This is what i m concluding from my observations.

However, do correct me if my methods or observations are wrong. Below the RGB connection WITHOUT EDID modifications using BD.
Also i check the window server plist. No changes whatsoever. The same 7 bitdepth and all other parameters remain same if use both usbc or hdmi connection.

RGB_4k_120hz_downsizsed

@GetVladimir
Copy link
Author

@traderdude123 thanks for the update.

Are you suspicious that the TV doesn't really receive true RGB color and there is no discernible difference with YCbCr because of the adapter in-between?

While it's true that you can calibrate any type of color output in order to improve it, it won't really match as the calibrated RGB colors when accuracy is a must

@traderdude123
Copy link

@GetVladimir

The TV is receiving RGB since i can see that TV shows RGB as in the screenshot above.

What i m saying is even if there is a difference between RGB and YCBCR444, the human eye cannot make out the difference. if there was a difference it would show in some tests. But i have tested color gradients / images and texts and i cannot find any difference. I even tested the grays and blacks. There is no difference.

if you think there is a difference, let me know how i can test the difference. Because now i have both cables which can do RGB and YCBCR444. But the USB-C adapter does get hot after a while. so i prefer using direct hdmi-hdmi connection with YCBCR444.

@GetVladimir
Copy link
Author

@traderdude123 that is a pretty cool setup if you can test both of them.

My suggestion would be to check with these tests from Lagom if you haven't done already: http://www.lagom.nl/lcd-test/

Check them first with YCbCr and then with RGB to see if you can notice any difference on your setup on any of the tests, colors and texts.

Make sure to use native screen resolutions (without scaling) and be aware of browsers like Safari that do color profiles.

@traderdude123
Copy link

@GetVladimir

Which browser do you recommend?

@GetVladimir
Copy link
Author

@traderdude123 They should all work. Safari uses the color profile selected in the System Preferences and it might give a different results for images that have color profiles set to them.

Google Chrome and Edge usually default to sRGB, but newer versions might also read the System Color Profile. It's just something to be aware about.

On the main page of the Lagom tests, there are also images that can be downloaded without the color profiles, so you don't need to depend on the browser.

@traderdude123
Copy link

@GetVladimir

OK , so i set native resolution (default) in display settings and native icc profile(as assigned to TV by macOS). No Calibration done.

I used chrome and set full screen with contrast gradient images.

I capture photos of YCBCR and RGB Blue contrast gradient images. I could not find any difference. I even looked as closes as possible and still could not find any difference.

I check all the test, still could not find any difference. may be my eyes are not so good.

Is there any objective way to find the difference between RGB and YCBCR444?

Here attached gradient test from 1 to 6 captured on phone.

YCBCR444:
IMG_0181_YCBCR

RGB:
IMG_0180_RGB

@GetVladimir
Copy link
Author

@traderdude123 thank you for the details.

I trust you, if you compared everything and there are no noticeable differences, that means there aren't any differences on your setup.

I do appreciate that you checked this and for all the informations.

@traderdude123
Copy link

traderdude123 commented Apr 14, 2023

@GetVladimir

I found the issue with RGB and YCBCR outputs.

The reason they were matching is because on a OLED TV, the black level setting was set to Auto. What this does is it sets low for YCBCR and high for RGB. and as a result no difference.

I then changed to RGB low, the image color contrast improved compared to YCBCR low. But now when i view text or any videos in browser ,text is looking washed out on white background, and i m losing a lot of shadow detail in videos.

But yes, now there is a difference between RGB low and YCBCR low.

In windows , i can control the RGB full and limited signal , is there any way to set RGB Full or limited in macos?

Note i have the option to set RGB Low or High i.e Limited or full in my Apple TV device. But there is no such option in macOS.

@GetVladimir
Copy link
Author

@traderdude123 good question. There doesn't seems to be an option in macOS to set RGB low or high (Full or limited range).

This option is available on tvOS and needs to be added in macOS

@traderdude123
Copy link

@GetVladimir

Anyway to get RGB on hdmi-hdmi? because the usbc-hdmi Adapter is getting very hot.

I did get RGB on hdmi-hdmi but then i tested sleep with it and now its gone. I have no idea what i did to get RGB on hdmi-hdmi. LOL.

@GetVladimir
Copy link
Author

@traderdude123
Copy link

@GetVladimir

The method worked after i removed both the window server plist file and then ran the commands.

Thanks for that.

But i m now getting RGB 8b, I was getting RGB 10b earlier.

I tried changing the bitdepth to 10 in the command , but its still stuck at 8b.

@GetVladimir
Copy link
Author

@traderdude123 Awesome! Glad to hear that you got RGB color output working.

I'm not sure if you can get 10 bit and RGB on the HDMI-to-HDMI connection at the same time.

You can try editing the plist manually and change both depth and bit depth to 10 bit (needs to be changed on two places).

@traderdude123
Copy link

@GetVladimir

I tried setting 10-bit to both depth and bit depth. No luck.

Few more observations.

The commands work only if you remove both com.window.server.plist file i.e from /Library/Preferences and ~/Library/Preferences/ByHost.
Then reboot so they get generated again.
Then run the commands
Then reboot again.

Another caveat is if you change refresh rate , then it switches back to YCBCR.

@traderdude123
Copy link

@GetVladimir

Another observation , on hdmi-hdmi connection on RGB is taking low on auto. but with usb-c-hdmi connection the RGB is taking high on auto. There is some observable color difference between hdmi-hdmi 8b RGB and usb-c-hdmi 10b RGB.

This could be due to color depth , but i can't seem to get 10b on hdmi-hdmi connection.

@GetVladimir
Copy link
Author

@traderdude123 thanks for the info.

Yes, that might make sense, since the HDMI on the Mac might not have the bandwidth required for 10 bit RGB

@traderdude123
Copy link

@GetVladimir

But the hdmi-hdmi cable had bandwidth for 10b YCBCR444, isnt that enough bandwidth for 10b RGB?

@GetVladimir
Copy link
Author

@traderdude123 No, that's actually one of the differences between RGB and YCbCr.

RGB carries the full info for each channel (Red, Green and Blue) and requires more bandwidth, while YCbCr is usually compressed

@traderdude123
Copy link

@GetVladimir

So you are saying YCBCR444 is compressed?

@GetVladimir
Copy link
Author

@traderdude123 Yes, at least on macOS.

That's why the Pixel Encoding key in the plist is set to 1 when using YCbCr.

When using RGB, the Pixel Encoding is set to 0

@traderdude123
Copy link

@GetVladimir

Hmm, thats interesting. This is first time i heard that YCBCR444 is compressed.

I thought YCBCR422 or 420 was compressed and 444 was uncompressed. But in macOS even ycbcr444 is compressed.

But is this the case in windows also?

@GetVladimir
Copy link
Author

@traderdude123 Do you think perhaps macOS uses 4:2:2 instead of 4:4:4 YCbCr when the Pixel Encoding is set to 1?

How does it show on the On Screen Display menu of the TV/Monitor when you set it to 1?

@traderdude123
Copy link

@GetVladimir

Also , i was able to get 10b RGB on hdmi-hdmi with BetterDisplay when i had the trial.

So i m sure the hdmi cable can do 10b RGB.

@GetVladimir
Copy link
Author

GetVladimir commented Apr 14, 2023

@traderdude123 does your Mac have HDMI 2.1 or 2.0 port?

As far as I know, there isn't a way to realistically get 10-bit RGB 4K over HDMI 2.0 connection.

@traderdude123
Copy link

@GetVladimir

M2 Mac mini with hdmi 2.1

@GetVladimir
Copy link
Author

@traderdude123 Then the bandwidth limitations doesn't apply to you.

HDMI 2.1 theoretically has 48Gbps in bandwidth (compared to 18Gbps of HDMI 2.0), so it can handle 10-bit RGB at 4K.

I haven't tested this myself though, since my M1 Mac mini has HDMI 2.0.

@traderdude123
Copy link

@GetVladimir

ahh ic.

Ok , so let me know what i need to test to get 10b RGB over hdmi-hdmi.

I was playing around with both the cables yesterday and i somehow got 10b RGB 4k over hdmi-hdmi.

But now what i suspect is RGB colors are different from hdmi 2.1 port and usb-c port. Because even if we run at 8b RGB over hdmi, the auto black level should set it to high, but its setting it to low. which means there is a signal difference between hdmi 2.1 port and usb-c port

Also there is color differences coming for the same RGB signal coming from hdmi 2.1 port and usb-c.

Why couldn't apple just provide a simple switch for RGB and YCBCR, i will never know. when they clearly know they are selling mac mini and till today no way to configure external displays correctly like in windows.

@GetVladimir
Copy link
Author

@traderdude123 Maybe the USB-C adapter that you have does some kind of active conversion to HDMI, that might be the reason why it gets hot as well.

At the moment, I don't know of any other way to activate the 10 bit RGB color except with the plist files.

And you're right, all this would be so much easier if the setting to choose RGB color and range was added by Apple in the System Settings.

@traderdude123
Copy link

@GetVladimir

Can you test on your monitor or TV if RGB either 8b or 10b coming from hdmi and usb-c port are same or different?

Try testing some random images.

Let me know , because now this is another new issue i think we will face.

I just want to know if its just my particular TV or this issue is in general affecting all m1/m2 mac minis.

@GetVladimir
Copy link
Author

@traderdude123 Yes, of course. I have an USB-C to DisplayPort connection and also HDMI-to-HDMI connection.

I can confirm that both of these connections output the same when using RGB color output on my monitor.

On my TV, I can test only HDMI-to-HDMI, but I don't have any USB-C to HDMI adapters, and the TV only accepts HDMI.

My guess is the adapter might be causing the discrepancy.

At the moment, I can't test 10-bit on my Monitor, as neither the Monitor or the M1 Mac mini HDMI port supports it.

@traderdude123
Copy link

traderdude123 commented Apr 15, 2023

@GetVladimir

I got RGB 10b 4k over hdmi-hdmi.

This is another alternate way of getting there. Below are the steps. I almost feel bad for dev of BD.Below method is for users whos trial has expired for BD and do not want to pay for the license.

  1. Create a new user ( this is going to be temporary)
  2. Install BetterDisplay, you should now get 14-day trial.
  3. Extract EDID using BD.
  4. Install AW Editor to modify EDID.
  5. Edit the EDID using AW Editor and remove all references to YCBCR and make EDID version 4.
  6. Upload the EDID using BetterDisplay. Steps 3-6 can be skipped if you already have a modified EDID and ready to upload.
  7. Now you should get RGB 10b for all users on your system.
  8. Switch to Original user, it should now have RGB. Reboot and login to original user to verify you have RGB 10b.
  9. Delete the temporary created user.
  10. Done.

Note: Do not go into sleep , you might lose RGB.

Coming back to RGB vs YCBCR differences.

The macOS is sending RGB Full(high) by default to the TV. if the TV is set to Auto black level it will set black level to high.This confirms that macOS is sending RGB Full and not Limited. Which is correct and this can be verified on lagom test Black levels page. I will refer to RGB Full as RGB High and RGB Limited as RGB Low.

In the lagom Black level test ,if RGB Low is set on TV, you can see that 1-15 Blacks will be too dark to see and that is correct. if you are seeing greys or even visible dark , then your monitor needs calibration.if RGB full is set on TV, you can and should see all blacks from 1-15.

However , Limited RGB(low) can give deeper blacks and better contrast and some users may prefer this.One use case for this is Coding on OLED Monitors/TV. for e.g. i do coding on Xcode and RGB limited(low) is much better as everything is deep dark on OLEDs. Also images looks better due to better contrast.

But when consuming videos , Limited RGB will make dark scenes very dark and Full RGB or better yet YCBCR444 is the best. you can compare this by running a video on your browser and check all three options 1. RGB High 2.RGB Low 3. YCBCR444. You can then choose your preference.

Edit: In summary , the weird thing is with Full RGB as source(macOS) and TV set to RGB Low, we lose the black and white details as they get crushed, but what we lose in some black/white details , we gain in color vibrancy and deeper blacks which some may enjoy for certain use cases. This is more so suitable for an OLED display. Please test and let me know what you all prefer. Another benefit is the text clarity is somewhat improved on RGB Low compared to RGB high/Full.

@domscr2
Copy link

domscr2 commented Apr 17, 2023

@GetVladimir just wanted to say thanks again for your support and engagement. Been subscribed to the gist in the event of changes such as the ones we've been having for the past month, been expecting issues and finally had them. Updated my 2020 M1 MacBook Pro to 13.3.1 and implemented the new manual fix and it's worked. Hopefully no more issues for a couple more months

@Strate
Copy link

Strate commented Apr 17, 2023

I realized, that RGB set only after I restart my monitor (power off and then power on).

@GetVladimir
Copy link
Author

@domscr2 thank you so much! I appreciate that and I'm glad to hear that the new manual fix works

@andreilica
Copy link

andreilica commented Apr 21, 2023

Hello @GetVladimir ! I have tried all of the methods suggested here (edit /Library/Preferences/ file, also ran those commands using the plist tool) and also in the comments (including EDID editing using BetterDisplay) and I cannot get my monitor to receive RGB signal at all (only YCbCr). System: MacBook Air M1 13", Display: Dell U2722D, connected the display to the laptop through HDMI using the Anker 555 (8 in 1) hub which supports 4k@60Hz on the HDMI Port. Am I missing something? What should I try to do next?

@GetVladimir
Copy link
Author

@andreilica thank you for your comment and I'm sorry to hear that.

Please try it with a direct connection between the MacBook and the monitor, with USB-C to DisplayPort cable if possible.

If that works, it might mean that the HDMI on the hub is not capable of outputting RGB color

@Strate
Copy link

Strate commented Apr 21, 2023

@andreilica hello, i've ran into same issues. Restarting monitor with power button helped. I use WavLink thunderbolt docking station

@andreilica
Copy link

@GetVladimir I currently don't have that type of cable available. The HUB is outputting RGB color to this monitor when hooked up to a Windows PC with USB-C Thunderbolt, so I don't think it's a hub issue. @Strate I have tried that multiple times after running the plist commands or editing the /Library/Preferences/ file with no success.

@GetVladimir
Copy link
Author

GetVladimir commented Apr 21, 2023

@andreilica thank you for the info that it works on a Windows PC. That means there might be a chance yet to make it work.

Please try again one more time by deleting both plist files and removing any other changes that you've done.

Then only apply the steps here: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#alternative-terminal-commands-to-force-rgb-color-output-on-m1-and-m2-based-macs-and-workaround-for-losing-rgb-color-after-waking-up-from-sleep

There is one catch though. In macOS 13.3.1, the plist files seem to be ignored when waking up from sleep. It only works after reboot.

If the hub does something similar to the connection like waking up from sleep every time is connected, macOS will not recognize it properly and output YCbCr color, even if you did everything correctly.

A temporary workaround might be to reboot the Mac after connecting the hub.

A more permanent solution would be either to use a separate USB-C to DisplayPort cable only for the monitor, or a future macOS update to fix the issue.

@andreilica
Copy link

andreilica commented Apr 21, 2023

After deleting the files, the commands won't work anymore as it doesn't find any file inside ByHost:
image

If I make any changes to the display settings the file appears and the commands can run. But after I run them and I restart, still no change. My display still shows YCbCr :(.

@GetVladimir
Copy link
Author

@andreilica thank you for the update.

It seems that the M1 just doesn't play nice with this hub, at least on this version of macOS.

The other suggestion I can make is to try with the USB-C to DisplayPort cable if possible

@csergiu
Copy link

csergiu commented Apr 25, 2023

So currently on Ventura 13.3.1 there is no way to get the monitor to stay in RGB after resuming from sleep? 😞

My setup: MBP 14" M1 w/ Dell P3421W w/ USB-C <-> USB-C

@GetVladimir
Copy link
Author

GetVladimir commented Apr 25, 2023

@csergiu yes, you'll need to reboot to fix it or prevent it to go to sleep.

Although, from the details of your specific setup, you can try using an USB-C to DisplayPort instead of USB-C to USB-C cable. That might fix the issue

@zhxst
Copy link

zhxst commented May 6, 2023

My MacBook is M1 and my external display was fine on Monterey. Updated to Ventura 13.3.1(a) yesterday and the display was ruined. The black turned into purple and the white turned into some kind of yellow. After some dig I found here.
So here is the result, the solution partially worked, but only in the login screen. After logged in, the external screen go black for half second, and it's purple and yellow again.
I use a hub and HDMI cable. Does things goes worse with the (a) patch? I don't know.
I don't know if it is because my display doesn't support YPbPr or Ventura changed something.

Thank you for your kindness and this article. At least I can confirm it's a YPbPr issue, and there is still hope to solve it.


BetterDisplay to force RGB works. Thanks to @traderdude123
Finally the screen not purple and yellow any more!

  • The options to get and set EDID is in the bottom of the menu with the gear button. Find your monitor under the Display tab.
  • Retrieve EDID Data and Export EDID binary.
  • Do edit the EDID binary with AW EDID Editor. It's free.
  • In the Version & Revision page, change Revision to 4.
  • Then you can turn off any YCrCb option in Feature Support page.
  • Check CEA Extension sector and turn off any YCrCb option.
  • Save the file.
  • Upload EDID Binary and Apply EDID.
  • remember to uncheck the Restore factory EDID on quit.

Does anybody know what does BetterDisplay do when upload and apply the EDID? Maybe there is a way to make it automatic.

@GetVladimir
Copy link
Author

@zhxst thank you for your comment.

You can try the new alternative method to fix RGB color output after login: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#alternative-terminal-commands-to-force-rgb-color-output-on-m1-and-m2-based-macs-and-workaround-for-losing-rgb-color-after-waking-up-from-sleep

The issues usually started with the later Ventura updates, but the (a) doesn't seem to make any difference.

@zhxst
Copy link

zhxst commented May 6, 2023

@zhxst thank you for your comment.

You can try the new alternative method to fix RGB color output after login: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#alternative-terminal-commands-to-force-rgb-color-output-on-m1-and-m2-based-macs-and-workaround-for-losing-rgb-color-after-waking-up-from-sleep

The issues usually started with the later Ventura updates, but the (a) doesn't seem to make any difference.

The alternative method doesn't work on MacBook, because the first display is the internal one.
Manually modified files under ~/Library/Preferences, and it worked. Thank you @GetVladimir

@GetVladimir
Copy link
Author

@zhxst Awesome! Thank you for the update and I'm glad to hear that you got RGB color output working

@traderdude123
Copy link

@zhxst

you don't need to keep running the BD to force RGB. To make sure that RGB change is permanent.Do the below steps.

  1. Make sure the interface is DisplayPort, even if you connecting using hdmi-hdmi or usbc-hdmi. It does not matter.

image

  1. After making all the EDID changes. Enable and then disable HDR in the macOS display settings. This will add the required entries in windowserver plist file to keep the RGB change permanent.

You can then uninstall BD if you don't use it.

These two steps make sure that RGB change is permanent with out BD requiring it apply the EDID every time you reboot.

Let me know how it goes.

@LetrixZ
Copy link

LetrixZ commented May 7, 2023

I have a strange problem on my G27Q with DP through a dock.
Using ForceRGB works always fine for 60 Hz.
But when using 120 Hz, I lose RGB (SD 170M-A appears on the top list) after disconnecting the display. If I switch back to 60 Hz, it outputs RGB again but to use 120 Hz again, I have to re-apply ForceRGB (or just restart, probably).
Is there any solution to this? I would like to use 120 Hz on macOS.

I bought a USB-C to DP cable to try. It should arrive on monday.

@GetVladimir
Copy link
Author

@LetrixZ Thank you for your comment and the details. Glad to hear that you got RGB color output working at 60 Hz.

You can try modifying the display plist file and set it to 120 Hz there, so that you don't need to reconnect the display and lose the RGB.

The DisplayPort cable that you ordered is very likely to work without any further modifications needed

@LetrixZ
Copy link

LetrixZ commented May 8, 2023

It works great!
1440p 120 Hz with RGB output always. 144 Hz not though.

It also now shows a variable (48-144 Hz) refresh rate option but is doesn't ouput RGB anymore with it.
image

The only problem now is that I have used the two ports :S. More to connect and disconnect.

@GetVladimir
Copy link
Author

@LetrixZ thank you so much for the update and I'm glad that it works!

If you like, you can write the specific cable model that you used as a reference

@LetrixZ
Copy link

LetrixZ commented May 8, 2023

It's a generic cable.
Here is a photo of the bag it came in and the pictures in the product listing: https://imgur.com/a/HaaKLU0

@GetVladimir
Copy link
Author

@LetrixZ great, thanks for posting it. Good to know

@LetrixZ
Copy link

LetrixZ commented May 9, 2023

@GetVladimir, out of curiosity, would a DP to HDMI adapter affect any of this? I would like to free my only DP port.

@GetVladimir
Copy link
Author

GetVladimir commented May 9, 2023

@LetrixZ I'm not sure how well that would work, as it might require an active conversion of the signal. This could introduce latency and other issues, so I can't really recommend it unless you really just want to test it

@lb2112
Copy link

lb2112 commented May 18, 2023

Has anyone been able to get RGB mode working with an M1 MacBook Air (2020) and the newer range of Dell Ultrasharp monitors, e.g. the U2723QE or U3223QE over USB-C (DP-alt/PD) with USB-C Prioritization set to High Data Speed? I am using Ventura 13.3.1 (a).

The .plist editing solution here does not seem to work. Setting the USB-C Prioritization to High Resolution does give RGB, but then all USB peripherals and the integrated GbE input all drop back USB 2.0 speeds. No good.

A USB-C to DP cable does give RGB also, but the whole point was to use the single USB-C cable with PD/DP-alt/USB hub features. I am using this cable - https://www.officeworks.com.au/shop/officeworks/p/comsol-100w-usb-c-thunderbolt-3-cable-20gbps-2m-black-coctb3200 - so there should be no bandwidth issues. I have tried other USB-C cable (Dell supplied ones) and they give the same result.

I recently sold my 14" M1 Pro MBP and it just worked in RGB mode with the same monitor, cable and USB-C Prioritization set to High Data Speed. I did start with that MBP from Monterey 12 with a Dell U2720Q and had to do the .plist editing solution mentioned here to force RGB from YPbPr and it did work for me and seemed to stick eventually. Once I sold the U2720Q to upgrade to the Dell U3223QE, the 14" M1 Pro just worked in RGB straight away, no .plist workaround needed.

Now I've switched to an M1 MacBook Air, I am back to square one. Any got any ideas?

@GetVladimir
Copy link
Author

@lb2112 thank you for your comment. That is interesting to know.

So basically the M1 Pro had RGB color output when selecting High Data Speed prioritization, but the standard M1 doesn't, all else being the same?

@GetVladimir
Copy link
Author

GetVladimir commented May 18, 2023

Update: 2023-05-18 and macOS Ventura 13.4

Just wanted to update regarding macOS Ventura 13.4. I've tested the update and the RGB color output issue is not fixed.

Also, the issue with reverting from RGB color to YCbCr after sleep/wake is not fixed either.

At this point in the Ventura cycle, it doesn't seem like Apple will address or fix any of the issues.

The procedure to Force RGB Color Output and the Alternative methods in the original post still work.

@traderdude123
Copy link

@GetVladimir

I finally got fed up with rebooting to force RGB every time and bought the Betterdisplay and now even after sleep/wake , I get RGB. Also I m able to fine tune the EDID settings like audio, resolutions..etc.

How is it that BetterDisplay is able to fix these issues while apple can't. I have now given up hope with Apple and just get the BD utilitlty for 17$ and move on with our lives.

I m on the latest 13.4.

@GetVladimir
Copy link
Author

@traderdude123 thank you for the info.

It seems there are a lot of bugs that haven't been fixed in macOS, iOS and tvOS for years now. RGB color output is just one of them

@lb2112
Copy link

lb2112 commented May 20, 2023

@lb2112 thank you for your comment. That is interesting to know.

So basically the M1 Pro had RGB color output when selecting High Data Speed prioritization, but the standard M1 doesn't, all else being the same?

Hi Vlad, thanks for your response. Yes, the M1 Pro would give RGB output on the same Dell U3223QE monitor and cable as the standard M1 would not, all else being "mostly" the same. The M1 Pro (14" MBP) started with Monterey 12 and a Dell U2720Q. With that combo, the .plist editing trick did work and got it switched from YPbPr to RGB. When I swapped to the Dell U3223QE and upgraded the M1 Pro to Ventura 13, RGB stayed so I didn't need to do .plist edit again.

Now I've started from scratch with an M1 MacBook Air and Ventura 13 out of the box, the .plist edit doesn't work.

@lb2112
Copy link

lb2112 commented May 20, 2023

@GetVladimir

I finally got fed up with rebooting to force RGB every time and bought the Betterdisplay and now even after sleep/wake , I get RGB. Also I m able to fine tune the EDID settings like audio, resolutions..etc.

How is it that BetterDisplay is able to fix these issues while apple can't. I have now given up hope with Apple and just get the BD utilitlty for 17$ and move on with our lives.

I m on the latest 13.4.

@traderdude123 - how do you edit the EDID to force RGB with BetterDisplay? I tried the free version but could't find it. Is it only on the Pro version?

@traderdude123
Copy link

@lb2112

you will need BetterDisplay Utility and AW EDID Editor. Download these two utilities and install. Once installed.

  1. Extract the EDID of you current connected monitor using the BetterDisplay Tool. How to extract is quite simple. Extract the EDID file with .bin extension. let's call this file : Monitor.bin.
  2. Open AW EDID Editor and open the Monitor.bin file. Once opened, you should find references to RGB and YCBCR options. The references will be different for different monitors/TV. Switch off/Turn off all references to YCBCR and Keep on RGB.
  3. Note only remove or turn off references to YCBCR and do not delete any sections of the EDID. Once modification of EDID is done. Save to a separate file. Lets call this file: Modified_EDID_Monitor.bin.
  4. Open BetterDisplay Utility again, there is an option to upload the EDID. Upload the Modified_EDID_Monitor.bin and hit apply. No need to reboot.
  5. your monitor should now switch to RGB.
  6. Make sure to run BetterDisplay at startup. It will apply the EDID on startups/reboots/sleep/wakeups.

I suggest you buy the Better Display utility, because there is no free way to force the RGB as of now. There is an alternate free way to do all the above , but it's too much hassle to just switch and force RGB. Hence the recommendation to just buy the utility.

Apple is too busy doing important things like making new emojis and if they find sometime they will give options/feature to control our external monitors. but I wouldn't hold my breath as providing such a feature or options is a conflict of interest for them. As a result of this, we will need to depend on third party developers if we intend to use non-Apple external monitors with Macs.

Also , don't bother contacting apple regarding this issue. They are completely clueless that people use non Apple external monitors. They somehow believe people only buy Apple Monitors with Mac minis. I don't know which world they are living in.

@lb2112
Copy link

lb2112 commented May 20, 2023

@lb2112

you will need BetterDisplay Utility and AW EDID Editor. Download these two utilities and install. Once installed.

@traderdude123 - Got it, thanks for the detailed steps. I have done all of them now and uploaded a modified EDID. I get RGB, but am limited 30Hz 👎

My Dell U3223QE is a native 4K 60Hz monitor, but it seems that when setting the USB-C Prioritization to High Data Speed, then RGB 4:4:4 at 3840 x 2160 @ 60Hz and full USB3 data hub speeds is too much for the M1 MacBook Air. Setting USB-C Prioritization to High Resolution does give RGB 4:4:4 at 3840 x 2160 @ 60Hz without any EDID editing, but then all USB peripherals and the integrated GbE input all drop back USB 2.0 speeds. :-1:

I am sure the M1 MacBook Air is DisplayPort HBR3 over USB-C compatible (second paragraph of this post explains it - https://www.dell.com/community/Monitors/U2720Q-MacBook-Pro-29Hz/m-p/7532963/highlight/true#M124822) but maybe I am wrong...? Or maybe the YPbPr mode does looks good enough... 🤔 getting sick of all messing around.

@traderdude123
Copy link

@lb2112

Can you share your unmodified original EDID file?

@lb2112
Copy link

lb2112 commented May 20, 2023

@lb2112

Can you share your unmodified original EDID file?

Here's the Base64 bin file content (didn't have a handy spot to attach/drop the .bin file) <<- Nope, that's a bad idea. Will share a file.

@traderdude123
Copy link

@lb2112

I m unable to load it in AW EDID editor. says invalid EDID.

can you share the .bin via some file sharing site and provide a link?

@lb2112
Copy link

lb2112 commented May 20, 2023

@lb2112

I m unable to load it in AW EDID editor. says invalid EDID.

can you share the .bin via some file sharing site and provide a link?

Sure thing - here it is: https://we.tl/t-FTLvqatrhV

@traderdude123
Copy link

@lb2112

Don't know if this will help. https://we.tl/t-wsTUrloRMb

but try this modified edid. If this does not work. you may have to remove some unused sections in EDID and try again.

@lb2112
Copy link

lb2112 commented May 20, 2023

Don't know if this will help. https://we.tl/t-wsTUrloRMb

but try this modified edid. If this does not work. you may have to remove some unused sections in EDID and try again.

@traderdude123 Will give it a go. Thanks. Can I ask what you changed in it? My modified one already removed the 3 references to YPbPr using AW EDID editor.

@lb2112
Copy link

lb2112 commented May 21, 2023

https://we.tl/t-wsTUrloRMb

Don't know if this will help. https://we.tl/t-wsTUrloRMb
but try this modified edid. If this does not work. you may have to remove some unused sections in EDID and try again.

@traderdude123 Will give it a go. Thanks. Can I ask what you changed in it? My modified one already removed the 3 references to YPbPr using AW EDID editor.

@traderdude123 just gave your modded EDID a go. BD applied it correctly, so it was all good. It was mostly same as my mod attempt (I also dropped to 8bit colour depth) but it again dropped the monitor to 30Hz for 4K resolutions. I don't think the little M1 MacBook Air can handle the USB3 data transfer speeds and 4K @ 60Hz, RGB 4:4:4 colour space. Looks like I might have to go with two cables - one USB-C > USB-C for USB data, and USB-C to DisplayPort for video.

Thanks again for your help.

@lb2112
Copy link

lb2112 commented May 21, 2023

OK, was actually happy to leave it YPbPr mode as it looked good enough, but am now noticing that certain shades of grey (e.g. some website backgrounds) are creating a flickering effect in this mode, when covering a certain percentage of the screen (around 75% or more). RGB doesn't have the same issue. Other M1 users have reported this as a problem with some other Dell monitors, like the S2722QC. Not sure where to head with this other than the dual cable solution.

@traderdude123
Copy link

@lb2112

But M1 Macs can do 6k @ 60 hz connected to an external monitor(from apple website specs). So 4k@60hz shouldn't be a problem. yes the RGB requires full bandwidth compared to YPbPr. In YPbPR mode , I m not sure if it does full chroma or does it to chroma sub sampling. In either case, a monitor like that should be able to do 4k@60hz easy with the M1 Macs. Even prior intel Macs could do 6k @ 60hz.

I would also suggest to check connecting your M1 Mac with any other 4k 60hz monitor or TV. Just to make sure Monitor is not the issue.
Does your monitor require a firmware update?

@law94air1976
Copy link

will this work on intel macs? I have a MacPro 5,1 running Monterey 12.3 - LG C1 OLED and RX 6600XT with HDMI 2.1 - getting 4k@120 ybr420 but would like RGB for better text quality.

@GetVladimir
Copy link
Author

@law94air1976 no, this procedure only works for M1 and M2 based Macs.

However, there are other scripts that already work great for x86 based Macs. You can try:
https://gist.github.com/ejdyksen/8302862
or
https://gist.github.com/adaugherity/7435890

@traderdude123
Copy link

@law94air1976 ,

you will not get 4k 120hz RGB 444 on intel Macs either with a MacPro or a e-gpu. Apple has deliberately limited it to 4k 60hz RGB 444 on the AMD 6000 Cards.

I even tried with a DP 1.4 to hdmi 2.1 adapter with VM700 chipset with the firmware that gives 4k 120hz RGB 444 using USB-C to hdmi 2.1 adapter. The same adapter(USBC-HDMI2.1) gives 4k 120hz RGB 444 with Apple silicon Macs. So intel is a no go.

@marekdvorak81
Copy link

Hi, I'm on Ventura 13.3, my DELL U3014 switched to RGB after modifying the files in /Library/Preferences and ~/Library/Preferences/ByHost.
After restart the files were overwritten removing the "LinkDescription" section. I locked the file in /Library/Preferences, the file is not being modified and I get RGB after restart, however it still resets to YPbPr when going back from sleep, even though the files are not overwritten. Any hints here?

@GetVladimir
Copy link
Author

@marekdvorak81 Thank you for your comment.

You did everything correctly. There is an issue in newer versions in macOS which will switch to YCbCr after waking up from sleep.

At the moment, the workaround is to reboot the Mac or prevent it going to sleep

@traderdude123
Copy link

@marekdvorak81 and @GetVladimir

As a paid alternative , might I suggest Better Display. with Better Display , you don't need to reboot after going to sleep. It retains the RGB Settings without even a screen refresh.

Please note I m not in any way affiliated with Better Display. This recommendation is purely based on my experience as a paid users of Better Display.

As of now this is the only working solution that meets the users requirements. The rebooting just to keep the RGB settings is a real pain in practice. That's why I bought BD.

Don't get me wrong @GetVladimir , but this plist modification method is a hit or a miss. but BD Utility is a sure way.

@taylor325
Copy link

taylor325 commented May 28, 2023

Ok guys! I figured how to get always working RGB for ALL SCREENS with GetVladimir method + BetterDisplay.
YESSS!!!!! No more reboot needed! 😎
I followed @GetVladimir + @traderdude123 methods + added more instructions.

You need BetterDisplay and AW EDID Editor apps. (BetterDisplay is free for 14 days, AW EDID Editor is free. 🤩)
Open BetterDisplay.
Go to: Settings -> Displays -> Retrieve display EDID (Extended Display Identification Data)
Retrieve EDID Data -> Export EDID Binary -> Save EDID.bin file to desktop (Use OS Managed method)

screen 1

Open AW EDID Editor and file -> Open your saved EDID.bin file from desktop.
Go to: Header -> Monitor suport and turn off YCrCb 4:4:4 + YCrCb 4:2:2 options. Don't touch for other options!
Save as your modded EDID for desktop with EDID modded.bin file name.

screen 2

Open BetterDisplay again.
Go to: Settings -> Displays -> Custom display EDID (Extended Display Identification Data)
-> Upload custom EDID for this display -> Upload EDID Binary -> Load your saved EDID modded.bin file.
Click Apply EDID Now and your monitor instantly get RGB! 😎
Click EDID override options -> Automatically apply custom EDID upon detection of this display.
Click Preserve continuity in case of an EDID display identity change.
Click Restore factory EDID on quit.
Use my settings for safe!

screen 3

Make sure to run BetterDisplay at startup!

screen 4

Reboot and enjoy RGB screen! 😎

Additional information: If you need RGB screen on login screen you still need this and this procedures for perfect work!

@GetVladimir
Copy link
Author

@taylor325 Thank you so much for the info and for the detailed instructions! I'm glad to hear that you got RGB color output working fully

@Anatharias
Copy link

@taylor325 You're the best !!! Thanks for sharing with the community ! Shame on Apple for not allowing this out of the box

@LetrixZ
Copy link

LetrixZ commented Jun 5, 2023

@taylor325 @GetVladimir do you think this could be done without BetterDisplay?
I would like to try first but my trial already expired a few months ago.
I would like to keep using my USB-C Hub for display output instead of the adapter.

EDIT: Seems like it's working fine after applying this workaround. RGB with 120Hz. Even with HDMI through the same dock :)

@GetVladimir
Copy link
Author

GetVladimir commented Jun 6, 2023

@LetrixZ Thank you so much for your comment!

Yes, the alternative procedure still works without the need to use any 3rd party apps, as you've mentioned.

It's interesting to see if the new macOS 14 Sonoma Beta released today addresses any of the issues.

@Averyy
Copy link

Averyy commented Jun 13, 2023

@GetVladimir I had to get an RMA replacement for my dell ultrasharp that died and since then I haven't been able to get it to set to RGB. On latest 13.4 one monitor connected by USB-C and one via HDMI (both 4k dell ultrasharps).

Tried everything here and nothing is working. I previously had it working fine via editing the plist file but since the new one I can't get it to go to RGB. I also tried stationary+locking it and no luck.

Any tips or has anything changed?

@GetVladimir
Copy link
Author

@Averyy thank you for your comment.

The procedure still works on 13.4. My suggestion would be to try and switch the monitor cables (connect the new one to USB-C and the other to HDMI) and try to modify the plist file again.

@Averyy
Copy link

Averyy commented Jun 13, 2023

And it should work on HDMI as well as USB-C?

Inside the plist file do I only put it in the 2 places at the top of the file? or every where?

@GetVladimir
Copy link
Author

@Averyy yes, it should work for both connections.

For USB-C to DisplayPort cable, you don't even need to modify the plist file.

However, since it's hard to determine which monitor is which, you need to add the LinkDescription key to each UUID, since each one is representing a different connected monitor

@Averyy
Copy link

Averyy commented Jun 13, 2023

@GetVladimir ok thanks for the help. I'll order new monitor cables and try again. Will get a usbc-dp to make the one monitor easy, and then for the hdmi one hopefully a new cable does the trick.

@GetVladimir
Copy link
Author

@Averyy not a problem, I'm glad if it helps.

Let us know how it goes

@taylor325
Copy link

taylor325 commented Jun 14, 2023

@taylor325 @GetVladimir do you think this could be done without BetterDisplay? I would like to try first but my trial already expired a few months ago. I would like to keep using my USB-C Hub for display output instead of the adapter.

EDIT: Seems like it's working fine after applying this workaround. RGB with 120Hz. Even with HDMI through the same dock :)

Hello @LetrixZ Maybe they will fix the bug in macOS Sonoma. BetterDisplay is first aid for me for every day life with M1 Mac.

@entropyconquers
Copy link

Automating RGB Color Force on M1/M2 Macs

Hello @LetrixZ @taylor325 @Averyy @Anatharias @traderdude123 @marekdvorak81

I have created a script that automates the steps mentioned by @GetVladimir to force RGB color mode on external monitors for M1/M2 Macs. I have tested it on a Mac Air with M1 chip.

You can find the script and its instructions in the following repository: Force-RGB-Color-on-M1-M2-Mac-Script

Feel free to try it out and update this README if it works for you as well. Cheers!

@GetVladimir
Copy link
Author

GetVladimir commented Jun 18, 2023

@entropyconquers awesome work, thank you so much for creating the script and for sharing it!

I will check it out and update the post as soon as I'm in front of a computer.

Update: I've added a link to the script in the original post: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#apps-based-on-this-method

@traderdude123
Copy link

@entropyconquers

you could write the entire script in python. why write half in bash? any particular reason?

In any case , good effort. Appreciate it.

@mafeko
Copy link

mafeko commented Jun 19, 2023

Thanks a ton @GetVladimir and @entropyconquers for your efforts. struggled a long time with my M1 you made my day 🎊 🚀

@entropyconquers
Copy link

@entropyconquers

you could write the entire script in python. why write half in bash? any particular reason?

In any case , good effort. Appreciate it.

@traderdude123 for some reason running python with sudo was not enough to copy and move/rename the plist file from /Library/Preferences.

I tried writing the whole thing with bash but modifying JSON/XML is a nightmare in bash without any external dependency.

@GetVladimir
Copy link
Author

@mafeko thank you so much for your comment and I'm glad to hear that you got RGB color output working

@traderdude123
Copy link

traderdude123 commented Jun 19, 2023

@entropyconquers
can you try this.

Write entire thing in python
then

  1. chmod +x pythonscript.py
  2. sudo -E pythonscript.py

@carlosvigil
Copy link

Thanks @taylor325 @GetVladimir ! It's been years and I can finally calibrate my monitors with some reasonable confidence.

@GetVladimir
Copy link
Author

@carlosvigil Awesome! Thank you so much for your comment and I'm glad to hear that you got RGB color output working

@Kimbo0o
Copy link

Kimbo0o commented Jun 23, 2023

For some reason these methods only work if I keep my MacBook Air M1 opened. If I close the lid or connect my Monitor with the lid closed it uses YPbPr. I would prefer to run my Macbook in Clamshell mode but I can't.
The only way to get RGB working with a closed lid is right after a reboot. But then the USB Hub in my Monitor (Dell P3421W) won't work.

@GetVladimir
Copy link
Author

@Kimbo0o yes, you're right. The more recent versions of macOS Ventura reset the RGB color when waking the MacBook from sleep.

One workaround is to reboot it or prevent it from going to sleep.

I'm not sure how that will work with your USB hub though. It might be better to connect your monitor directly to the MacBook in that case

@asipirn
Copy link

asipirn commented Jun 27, 2023

@marekdvorak81 and @GetVladimir

As a paid alternative , might I suggest Better Display. with Better Display , you don't need to reboot after going to sleep. It retains the RGB Settings without even a screen refresh.

Please note I m not in any way affiliated with Better Display. This recommendation is purely based on my experience as a paid users of Better Display.

As of now this is the only working solution that meets the users requirements. The rebooting just to keep the RGB settings is a real pain in practice. That's why I bought BD.

Don't get me wrong @GetVladimir , but this plist modification method is a hit or a miss. but BD Utility is a sure way.

Thank you for all your suggestions. The color issue with the external monitor can be quite frustrating, and I'm interested in trying the troubleshooting methods you provided. However, I have some questions now. Can I get help from you regarding the implementation of using the BD to modify EDID and upload it? Is this implementation done at the software level or does it directly modify the firmware of the display? If it modifies the firmware of the display, will it lead to any missing features when other devices are connected to this display? I would greatly appreciate it if you could find some time to answer my questions!

@traderdude123
Copy link

@asipirn

Modifying and uploading of EDID is done at a software level. There is no modification of firmware of the display.

To modify the firmware of the display , only the manufacturer of the display can provide the utility to do so. not a 3rd party utility like BD.

BD allows you to reset the EDID to original at any time. you can check the BD GitHub page for more details.

@JamieRosenberg
Copy link

@GetVladimir Any advice on how to do the almost opposite, I want to force YCBCR444 (for whatever reason looks far better on my projector). Any idea what the values should be for this?

@GetVladimir
Copy link
Author

@JamieRosenberg thank you for your question. Yes, the Pixel Encoding should be set to 1 and this would usually give you YCbCr color output.

Not sure whether it will be 4:4:4 though.

@vittau
Copy link

vittau commented Jul 3, 2023

I updated my work Mac to Ventura 13.4.1 last Friday, and today I plugged it on my monitor via HDMI and suddenly the colors were fixed!
Not sure if they changed something, or if it's just temporary luck on my side. Anyone else had a similar experience?

@GetVladimir
Copy link
Author

@vittau thank you for the comment.

That is awesome! I haven't heard more reports about it, but it would be great if they fixed it

@mafeko
Copy link

mafeko commented Jul 3, 2023

Confirmed on my end as well @vittau . 🎊 😍 finally !

@GetVladimir
Copy link
Author

@mafeko thank you for the confirmation! That is awesome

@jacek-jablonski
Copy link

I updated my work Mac to Ventura 13.4.1 last Friday, and today I plugged it on my monitor via HDMI and suddenly the colors were fixed! Not sure if they changed something, or if it's just temporary luck on my side. Anyone else had a similar experience?

does it mean it should output RGB on HDMI by default? For me, the output is still YPbPr. MacOS 13.4.1.

@vittau
Copy link

vittau commented Jul 6, 2023

It's not consistent apparently, sometimes it's fixed, and sometimes it's not...
EDIT: It appears to break after sleeping, and then fixes itself again after restarting.

@zhxst
Copy link

zhxst commented Jul 7, 2023

It's not consistent apparently, sometimes it's fixed, and sometimes it's not...
EDIT: It appears to break after sleeping, and then fixes itself again after restarting.

It definitely not fixed the problem after sleeping.

@esmorun
Copy link

esmorun commented Jul 8, 2023

I have found that as soon as the screen goes to sleep or I unplug it, the fix no longer works. A reboot solves the problem but only as long as you keep the screen awake. Any solution for this?

@traderdude123
Copy link

@esmorun

Paid - Yes.
Free - No.

Best bet would be Sonoma. But its still in beta so not recommended.

@jacek-jablonski
Copy link

@traderdude123 does Sonoma beta fix the problem or just a guess?

@esmorun
Copy link

esmorun commented Jul 8, 2023

@traderdude123 Has it been confirmed fixed in Sonoma? The bug has been around for as long as I have had my M1 air so I wouldn't count on Apple ever fixing the bug.

By the way you should all make sure to send a report to Apple: https://www.apple.com/feedback

@traderdude123
Copy link

traderdude123 commented Jul 9, 2023

@jacek-jablonski
@esmorun

I have not tested on Sonoma. waiting for public release.

But i have read reports from other users who are using beta. They are even getting 4k 120hz RGB 10 bit with AMD 6000 Series cards on hackintosh's as well. This was not possible on Ventura. So its high likely that the sleep issue could be fixed on Sonoma.

if anyone is brave enough to test it on beta. It would be great. If anyone does test it. please let us know.

@GetVladimir
Copy link
Author

I've just tested it on Sonoma Developer Beta 3. I've deleted all the display plist preferences files and started fresh.

Here are the results:

  • The HDMI to HDMI connection still defaults to YCbCr Color Output (as usual)
  • The USB-C to DisplayPort connection defaults to RGB Color Output (as usual)
  • Forcing RGB Color output still seems to work with the original procedure of modifying the plist files
  • Modifying the display plist files still works with the alternative version
  • After the plist files are modified, putting the Mac to sleep and waking it, it seem to keep the RGB Color output (so this one seems to be fixed, at least on a M1 Mac mini)
  • There was a strange issue with the Magic Mouse connecting and disconnecting every few seconds after restarting Sonoma a few times. Turning off the Magic Mouse and turning it on seems to fix this for the moment.

@traderdude123
Copy link

traderdude123 commented Jul 9, 2023

@GetVladimir

Thanks for the confirmations. Finally, some progress.

Also the HDMI-HDMI defaulting to YCBCR is actually correct since HDMI is predominantly used by TVs and YCBCR gives the best picture quality. However if you want to use it as a Monitor we need RGB. But normally its not expected that people use TV as monitors.

For monitors , USB-C/DP is primary connection and hence defaults to RGB , which is also the correct thing to do.

But what apple needs to provide is a user selectable option in the Display section of settings for YCBCR or RGB.

@GetVladimir
Copy link
Author

@traderdude123 not a problem, thanks for the reply.

Yes, indeed. It seems that Sonoma is getting more optimized than Ventura ever was

@DeepSubMicronMusic
Copy link

Hi @GetVladimir , many thanks for this info, I have just fixed a new M2 mac mini connected to an Acer widescreen monitor via HDMI (for the moment, usb->DP is the next step) using it.

However I am wondering why your examples have the Range key set to 1, which appears to give limited range colour; surely for any computer monitor, and to be honest any modern TV really, you want full range colour, which appears (visually at least, the monitor doesn't report the full format details in its OSD unfortunately) to be the case when the range key is set to 0.

@GetVladimir
Copy link
Author

@DeepSubMicronMusic Thank you for the reply and I'm glad that you got RGB color output working.

That's a good question. I don't really have confirmation that the Range key affects full and limited color (even though initially that might make sense).

The reason why I set the Range to 1 in the original tutorial is because macOS ignored the display plist file if you set it to 0.

If you can set it to 0 and macOS still accepts the plist file in the newer versions, you might want to try using that instead

@DeepSubMicronMusic
Copy link

@GetVladimir OK, so although it is a data point of one, I can say that on the latest OS release changing this value to zero for me has the effect that I would expect switching to full range, i.e. blacks are now properly black, and whites are properly white. I wish I still had access to a HDMI analyser to see what was really happening both with the signal format and the infoframes, but sadly that was a former life.

I would suggest giving it another go, for me it made a big difference to the contrast on the UI in dark mode, but more importantly shadow detail on images now looks correct rather than washed out and posterized (which is the problem that actually led me to find this post, because I recognised that it probably meant the output the format was wrong).

@GetVladimir
Copy link
Author

@DeepSubMicronMusic thank you for the info, I appreciate it. Those are good points.

I think we might need to test it connected to a TV, since those usually have options in the settings to show when they are receiving limited or full range.

Technically, they should adjust automatically on the receiving and to match the output source, but it's nicer to have full range when possible

@cooltig
Copy link

cooltig commented Jul 13, 2023

Hi Vladimir,

thank you for all your work and detailed instructions but I tried that from your Youtube video but it doesn't work. I still get fuzzy colors wenn switching my Dell monitor to RGB mode.
I have a MacBook Pro 14 (M1 Pro) and MacOS 13.4.1 (c).
Any ideas?

@GetVladimir
Copy link
Author

@cooltig thank you so much for the comment and for the details.

I'm guessing this might be the same question posted on the Reddit topic, so I'm going to post the answer here too for future reference.

If your monitor is Dell and uses USB-C to USB-C connection, please make sure to turn off High Data Speed and choose High Resolution instead in the Monitor menu.

As you've mentioned, you might also need to turn off MST and DDC/CI

@dainiusm07
Copy link

@GetVladimir Thank you very very much!

@GetVladimir
Copy link
Author

@dainiusm07 you're very welcome.

Thank you so much for your comment and I’m glad if you found the guide useful

@DeepSubMicronMusic
Copy link

@GetVladimir A quick update from my playing about. While setting up more things on the new mac I did something (possibly related to using the rectangle window manager or tinkertool to change some dock settings) which caused the display output format to reset again for my login, i.e. it was still fine for the login screen on reboot but as soon as I logged in I was back to the wrong output format.

Having backed out the changes I had been making to the dock settings and uninstalling bits of software running at login that might have been effecting it to no avail and finding that it wasn't something simple like a new display plist file appearing in my local library, I was a bit concerned that I wasn't going to be able to get the output format back to what I wanted. So I had a step back and a bit of a think about what was going on.

I came to the conclusion that the advice to delete the user specific display plist in ByHost was probably mistaken and that the better advice would be to make the same plist property changes to both the system file and the local user version of the file. As I had saved the original before deleting it (I hope everyone has taken that advice) I put it back with the change made and it is now working again. As a side note, this doesn't solve the problem of the screen sleeping breaking it again until reboot, but I think it is a more robust change than simply deleting the user version of the file.

@GetVladimir
Copy link
Author

@DeepSubMicronMusic thank you for the update and for the details.

Yes, the alternative method modifies the ByHost display plist file, same as you've suggested: https://gist.github.com/GetVladimir/c89a26df1806001543bef4c8d90cc2f8#alternative-terminal-commands-to-force-rgb-color-output-on-m1-and-m2-based-macs-and-workaround-for-losing-rgb-color-after-waking-up-from-sleep

Losing the RGB color output when waking from sleep was a bug in macOS, and it seems to be fixed in macOS Sonoma Beta

@dainiusm07
Copy link

It seems that when RGB output is lost after waking up from sleep it could be restored without restarting the Mac. Manual Log Out is enough to get back the RGB

@GetVladimir
Copy link
Author

@dainiusm07 yes, you're right. As long as the ByHost display plist file is modified, it should be re-read on login again.

It should technically be read on wake from sleep, but there seems to be a bug in the later versions of Ventura.

In macOS Sonoma beta, the waking up from sleep seems to be fixed already

@dainiusm07
Copy link

I managed to resolve RGB loss on wake up bug by accident on my macbook. For folks using macbooks:

  1. Unplug your monitor
  2. Restart macos
  3. Login
  4. Plug your monitor
  5. Put macbook to sleep manually & verify that after waking it up RGB is in place

I'm on Macbook Pro M1 with Ventura 13.4.1 (c), plugged via HDMI-HDMI. Also I have edited both plist files in /Library/Preferences and in $HOME/Library/Preferences/ByHost and both files are configured to support RGB on both variants (macbook screen + external monitor & only external monitor)

@GetVladimir
Copy link
Author

@dainiusm07 thank you for the details and for the step-by-step guide for the solution.

Let's see if other users can replicate it too.

I'm currently on the Sonoma beta, and it seems to work by default

@zdenek-jonas
Copy link

zdenek-jonas commented Jul 17, 2023

I can confirm that the procedure from @dainiusm07 worked on my M2 14 mackbook pro too.

@GetVladimir
Copy link
Author

@zdenek-jonas thank you so much for checking this and for the confirmation

@zdenek-jonas
Copy link

zdenek-jonas commented Jul 18, 2023

Unfortunately, the next day to wake up the PC it's flipped again. I am going to try Sonoma Beta

@dainiusm07
Copy link

@zdenek-jonas Have you edited both files in /Library/Preferences and $HOME/Library/Preferences/ByHost ? Make sure that your external monitor refresh rate is set to the same value on all variants of monitors combinations & it is the same in both files. Different refresh rates causes external monitor to flash on closing/opening macbook screen and I guess it could cause some kind of issues

@zdenek-jonas
Copy link

@zdenek-jonas Have you edited both files in /Library/Preferences and $HOME/Library/Preferences/ByHost ? Make sure that your external monitor refresh rate is set to the same value on all variants of monitors combinations & it is the same in both files. Different refresh rates causes external monitor to flash on closing/opening macbook screen and I guess it could cause some kind of issues

I have already installed Sonoma Beta. Now it stands RGB. Before that everything worked fine until I closed the laptop once, connected to the monitor. Since then, I've tried absolutely everything but it never worked like it used to. Let's see now.

@dangh
Copy link

dangh commented Jul 19, 2023

If anyone willing to pay for an easier solution, buy BetterDisplay app and follow this instruction. There're some great improvement over the plist manipulation method:

  • The EDID get re-applied when you turn the monitor on/off automatically, so you don't have to restart your Mac.
  • If some other apps mess up your display (Dota 2 in my case), it won't anymore because the display now has a fixed config. Even if it does, you can just re-apply the EDID manually.

@BermudaBen
Copy link

BermudaBen commented Jul 30, 2023

This method doesn't work on my M1 MacBook (Monterey). The lines of code to be changed didn't exist in my displays plist file, so I just added them. What I found confusing was that my plist file seemed to contain much more code than Vladimirs. It contains around 650 lines of code with a repeating structure of "Current Info", "Rotation" and "UnmirrorInfo". I inserted the additional code just below the first "Current Info" block, exactly as in Vladimirs screenshot.

I have a Dell U2720Q monitor connected via USB-C. It seems that whenever I first launch the MacBook and then switch on the monitor, the color is set to YPbPr. If I want RGB color I need to reset the monitor to RGB (which results in a pink-green display), then unplug the USB-C cable and plug it in again. Modifying the displays plist file hasn't changed this behavior. I also tried deleting both plist files (including the on in the ByHost folder) and then modifying the one that has been newly created.

@GetVladimir
Copy link
Author

@BermudaBen thank you for your comment.

Please check in your monitor setting for an option where you can choose between "High Data Speed" and "High Resolution" and set it to "High Resolution".

If that doesn't work or if you need the faster data on the USB ports of the monitor, please connect the M1 MacBook to the Dell U2720Q with USB-C to DisplayPort cable instead

@BermudaBen
Copy link

@GetVladimir Thank you for your reply. The monitor is set to "High Resolution". As for the connection: This would mean I won't be able to charge the MacBook from the Dell monitor, right? Why would it make a difference to use the monitors DP port instead of the UBS-C port? The video signal is DP in both cases. And: Do you know if this is a Dell-specific issue?

@GetVladimir
Copy link
Author

@BermudaBen not a problem, thank you for the reply.

When you mentioned that you have over 650 lines of repeating instances of Current Info in the plist file, this usually points to having a dock in the middle of the connection.

It seems that the USB-C to USB-C connection is considered as connected through a dock inside the monitor and then being converted.

The M1 MacBook doesn't seem to see it same as having an actual USB-C to DisplayPort connection.

This might depend on what type of conversion happens in the monitor and it's not isolated to only Dell monitors.

@satori-mitora
Copy link

After numerous attempts without success, I finally managed to succeed. I will record what I tried.

[1] I attempted to edit /Library/Preferences/com.apple.windowserver.displays.plist. This method involved changing the refresh rate and other display settings, but it failed.

[2] Next, I tried alternative method, but I couldn't find com.apple.windowserver.displays.[UUID].plist in /Users/username/Library/Preferences/ByHost. However, rotating the screen created a new com.apple.windowserver.displays.[UUID].plist. After executing Terminal commands, I finally achieved RGB!

Thanks to GetVladimir and everyone.

Lastly, I'll provide details about my setup: Mac mini M2, Mac OS 13.4.1 (c), HDMI to HDMI, DELL S2722DC.

@GetVladimir
Copy link
Author

@satori-mitora thank so much for your comment and for the detailed steps. Glad to hear that you got RGB color output working

@loucyan
Copy link

loucyan commented Aug 10, 2023

UPDATE: See my latest reply in this gist for complete steps for fixing this problem

If you're stuck with reseting to YPbPr after reboot or sleep here's what worked for me:

  1. Take the steps to edit plist in /Library/Preferences
  2. Remov plist in ~/Library/Preferences/ByHost
  3. Reboot

I removed the plist in ~/Library/Preferences/ByHost in recovery mode because i couldn't log in anymore since i somehow corrupted it .. but i guess it might work in the regular environment as well

okay so that was a short lived fix. here's how i got it to work better now:

  • Remove plist in /Library/Preferences
  • Remove plist in ~/Library/Preferences/ByHost
  • Empty trash
  • Reboot
  • Connect monitor via HDMI and close the macbook lid
  • Copy plist in /Library/Preferences to desktop, convert to xml, add lines below these steps after each <key>CurrentInfo</key><dict>...</dict> entry, convert back to binary, replace original file
  • Set the file to Stationary pad and Locked under file info in finder
  • Reboot
  • Open System Settings > Displays > Rotate your external screen 90deg and back
  • Copy plist in ~/Library/Preferences/ByHost to desktop, convert to xml, add lines below these steps after each <key>CurrentInfo</key><dict>...</dict> entry, convert back to binary, replace original file
  • Set the file to Stationary pad and Locked under file info in finder
  • Reboot

Now every time i start my macbook with the lid closed and connected to the external monitor, the external monitor receives RGB signal upon login.

The login screen for some reason starts in HDR+ mode (lol)

The external monitor for some reason looses RGB mode and switches back to YPbPr mode when disconnecting and reconnecting the HDMI cable though. But i can live with a setup where upon startup things work as expected.

Anyway, waiting for the fall release of the new OS where this nonsense has been fixed..

UPDATE: See my latest reply in this gist for complete steps for fixing this problem

@GetVladimir
Copy link
Author

@loucyan thank you for your comment and for the steps on how to fix it

@jackwilsdon
Copy link

jackwilsdon commented Aug 17, 2023

The menu on the LG UltraGear 27GL83A doesn't show the color format, but you can find it in the service menu by doing the following:

  1. Turn off the monitor by pressing in the control stick on the bottom
  2. Press the control stick left 3 times and right once
  3. Turn the monitor back on by pressing in the control stick
  4. Open the menu by pressing in the control stick and then pressing it right. This should open the service menu instead of the normal menu
  5. Scroll to "DEBUG INFO." using the control stick (pressing it upwards 3 times should loop round to the debug info) and press it right to enter the debug info menu
  6. Note the "COLOR FORMAT" displayed

You can exit the debug menu by pressing the control stick left, then exit the service menu by scrolling off the bottom of the menu using the control stick (pressing it downwards twice should do it) and pressing the stick in. Be sure not to accidentally change any values in the service menu!

These steps should hopefully work for other LG monitor models too.

@GetVladimir
Copy link
Author

@jackwilsdon that is awesome info! Thank you so much for sharing the detailed steps

@ioctlsg
Copy link

ioctlsg commented Aug 27, 2023

@GetVladimir thank you for your work. I couldn't understand why apple put us through this! but thank you and the kind people out their providing this solution. BTW i struggle a bit, until i read about the byHost folder. I delete all the com.apple.windowserver.* files and now my mac m1 behaves.

Screenshot 2023-08-27 at 1 55 13 PM

Screenshot 2023-08-27 at 1 59 31 PM

@GetVladimir
Copy link
Author

@ioctlsg Thank you so much for your comment and I'm glad to hear that you got RGB color output working

@vittau
Copy link

vittau commented Sep 22, 2023

Anyway, waiting for the fall release of the new OS where this nonsense has been fixed..

Wait, they fixed it? Do you have a source talking about this?

@loucyan
Copy link

loucyan commented Sep 27, 2023

Anyway, waiting for the fall release of the new OS where this nonsense has been fixed..

Wait, they fixed it? Do you have a source talking about this?

@vittau under Sonoma you still have to do the configuration manually, but the wake from sleep and unplugging the external monitor and plugging back in works as expected now as the external monitor retains RGB signal

Here's the steps for Sonoma. Do exactly what it says here, or you will end up with a partially working setup. To my findings all the rebooting is necessary to also capture the login screen configuration.

  1. Unplug external display, use only your laptop display for now
  2. We want to start with a clean configuration, so delete the two com.apple.windowserver.* plists under /Library/Preferences and ~/Library/Preferences/ByHost
  3. Reboot
  4. Now we want macOS to set up all configurations that will naturally occur when using our setup. Open System Preferences and set your desired resolution scale
  5. Reboot
  6. Keep your laptop display open and plug in the external display. Open System Preferences and set your desired resolution scale and assign the desired main display where your dock and main windows will appear
  7. Reboot
  8. Close your laptop display so only the external display is being used. Open System Preferences and set your desired resolution scale
  9. Reboot. Then, reboot again
  10. Now we have all possible configuration variants set up in both plists. Copy the two com.apple.windowserver.* plists under /Library/Preferences and ~/Library/Preferences/ByHost to your Desktop manually (cp command will not transfer the needed user privileges)
  11. Convert both plists on your Desktop to xml format with plutil -convert xml1 ~/Desktop/com.apple.windowserver.*
  12. Open both plists in a text editor. We now want to find occurrences of only the external display and add some additional config lines to them. I'm not sure how to identify them properly, but my external display is 60Hz so that's what i used to differentiate from the 120Hz built-in display configs. Add the code at the bottom of this reply to each external display config in both plists. Consult the screenshot provided in the original gist at the top to where exactly it should be placed
  13. Save both plists and convert them back to binary with plutil -convert binary1 ~/Desktop/com.apple.windowserver.*
  14. Check if the plists are valid with plutil -lint ~/Desktop/com.apple.windowserver.*
  15. Manually copy the updated plists back to their respective folders
  16. Right click and Get Info on both, and set them to Stationary pad and Locked
  17. Reboot and enjoy
<dict>
<key>BitDepth</key>
<integer>8</integer>
<key>EOTF</key>
<integer>0</integer>
<key>PixelEncoding</key>
<integer>0</integer>
<key>Range</key>
<integer>1</integer>
</dict>

@GetVladimir
Copy link
Author

@loucyan thank you so much for the detailed steps and explanation

@kmhcreative
Copy link

So when Sonoma was released and theoretically Big Sur won't be getting any more updates I finally upgraded to Monterey 12.7 (I always stay a couple versions back for sanity on my main work machine). I had this RGB mode working under Big Sur but Monterey broke it and I can't seem to get it back.

My main monitor is a 27" Dell S2721QS 4K monitor, connected HDMI-to-HDMI directly to my M1 Mac Mini. My second screen is a 27" LG 27LQ635S-PU FHD TV, connected HDMI-to-HDMI through a USB-C Dock. I'm using a Display Override with "DisplayIsTV" set to false to prevent macOS seeing the HDTV as a TV, so I can set it to 1920x1080 instead of 1080p, which vastly improved text legibility on it, but I have no idea if that monitor is actually in RGB color mode or not, I'm assuming it is because it's not blurry anymore, but text quality did slightly degrade after moving to Monterey.

I had my /Library/Preferences/com.apple.windowserver.displays.plist locked when I upgraded and it was still there and locked after Monterey installed, but doesn't seem to actually be doing anything anymore. I've tried deleting the one "windowserver" file I had in ~/Library/Preferences/ByHost/com.apple.windowserver.displays.[UUID].plist and it respawned but still no RGB mode on my Dell monitor. I also tried adding another file to my Displays Overrides for the Dell also with "DisplayIsTV" set to false, but that didn't work either.

As a side note, Monterey also can't seem to remember my monitor arrangement. I have to reorder them every time I reboot.

At this point, the only reason I care about trying to get the Dell back into RGB mode is because it now randomly experiences the flickering and ghosting problem, which I never saw under Big Sur so long as it was in RGB mode.

In addition to two HDMI 2.0 ports the Dell monitor does have a DisplayPort 1.2 on it too, but I don't have any cables, adapters, or docks for it. I haven't seen anyone talking about using an HDMI-to-DisplayPort cable or adapter, or what color mode that defaults to, but I'm assuming it would have to be an active adapter. Unless a USB-C dock with DisplayPort would be a better option, and then plug my LG HDTV into the Mac's HDMI out? I'd really hate to have to buy new hardware to work around what is clearly a software problem.

@GetVladimir
Copy link
Author

@kmhcreative thank you for your comment and for the details.

You might want to try modifying the displays plist file in the ByHost too, as it will take precedence over the one in the Library.

Regarding the monitor arrangements, this was issue in Monterey and I'm not sure if it got resolved.

The workaround is to try a different HDMI port on the monitor and see if that helps

@kmhcreative
Copy link

I tried using the "alternative" terminal commands shown above to modify the ByHost plist file and on reboot the Dell monitor is still in YPbPr color mode. I'll try the second HDMI port and see if that at least fixes the arrangement problem.

@GetVladimir
Copy link
Author

@kmhcreative thank you for the reply. You will have to modify two UUIDs in the plist file, since you have 2 monitors connected. Each one is only applied for one monitor.

@kmhcreative
Copy link

Ok, if I’m understanding you correctly, you’re saying I should have TWO plist UUID files in my ByHost folder, one for each monitor? But I’ve only ever had one UUID plist file in my ByHost folder. If I delete it macOS only recreates one file. I have no idea if this matters, but in the “Mission Control” settings I have “Displays have separate spaces” checked — but I’d think if anything that would make it more likely to create two display files, since it’s not seeing both screens as one space.

And inside that plist file there are ELEVEN sub-arrays under key “Configs” each of which has two main sub-sections, seemingly referring to two separate monitors, one of which has an “OriginX” of “-1920.”

I have this old Ruby script that seems to still pull EDID UUIDs for each monitor. But NONE of the UUID strings in my plist files match the EDID UUIDs that Ruby script pulls. The UUID on the plist filename doesn’t match either of them either.

When I manually rearrange the monitors to their actual positions, instead of updating any of the existing configs, it simply inserts another new array with two sub-sections with UUIDs that don’t match anything else. So now there are an even DOZEN entries in that file.

I should note that only the last three of the Config arrays have “LinkDescription” sections until I run those “alternative” terminal commands. Which, by the way, shouldn’t there be another line on the end that reads:

/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range 1" ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist

Otherwise it sets the Range to 0.

But the terminal commands only add the “LinkDescription” stuff to the first entry under “Config” and as soon as I manually re-arrange my monitors it overwrites it and the “LinkDescription” is gone. Not that it actually did anything in the first place.

Why does my Mac only create only one UUID display file in ByHost? And why does it have nearly a dozen entries, most of which don’t have a “LinkDescription” sub-section? Why does rearranging the monitors just add new entries to the file instead of changing configurations that are already there? Why do NONE of the UUID strings in that file seem to match the EDID UUIDs the Ruby script pulls?

On the other issue, switching HDMI ports on the monitor didn’t fix the arrangement problem. Switching which monitor is plugged into the Mac Mini HDMI and which is connected to the USB-C Dock, does fix the arrangement problem, but it always considers the HD screen the “Main” display, and even if I switch it in settings on the next boot it reverts back. It will ALWAYS set the Mac Mini’s HDMI port to “Main” and it will always position it to the left of the other display.

No changes in System Preferences will persist after a reboot.

I’m about ready to just give up on this. Thanks for your help though.

@GetVladimir
Copy link
Author

@kmhcreative you're welcome, glad if it helps.

There is only one displays plist file in ByHost folder.

Inside that file, there should be multiple UUID displays. You can add the LinkDescription to each one manually if you want to be sure.

Please note that you can't use the other scripts as they are only for x86 based Macs and they won't match the Apple Silicon UUIDs.

That being said, if you don't want to bother with this, the easiest workaround is to just connect both monitors with an USB-C to DisplayPort cable directly, without using a dock.

It will take up 2 USB-C ports on your Mac, but the displays should work properly and output RGB color

@kmhcreative
Copy link

Fixed it!

Remember how I said that my locked /Library/Preferences/com.apple.windowserver.displays.plist file from Big Sur was untouched after my upgrade to Monterey? That was the problem. I had to trash that file and force macOS to generate a new one. But the XML <dict> literally just had UUID entries in it, nothing else. It wasn't until I went into System Preferences and rearranged my monitors correctly that it updated that plist file with actual configurations for both my monitors. Minus the "LinkDescription" sections, of course.

Then I went through the steps outlined above to add the "LinkDescription" section to each monitor's entry, rebooted, and my display arrangement is correct and my monitors are in RGB mode.

I stupidly assumed that the plist file from Big Sur would just work with Monterey, so the one thing I hadn't tried was getting rid of it and making Monterey generate a new one to edit, and I didn't think I needed to edit the Big Sur plist because it already had the "LinkDescription" sections in it. But Monterey clearly didn't like something in that file, and because it was locked it couldn't update it.

Lesson learned, now I know what I need to do when I eventually upgrade to Ventura so I won't lose my RGB mode again.

@GetVladimir
Copy link
Author

@kmhcreative awesome! Thank you for the update and the solution, and I'm glad to hear that you got RGB color output working

@Eclipt1c
Copy link

Eclipt1c commented Dec 7, 2023

@GetVladimir many thanks for the great work that you have put in! I wanted to add a few things.

Alternate terminal way
This is a very nice and quick way to update plists, however, the values should be populated and Range is very important. This is the only way it works on my MacBook M2 Pro with LG C2. Also, if you have a true 10bit display, use BitDepth 10.
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays..plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:BitDepth 10” ~/Library/Preferences/ByHost/com.apple.windowserver.displays.
.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays..plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:EOTF 0” ~/Library/Preferences/ByHost/com.apple.windowserver.displays.
.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays..plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:PixelEncoding 0” ~/Library/Preferences/ByHost/com.apple.windowserver.displays.
.plist
/usr/libexec/PlistBuddy -c "add DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range integer" ~/Library/Preferences/ByHost/com.apple.windowserver.displays..plist
/usr/libexec/PlistBuddy -c "set DisplaySets:Configs:DisplayConfig:DisplayConfig:DisplayConfig:LinkDescription:Range 1” ~/Library/Preferences/ByHost/com.apple.windowserver.displays.
.plist

Regarding YCbCr444 vs RGB
If you have a Mac with HDMI 2.1 (starting with M2 Pro) and are able to get 10bit YCbCr444 (check screen OSD information, if on LG C2, keep clicking green button on the remote) working by default, I do not recommend messing around. 4:4:4 means no chroma subsampling and you will get absolutely no visual benefits from trying to get RGB to work. In theory, RGB has a slightly wider range, but as long as both your screen and computer are working on the same range (i.e. limited or low black level), it will sort itself out so that no one ever will be able to see any difference (especially at 10bit). Rather focus on getting a good calibration and your creative work.

@GetVladimir
Copy link
Author

GetVladimir commented Dec 7, 2023

@Eclipt1c Thank you so much for your comment and for the additional info for 10 bit color.

Regarding the YCbCr444 vs RGB, it seems there is a difference in the default color profile that macOS chooses, which could affect colors and calibration

@mnsk0000
Copy link

mnsk0000 commented Dec 9, 2023

When connecting to HDMI on my m1 MacBook Air, RGB output was successful, but the gamma value was destroyed (presumed to be an HDMI bandwidth issue).
When connected via DP, ypbpr is still output (in this case, the gamma value is normal).

@GetVladimir
Copy link
Author

@mnsk0000 if you're using a Dell monitor, make sure to set the Gamma to PC instead of Mac in the Monitor built-in menu and see if it makes a difference

@mnsk0000
Copy link

mnsk0000 commented Dec 9, 2023

@GetVladimir I using a Dell monitor, But this model not support Gamma setting menu

@GetVladimir
Copy link
Author

@mnsk0000 In that case, you can try changing the gamma in the color profile. Here is how to calibrate it in macOS Sonoma: https://support.apple.com/en-ie/guide/mac-help/mchlp1109/mac

@mnsk0000
Copy link

mnsk0000 commented Dec 9, 2023

@GetVladimir I can't setting gamma to Display Calibrator Assistant. I was only able to change the color temperature through this.

@mnsk0000
Copy link

mnsk0000 commented Dec 9, 2023

When connecting to HDMI on my m1 MacBook Air, RGB output was successful, but the gamma value was destroyed (presumed to be an HDMI bandwidth issue). When connected via DP, ypbpr is still output (in this case, the gamma value is normal).

When I connected both hdmi and dp and output to dp, I succeeded in outputting RGB from dp.
However, the gamma value still appears to be destroyed, so it may not be an HDMI issue.

@GetVladimir
Copy link
Author

@mnsk0000 Make sure to hold the ALT/OPTION button on your keyboard while clicking on the + on the color profile.

It should appear a checkbox with Expert Mode and the Gamma should be available:
gamma

@mnsk0000
Copy link

mnsk0000 commented Dec 9, 2023

@GetVladimir Thanks you
Have you or anyone else had any gamma issues?
monitor.co.kr The third on this site list is the contrast ratio test.
I couldn't distinguish values ​​above 92 in this test (I could distinguish them in ycbcr state)

@GetVladimir
Copy link
Author

@mnsk0000 Thank you for the info. I personally haven't noticed issues with Gamma unless the setting on the Monitor itself is set to the wrong value.

The slider that you've posted might be affected by contrast and brightness also though, as well as high RGB and low RGB (limited RGB and full RGB) range values

@mnsk0000
Copy link

@GetVladimir When I connected it with DP
I found that it works as RGB at 30hz and ypbpr at 60hz.

@GetVladimir
Copy link
Author

@mnsk0000 that doesn't sound right. Are you sure the USB-C to DisplayPort cable that you use is good for 4K60? (Many usually are)

@mnsk0000
Copy link

@GetVladimir The cable is fine. I Connected to DP-DP via Hub.
This could be a case of my hub or monitor being unusual.

@GetVladimir
Copy link
Author

@mnsk0000 thank you for the reply and for the info.

You're right, in that case the issue is very likely the hub not supporting 4K60 output.

Connecting your M1 MacBook Air with a direct USB-C to DisplayPort cable to the Dell monitor should solve the issue

@Averyy
Copy link

Averyy commented Jan 7, 2024

Gave up troubleshooting and just got 2 USBC-DisplayPort cables and all works fine in RGB now lol. Appreciate the effort.

@GetVladimir
Copy link
Author

@Averyy that is probably the best solution, other than the issue being fixed in macOS.

Thank you for the reply and the update, and glad to hear that you got it working

@exetico
Copy link

exetico commented Jan 18, 2024

I'm rocking two U2722D, and they're stuck at YPbPr. I've tried all your suggestions, but I've not been able to force RGB to work with my hardware combo:

Have anyone else managed to get this combo working?

The problem for me, is that the Dell screens generate wierd things if low-light grey text is on the screen, like described in the Reddit post "M1 Mac + Dell Monitor Flickering Issue Fixed - S2722QC - USB-C - Monterey".

Once occurred once (the flickering), it's even visible in the Dell "diagnostics" mode on the screen:
billede

It's not a problem in RGB Color-mode, which I use at home (See Bonus info at the bottom)

I'm still unsure what's going on?

My two old U2515H's was rocking on the same system with no issues what so ever.

I'm using the Satechi-adapter which did work just fine with two U2515H's, so I'm unsure why the two U2722D does not work with the same cables and adapter. I though I upgraded my setup, but it's a pain right now...

Dell did get all the details on WhatsApp, and decided to replace the two U2722D screens with two refurbished U2722D, even though I clearly mentioned that it must be related to software/firmware.

Maybe I need to give the USB-C > DisplayPort cable a go? But, that would require me to manually plug four cables in the laptop at all time, which is not ideal.

Bonus info: At home I'm also using two U2722's and they work just fine, but here I have a DisplayLink dock in between (Lenovo 40AF with DisplayLink), which gives RGB output just fine. I know that's not a solution by itself, as it's requires a dock + adapter to the Lenovo dock, and adds a bit of delay as DisplayLink needs to proces the output, too. And the DisplayLink software to be running in the background as well...

@GetVladimir
Copy link
Author

@exetico thank you for your comment and for the useful details.

My guess regarding why the 2515H worked while the U2722D is that the 2515H defaults to RGB when initializing the HDMI connection.

You've mentioned that all 4 ran at the same resolution and refresh rate, so that shouldn't be the issue.

From the image you've posted, it's very strange that they have what looks like image retention, even on the Dell diagnostic screen.

If possible, it might be a good idea to connect both monitors with USB-C directly, just to see if that would resolve both the flickering and the RGB issue

@GetVladimir
Copy link
Author

@exetico I've been researching more about the image retention issue that you've mentioned, and I've found more articles about it: https://www.eizoglobal.com/support/compatibility/pc/mac/m1m2/

This is what the article above mentions:

Flicker or image burn-in have been reported in some cases when connecting an external monitor to a Mac computer equipped with Apple M1/M2/M3 series chip.

Although the cause of the phenomenon and the conditions under which it occurs are not confirmed, it is thought to be due in part to the fact that the video signals output from Mac computers equipped with Apple M1/M2/M3 series chip behave differently than Mac or Windows computers with Apple Intel chip or Windows PCs.

When displaying certain images or video, the brightness of the screen fluctuates in short cycles, causing flicker or image burn-in occurs, causing images to persist.
The phenomenon may continue even after switching to another image or signal input.

The video signal output from the Mac computer with Apple M1/M2/M3 series chip is fluctuating in several frame cycles, which may be interfering with the LCD panel control of the external monitor.
Video signal output from a Mac or Windows computer with Apple Intel chip do not fluctuate in this way, so the phenomenon is not likely to occur.

@exetico
Copy link

exetico commented Jan 18, 2024

@GetVladimir

My guess regarding why the 2515H worked while the U2722D is that the 2515H defaults to RGB when initializing the HDMI connection.

Good point. I didn't think of that. The old 2515H's are sold now, so I don't have a option to test them.

From the image you've posted, it's very strange that they have what looks like image retention, even on the Dell diagnostic screen.

If possible, it might be a good idea to connect both monitors with USB-C directly, just to see if that would resolve both the flickering and the RGB issue

There's quite a few threads about flickering Dell screens in combination with Apple Arm Silicon. I've also done the same things, as recommended in the article you're recommended. But, sadly I'm still having a hard time.

I'm wondering if there's any ways to enforce the RGB, as the YPbPr flickering are a real pain.

Thank you for your inputs, btw! It's a good idea to test with a USB-C > DP, so I'll do that in the next week. I'm not really sure what to do next. It's crazy that a popular display like the Dell Ultrasharp and the M1 doesn't play nice together, and Dell didn't even manage to mention that while I tried to talk with their support team.

@GetVladimir
Copy link
Author

@exetico thank you for the reply.

Other monitors seem to have the flickering issue as well, including Benq and Samsung.

The issue is very likely in the Apple Silicon, since all other Macs, PCs and devices work properly with those exact same monitors.

Dell also have a support page about this issue: https://www.dell.com/support/kbdoc/en-us/000218313/flicker-on-dell-monitors-connected-to-mac-s

@gammelby
Copy link

Thanks for the research and guide! I was going insane of the blurred text on a new Samsung G7 monitor connected through HDMI to my m1 MBP. However, I cannot get the tricks to work - tried following the guide and using the scripts that wrap the same steps. I apparently have the multi-configuration (I don't know why). So the following hint applies to me:

Note that there might be multiple instances of the PixelEncoding and Range keys in the same file, one for each output of your monitor and for different AirPlay devices. You might need to update the integer on each one to get RGB color output on all displays.

Can you elaborate the "update the integer on each one"? Should the range integer be incremented for each? I tried setting both to 1 and then setting the first to 1 and the next to 2. Same result (blurry text). Are there anything else to try in this scenario?

Note that the blurry text is the only indication of the RGB issue as I cannot find any system information that tells if the signal is RGB or not. But I have tried disabling font smoothing etc (was already done years ago I think), to no avail - and all looks crisp on my old USB-C connected LG display.

Thanks in advance!

@GetVladimir
Copy link
Author

@gammelby thank you so much for your comment.

You're right, if there are multiple instances of the DisplayConfig and CurrentInfo, you will need to add the PixelEncoding and Range manually to each one.

You don't need to change the values. They can be exactly the same as the first instance.

If it's easer, you can make a backup and just delete the Displays plist file. It should be recreated again after reboot and resolution change, and it should not have as many duplicated instances.

Regarding the indicator whether RGB color output is enabled or not, the easiest way is indeed if your monitor's built-in menu shows it.

If it doesn't, you can sometimes determine it by going to System Settings > Displays > Color Profile and see if any profiles starting with SD or HD show up as compatible with your monitor (shown above the horizontal line in the list). If they are, you are running in YCbCr mode. If only your Monitor Color Profile is above the line, then it's usually RGB Color Output. This is not always a reliable indicator though.

If nothing else works, it might be for the best to look for an USB-C to DisplayPort cable and connect the monitor with it instead of the HDMI.

@gammelby
Copy link

@GetVladimir thanks for your message and the hints, I will take a look!

@exetico
Copy link

exetico commented Mar 15, 2024

I tried everything, and ended up ordering a Lenovo DisplayLink dock (40AF). Crazy and unnecessary cost, and extra delay. But as it's only running in RGB, my combination now works. If someone finds a good way to do this, I'd be happy to revert back, however, right now, I don't want to spend more time on it. I don't get why Apple does not give more control to the user, to enforce the usage of RGB 🙃 ...

@GetVladimir
Copy link
Author

@gammelby you're welcome. Let us know how it goes.

@exetico thank you for the update and glad to hear that it works with the DisplayLink dock.

You're right, it would be so easy for them to add an option menu to choose between RGB and YCbCr, same as they already have on the Apple TV Settings.

At the very least, it should be set to default to RGB whenever possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment