Windows display calibration toolkit with evidence-labeled sensorless and measured workflows, DDC/CI, ICC/LUT output, and reports
Project description
Calibrate Pro
Make screens match the work with profiles, LUTs, monitor control, and verification reports.
Project Telos | gather | crucible | index | forum | telos | calibrate-pro
Calibrate Pro is a Windows display-calibration toolkit for characterized and measured workflows. It combines display discovery, calibration targets, DDC/CI, ICC/VCGT and LUT tooling, and evidence-labelled reports behind one preview-and-confirm workflow. Sensorless values are explicitly labelled as estimates; measured values require an instrument and retain their evidence source.
Try it
calibrate-pro doctor
calibrate-pro list-targets
calibrate-pro list-panels
calibrate-pro gui
Install from the Windows release build or run from source with pip install -e ".[all]".
Why it matters
Display color is part of the creative pipeline. If the screen is wrong, every design, render, photo, video grade, and model-generated visual can be judged against a bad reference. Calibrate Pro gives a practical path to better display behavior, records what changed, and keeps verification close to the profile.
What to test first
- Launch
calibrate-pro gui, select a display, and inspect the detected identity and available capabilities. - Choose a method and target, then review the exact plan before deciding whether to confirm any supported display change.
- Complete the GUI workflow and inspect the evidence-labelled result or report; values remain estimated or Not measured unless they came from an instrument.
Current status
- Release: Calibrate Pro 1.1.0; command
calibrate-pro; Python 3.10+ on Windows 10/11; per-user installer and portable package. - Operator surface: a PySide6 desktop workflow plus read-only CLI diagnostics, target and panel listings, HDR status, patterns, and plugin discovery. Legacy mutation-capable CLI names are proposal-only and point to the GUI rather than changing display state.
- Safety boundary: Detect -> Method -> Preview -> Apply -> Verify -> Save/Report. The application starts unelevated. A display change requires an exact preview and explicit confirmation; rejection performs no write.
- Evidence boundary: reports distinguish measured, estimated, simulated, replayed, and Not measured values instead of presenting model output as an observation.
Install
Standalone (Windows)
Download the per-user installer or portable ZIP from Releases. No Python installation is required. Both desktop entry points start unelevated; unavailable hardware or operating-system capabilities fail closed and are reported by calibrate-pro doctor.
The 1.1.0 Windows artifacts are not Authenticode-signed, so Windows may show a SmartScreen warning. Verify the downloaded file against the release's SHA256SUMS.txt before running it.
From source
git clone git@github.com:HarperZ9/calibrate-pro.git
cd calibrate-pro
pip install -e ".[all]"
calibrate-pro
Requires Python 3.10+ and Windows 10/11.
Usage
Launch the installed application or run calibrate-pro gui. Read-only CLI surfaces include:
calibrate-pro doctor # Read-only installation/capability diagnostics
calibrate-pro doctor --json # Stable machine-readable diagnostics
calibrate-pro list-targets # List calibration targets
calibrate-pro list-panels # List characterized panel profiles
calibrate-pro info <panel> # Show stored characterization evidence
calibrate-pro hdr-status # Query Windows HDR state
calibrate-pro patterns # Display visual test patterns
calibrate-pro gui # Launch the calibration workflow
Run calibrate-pro --help for the complete command list. Old direct-action names such as auto, calibrate, restore, and verify are proposal-only in 1.1: they do not mutate the display and instead direct the operator to preview and confirm through the GUI.
See the usage guide for installation, command behavior, evidence labels, troubleshooting, and the read-only example.
How It Works
- Detects the selected display and reports available capabilities.
- Chooses a sensorless or measured method and calibration target.
- Previews an immutable plan, including bounded DDC changes and SHA-256-bound external assets.
- Confirms the exact plan with a one-use confirmation before the first write.
- Applies only supported operations after capturing restorable prior state; failures trigger verified compensation.
- Verifies the result and labels every performance value by evidence kind.
- Saves the approved profile, LUT, and/or report. Background guard behavior is monitor-and-notify only in 1.1.
Calibration Modes
| Mode | Requires | Evidence |
|---|---|---|
| Sensorless | A characterized panel profile or EDID-derived inputs | Estimated; never presented as a measurement of the attached unit |
| Measured | A supported colorimeter | Instrument observations with source/provenance attached |
Without a colorimeter there is no measurement of the attached unit. Calibrate Pro therefore renders unavailable observations as Not measured and labels model-derived diagnostics as estimated.
Native USB Colorimeter
Built-in USB HID driver for the X-Rite i1Display3 family (i1Display Pro, ColorMunki Display, Calibrite ColorChecker Display). No ArgyllCMS required.
Native USB HID driver for the i1Display3 family reads per-unit calibration matrices from each device's EEPROM - 9 stored matrices for different display technologies (OLED, WhiteLED, CCFL, WideGamut, etc.). Falls back to approximate constants if EEPROM reading fails.
Supported Displays
58 characterized panels with DDC/CI recommendations:
- QD-OLED (17): ASUS PG27UCDM, Samsung G6/G7/G8/G9, Dell AW3423DW/DWF/AW2725DF/AW3225QF, MSI 321URX
- WOLED (10): LG C2/C3/C4/G4, ASUS PG27AQDP/PG34WCDM, LG 34GS95QE
- IPS (20): Dell U2723QE/U3224KB, ASUS ProArt PA279CRV, BenQ SW271C/SW272U, EIZO CS2740/CG2700X
- Nano-IPS (2): LG UltraGear 27GP950-B, LG UltraGear 27GP850-B
- Mini-LED (4): ASUS PG32UCDM, Apple Pro Display XDR
- VA (3): Samsung Odyssey G7, Sony INZONE M9
- RGB OLED (2): ASUS ProArt PA32DC
Unknown monitors are calibrated using EDID chromaticity data.
Output Files
| File | Usage |
|---|---|
.cube |
33x33x33 3D LUT (DaVinci Resolve, OBS, any LUT app) |
.clf |
ACES Common LUT Format (SMPTE ST 2136-1) |
.icc |
ICC v4 profile (Windows/macOS color management) |
.3dlut |
MadVR format |
_reshade.png |
ReShade LUT texture |
_specialk.png |
Special K LUT texture |
_obs.cube |
OBS Studio LUT |
_mpv.conf |
mpv player config snippet |
_report.html |
Calibration report with CIE diagram, gamma curves, gamut coverage |
Architecture
calibrate_pro/
core/ Color math, LUT engine, ICC v4 profiles
panels/ Display detection, 58-panel database, DDC recommendations
sensorless/ Sensorless calibration engine (Oklab/JzAzBz gamut mapping)
calibration/ Native measurement loop, CCMX spectral correction
hardware/ i1Display3 native USB, DDC/CI with retry + WMI fallback
lut_system/ DWM 3D LUT, VCGT gamma ramp, AMD/NVIDIA API
verification/ 12 patch sets (287 patches), grayscale tracking, PDF export
services/ CalibrationGuard, GamutClamp, AppSwitcher, DriftMonitor
gui/ PySide6 desktop workflow and read-only system tray
platform/ Windows (full) + macOS (planned)
Color Science
- Perceptual spaces: Oklab, JzAzBz, ICtCp, CAM16-UCS, CIE Lab/Luv
- Transfer functions: PQ (ST.2084), HLG (BT.2100), sRGB, BT.1886, BT.2390 EETF
- Color spaces: sRGB, Display P3, Rec.2020, AdobeRGB, ACES
- Gamut mapping: Oklab perceptual compression (SDR), JzCzhz for HDR
- Chromatic adaptation: Bradford transform, D50/D65 illuminants
- Verification: CIEDE2000 + CAM16-UCS, 12 patch sets (287 patches)
Building
# From source
pip install -e ".[all]"
calibrate-pro gui
# Reproducible Windows release (locked dependencies and release gates)
powershell -File scripts/build_windows.ps1
Dependencies
Required: Python 3.10+, numpy, scipy, build-color
GUI: PySide6 + QtPy + Build UI 2 (pip install ".[gui]")
Sensor: hidapi (pip install ".[sensor]")
Windows distribution: includes the audited runtime dependencies and notices required by the release manifest, including the approved dwm_lut runtime files.
License
FSL-1.1-MIT. Copyright (c) 2022-2026 Zain Dana Harper. Source-available, not open source: read it, run it, and build on it; commercial Competing Use is reserved to the Licensor to fund continued development. See the license.
For developers
Keep the public README, package metadata, and examples aligned with current behavior. Before opening a PR or pushing a release, run the local package verification path.
python -m pip install -e ".[test]"
python -m pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file calibrate_pro-1.1.0.tar.gz.
File metadata
- Download URL: calibrate_pro-1.1.0.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
885dccee0508989f896895d171b2bcf6d2b5caeab128868fe8fc46a7caf006dd
|
|
| MD5 |
2643b90bebb2e5b243653314dd0714ff
|
|
| BLAKE2b-256 |
c45d21843de7cb020629c2c7bc95f69519b11f77d1c90348670c2ef26bd57b82
|
Provenance
The following attestation bundles were made for calibrate_pro-1.1.0.tar.gz:
Publisher:
release.yml on HarperZ9/calibrate-pro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
calibrate_pro-1.1.0.tar.gz -
Subject digest:
885dccee0508989f896895d171b2bcf6d2b5caeab128868fe8fc46a7caf006dd - Sigstore transparency entry: 2148125489
- Sigstore integration time:
-
Permalink:
HarperZ9/calibrate-pro@7d34ae8d700bf96b7e96ca360edab19680ed7114 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HarperZ9
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d34ae8d700bf96b7e96ca360edab19680ed7114 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file calibrate_pro-1.1.0-py3-none-any.whl.
File metadata
- Download URL: calibrate_pro-1.1.0-py3-none-any.whl
- Upload date:
- Size: 890.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
deedc55c60ecab9f1c2eb991a1b099659b903e52edd30742c2694786dc590bd9
|
|
| MD5 |
412f65d1afad8a1bddb4aaf879454102
|
|
| BLAKE2b-256 |
8a6cedfb8debe381055dca12f69d5e75b64ab621a9bcc4d6846bd57692c5d5f5
|
Provenance
The following attestation bundles were made for calibrate_pro-1.1.0-py3-none-any.whl:
Publisher:
release.yml on HarperZ9/calibrate-pro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
calibrate_pro-1.1.0-py3-none-any.whl -
Subject digest:
deedc55c60ecab9f1c2eb991a1b099659b903e52edd30742c2694786dc590bd9 - Sigstore transparency entry: 2148125494
- Sigstore integration time:
-
Permalink:
HarperZ9/calibrate-pro@7d34ae8d700bf96b7e96ca360edab19680ed7114 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HarperZ9
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7d34ae8d700bf96b7e96ca360edab19680ed7114 -
Trigger Event:
workflow_dispatch
-
Statement type: