# iPad Pro High-Accuracy Color Setup Settings → Display & Brightness → Advanced → Reference Mode **On** The peak HDR brightness is now capped at **1000 nits**. # Custom EDID Virtual Display ## VirtualDisplayDriver Configuration Install the driver from https://github.com/VirtualDrivers/Virtual-Display-Driver/releases Set resolution **2752 × 2064** at **120 Hz**. Enable **custom_edid**, **EdidCeaOverride**, **10-bit color depth**, **HDR+**, etc. ## Generate Color-Gamut & HDR Settings with CRU Download CRU 1.5.3 https://www.monitortests.com/download/cru/cru-1.5.3.zip Open **CRU**, select the VDD virtual display, open **Extension Blocks**, and edit the **HDR Static Metadata** block: check **SMPTE ST 2084**, enable **Static Metadata**, set **Max luminance** to **138** (slightly under 1000 nits) and **Max frame-avg** to **128** (800 nits). > In CRU 1.5.3’s **HDR Static Metadata**, the numeric value *v* for “Max luminance” (MaxCLL) or “Max frame-avg” (MaxFALL) is *not* linear to the actual peak brightness (nits). Dolby’s HDR static-metadata spec uses an exponential mapping: > **Reverse mapping (nits → Value)**: >  *v* = 32 × log₂ (*nits*/50) ![[Pasted image 20250712164655.png]] ![[Pasted image 20250712164713.png]] Export the file as **user_edid.bin** to the VirtualDisplayDriver root folder. The bundled **restart64.exe** in that folder conveniently reloads the display driver. ## Deltacast E-EDID — Set Rec. 2020 Primaries in the Base Block Download https://www.deltacast.tv/media/1145/eedid_editor-win.x64-1.6.0-inst.zip Why this step matters: If you stop after the CRU step, when Moonlight connects you’ll see in the Sunshine log: Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 Bits Per Color : 10 Red Primary : [0.639648,0.330078] Green Primary : [0.299805,0.599609] Blue Primary : [0.150391,0.0595703] White Point : [0.313477,0.329102] Min Luminance : 0 nits Max Luminance : 993.515 nits Max Full Luminance : 800 nits These primaries are wrong and deviate greatly from Rec. 2020. Open the **.bin** with **Deltacast E-EDID** and set the primaries like this: ![[Pasted image 20250712164823.png]] After success you’ll see: Colorspace : DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 Bits Per Color : 10 Red Primary : [0.708008,0.291992] Green Primary : [0.169922,0.796875] Blue Primary : [0.130859,0.0458984] White Point : [0.3125,0.329102] Min Luminance : 0 nits Max Luminance : 993.515 nits Max Full Luminance : 800 nits # Remote Streaming ## Sunshine Server After unzipping, first run the **uninstall** scripts inside *scripts/*. *Running with administrator rights and disabling the service is the officially recommended best practice.* ## Color-Space Compatibility Matrix **Current AV1 Hardware Support** ``` |Color Space|NVENC AV1|Software AV1|HEVC Comparison| |---|---|---|---| |BT.709 Limited|✅|✅|✅| |BT.709 Full|⚠️|✅|✅| |BT.2020 Limited|⚠️|✅|✅| |BT.2020 Full|❌|✅|✅| ``` Add the following to **config/sunshine.conf**: ``` av1_mode = 0 dd_configuration_option = ensure_active dd_manual_refresh_rate = 25 dd_manual_resolution = 2752x2064 dd_refresh_rate_option = manual dd_resolution_option = disabled encoder = nvenc hevc_mode = 3 install_steam_audio_drivers = disabled lan_encryption_mode = 0 min_fps_factor = 1 min_threads = 4 nvenc_preset = 7 nvenc_realtime_hags = disabled nvenc_twopass = full_res nvenc_vbv_increase = 200 output_name = {YOUR_DEVICE_ID} qp = 8 stream_audio = false ``` - Force **HEVC** with 10-bit, use **NVENC**. - Max out server performance (at the expense of latency) and trade data redundancy for raw quality + stability. - Refresh rate and resolution can be overridden here but are optional. - The critical knobs are **nvenc_vbv_increase**, **qp**, and **nvenc_realtime_hags**. - You find **{YOUR_DEVICE_ID}** in Sunshine’s startup log *after* the virtual display is configured. ## Moonlight Client Resolution/refresh are irrelevant—the server dictates them. Set **Bitrate = 150 Mbps**, **Quality = Highest**. Switch touch mode to **Touch Screen** and hide the on-screen gamepad. Use **HEVC** codec. ## The Brutal Truth A color-calibration probe shows a hard ceiling of **~400 nits**. After probing into it carefully, **iPad Pro 2024 hits 1000 nits only under strict conditions**. ### Why does remote PQ + HDR10 top out at 400 nits? 1. **EDR “Safety Mode”** - For **external HDR10 sources without dynamic metadata**, ColorSync pins `referenceWhite` to the brightness-slider value (typically 80–120 nits) and gives at most a **4× headroom**. - Hence **100 nits × 4 ≈ 400 nits**. Apple’s WWDC21 sample says ordinary back-lit Mac/iPad gets 2×, XDR displays 400×, iPad Pro XDR 16×. [Apple Developer] 2. **Moonlight is an “unsigned external stream”** - After decode it goes through `AVSampleBufferDisplayLayer`, not Apple TV/AVPlayer’s trusted path. - For power & burn-in reasons the system locks EDR to 4×, so whatever MaxCLL=1000 you declare in Windows, you still get 400 nits. ### PQ HDR10, HLG, Dolby Vision on Apple Devices | Format | System Support | Theoretical Peak (nits) | Remote-Streaming Status | |-------------------|-----------------------------------------------------------|--------------------------------|----------------------------------------------| | **HDR10 (PQ)** | Fully supported across devices | Device ceiling (1000/1600) | Moonlight locked to 4× → ~400 nits | | **HLG** | `AVPlayer.HDRMode.hlg` since iOS 11 [Apple Support] | Relative; 600–800 nits (slider)| Sunshine/Moonlight **don’t output HLG** | | **Dolby Vision P8.4** | Native decode; Reference Mode explicitly supports it [Apple Support][Apple Developer] | Full 1000/1600 via Apple’s tone map | Practically **unworkable** for streaming: real-time RPU+EL injection and paid license required | ## Conclusion The iPad Pro 2024 makes an excellent ultra-portable black-level reference, delivering 100 % Display P3 and solid Rec. 2020 end-to-end—*if* you fully configure the virtual display’s EDID (primaries, HDR static metadata, gamut), pick the right encoder (NVENC HEVC) and dial-in stability/quality settings. Yet, ecosystem limits keep HDR-1000 a distant dream. **HLG** lacks tooling; **Dolby Vision** is fenced off by patents. In the end I reverted **Max Luminance** and **Max Full Luminance* back to **400 nits** by calibrating a windows monitor color profile.