This tool is experimental, intended for educational and personal use. I am mostly toying with the concepts involved in correct color management.
Why 2000? It is my favorite designation of a set of personal tools concerning still images processing. Originally denoting JPEG 2000. Also my favorite year before everything in the world went to...
The tool has been tested only on Windows.
ICC 2000 is a Python/Tkinter desktop application for building RGB input ICC profiles from a ColorChecker SG chart.
It is designed as a practical profiling and validation tool for digitization and imaging workflows, with a strong focus on:
- high-fidelity LUT-based profiling
- validation against reference chart data
- exported ICC regression checking
- low-level ICC inspection and reporting
- an English-first GUI with optional Czech localization
Git(optional)PythonwithtkintersupportLittleCMS 2
On Windows, the repository includes lcms2.dll, so no additional system-wide LittleCMS installation is usually required.
git clone https://github.com/bezverec/icc2000.gitcd icc2000or
- download this repo as ZIP via your web browser, unzip, navigate to the root directory
pip install -r requirements.txtFrom the project root:
python -m src.appOn Windows PowerShell, for example:
cd C:\temp\icc2000
python -m src.apprequirements.txt currently includes:
numpyPillowopencv-pythonmatplotlibopenpyxlcolour-science
openpyxlis required forXLSXreference filesmatplotlibis required for HTML report generation and chartsopencv-pythonis required for chart detection and manual corner editing
- Load RGB TIFF images in 8-bit or 16-bit per channel
- Load reference data from:
CSVTXTXLSX
- Support embedded ICC profiles in TIFF images
- Support fallback ICC profiles when the TIFF has no embedded profile
- Automatic ColorChecker SG chart detection
- Manual corner refinement
- Multiple patch sampling options:
- shape:
ellipserect
- mode:
trimmed_meanmedianmean
- shape:
- Adjustable patch inner ratio
- Preview support for chart geometry, ROI, labels, and grid overlay
Matrix + TRCLUT polynomialLUT root-polynomial- real
3D LUT
XYZLAB
For LUT workflows, LAB is generally the preferred PCS because it tends to provide better perceptual fidelity.
The application supports three validation stages:
- Measurement validation
- compares the measured chart directly against the reference using the embedded or fallback ICC
- Internal profile validation
- compares the fitted internal model against the reference
- Exported ICC validation
- validates the final exported ICC profile against the reference using LittleCMS
- Export ICC profiles
- Export validation CSV
- Export exported-ICC validation CSV
- Export HTML reports with:
- charts
- validation summaries
- export regression overview
- low-level ICC tag analysis
The GUI is configured with practical high-fidelity defaults intended for maximum quality.
Maximum fidelity- profile type:
LUT - LUT method:
3D LUT - PCS:
LAB - LUT export grid:
25^3 - sample shape:
ellipse - sample mode:
trimmed_mean - trim fraction:
0.10 - patch inner ratio:
0.50 - ICC revision:
v4.4
Best quality, larger ICC file size.
Smaller export LUT grid while preserving a modern LUT workflow.
Simpler and more broadly compatible profile using PCS = XYZ.
- Load the input TIFF and reference data.
- Detect the chart.
- Refine the chart corners manually if needed.
- Measure the patches.
- Run Validate measurement.
- Run Fit profile.
- Run Validate profile.
- Export the ICC profile.
- Run Validate exported ICC.
- Export the HTML report.
A helper CLI is available for quick validation of an exported ICC profile:
python -m src.tools.validate_exported_icc --image input.tif --reference reference.csv --icc exported.iccIt uses the same sampler and the same LittleCMS-based validation pipeline as the GUI.
The HTML report is intended as a compact technical summary of the full profiling session.
It can include:
- input summary
- measurement validation summary
- internal profile validation summary
- exported ICC validation summary
- charts and histograms
- worst-patch overviews
- neutral-scale analysis
- exported ICC regression view
- low-level ICC analysis:
- profile version
- device class
- color space
- PCS
- rendering intent
- tag table
- important tag presence
- readable text tags such as
desc,cprt,dmnd,dmdd
- For LUT workflows, the best overall combination is usually:
3D LUT + LAB + 25^3
17^3is often a good compromise between file size and export quality- The HTML report can show export regression, meaning the difference between the internal fitted model and the final exported ICC
- ICC analysis also checks the presence of important tags and metadata such as:
A2B0B2A0rTRC/gTRC/bTRCrXYZ/gXYZ/bXYZwtptdesccprtdmnddmddmeta
Make sure Python is installed with tkinter support and that all dependencies are installed:
pip install -r requirements.txtMake sure lcms2.dll is available in the project root.
Make sure openpyxl is installed:
pip install openpyxlMake sure matplotlib is installed and available in the active Python environment.
Use manual corner editing and then re-run patch measurement.
GPLv3.
The code is AI generated using ChatGPT 5.4.