Live Status Telemetry
Reports connected display model, measured brightness headroom, active video engine, and stream transfer function during playback.
Your display can go six times brighter than SDR white. Almost nothing you own asks it to.
An XDR display can go five to six times brighter than SDR white.
Play an ordinary video file — which is almost every file you own — and none of that is used, because an ordinary file carries no HDR signal at all. Your expensive display sits idle on 99% of your library.
MacLC bridges that gap. A Metal compute shader (VLCHDRExpander, 895 lines) re-encodes each SDR frame into 10-bit BT.2020 PQ: shadows and mid-tones reach your eye at exactly the brightness they always did, while highlights are lifted into spare panel headroom.
Display headroom on M3 Max
Frame cost at 1080p
Frame cost at 4K
Metal compute shader
On macOS, High Dynamic Range is not a global display switch.
Standard dynamic range content is displayed at SDR white. An XDR display can go five to six times brighter than SDR white, exposing its spare optical capability as dynamic headroom.
Play an ordinary video file — which is almost every file you own — and none of that is used, because an ordinary file carries no HDR signal at all.
macOS allows SDR and HDR content to coexist on screen simultaneously without clipping. MacLC applies a per-window ICC profile taken from the window's own screen rather than the main one.
An XDR display can go five to six times brighter than SDR white, with 6.15× display headroom measured on an M3 Max. SDR → HDR needs a display with real extended range (XDR or an HDR external panel); on an SDR display it does nothing.
Play an ordinary video file — which is almost every file you own — and none of that extended range is used. Your expensive display sits idle on 99% of your library.
An XDR display can go five to six times brighter than SDR white. Play an ordinary video file — which is almost every file you own — and none of that is used, because an ordinary file carries no HDR signal at all. Your expensive display sits idle on 99% of your library.
You cannot just relabel an SDR file as HDR. Under the PQ encoding used by HDR, the same numbers mean roughly five times the brightness.
Do that and mid-tones blow out — faces go white, the whole picture looks wrong.
Simulation on an SDR display. Relabelling an SDR file as HDR makes the same numbers mean roughly five times the brightness under PQ, blowing out mid-tones and faces.
Why the expansion curve is the interesting part of the engineering.
The expansion is the identity at and below a knee at half SDR white, and quadratic above it. It is chosen so that value and slope match the identity exactly at the knee, and SDR white lands exactly on the boost multiplier.
The calculation is applied to the largest of the three colour components, and the whole triplet is scaled by the result. Hue and saturation never move.
The expansion is quadratic above the knee at half SDR white — chosen so that value and slope match the identity exactly at the knee, and SDR white lands exactly on the boost.
Applied to the largest of the three colour components, and the whole triplet is scaled by the result, so hue and saturation never move.
Shadows and mid-tones reach your eye at exactly the brightness they always did. Nothing is "brightened". Only the highlights — a glint on metal, a sky, a streetlight, an explosion — are lifted into the range your panel had spare all along.
VLCHDRExpander · 895 lines · Metal compute kernel
The shader intercepts the video frame on macOS's default AVFoundation display path. Starting from planar Y'CbCr 4:2:0 chroma-subsampled or BGRA input buffers, it re-encodes each SDR frame into 10-bit BT.2020 PQ in a single GPU compute dispatch.
Identity at and below a knee at half SDR white, and quadratic above it — lifting highlights into spare headroom while shadows and mid-tones never move.
Pipeline reconstruction. Stages animate on scroll; select any stage with keyboard or cursor to inspect its operation.
Shadows and mid-tones reach your eye at exactly the brightness they always did. Nothing is "brightened".
Only the highlights — a glint on metal, a sky, a streetlight, an explosion — are lifted into the range your panel had spare all along.
4.0 is natural, higher is dramatic and less faithful.
Live mathematical evaluation of VLCHDRExpander. Quadratic boost matches value and slope at the 0.5 knee.
Measured on Apple M3 Max with 6.15× display headroom on macOS 26.2. Validated against an independently authored CPU reference implementation of the identical transform.
| Measurement | Result | Significance |
|---|---|---|
| Luma and chroma vs. reference | Agree to the code | Agree to the code over an eight-step ramp against independent reference. |
| Bit accuracy | Bottom six bits clear | Bottom six bits of every 16-bit word clear — true 10-bit, no noise in the pad bits. |
| Round-trip through PQ | Exact SDR luminance | Returns the exact SDR luminance for every input at or below the knee, rising monotonically to exactly the boost at SDR white. |
| Cost at 1080p | 0.53 ms | 0.53 ms per frame, including the synchronous wait. |
| Cost at 4K | 0.91 ms | 0.91 ms per frame, including the synchronous wait. |
| 60-second 4K run | Same wall-clock time | Same wall-clock time as with the feature off. |
| Memory footprint | Flat against 20s run | Flat against a 20-second run. |
Effective boost is min(your setting, the screen's real headroom) — it can never ask for more than the panel has.
Output carries mastering-display metadata describing the volume generated, so macOS has no reason to tone-map it back down.
Skipped automatically for sources already in PQ or HLG.
Works live: flip the switch mid-film and the picture changes on the frame you are watching, not on the next file.
Inverse tone mapping is not a new idea — libplacebo, mpv and some TVs do versions of it.
What is genuinely distinct here is: MacLC does it in Metal on the default AVFoundation display path, where libplacebo is unreachable on macOS, exposed as one switch and one slider, and validated numerically against an independent reference.
Cross-platform frameworks and external renderers cannot reach the default AVFoundation display path on macOS.
Built in Metal on the default AVFoundation display path, with per-window ICC profiles taken from each window's own screen.
An audit of VLC 4.0.0-dev on Apple Silicon identified 6 confirmed defects and 9 missing capabilities in the display path. All six defects are resolved in MacLC.
| What was broken in upstream VLC | What you saw on screen | What MacLC does |
|---|---|---|
| Display headroom read once, from the main screen | Drag the window to a second display, HDR brightness stayed wrong. | Re-measured on every screen, window-move and display-profile change. |
| The HDR mode selector and brightness slider in Preferences did nothing | The settings were decorative. | Both wired live — they take effect during playback. |
| No tone-mapping path to SDR | HDR film on a normal display clipped to flat white. | A real conversion, with a correct fallback on older macOS. |
| Subtitles untagged over HDR video | White subtitles rendered at full HDR luminance — searingly bright over dark scenes. | Subtitles pinned to SDR and scaled to the ITU-R BT.2408 203-nit reference white. |
| Video above 10-bit downsampled to 8-bit | 12-bit and 16-bit sources lost detail before reaching the screen. | Full 10-bit path preserved; 16-bit 4:2:2 wired through. |
| Sub-4K HDR mis-tagged, zero-nit mastering volume emitted | Wide-gamut content played through the wrong primaries. | Correct tagging per stream. |
VideoToolbox, gated on real hardware support. Falls back to software elsewhere. Confirmed available on M3 Max.
Carried end-to-end through the filter chain.
From the VideoToolbox bitstream, with hardened parsers, including a fix for Dolby Vision being lost to a stray bit on the very first frame.
Hand-written ARM64 NEON chroma conversions replacing scalar loops on the software-decode path.
64-bit colour unblocks libplacebo's shaders. Upstream failed with "OpenGL version too old (2 < 3)".
Mastering-display (ST 2086) and content-light-level (CTA-861.3) metadata forwarded correctly.
Taken from the window's own screen rather than the main one.
MacLC avoids opaque video processor flags. Every mode describes its pipeline behavior in terms of what you will actually see on your screen.
Detects display capabilities and source metadata to route HDR natively or convert gracefully.
Forces HDR presentation on supported displays, expanding SDR media into extended headroom.
Tone-maps high dynamic range video for displays without extended dynamic range.
Bypasses all HDR processing and Metal shader pipelines for standard direct presentation.
Every row in the settings window carries a one-sentence explanation underneath. Read how MacLC's settings explain themselves across all eight panes.
Interface reconstruction.
Interface reconstruction. The live status block and mode selector in MacLC's HDR & Colour preferences.
It will not invent detail that was never captured.
SDR → HDR needs a display with real extended range (XDR or an HDR external panel); on an SDR display it does nothing at all.
Skipped automatically for sources already in PQ or HLG.
Free and open source under GPL v2+ · No account or payment required
Real questions about macOS display pipelines, subtitles, formats, and headroom — answered factually in the engineer’s voice.
When an HDR film is played without a proper tone-mapping path to SDR, highlights clip to flat white. Upstream VLC had no tone-mapping path to SDR; MacLC provides a real conversion, with a correct fallback on older macOS. In the HDR preferences, MacLC provides four named modes: Automatic (recommended), Always use HDR, Convert HDR to SDR, and Turn HDR off. For custom workflows, the Advanced options expose ten tone-mapping curve algorithms, including BT.2390 EETF and BT.2446A.
In upstream VLC, subtitles untagged over HDR video rendered white at full HDR luminance — searingly bright over dark scenes. MacLC resolves this by pinning subtitles to SDR and scaling them to the ITU-R BT.2408 203-nit reference white.
MacLC extracts Dolby Vision metadata from the VideoToolbox bitstream using hardened parsers, including a fix for Dolby Vision being lost to a stray bit on the very first frame. It also carries HDR10+ dynamic metadata end-to-end through the filter chain, and automatically skips highlight expansion for sources already in PQ or HLG.
Yes, on a display with real extended range (XDR or an HDR external panel). MacLC’s Metal compute shader (VLCHDRExpander, 895 lines) re-encodes each SDR frame into 10-bit BT.2020 PQ on the default AVFoundation display path. The expansion is the identity at and below a knee at half SDR white, and quadratic above it — shadows and mid-tones reach your eye at exactly the brightness they always did, while highlights are lifted into spare panel headroom. On an SDR display it does nothing at all, and it will not invent detail that was never captured.
Hardware AV1 decoding is available on Apple Silicon M3 and M4 chips via VideoToolbox, gated on real hardware support and confirmed available on M3 Max. Where hardware decode is unavailable, MacLC falls back to software decoding accelerated by hand-written ARM64 NEON chroma conversions.
Display headroom is how much brighter a display can go above SDR white. An XDR display can go five to six times brighter than SDR white, with 6.15× display headroom measured on an M3 Max. Display headroom is re-measured on every screen, window-move and display-profile change. The effective boost is min(your setting, the screen's real headroom), so it can never ask for more than the panel has.
SDR → HDR needs a display with real extended range (XDR or an HDR external panel); on an SDR display it does nothing at all. On an external HDR panel, MacLC takes a per-window ICC profile from the window's own screen rather than the main one, and forwards mastering-display (ST 2086) and content-light-level (CTA-861.3) metadata correctly.