Skip to content

HDR and SDR to HDR

Light, the way your screen can show it.

Your Mac’s screen can do more than most videos ask of it. Here is what MacLC does with that — in plain words first, with every detail after for the curious.

01 What HDR means

More light than white.

An ordinary video stops at white: a white shirt and the sun are the same brightness. An HDR screen keeps some light in reserve above white, for what really shines.

How much depends on your screen and its brightness setting. A MacBook Pro’s XDR display can show highlights up to 1,600 nits — many times brighter than the white of a web page.

Illustration. The reserve above white shrinks as you turn the screen brighter, and on battery.

02 SDR to HDR

Everyday videos, lit up.

Almost every video you own was made for ordinary screens. SDR to HDR lets its lights, skies and reflections use the reserve your screen has — and keeps faces and shadows close to how they were filmed.

A frame of Sintel at sunset, as an ordinary video shows it: the sun and sky stop at plain white.
Simulated for this screen. On a Mac that shows HDR, the real highlights are brighter still.
MacLC playing Sintel with the SDR to HDR popover open over the playback bar: switch on, Quality Auto, highlights up to 1,000 nits.

Only the highlights change

Brightness rises smoothly in the highlights, so nothing jumps and colours keep their hue. At the Balanced level, everything below diffuse white — the brightness of a white shirt — is left as it was.

You set the ceiling

“Highlights up to” works like the brightness an HDR film was graded for. MacLC never asks more of your screen than it can show right now.

Compare anytime

Hold M, or the Hold to Compare button, to see the original. Option-click the HDR badge to switch it on or off.

What it won’t do

It can’t invent detail that was never filmed. It does nothing on an ordinary screen, and leaves videos that are already HDR alone.

Auto

Picks the best level this Mac can keep up right now: Maximum on a Pro or Max chip on power, lighter levels on battery or when the Mac runs hot.

Fast

One curve for the whole picture. Lightest on the battery.

Balanced

Adapts to each scene, keeps whites natural and gradients smooth, and protects subtitles and logos.

High

A trained model finds lights and reflections and lifts only those.

Maximum

The trained model at full detail, best around small lights.

03 HDR films

The right format, explained in a sentence.

When an HDR film starts, a card names the formats it carries and the one MacLC chose for your screen — then disappears. One click changes it.

The format card over Sintel: Dolby Vision selected among Dolby Vision, HDR10+ and HDR10, with the sentence “Best for this display — adjusts every scene to its 1,600-nit peak.”

Accurate

The film exactly as it was graded, up to what your screen can show. Can look dim in a bright room.

Balanced

Keeps highlight detail on screens dimmer than the film. The best everyday choice on most Macs.

Bright

Lifts mid-tones and highlights. Brighter overall, at the cost of some highlight detail and battery.

iPhone videos

HLG videos from an iPhone play as bright as HDR films, or fitted to your screen for a calmer picture — your choice.

Comfortable subtitles

Subtitles stay at the brightness of white text, never at the brightness of the sun.

Every screen

Drag the window to another display and MacLC fits the picture to it at once.

Battery aware

MacLC tells you when brightness is limited on battery or in Low Power Mode, and prefers the format that uses less power when it looks the same.

04 Settings

Everything in one place, in plain words.

Settings › HDR & Colour shows what your screen and the video are doing right now, then asks what should happen when an HDR video opens. The defaults are right for most people.

The HDR & Colour settings: the connected display and its headroom, the active engine and what is playing, then Format, Picture, HLG Brightness and Format Card.The HDR & Colour settings: the connected display and its headroom, the active engine and what is playing, then Format, Picture, HLG Brightness and Format Card.

Automatic

HDR on displays that can show it, converted for displays that cannot. Recommended.

Always use HDR

Forces an HDR signal even for ordinary video, which makes normal videos look dark. For special cases.

Convert HDR to SDR

HDR films at normal brightness with their highlight detail, without the extra sparkle on an XDR display.

05 Under the hood

For the technically curious.

The rules, the measurements and every option, as they are in the code.

The expansion rule

The picture is linearised and each pixel’s drive is taken as the larger of its luminance and 85 % of its brightest channel. At the Fast level, relative to SDR white, the drive is left alone at and below a knee at half SDR white and lifted along a quadratic above it: f(x) = x for x ≤ ½, f(x) = x + 4(B − 1)(x − ½)² above.

Value and slope are continuous at the knee (f(½) = ½, f′(½) = 1) and SDR white lands on the boost (f(1) = B). The whole pixel is scaled by the result, so hue and saturation do not move. Balanced lifts only what lies above diffuse white, by less when large areas are bright; High and Maximum predict a grid of gains for each scene.

SDR to HDR expansion curve (Fast level)Output light against input light for the Fast level, both relative to SDR white. Fast follows the diagonal up to half SDR white, then rises to the chosen peak at SDR white; Balanced leaves everything up to diffuse white unchanged.Input light (× SDR white)Output light (× SDR white)
4.0×
1.0× turns the expansion off. 4.0× is the default and looks natural; higher values are more dramatic and less faithful. Balanced lifts only above diffuse white, while High and Maximum predict scene brightness gains. The app never asks for more than the display can show right now.

