Sunray Scanout boosts MacBook Pro XDR brightness beyond the standard SDR limit — and keeps it boosted during Space transitions, where every other app of this kind drops back to normal.
It is a fork of SimonMaj/sunray-xdr, which is itself a fork of levelsio/xdr-boost. The menu bar UI is Sunray's. The boost engine is not.
Every app in this family — xdr-boost, Sunray XDR, BrightXDR, BrightIntosh, Vivid — boosts brightness the same way: a full-screen window whose Metal layer uses a multiply compositing filter with EDR values above 1.0, blending against whatever is beneath it.
That technique has a hole in it. Swipe between Spaces and the screen drops to normal brightness for the whole transition.
The cause is specific. macOS composites the Space-switch animation from snapshots captured when the gesture begins, and those snapshots do not evaluate layer compositing filters. The overlay's pixels are still there; the blend is not. No window flag changes this — window level, .stationary, .canJoinAllSpaces, sharingType, and the private SkyLight sticky tag all behave identically, and the snapshot predates anything an app could do in reaction.
What the snapshots do preserve is EDR. Emissive content above 1.0 keeps its brightness right through the transition. So the boost does not have to die there — it just cannot live in a compositing filter.
Two pieces, neither of which is an overlay:
-
A headroom patch. A tiny emissive EDR surface parked behind the camera notch, where there are no physical pixels. Its only job is to keep the display in EDR mode so headroom exists. It is invisible and costs one 10fps Metal view.
-
A display transfer table.
CGSetDisplayTransferByTable(baseline × gain). Despite what the documentation implies, macOS does not clamp the table's output to 1.0 — a table topping out at 2.0 reads back as 2.0. That maps SDR content up into the headroom the patch unlocked.
The table is applied at scanout, after all compositing. The Space transition has nothing to drop.
The table multiplies the existing table rather than replacing it, so display profiles and Night Shift tint survive. Screenshots and screen recordings are unaffected, because captures read the composited framebuffer and the table is applied downstream of it.
Genuine HDR content clips. SDR is remapped upward into the headroom, so HDR video that wanted to use that range hits the ceiling and flattens to maximum SDR brightness. If you watch HDR video and care about it, use the Compare toggle or turn the boost off. This is inherent to the technique, not an implementation bug.
- Boosts desktop brightness past the ~500 nit SDR cap using XDR headroom
- Survives Space switches, Mission Control, and full-screen transitions
- No white tint or lifted blacks; the table scales content rather than veiling it
- Native Liquid Glass menu bar panel on macOS 26+
- Live brightness slider, 1x–3x, with Soft / 2x / Max presets
- Reports the gain actually applied, including when headroom forces it lower
- Compare toggle to bypass the boost without dropping headroom
- Animated sun menu bar icon reflecting the current level
- Remembers both your level and your on/off state between launches
- Global shortcut: Ctrl+Option+Cmd+V
- Optional start with macOS
- Survives sleep/wake, lid close/open, lock/unlock, and display changes
- Scoped teardown: turning it off restores only this display, leaving external monitor calibration alone
- Backs off instead of fighting other software that writes the display ramp
- Emergency kill switch:
sunray-scanout --kill - Single native Swift file, no dependencies
- MacBook Pro with Liquid Retina XDR display (M1 Pro/Max or later)
- macOS 12.0+
- macOS 26+ for the full Liquid Glass panel effect
git clone https://github.com/c0d3rman/sunray-scanout.git
cd sunray-scanout
./install.shThe installer builds the app, copies it to /Applications/Sunray Scanout.app, verifies the signature, and opens it.
make app # build .build/Sunray Scanout.app
make build # command-line binary at .build/sunray-scanout
make dmg # packaged DMG in dist/
sudo make install # install binary to PATH
make launch-agent # start on login (or use the in-app toggle)
make remove-agent # undo
sudo make uninstallClick the sun icon in the menu bar to toggle the boost, set the level, compare against unboosted, or enable start-at-login. Ctrl+Option+Cmd+V toggles from anywhere.
If something goes wrong and you cannot see your screen:
sunray-scanout --killThe transfer table is also restored automatically whenever the process exits, including on force-kill — CoreGraphics resets the ramp when the process that set it dies.
| Sunray XDR | Sunray Scanout | |
|---|---|---|
| Boost | Full-screen multiply overlay |
Display transfer table at scanout |
| Headroom | The overlay itself | Emissive EDR patch behind the notch |
| Space swipe | Drops to normal | Unaffected |
| HDR video | Preserved | Clipped |
| Compare | Split-screen preview | Bypass toggle |
| On/off state | Always starts off | Persists across launches |
A single-file diff of Sources/main.swift covers the whole change; the UI layer is substantially upstream's.
Original concept and the EDR brightness-boost idea by Pieter Levels in xdr-boost.
The menu bar app — Liquid Glass panel, slider, presets, sun icon, packaging, start-at-login — by SimonMaj in sunray-xdr. This fork keeps that interface nearly intact and replaces only the mechanism underneath it.
Bugs in this fork are this fork's. Please do not file them upstream.
MIT. See LICENSE.