Skip to content

Wrong color space on an external display when playing SDR games with the HDR toggle set to ON #1887

Description

@sew700

Your system information

  • Steam client version: 1748914100
  • SteamOS version: 3.7.8 Stable 20250522.2
  • Opted into Steam client beta?: No
  • Opted into SteamOS beta?: No
  • Have you checked for updates in Settings > System?: Yes

Please describe your issue in as much detail as possible:

Context: Steam Deck OLED connected to an external display, capable of HDR, via HDMI dock is being used as a Moonlight streaming client (Moonlight assumingly is not a culprit here, I will come back to this later).
Capturing screenshots for an illustration is quite difficult, or rather impossible, since “Color Vibrance” does not affect screenshots and Steam Deck is not capable of capturing HDR screenshots, but I found an issue with suitable photos illustrating the aforementioned problem just fine in my case.

  1. Moonlight is streaming SDR content, and the Steam Deck's HDR toggle is set to OFF. Everything looks totally fine. ✅
  2. Moonlight is streaming HDR content, and the Steam Deck's HDR toggle is set to ON. Everything looks totally fine. ✅
  3. Moonlight is streaming SDR content, and the Steam Deck's HDR toggle is set to ON. Here is where it goes wrong. ❌

Everything below is based only on my personal experience, research, and observations, since I am not a verified color expert.

SDR games render in the BT.709 color space, whereas HDR games use BT.2020. Thus, the external monitor nonetheless treats incoming “forced” HDR as BT.2020, while in fact it should be BT.709. Since BT.2020 is wider than the BT.709 color space, one can observe so-called “oversaturated” colors. Thankfully, my LG TV is capable of HDMI signalling override, which lets me do some tinkering. If I set colorimetry to BT.709 (or should it be BT.601? The difference between them is quite subtle), the colors roll back to normal. Once I set colorimetry to BT.2020 (or P3 D65 — the difference between the two is invisible to the naked eye), colors are again oversaturated.
An unfortunate side effect of this trick is that native HDR games, on the other hand, become washed out (or, some may say, undersaturated), so it is more of a workaround than a silver bullet.

Important — SteamOS UI is also affected, e.g., Xbox controller button A (Select) by default has a slight yellow tint, the same goes for button B (Back). With the HDR toggle set to ON the button A gets a toxic green look, while the button B becomes pure red. Setting colorimetry to BT.709 rolls back both buttons (and overall SteamOS appearance) to normal. That's why I think this is a system-level issue and has nothing to do with Moonlight.

You reasonably may wonder, “Why would you bother? Just play in SDR, and that is it.” Well, yes and no. Some TVs and monitors are capable of their peak brightness only in the HDR mode, and SDR looks just too dim. Once you get those extra nits, you do not want to miss them anymore.

Some side observations that may be helpful:

  • While looking for the perfect Moonlight client, I stumbled upon Apple TV 4K. It had the opposite problem — SDR games with HDR active were washed out. I tried tinkering with the source code. Here I added _streamConfig.colorSpace = COLORSPACE_REC_709; and made a custom build. With only a single line of code, SDR games became fine, while HDR games were not affected at all, i.e., both SDR and HDR games looked fine simultaneously without any fuss.
  • PS5 is also capable of “always HDR” mode, and it manages pretty well. SDR-only games on the Steam Deck with colorimetry set to BT.709 on my LG TV look exactly like they do on PS5.

In case I discover something new, I will surely share it in this thread.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions