Skip to content
MoreDisplays

Type to search.

Manual contents

HDR

After this page you will know which of the three ranges to pick, what headroom each one produces, and why this feature is the most likely to break on a macOS update.

Last updated 22 August 2026

A virtual display can be created standard, high dynamic range, or in reference mode. The choice lives on the display, not on the group, because it is a property of the display the way its resolution is.

The three ranges

macOS reports how much range a display has above diffuse white as its headroom: the maximum extended dynamic range value it will accept before clipping.

RangeHeadroomWhat it is
Standard1.0An ordinary display. Diffuse white and nothing above it.
High5.0What an HDR-capable panel reports, and what video and image pipelines look for.
Reference10.0The Pro Display XDR behaviour: the same headroom doubled, plus a reference value saying the display is calibrated to it rather than merely capable of it.

Standard unless you ask for something else. HDR is not free: macOS composites an HDR display differently, and a display claiming headroom it is never given content for costs power for nothing.

What it is for on a machine nobody is looking at

Two real reasons, and if neither is yours, leave it standard.

Making software behave the way it will on the real panel. An application in its HDR state takes a different path from the same application in standard range. If the remote machine reports standard range, the session is not representative of the room the output will be seen in.

Delivering HDR frames to a client that can decode them. Without HDR on the display there is nothing HDR to send.

Why the app measures rather than trusts

There is no HDR switch in the private interface. There is no property called hdr, EDR, maxEDR or dynamicRange on any of the classes involved. What there is, found by probing, is a transfer function on the display mode and a reference flag on the descriptor.

The framework accepts every value for that transfer function without complaint, and creates a working display for each. Only one of them produces headroom. A successful call therefore proves nothing at all, and the only test that means anything is reading the headroom back afterwards.

make smoke
creating 3840x2160 virtual display, dynamic range: high
display 0x4d440001 active, unmirrored, 3840x2160
headroom 5.0 (expected 5.0)
released
smoke: ok

So the smoke test asserts the headroom, not the return value. A macOS release that renumbers the values shows up as a failing smoke test rather than as a display that quietly is not HDR.

Measuring it yourself

The headroom is NSScreen’s maximum potential extended dynamic range value. One quirk worth knowing: the process that created the display does not see it in its own NSScreen list yet, so it has to be read from a second process. That is why the smoke test is a separate program.

Dynamic range by macOS version.
Capability macOS State Why
Standard range 14.0 and later Available The default. Nothing special is asked of the interface.
High dynamic range Measured on 26.5 Partial Reachable, and confirmed by measuring the headroom rather than by a successful call. Not a documented interface, so any release may change it.
Reference mode Measured on 26.5 Partial The reference flag does nothing on its own, and doubles the headroom to 10.0 with a matching reference value when combined with HDR.
Colour profile assignment any Unavailable Not a feature. Displays use the system's default colour handling.

Next