Skip to content

Instantly share code, notes, and snippets.

Last active July 18, 2024 14:37
Show Gist options
  • Save ejdyksen/8302862 to your computer and use it in GitHub Desktop.
Save ejdyksen/8302862 to your computer and use it in GitHub Desktop.
A script to fix EDID problems on external monitors in macOS


A script to fix EDID problems on external monitors in macOS.


  1. Connect only the problem display.

  2. Create this directory structure (if it doesn't already exist):

    sudo mkdir -p /Library/Displays/Contents/Resources/Overrides
  3. Download this ruby script in that directory:

    cd /Library/Displays/Contents/Resources/Overrides
    sudo curl -O

    Note: You may want to use adaugherity's version of the script instead.

  4. Run the script we just downloaded (as root again). This creates a new display override plist file.

    cd /Library/Displays/Contents/Resources/Overrides
    sudo ruby patch-edid.rb
  5. Unplug and replug in the problem display.

Additional reading/acknowledgements

  • The original forum thread
  • An improved version of the script by adaugherity
  • An explaination of the problem from Atomic Object's blog
  • Thanks so much to @stackrainbow for pointing out that this can be done without disabling SIP.
  • This version appears to work in Catalina and Big Sur. See earlier revisions for what worked (with disabling SIP) in earlier versions of macOS, which require the override plist to be in a different directory.
# Create display override file to force Mac OS X to use RGB mode for Display
# see
# Update 2013-06-24: added -w0 option to prevent truncated lines
require 'base64'
data=`ioreg -l -w0 -d0 -r -c AppleDisplay`
puts "found display: vendorid #{vendorid}, productid #{productid}, EDID:\n#{edid_hex}"
puts "Setting color support to RGB 4:4:4 only"
bytes[24] &= ~(0b11000)
puts "Number of extension blocks: #{bytes[126]}"
puts "removing extension block"
bytes = bytes[0..127]
bytes[126] = 0
bytes[127] = (0x100-(bytes[0..126].reduce(:+) % 256)) % 256
puts "Recalculated checksum: 0x%x" % bytes[127]
puts "new EDID:\n#{{|b|"%02X"%b}.join}"
Dir.mkdir("DisplayVendorID-%x" % vendorid) rescue nil
f ="DisplayVendorID-%x/DisplayProductID-%x" % [vendorid, productid], 'w')
f.write '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">'
f.write "
<string>Display with forced RGB mode (EDID override)</string>
Copy link

casos92 commented Mar 15, 2023

I am getting

patch-edid.rb:11:in <main>': undefined method []' for nil:NilClass (NoMethodError)

when running sudo ruby patch-edid.rb

Copy link

dikamsiyoung commented Mar 27, 2023

✅ Confirmed working with:

  • Ventura 13.2.1
  • Adaugherity's Patch-edid.rb Script as in the OP
  • Sony X85J 4K TV
  • HDMI to DisplayPort Converter
  • Stone Henge Thunderbolt 3 Dock

Copy link

lelandbr commented Apr 4, 2023

I can also confirm this is working with:

  • Intel MBP 2019
  • DELL U2410 display
  • MacOS Ventura 13.1
  • HDMI cable, connected to HDMI to USB-C adapter

This is the best solution I've found for fixing blurry/jagged text on an external display with MacOS. Much better than other methods from top google hits! I've used it over the years with various laptops and displays and it's always worked great. Thanks so much for creating and maintaining this script!!!

Copy link

After override EDID, refresh rate is fixed, only 60Hz available, my screen is 100Hz, how to fix this? Thanks!

Copy link

cooltig commented Jul 13, 2023

When I run the script it shows an error:[
](patch-edid.rb:11:in <main>': undefined method []' for nil:NilClass (NoMethodError))

Copy link

Here is my issue, I am sending signal from Mac to a monitor via HDbaseT adapter, and I get a display like this:

Whats strange is if I rotate the picture 90 or 180 degrees it looks completely perfect. But setting it back to Standard it goes back looking like the picture. I tried running this script, but it didnt improve it.

Copy link

joevt commented Oct 15, 2023

@apassiou What Mac, GPU, resolution, adapter, monitor? Do you mean 90° and 270° rotation? If it were 180°, then you could just turn the display upside down. 90° or 270° means the height becomes the width which is lower than the original width. So maybe the adapter doesn't like the original width. This seems like a limitation of the adapter, gpu, or the display. Did you try without the adapter?

Copy link

Hello! i'm currently using a samsung qn90b connected to a macbook m1 2020" via a dell docking station. When connected to the docking, it's running at 8bit depth while if i plug the display straight into my mac, it runs at 10bit color depth. Any workaround for this issue? thanks!!

Copy link

@johntitor2049 the dock might not have the port or the bandwidth to support 10bit color depth, or the Mac simply doesn't recognize it properly.

If possible, it would be best to connect the monitor directly when 10bit color depth is required

Copy link

How can I activate HDR support with this patch?

Copy link

@Fedosov83 I'm not sure if you can use both HDR and RGB Color Output over a typical HDMI connection. You might need USB-C to DisplayPort for that, but it might again revert to YCbCr when using that combination

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment