Adjust the white point, gamma or make your XDR display darker without losing HDR peak luminance or the ability to adjust display brightness

Overview

XDR Tuner

Adjust the white point, gamma or make your XDR display darker without losing HDR peak luminance or the ability to adjust display brightness

Project: https://github.com/supercurio/xdr-tuner

Purpose

On the 2021 MacBook Pro M1 Pro & M1 Max running macOS Monterey 12.0.1, the "Apple XDR Display (P3-1600 nits)" and "Apple Display (P3-500 nits)" presets calibration cannot be "fine-tuned" in the display settings.

At the same time, calibrating the display using a sensor with X-Rite i1Profiler clips all the colors above SDR levels to SDR maximums, preventing the system to show HDR content.

However, there is a variation in the factory calibration between units, and the white point on yours might not perceptually matching the D65 spec, nor your other calibrated displays.

XDR Tuner lifts all the restrictions of the display presets by leveraging the support of full dynamic range max and gamma parameters for red/green/blue channels in ColorSync ICC profiles vcgt tag.

This allows to change the display's white point freely without limiting losing HDR support, limiting HDR peak brightness to full-screen luminance, losing the ability to adjust brightness or introducing banding artifacts.

Usage

This is script, it will need to be launched in a terminal like in the Terminal application.
Once your command shell is in this directory, you will be able to launch the script with the following commands.

Launch with default settings and sample configuration

./xdr-tuner.py

This will create a custom profile based on your system-generated one for your display, and apply it immediately.

Customize config and apply automatically

./xdr-tuner.py --loop

Then modify configs/default.json in any text editor until you get the desired color presentation.
Typically, you can open a white page or image and color-match the white point of the XDR display visually with a reference monitor.

Once finished, interrupt xdr-tuner with ctrl-c.

I would only like to lower the minimum brightness

./xdr-tuner.py --config configs/dim.json

If you find the display still too bright at the minimum brightness allowed by the system, applying the dark config will allow to make it darker. By changing the values for red, green and blue in the max section, you can make the display as dark as you'd like.

Changing the gamma to values lower than 1 might help with legibility when the screen is very dim.

Reset to factory profile

./xdr-tuner.py --reset

Set and apply an existing ICC profile

./xdr-tuner.py -a path/to/your-profile.icc

Print help

./xdr-tuner.py --help

Compatible with TrueTone and Night Shift

Both functionalities will work as expected, using your tuned display profile as reference, with no difference compared to factory calibration.

Limitations & TODO

  • This utility was not tested yet with multiple displays connected.
    Support will be added in a future version.
  • The profiles are not re-applied automatically at boot at the moment.
    Coming in a next version - stay tuned for updates
  • Switching between presets in Display Preferences resets the tuning, which needs to be re-applied manually. It looks like a bug in macOS color management, which should re-apply the current profile by itself.
    I don't know how to fix this currently.
  • No GUI: someone experienced with macOS gui app development is welcome to contribute a gui for this, or use this script as a mean to generate and apply the profiles. The license is liberal so maybe you will create your own utility inspired by this. Would appreciate a mention and shout out!
  • Ultimately, I think Apple should provide this capability out of the box in a system update. Hopefully, various display calibration software will gain full HDR support. This is still very new.
  • Better error management needs to be implemented

Bugs and issues

Please report any issue encountered in the dedicated section on Github.

This will help me or contributors to improve this software.

Story behind this

After recently receiving my 2021 MacBook Pro 16.2, I was happy with the device overall but really bummed that its display had too much blue and green, giving a greyish-green tint to all content displays.

Exploring the tuning option offered and trying i1Profiler led to unsatisfactory results as I didn't want to give up on 1600-nits HDR peak brightness nor the ability to adjust display brightness, including automatically with the light sensor.

My options were to return it, wait 2 months for a new custom order to be fulfilled and hope for the best on the new factory calibration, or give it for repair, giving up the ability to return it later and with unknown results.

So I decided to use all this frustration as motivation and leveraged my experience with display calibration and development.

And I'm very happy with the results :D

This solves all the problems I had with color matching displays.
Tuning is also a lot easier than by setting Yxy coordinates in Apple's solution, which is currently not very useful as the popular colorimeter sensors are lacking corrections matrices for the new type of phosphors the Liquid Retina XDR display are using.
Very few people can access a high resolution spectrophotometer that which is required to do a real D65 and colorspace calibration on this panel otherwise.
I tested my old i1Pro, its results are worthless with all the illuminant observer types known.

Credits

Thanks to Timothy Sutton with customdisplayprofiles and Chromium authors with color_profile_manager_mac.py for the inspiration and sample code.

Author

François Simond (supercurio)
https://twitter.com/supercurio

Owner
François Simond
François Simond
A python script based on OpenCV-Python, you can automatically hang up the Destiny 2 Throne to get the Dawning Essence.

A python script based on OpenCV-Python, you can automatically hang up the Destiny 2 Throne to get the Dawning Essence.

1 Dec 19, 2021
Course materials for a 3-day seminar "Machine Learning and NLP: Advances and Applications" at New College of Florida

