Skip to main content

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, and verification

Calibrate Pro

Make screens match the work with profiles, LUTs, monitor control, and verification reports.

Project Telos | gather | crucible | index | forum | telos | calibrate-pro

license: fair-source python version CI part of: Project Telos

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

  1. Detects the selected display and reports available capabilities.
  2. Chooses a sensorless or measured method and calibration target.
  3. Previews an immutable plan, including bounded DDC changes and SHA-256-bound external assets.
  4. Confirms the exact plan with a one-use confirmation before the first write.
  5. Applies only supported operations after capturing restorable prior state; failures trigger verified compensation.
  6. Verifies the result and labels every performance value by evidence kind.
  7. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

calibrate_pro-1.1.0.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

calibrate_pro-1.1.0-py3-none-any.whl (890.5 kB view details)

Uploaded Python 3

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

Hashes for calibrate_pro-1.1.0.tar.gz
Algorithm Hash digest
SHA256 885dccee0508989f896895d171b2bcf6d2b5caeab128868fe8fc46a7caf006dd
MD5 2643b90bebb2e5b243653314dd0714ff
BLAKE2b-256 c45d21843de7cb020629c2c7bc95f69519b11f77d1c90348670c2ef26bd57b82

See more details on using hashes here.

Provenance

The following attestation bundles were made for calibrate_pro-1.1.0.tar.gz:

Publisher: release.yml on HarperZ9/calibrate-pro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for calibrate_pro-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 deedc55c60ecab9f1c2eb991a1b099659b903e52edd30742c2694786dc590bd9
MD5 412f65d1afad8a1bddb4aaf879454102
BLAKE2b-256 8a6cedfb8debe381055dca12f69d5e75b64ab621a9bcc4d6846bd57692c5d5f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for calibrate_pro-1.1.0-py3-none-any.whl:

Publisher: release.yml on HarperZ9/calibrate-pro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page