ChromIQ is a macOS desktop application for creating custom ICC profiles for RGB inkjet printers using ArgyllCMS. It provides a guided, five-step workflow that takes you from generating and printing a test chart through measuring it, building a ready-to-use ICC profile, and verifying its quality — without needing to touch the command line.
Pre-built DMGs are attached to each GitHub Release:
| Build | Runs on |
|---|---|
ChromIQ-macOS-universal.dmg |
Apple Silicon and Intel (recommended) |
ChromIQ-macOS-arm64.dmg |
Apple Silicon only |
Open the DMG, drag ChromIQ to Applications, eject, then launch. First launch: right-click → Open to bypass Gatekeeper (the app is ad-hoc signed, not notarized). ArgyllCMS must be installed separately — see Requirements.
| Step 1a — Create Chart (guided) | Step 1b — Create Chart (manual) |
|---|---|
![]() |
![]() |
| Step 2 — Print Chart | Step 3 — Measure Chart |
|---|---|
![]() |
![]() |
| Step 4 — Build Profile | Step 5 — Check & Refine |
|---|---|
![]() |
![]() |
ChromIQ walks you through five steps of RGB printer profiling:
- Create Chart — generates a test chart using
targenandprinttarg, with automatic patch count calculation for your instrument/paper combination - Print Chart — sends the chart TIFF directly to your printer via CUPS with configurable print options
- Measure Chart — drives your spectrophotometer with
chartreadto measure the printed patches - Build Profile — runs
colprofto generate a finished ICC profile - Check & Refine — evaluates the finished profile with
profcheck, shows per-patch ΔE statistics, and guides you through a targeted re-measurement to improve accuracy
- Guided mode (Step 1): Select instrument, paper size, and number of pages — ChromIQ looks up the optimal patch count from an empirical database and sets sensible defaults automatically.
- Manual mode (Step 1): Full access to all
targenandprinttargflags for advanced users.
| Code | Instrument |
|---|---|
i1 |
X-Rite i1Pro / i1Pro 2 / i1Pro 3 |
p3 |
X-Rite i1Pro 3 Plus |
CM |
X-Rite ColorMunki / i1Studio / ColorChecker Studio |
SS |
X-Rite SpectroScan (flatbed XY) |
A4, A4 Landscape, A3, A3 Landscape, A2, US Letter, Letter Landscape, Legal, Tabloid (11×17)
- Empirical patch capacity database (measured with Argyll 3.5.0) for instant lookup without binary search
- Separate patch counts for charts with and without the left clip border (
-Lflag) - Double-density mode for ColorMunki/i1Studio with measuring rig (
-hflag) - Live TIFF preview of the generated test chart
- Direct TIFF printing via CUPS (no PostScript conversion, no ColorSync interference)
- Full
colprofoption set: illuminant, observer, FWA compensation, gamut mapping source profiles, rendering intent overrides - Automatic file naming based on printer, paper, paper type, instrument, and timestamp
- Settings persist between sessions via
QSettings - Built-in ArgyllCMS binary tester and direct download link detection for your platform
- macOS 12 Ventura or later (Apple Silicon and Intel supported)
- ArgyllCMS 3.5.0 — binaries must be installed at
/Applications/Argyll/bin(configurable in Preferences)
- Python 3.12 or later
PyQt6 >= 6.11.0
Pillow >= 10.0.0
PyYAML >= 6.0
Download the latest DMG from the Releases page, open it, drag ChromIQ to Applications, and launch. No Python or build tools required.
git clone https://github.com/itsab1989/ChromIQ.git
cd ChromIQ
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python main.pysource .venv/bin/activate
pip install pyinstaller
pyinstaller ChromIQ.spec
# Result: dist/ChromIQ.appCopy dist/ChromIQ.app to /Applications and launch like any other macOS app. ArgyllCMS binaries are not bundled — install them separately and configure the path in Preferences.
- Install ArgyllCMS and note the path to its
binfolder (default:/Applications/Argyll/bin) - Open ChromIQ → ChromIQ ▸ Preferences (or ⌘,) and verify the binary path
- Click Test binaries to confirm
targen,printtarg,chartread, andcolprofare found
- Choose Guided or Manual mode
- In Guided mode: select your instrument and paper size, set the number of pages, and ChromIQ calculates the optimal patch count automatically
- Optionally toggle Suppress left clip border (-L) — suppressing it gains ~15 mm of printable width for extra patches; leave it on unless you use a physical paper-clip jig
- Click Generate Chart — the TIFF preview appears on the right when done
- Select your printer from the dropdown (click ↺ to refresh the list)
- Configure paper slot, media type, and print quality if needed
- Use No Color Adjustment in your printer driver to bypass color management when printing
- Click Print Page X for each page of the chart
- The
.ti2file from Step 1 is loaded automatically - Follow the on-screen prompts from
chartread - Use Enter/Space to confirm each strip, ← → to navigate, ESC to abort
- Review the colprof settings (quality, algorithm, gamut mapping, etc.)
- Click Build Profile — the resulting
.icmfile is saved in the same folder as the chart - Install the profile in macOS via ColorSync Utility or by double-clicking the
.icmfile
- The
.ti3measurement file from Step 3 is loaded automatically - Click Run profcheck to evaluate the finished profile — per-patch ΔE statistics are shown in the log
- Patches above the ΔE threshold are highlighted; click Re-measure patches to start a guided re-measurement of only those patches
- After re-measurement, click Build Profile again to incorporate the improved data
- Repeat until the profile accuracy meets your requirements
ChromIQ/
├── main.py # Entry point
├── ChromIQ.spec # PyInstaller build spec
├── requirements.txt
├── assets/ # App icons and UI images
├── core/
│ ├── argyll_runner.py # QProcess wrapper for ArgyllCMS tools
│ ├── file_manager.py # Working folder and target name management
│ ├── logger.py # Rotating file logger (~ChromIQ/chromiq.log)
│ ├── resource_path.py # Asset path resolution for dev + frozen bundles
│ └── settings.py # QSettings wrapper with typed defaults
├── data/
│ ├── parameters.yaml # All targen/printtarg/colprof flags + tooltips
│ └── patch_db.py # Empirical per-sheet patch capacity database
├── ui/
│ ├── main_window.py # Top-level window, tab container, status bar
│ ├── parameter_widget.py # Auto-generated flag widgets from parameters.yaml
│ ├── styles.py # Fusion dark-theme QSS stylesheet
│ ├── tiff_preview.py # Zoomable TIFF viewer widget
│ ├── tooltip_button.py # ? icon with popover tooltip
│ ├── widgets.py # Shared widget helpers (browse buttons, etc.)
│ ├── dialogs/
│ │ └── settings_dialog.py # Preferences dialog
│ └── tabs/
│ ├── tab_chart.py # Step 1: chart creation
│ ├── tab_print.py # Step 2: CUPS printing
│ ├── tab_measure.py # Step 3: chartread measurement
│ ├── tab_profile.py # Step 4: colprof profile building
│ └── tab_check_refine.py # Step 5: profcheck quality check & refinement
└── workflow/
├── chart_creator.py # targen + printtarg orchestration
├── cups_printer.py # lp command wrapper
├── measure_manager.py # chartread orchestration
├── postscript_generator.py
├── print_manager.py # Printer enumeration (lpstat)
└── profile_builder.py # colprof orchestration
All settings are stored via QSettings (macOS: ~/Library/Preferences/ChromIQ.ChromIQ.plist) and can be adjusted in Preferences:
| Setting | Default | Description |
|---|---|---|
| ArgyllCMS bin path | /Applications/Argyll/bin |
Directory containing the ArgyllCMS executables |
| Preferred instrument | i1Pro | Pre-selects instrument in Guided mode |
| Preferred paper size | A4 | Pre-selects paper in Guided mode |
| Output folder | ~/ChromIQ/ |
Root folder for all chart/profile sessions |
Each session creates a subfolder named after the target (e.g. ~/ChromIQ/Canon_A4_Matte_i1_2025-04-18_14-30/) containing all generated files for that run.
In Guided mode ChromIQ determines how many color patches to generate:
- Direct lookup — for standard
patch_scale(1.0) andmargin_mm(6 mm), the empirical database indata/patch_db.pyis consulted. Separate values are stored for charts with (-L) and without the left clip border. - Binary search fallback — for custom scale or margin settings, ChromIQ runs a series of quick
targen/printtargprobes to find the maximum patch count that fits on a single page.
The database values were measured with Argyll 3.5.0 at 300 DPI. All common instrument/paper combinations are covered.
Parameters are driven by data/parameters.yaml — no code changes needed:
- tool: printtarg
flag: "-x"
type: bool
default: false
label: "Some new option"
tooltip_title: "Some New Option (-x)"
tooltip_body: "What this option does."
expert_only: true # optional: hide under Expert section
no_space: false # set true if value attaches directly to flag (e.g. -il not -i l)Save the file and restart ChromIQ — the new parameter appears automatically in Manual mode.
This section will be updated as issues are resolved.
- Printing (Step 2): Direct TIFF printing via CUPS works, but color management behavior requires further testing.
- Measurement (Step 3): Some spectrophotometer models may require additional calibration steps not yet surfaced in the UI.
- Profile (Step 4): Advanced gamut mapping options (FWA, custom intents) are present in the UI but have not been fully tested across all instrument/paper combinations.
- Windows/Linux: Not tested. The app is developed and tested on macOS only. Linux support via CUPS is theoretically possible; Windows would require significant changes to the printing pipeline.
ChromIQ writes a rotating log to ~/ChromIQ/chromiq.log (max 2 MB, 3 backups). All ArgyllCMS commands and their full argument lists are recorded here at INFO level, which is useful for debugging unexpected behaviour.
To be determined.
ChromIQ is built on top of ArgyllCMS by Graeme Gill — an outstanding open-source color management system. All color science heavy lifting is done by ArgyllCMS; ChromIQ is purely a GUI front-end.
A heartfelt thanks to soul-traveller for Argyll_Printer_Profiler — a printer profiling tool that is likely in a more mature and in several areas more comprehensive state than ChromIQ. If you prefer working with proven, pre-made test charts rather than randomly generated targets, his project includes an extensive collection of carefully selected charts that are an excellent fit for exactly that use case.





