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.
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.


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.
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.
One curve for the whole picture. Lightest on the battery.
Adapts to each scene, keeps whites natural and gradients smooth, and protects subtitles and logos.
A trained model finds lights and reflections and lifts only those.
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.

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.


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 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
.maclcnnfiles 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 broken | What you saw | What MacLC does |
|---|---|---|
| Brightness read once, from the main screen | Moving 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 nothing | The mode menu and brightness slider were decorative. | Both take effect during playback. |
| No way to show HDR on an ordinary screen | HDR 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 highlights | White subtitles blazed over dark HDR scenes. | Subtitles stay at SDR white. |
| More than 10-bit squeezed into 8-bit | 12- 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 video | Wide-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
| Option | Values | Default | What it does |
|---|---|---|---|
--macosx-hdr-mode | 0–3 | 0 | HDR playback: automatic, always HDR, convert to SDR, HDR off |
--macosx-edr-headroom | float | 0.0 | 0 follows the screen; ≥ 1.0 forces a headroom |
--macosx-sdr-to-hdr | bool | off | Play SDR video in HDR |
--macosx-sdr-to-hdr-quality | auto | fast | balanced | high | maximum | auto | SDR to HDR quality level |
--macosx-sdr-to-hdr-boost | 1.0–16.0 | 4.0 | Peak of the expansion, in multiples of SDR white |
--macosx-sdr-to-hdr-midtones | 0.0–1.0 | 0.0 | Lift of the mid-tones |
--macosx-sdr-to-hdr-saturation | 0.5–1.5 | 1.0 | Colour of brightened highlights |
--macosx-sdr-to-hdr-deband | off | normal | strong | normal | Debanding where highlights are lifted |
--macosx-sdr-to-hdr-protect | bool | on | Keep burnt-in subtitles and logos at their level |
--maclc-hdr-presentation | auto | dolbyvision | hdr10plus | hdr10 | hlg | sdr | auto | Format an HDR video opens in |
--maclc-hdr-picture | auto | accurate | balanced | bright | auto | Picture mode for HDR presentations |
--maclc-hdr-hlg | reference | display | reference | HLG rendered like HDR10 or fitted to the display |
--maclc-hdr-card | 0–2 | 1 | Format card: always, when there’s a choice, never |
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.
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.
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.
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.
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.
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.