SDR to HDRA Metal pass on the native display path

Pipeline
Y′CbCr or BGRA → R′G′B′ → linear light, with the curve macOS applies to each buffer type (BT.1886 or sRGB, measured) → expansion → BT.2020 primaries → 64-bit half-float linear buffer (1.0 = SDR white), handed to AVSampleBufferDisplayLayer without synthetic mastering metadata.
Peak
min(setting, current EDR headroom); skipped for PQ and HLG sources and for the presentations that ask for SDR.
Fast
The curve above, per pixel.
Balanced
Lifts only what lies above diffuse white, by an amount that shrinks when large areas are bright, with scene statistics, a guided base layer, an area limiter, debanding, and protection for burnt-in subtitles and logos.
High, Maximum
Balanced’s analysis plus a bilateral grid of gains predicted by a small network from a 256×256 thumbnail, run with MPSGraph from .maclcnn files whose every layer shape is checked on load. Gains are read as a share of log(10); each channel stays within 0.2 log of the luminance-weighted gain (0.06° of colour accuracy on held-out scenes).
Model
sdr2hdr-high-v1, sdr2hdr-max-v1: trained by Hazen Studio on Poly Haven CC0 photographs, LGPL like the module that loads them.
Auto
Chooses from power source, thermal state, GPU class and pixel rate; on GPU-time overshoot it steps down as far as Fast.
Measured (M3 Max)
Model prediction 0.45 ms (High) and 0.53 ms (Maximum) per frame. When the expander was introduced: 0.53 ms at 1080p and 0.91 ms at 4K including the synchronous wait; agreement to the code value with an independent CPU reference over an eight-step ramp; a 60-second 4K run in the same wall-clock time as with the switch off, with flat memory. In-app results match the offline model within 1–3 % on HDR captures.
Prior art
Inverse tone mapping is not new: libplacebo, mpv and some TVs do versions of it. What MacLC adds is doing it on macOS’s default display path, where libplacebo cannot reach, as one switch and one slider, with a model trained for it and the numbers above.

HDR filmsFormats, choices and picture modes

Formats
Dolby Vision profiles 5, 7 (base layer and RPU; enhancement layer ignored), 8.1 and 8.4; HDR10+ (ST 2094-40, kept until the stream replaces it, as TVs do); HDR10 (ST 2084 with ST 2086 mastering and CTA-861.3 MaxCLL/MaxFALL); HLG. Matroska’s Dolby Vision configuration record (dvcC, dvvC, dvwC) is read before the first frame.
Advisor
Reads transfer, primaries, mastering volume, MaxCLL/MaxFALL and the Dolby Vision configuration of the track, and the display’s potential, current and reference EDR headroom, battery and Low Power Mode. If the master fits under the display’s peak, the three formats render the same image and HDR10 is recommended (macOS’s own pipeline, lower power); otherwise Dolby Vision, then HDR10+, then HDR10. Automatic track restarts are capped at two per file; switching formats seeks precisely and takes about a second.
Picture modes
Accurate reproduces every level up to 90 % of the display’s peak and folds the rest into a soft PQ-domain exponential shoulder; Balanced is the ITU-R BT.2390 EETF; Bright lifts by up to 1.6× before the BT.2390 roll-off. When the master fits, the mapping is the identity (or a plain gain clamped at the peak). Checked for ST 2084 round trip, monotonicity from 0 to 10,000 cd/m², the peak bound and continuity at the knee.
Reference white
PQ anchored at 100 cd/m² at SDR white, the convention macOS applies to PQ surfaces (measured with HDR captures on macOS 26.2). HLG goes through the BT.2100 OOTF for the 1,000-nit reference display (reference) or for 100 × the current headroom (display).
Engines
Native (AVSampleBufferDisplayLayer, EDR) for HDR10, HLG and SDR, re-mapped on the GPU with the picture-mode curves. For Dolby Vision RPUs and HDR10+: MacLC’s Metal renderer (Dolby Vision decoder ported from libplacebo 7.351, 0.05 % mean error against the C reference on a 4K profile 8.1 frame), with OpenGL kept as a fallback.

Fixed in the inherited HDR pathAn audit of the macOS HDR path of VLC 4.0-dev, on which MacLC builds, found six defects and nine missing capabilities on Apple Silicon

What was brokenWhat you sawWhat MacLC does
Brightness read once, from the main screenMoving the window to a second display left HDR brightness wrong.Measured again on every screen, window move and colour-profile change.
The HDR settings did nothingThe mode menu and brightness slider were decorative.Both take effect during playback.
No way to show HDR on an ordinary screenHDR films clipped to flat white on normal displays.A real conversion to standard range, with a fallback on older systems.
Subtitles as bright as the highlightsWhite subtitles blazed over dark HDR scenes.Subtitles stay at SDR white.
More than 10-bit squeezed into 8-bit12- and 16-bit sources lost detail before reaching the screen.Decoded to a 10-bit (P010) buffer; 16-bit 4:2:2 wired through.
Smaller HDR files tagged as ordinary videoWide-colour videos under 4K played with the wrong colours.Each stream tagged by what it carries; no zero-nit mastering volume.