Machine Learning and NLP: Advances and Applications This repository hosts the course materials used for a 3-day seminar "Machine Learning and NLP: Adv

Yoshi Suhara 11 Jun 22, 2022
RecurrentArchitectures - See the accompanying blog post

Why this? What is the goal? The goal of this repository is to write all the recurrent architectures from scratch in tensorflow for learning purposes.

Debajyoti Datta 9 Feb 06, 2022
A visidata plugin for parsing f5 ltm/gtm/audit logs

F5 Log Visidata Plugin This plugin supports the default log format for: /var/log/ltm* /var/log/gtm* /var/log/apm* /var/log/audit* It extracts common l

James Deucker 1 Jan 06, 2022
A simple and efficient computing package for Genshin Impact gacha analysis

GGanalysisLite计算包 这个版本的计算包追求计算速度,而GGanalysis包有着更多计算功能。 GGanalysisLite包通过卷积计算分布列,通过FFT和快速幂加速卷积计算。 测试玩家得到的排名值rank的数学意义是:与抽了同样数量五星的其他玩家相比,测试玩家花费的抽数大于等于比例

一棵平衡树 34 Nov 26, 2022
A repo to record how I prepare my Interview, and really hope it can help you as well. Really appreciate Kieran's help in the pattern's part.

Project Overview The purpose of this repo is to help others to find solutions and explaintion I will commit a solution and explanation to every proble

Vincent Zhenhao ZHAO 1 Nov 29, 2021
A web interface for a soft serve Git server.

Soft Serve monitor Soft Sevre is a very nice git server. It offers a really nice TUI to browse the repositories on the server. Unfortunately, it does

Maxime Bouillot 5 Apr 26, 2022
Research using python - Guide for development of research code (using Anaconda Python)

Guide for development of research code (using Anaconda Python) TL;DR: One time s

Ziv Yaniv 1 Feb 01, 2022
This repository contains all the data analytics projects that I've worked on in python.

93_Python_Data_Analytics_Projects This repository contains all the data analytics projects that I've worked on in python. No. Name 01 001_Cervical_Can

Milaan Parmar / Милан пармар / _米兰 帕尔马 267 Jan 06, 2023
A simple and easy to use Python's PIP configuration manager, similar to the Arch Linux's Java manager.

PIPCONF - The PIP configuration manager If you need to manage multiple configurations containing indexes and trusted hosts for PIP, this project was m

João Paulo Carvalho 11 Nov 30, 2022
bamboo-engine 是一个通用的流程引擎,他可以解析,执行,调度由用户创建的流程任务,并提供了如暂停,撤销,跳过,强制失败,重试和重入等等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。

bamboo-engine 是一个通用的流程引擎,他可以解析,执行,调度由用户创建的流程任务,并提供了如暂停,撤销,跳过,强制失败,重试和重入等等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。 整体设计 Quick start 1. 安装依赖 2. 项目初始

腾讯蓝鲸 96 Dec 15, 2022
A tool to assist in code raiding in rust

Kodelock a tool to assist in code raiding in rust This tool is designed to be used on a second monitor. This tools will allow you to see a easily read

3 Oct 27, 2022
EDF R&D implementation of ISO 15118-20 FDIS.

EDF R&D implementation of ISO 15118-20 FDIS ============ This project implements the ISO 15118-20 using Python. Supported features: DC Bidirectional P

30 Dec 29, 2022
Convert three types of color in your clipboard and paste it to the color property (gamma correct)

ColorPaster [Blender Addon] Convert three types of color in your clipboard and paste it to the color property (gamma correct) How to Use Hover your mo

13 Oct 31, 2022
Removes all archived super productivity tasks. Just run the python script.

delete-archived-sp-tasks.py Removes all archived super productivity tasks. Just run the python script. This is helpful to do a cleanup every 3-6 month

Ben Herbst 1 Jan 09, 2022
An kind of operating system portal to a variety of apps with pure python

pyos An kind of operating system portal to a variety of apps. Installation Run this on your terminal: git clone https://github.com/arjunj132/pyos.git

1 Jan 22, 2022
Provide error messages for Python exceptions, even if the original message is empty

errortext is a Python package to provide error messages for Python exceptions, even if the original message is empty.

Thomas Aglassinger 0 Dec 07, 2021
addon for blender to import mocap data from tools like easymocap, frankmocap and Vibe

b3d_mocap_import addon for blender to import mocap data from tools like easymocap, frankmocap and Vibe ==================VIBE================== To use

Carlos Barreto 97 Dec 07, 2022
Tools for teachers and students using nng (Natural Number Game)

nngtools Usage Place your nngsave.json to the directory in which you want to extract the level files. Place nngmap.json on the same directory. Run nng

Thanos Tsouanas 1 Dec 12, 2021
NotesToCommands - a fully customizable notes / command template program, allowing users to instantly execute terminal commands

NotesToCommands is a fully customizable notes / command template program, allowing users to instantly execute terminal commands with dynamic arguments grouped into sections in their notes/files. It w

zxro 5 Jul 02, 2022