True HDR Metadata passthrough with Plex HTPC on Windows
(For problems with Windows 11 24H2 and HDR switching scroll down to the end of this post)
Here I just want to write a small guide on how to achieve a true HDR experience with Plex HTPC, now that it´s released and the main Plex HTPC thread is closed.
Please read until the end and also keep in mind true metadata passthrough is in an experimental (but working very well…) state as of 05/2024!
You may ask why? Didn’t Plex just recently gained the option for enabling HDR switching on HDR files? Why bother with something else?
Well, there with HDR everything gets a bit hairy. First, we should disclose what HDR on Windows is doing and why it is not really what we want for our 4K HDR movies. Small spoiler it’s all about Metadata…
Enabling HDR on Windows under the Windows settings menu does three things.
- Switches your TV into a different color space => BT.2020
- Tells the TV it’s getting an HDR feed
- Sends some generic metadata to the TV.
Part 3 is where it´s getting fuzzy. The metadata we care about is:
- Mastering display color primaries (BT.2020 or DCI-P3)
- maxCLL (Maximum Content Light Level)
- maxFall (Maximum Frame Average Light Level).
- Minimum Luminance
- Maximum Luminance
The usefulness of the latter two is not fully understood. I could also not find reliable information regarding these values. The information I could find would state that these values stem from the grading monitor used in the mastering process. There are also movies out there that have a max Luminance of 1000Nit but a maxCLL beyond 1000Nit…
As far as I could gather those values (measured with a hdfury arcana) for the generic Windows HDR, they are:
AMD GPU:
maxFALL: 799 cd/m2 maxCLL: 1499 cd/m2 Max Lum: 1499 cd/m2 Min Lum: 0.010 cd/m2 Primaries: unkown
Nvidia GPU:
maxFALL: 0 cd/m2 maxCLL: 0 cd/m2 Max Lum: 0 cd/m2 Min Lum: 0 cd/m2 Primaries: unkown
(so for Nvidia it outputs “default” BT.2020 and only tells the TV it should use the PQ gamma curve)
(cd/m2 = Nits)
For movies that are mastered in the same manner, it would be fine, but not every movie is mastered at the same levels, and probably not a single one at those generic values.
You can check color primaries, minLuminace, maxLuminace, maxCLL, and maxFall on your HDR files with MediaInfo.
One example =>
MediaInfo
Video
....
Mastering display color primaries : Display P3
Mastering display luminance : min: 0.0000 cd/m2, max: 4000 cd/m2
Maximum Content Light Level : 1347 cd/m2
Maximum Frame-Average Light Level : 546 cd/m2
Most UHD movies actually use the DCI-P3 colorspace inside the BT.2020 colorspace. Plex HTPC can let the TV know that the file is DCI-P3.
Now you may ask and how does Plex HTPC do it?
Well, Plex HTPC uses a Windows API to switch the HDR button under the Windows settings on for you when watching an HDR movie. As we learned you will only get the generic HDR. Your image will still look like an HDR file but not as rich as with full metadata passthrough. We still need this capability of Plex HTPC switching HDR on or off for the D3D11 route and Vulkan route.
How can we get true HDR passthrough?
Glad you asked! As you might know, Plex HTPC uses mpv as its playback engine. mpv is an extremely powerful video player that supports full HDR metadata passthrough via its new video output driver, called gpu-next.
If you like to read what is new compared to gpu which Plex HTPC uses, you may want to have a look here => GPU Next vs GPU · mpv-player/mpv Wiki · GitHub
The easy way to get full HDR metadata passthrough
- Head over to settings in Plex HTPC
- Go to the “Video” section and there select both “Enable HDR Switching” as well as “HDR Metadata Passthrough”. It then should look like the image below.
Now you are ready to experience HDR metadata passthrough!
The advanced way:
Continue reading!
Now comes the fun part.
The replacement of the mpv lib is no longer needed!
It is only necessary if you need Dolby Vision profile 5 and 8.x. tone mapping and/or if you have problems with TrueHD passthrough.
If you are having issues with TrueHD passthrough, you should try this build (which also includes the Dolby Vision tone mapping bits) => Dolby TrueHD passthrough - modified mpv build
You can follow this HTPC Tips and Tricks - #3 by gbooker02 on how to change the mpv build or read further if you want to stay here. (they are the same steps)
Note about the newest libmpv-2.dll and HDR - breaking changes!
Starting with build 2025-07-30 17:57 ( Release 2025-07-30 17:57 · mitzsch/mpv-winbuild · GitHub ) the libmpv-2.dll now includes the newly introduced “–target-colorspace-hint-mode” option. This defaults to mpv doing the tonemapping and not the display (= no metadata passthrough). To restore the old behavior, add target-colorspace-hint-mode=source to your mpv.conf!
What do we need?
- A PC with a recent GPU and a recent driver.
- Downloaded or self-compiled version of the mpv-1.dll
- Show file extensions under Explorer settings
- notepad or any text editor
First, we want to gather a new mpv build. You can just download it here:
If you like to self-compile your mpv for Windows I can highly recommend this GitHub repo:
Or my fork of that repo for building mpv with modifications needed for Plex HTPC to work:
Starting with Plex HTPC Version 1.20.2 the mpv-1.dll is now called mpv-2.dll!*
The mpv-2.dll is now called libmpv-2.dll!!
Unzip the archive. Since 20.01.2023 the mpv lib you download may have a different name (libmpv-2.dll), just rename it to mpv-2.dll. Then go to the Plex HTPC install folder. (C:\Program Files\Plex\Plex HTPC) and rename the libmpv-2.dll you find there to something like libmpv-2.dll.orig. Now place the unzipped libmpv-2.dll file in the same directory.
In the Appdata dir (C:\Users\xxx\AppData\Local\Plex HTPC) create a new mpv.txt textfile. Now change the file extension from .txt to .conf. Then right-click on the mpv.conf and open with editor or notepad.
Inside the file, we need to add
The Vulkan Route
vo=gpu-next
gpu-api=vulkan
gpu-context=winvk
tls-ca-file=C:\Program Files\Plex\Plex HTPC\resources\cacert.pem
The D3D11 Route
vo=gpu-next
tls-ca-file=C:\Program Files\Plex\Plex HTPC\resources\cacert.pem
hit save and exit!
The line target-colorspace-hint=yes is no longer needed. Since Plex HTPC Version 1.28.1 this setting is set when the HDR metadata passthrough setting is on and an HDR file is being played.
Also, vo=gpu-next is not necessarily needed. Since Plex HTPC Version 1.28.1 this setting is set when the HDR metadata passthrough setting is on and an HDR file is being played.
Having the vo=gpu-next line in mpv.conf means that the vo is also used for SDR content. It works perfectly fine so I recommend also adding this line.
Plex HTPC Settings:
Vulkan route:
Turn on the HDR switching and HDR metadata passthrough under the Plex HTPC settings
D3D11 route:
Turn on the HDR switching and HDR metadata passthrough under the Plex HTPC settings
Now you can open Plex HTPC and play your HDR files with full Metadata passthrough.
This means just static HDR10, no HDR10+ or DV!
Difference between the Vulkan and D3D11 method:
The mpv D3D11 route relies on Plex HTPC to turn your TV into (generic) HDR mode, when this has happened, mpv takes over and passes through the actual metadata of the file you are watching. The result is the same as with the Vulkan setting. The downside on this one is it relies on Microsoft to keep the HDR capabilities on Windows as they currently are and not restrict them any further. (mpv was capable of switching your TV into HDR mode with D3D11 until MS decided to strip away this feature) With the Vulkan approach, mpv can switch the TV into HDR, regardless of what Windows is doing. This is highly dependent on working Vulkan drivers for your GPU.
Difference between the Vulkan and D3D11 method regarding the used GPU:
- The D3D11 method works on AMD, Nvidia, and Intel (ARC) GPU-based systems.
- The Vulkan method works on Nvidia GPU-based systems - AMD unclear, Intel ARC not tested.
Note for AMD Systems: It only works, when HDR Switching in Plex HTPC is turned on.
(If Windows HDR is not activated upon playback Vulkan would error out with VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT - (tested with mpv cli))
The Vulkan method however, seems to work only with an Nvidia GPU as of August 2022.
(On the AMD side, I tested it with an RX 580 and it spits out Vulkan errors.)
Performance issues with HDR Metadata passthrough enabled:
Nvidia GPUs may show a very high number of dropped frames during 4K HDR playback with the HDR metadata passthrough setting enabled (with D3D11).
Changing the power mode to max in the Nvidia control panel has shown a significant reduction in dropped frames. If you don´t want your GPU to run at the full clock all the time you can also create a profile for Plex HTPC. When running Plex HTPC only then the GPU runs at full clock speed. This is also done through the Nvidia control panel. (Manage 3D settings → Program settings → Add → select Plex HTPC → Change power mode to max → save)
Note on HDR10+ and Dolby Vision:
Newer versions of libplacebo/mpv are capable of using the provided dynamic metadata of those HDR formats. This can lead to additional tone-mapping introduced to image processing, even when having HDR passthrough (=in my definition no additional signal processing) enabled. This happens only when the dynamic metadata has values above the static ones - mpv will then tone map those dynamic bits to the static given metadata. Whether you want this or not, depends highly on your viewing preferences. This “feature” can cause frame drops in some cases when the shader creation for the tone mapping algorithm can not be done fast enough.
For HDR10 purists (as this is the only format Windows and mpv support natively) like me, we don’t want this additional processing.
For pure HDR10 metadata processing, add: libplacebo-opts=tone_map_metadata=hdr10 to your mpv.conf. This option tells mpv to only use the HDR10 layer and ignore any other dynamic metadata.
This does not affect your Dolby Vision Profile 5 files. Those are still processed and tone-mapped. (Only with upstream mpv.dll!)
Testing HDR Metadata passthrough:
Just for reference how someone can determine if metadata passthrough is really working without expensive gear like an HDfury Arcana/Vertex. Use the Dolby Core Universe HDR clip (which can be found online) and you can clearly see if it’s working when he says “… what you thought is black isn´t… this is black” (around the 1´30 mark). You should first see a very grey almost black screen, which should switch to a true black when he says “This is black”. When HDR metadata passthrough is not working the very grey is just grey. (but also switches to true black.)
What does not work currently? (Vulkan route for mpv cli only!!)
Starting with Version 1.28.1 Plex HTPC includes a workaround fixing this!
No software is bug-free and unfortunately, mpv has one… Switching the TV into HDR works but not back to SDR after the file ends with the parameters needed for Plex HTPC to work properly (–idle=yes). Opening an SDR file or quitting Plex HTPC will switch it back to SDR. Starting with Version 1.28.1 Plex HTPC includes a workaround fixing this! It does so by playing an “invisible” SDR file and therefore resets the mpv logic and reverts the TV back to SDR.
I have already opened a bug report on Github addressing this one.
GPUs used for testing:
- Nvidia RTX 3050 8Gb
- Nvidia RTX 4060 8Gb
- AMD RX580 8Gb
- Intel ARC A770 16Gb
Sidenote:
No HDR switching with Windows 11 24H2
With Windows 11 24H2 there is a new feature introduced. It’s called “Automatic color management” or short “ACM” - in SDR mode, it pretends HDR is enabled. This causes apps like Plex HTPC to get confused, as they think they are already in HDR mode. Turning ACM off fixes the issue.
Go to System settings => System => Display => Color profile and turn off ACM
Sidenote:
Stuttering on Nvidia GPUs:
Newer Nvidia drivers (All after 512.96) cause 23/24p playback to visibly stutter but without dropping frames.
Add: swapchain-depth=1 to the mpv.conf and the problem should be fixed.
Feel free to correct me, and of course, thanks to Plex for bringing up such a worthy successor of Plex Media Player!
Version/Edit 22 as of 11.08.2025