Also addedBeyond the fixes

AV1 in hardware
VideoToolbox on M3 and newer (checked with VTIsHardwareDecodeSupported), dav1d elsewhere.
Dynamic metadata
HDR10+ carried through the filter chain; Dolby Vision extracted from the VideoToolbox bitstream with hardened parsers, including a fix for Dolby Vision lost to a stray bit on the first frame.
Colour
ST 2086 and CTA-861.3 metadata forwarded to the display layer; ICC profile taken from the window’s own screen.
Software decoding
Hand-written ARM64 NEON chroma conversions (NV12/P010 ↔ I420/I420_10L).
OpenGL
Core profile 4.1/3.2 with 64-bit colour, which lets libplacebo’s shaders run (VLC failed with “OpenGL version too old”).

Advanced settingsSettings › HDR & Colour › Advanced

Tone-mapping curve
Automatic (MacLC’s picture modes), hard clip, ITU-R BT.2390 EETF, Reinhard, Mobius, Hable, gamma-power, linear stretch, ITU-R BT.2446A, single-pivot spline
Tone-mapping parameter
The chosen curve’s roll-off; 0 keeps its default
Gamut mapping
Automatic, clip, perceptual, relative colorimetric, saturation preserving, absolute colorimetric, desaturate (BT.2020 sources)
Scaling filters
Built-in bilinear, bicubic Mitchell-Netravali and Catmull-Rom, Lanczos, Spline16/36/64, EWA Lanczos (Jinc), for upscaling and downscaling
Dithering
Blue noise, white noise, Bayer 16×16 or off (OpenGL engine; Metal renders in 16-bit float)
Video engine
Automatic, Native or Metal; OpenGL (legacy) as a fallback
Decoding
Hardware decoders only; decoder pixel format (P010 10-bit by default, 8-bit formats available)
SDR to HDR, advanced
Mid-tones (as graded → lifted), highlight colour (softer → richer), smooth banding (off, normal, strong), protect subtitles and logos

OptionsFor the command line and vlcrc

OptionValuesDefaultWhat it does
--macosx-hdr-mode0–30HDR playback: automatic, always HDR, convert to SDR, HDR off
--macosx-edr-headroomfloat0.00 follows the screen; ≥ 1.0 forces a headroom
--macosx-sdr-to-hdrbooloffPlay SDR video in HDR
--macosx-sdr-to-hdr-qualityauto | fast | balanced | high | maximumautoSDR to HDR quality level
--macosx-sdr-to-hdr-boost1.0–16.04.0Peak of the expansion, in multiples of SDR white
--macosx-sdr-to-hdr-midtones0.0–1.00.0Lift of the mid-tones
--macosx-sdr-to-hdr-saturation0.5–1.51.0Colour of brightened highlights
--macosx-sdr-to-hdr-debandoff | normal | strongnormalDebanding where highlights are lifted
--macosx-sdr-to-hdr-protectboolonKeep burnt-in subtitles and logos at their level
--maclc-hdr-presentationauto | dolbyvision | hdr10plus | hdr10 | hlg | sdrautoFormat an HDR video opens in
--maclc-hdr-pictureauto | accurate | balanced | brightautoPicture mode for HDR presentations
--maclc-hdr-hlgreference | displayreferenceHLG rendered like HDR10 or fitted to the display
--maclc-hdr-card0–21Format card: always, when there’s a choice, never

All technical specifications →

HDR & picture6 min read

Mini-LED blooming on the MacBook Pro: causes and fixes

Notice glowing halos around text and subtitles on your MacBook Pro XDR screen? Learn why mini-LED blooming happens and how to reduce it during movies.

HDR & picture7 min read

YCbCr vs RGB (and full vs limited range) on Mac and TV

Connecting your Mac to a TV over HDMI? Learn why YCbCr and RGB range mismatches cause washed-out grey blacks or crushed shadows, and how to fix them.

HDR & picture7 min read

Apple Pro Display XDR for watching video: is it worth it?

How good is the Apple Pro Display XDR for watching HDR movies? Explore brightness, 576 dimming zones, 60 Hz limits, and how it compares to MacBook Pro.

HDR & picture6 min read

Free HDR test videos (legal sources to check your screen)

Download legal 4K HDR test clips from Netflix and Blender. Test 1,000-nit peaks, shadow detail, banding, and subtitles on your Mac display.

HDR & picture6 min read

How to tell if a video is really HDR on a Mac

Never trust a file name. Learn how to verify true HDR, Dolby Vision, and HLG video on Mac using metadata tools, player badges, and screen brightness.

HDR & picture6 min read

How to turn off HDR on a Mac

Need to disable bright HDR or fix washed-out external monitors? Learn how to turn off HDR on macOS via display toggles, reference presets, and players.

Before you download

MacLC is free. If it is useful to you, a gift helps it skip “Open Anyway” and funds the next release.