Professional printer profiling workflows almost always begin with device calibration (per-channel linearization and ink-limit establishment) before the full ICC profile is built. ArgyllCMS provides this capability through printcal (measurement-based curve generation) and applycal (application of the resulting .cal curves to subsequent targets or device drivers).
ICCery currently jumps straight from target generation to measurement and colprof. This produces good profiles, but leaves two high-value capabilities missing:
Higher-quality final profiles — A properly linearized device yields lower peak/average/RMS ΔE and more predictable gamut mapping.
Day-to-day drift correction — Short calibration targets can be re-measured and new curves applied without a full re-profile, complementing the existing Stage 5 longitudinal drift analytics.
Adding a first-class Calibration workflow (optional Stage 0 / parallel mode) closes the largest remaining professional gap and elevates ICCery from an excellent profiler to a complete colour-management workstation.
Proposed Feature Requirements
1. Workflow Placement & Entry Points
New primary entry point in the application header / Stage 1 toolbar: Calibrate Printer
The calibration flow can be run:
Independently (standalone calibration session).
As a recommended prerequisite before a full profiling run (Stage 1 shows a status banner “No calibration applied — recommended for CMYK / RIP workflows”).
On demand from Stage 5 when drift analytics recommend re-linearization.
Artefact gating extended: .cal (and optional associated measurement .ti3) become first-class artefacts that can be attached to a profiling project.
Existing 5-stage wizard remains unchanged for users who skip calibration.
Extend existing artefact verifier and project state to track .cal files.
Unit tests for argument construction, path handling, and error mapping (missing measurement, non-monotonic curves, etc.).
Preserve the clean AGPL boundary: all orchestration stays in the proprietary host.
7. Integration with Existing Features
Presets — Calibration settings and the chosen .cal file become part of a Profiling Preset / Recipe.
Stage 5 Drift Analytics — Surface “Days since last calibration” and offer a one-click “Re-calibrate” action when consecutive verification breaches occur.
CGATS Import — Allow external calibration measurement files to be imported and converted to .cal.
Platform profile install (#223) — After a full profile is created with active calibration, the install action notes that curves were applied.
8. Safety & UX Guardrails
Never overwrite an existing .cal without confirmation.
Warn when applying a calibration that is older than a configurable threshold (default 30 days) or when the printer/media name differs.
Clear messaging that calibration is optional for simple RGB photo printers but strongly recommended for CMYK / high-end inkjets.
All temporary files cleaned up; original measurement data retained.
Acceptance Criteria
User can launch a complete calibration workflow (generate → print → measure → compute curves) from a dedicated entry point.
Resulting .cal file is saved, listed, and can be loaded for future sessions.
“Apply Calibration” toggle correctly feeds the curves into subsequent printtarg and colprof runs.
Channel response plots and ink-limit recommendations are displayed and editable.
Calibration status is visible in Stages 1, 2, 4 and 5.
Existing full-profiling path continues to work unchanged when calibration is skipped.
Unit tests cover command argument generation, artefact handling, and common failure modes.
Documentation (README, AGENTS.md, tooltips) updated with clear guidance on when and why to calibrate.
No regression in Stage 3 measurement reliability or XY-table support.
Technical Notes & References
ArgyllCMS tools: printcal, applycal, calibration mode of targen / printtarg.
## Feature Summary & Background
Professional printer profiling workflows almost always begin with **device calibration** (per-channel linearization and ink-limit establishment) before the full ICC profile is built. ArgyllCMS provides this capability through `printcal` (measurement-based curve generation) and `applycal` (application of the resulting `.cal` curves to subsequent targets or device drivers).
ICCery currently jumps straight from target generation to measurement and `colprof`. This produces good profiles, but leaves two high-value capabilities missing:
1. **Higher-quality final profiles** — A properly linearized device yields lower peak/average/RMS ΔE and more predictable gamut mapping.
2. **Day-to-day drift correction** — Short calibration targets can be re-measured and new curves applied without a full re-profile, complementing the existing Stage 5 longitudinal drift analytics.
Adding a first-class Calibration workflow (optional Stage 0 / parallel mode) closes the largest remaining professional gap and elevates ICCery from an excellent profiler to a complete colour-management workstation.
---
## Proposed Feature Requirements
### 1. Workflow Placement & Entry Points
- New primary entry point in the application header / Stage 1 toolbar:
**Calibrate Printer**
- The calibration flow can be run:
- Independently (standalone calibration session).
- As a recommended prerequisite before a full profiling run (Stage 1 shows a status banner “No calibration applied — recommended for CMYK / RIP workflows”).
- On demand from Stage 5 when drift analytics recommend re-linearization.
- Artefact gating extended:
`.cal` (and optional associated measurement `.ti3`) become first-class artefacts that can be attached to a profiling project.
- Existing 5-stage wizard remains unchanged for users who skip calibration.
### 2. Calibration Target Generation
- Dedicated configuration panel (mirroring Stage 1 style):
- Number of steps per channel (default 21 or 33, user-adjustable 11–51).
- Ink-limit exploration range (e.g. 200–400 % total area coverage for CMYK).
- Channel selection (CMYK or individual channels; RGB mode greyed / simplified).
- Paper size & instrument layout (reuse Stage 2 target geometry engine).
- Optional neutral-axis emphasis.
- Generate a short calibration chart via `printcal` / `targen` calibration mode.
- Output: printable TIFF + `.ti1`/`.ti2` artefacts, named with clear “CAL_” prefix.
### 3. Measurement Integration
- Reuse the entire Stage 3 interactive measurement engine (`chartread`, live swatch grid, multi-pass averaging, XY-table support, LED feedback, undo/skip).
- After measurement, automatically invoke `printcal` to compute:
- Per-channel response curves.
- Recommended ink limits (total and per-channel).
- Smoothness / monotonicity diagnostics.
- Visual feedback:
- Channel response plots (pre- and post-linearization).
- Ink-limit recommendation card with editable override.
- Quality indicators (curve smoothness, residual error).
### 4. Curve Application & Persistence
- Save resulting `.cal` file into the project working directory (and optionally a global calibrations library).
- “Apply Calibration” toggle (persisted in project state and presets):
- When enabled, subsequent Stage 2 `printtarg` runs and Stage 4 `colprof` automatically receive the curves via `applycal` or equivalent Argyll flags.
- Visual indicator in the Stage 1 / Stage 2 / Stage 4 headers: “Calibration: Active (filename.cal)”.
- Support loading previously saved `.cal` files (file picker + recent list).
- Optional “Embed curves into profile description / private tag” for traceability.
### 5. UI Components
- **Calibration Dashboard** (new view or collapsible Stage 0 panel):
- Current calibration status (None / Active / Stale).
- Last calibration date + ΔE drift since last cal (if linked to Stage 5 history).
- Quick actions: New Calibration, Load Existing, Clear, Re-measure.
- Channel response charts (SVG or Canvas) with before/after overlay.
- Ink-limit sliders with live total-area-coverage calculation.
- Contextual tooltips explaining when calibration is most beneficial (CMYK/RIP vs RGB driver-managed).
- Consistent button hierarchy (`.btn-md` / `.btn-lg`) and dark-theme styling.
### 6. Backend (Rust / Tauri)
- New commands:
- `generate_calibration_target(config: PrintcalConfig) -> Result<Artefacts, String>`
- `compute_calibration_curves(ti3_path: String, options: PrintcalOptions) -> Result<CalResult, String>`
- `apply_calibration(cal_path: String, target_path: String) -> Result<(), String>`
- `list_saved_calibrations() -> Vec<CalMetadata>`
- Extend existing artefact verifier and project state to track `.cal` files.
- Unit tests for argument construction, path handling, and error mapping (missing measurement, non-monotonic curves, etc.).
- Preserve the clean AGPL boundary: all orchestration stays in the proprietary host.
### 7. Integration with Existing Features
- **Presets** — Calibration settings and the chosen `.cal` file become part of a Profiling Preset / Recipe.
- **Stage 5 Drift Analytics** — Surface “Days since last calibration” and offer a one-click “Re-calibrate” action when consecutive verification breaches occur.
- **CGATS Import** — Allow external calibration measurement files to be imported and converted to `.cal`.
- **Platform profile install** (#223) — After a full profile is created with active calibration, the install action notes that curves were applied.
### 8. Safety & UX Guardrails
- Never overwrite an existing `.cal` without confirmation.
- Warn when applying a calibration that is older than a configurable threshold (default 30 days) or when the printer/media name differs.
- Clear messaging that calibration is optional for simple RGB photo printers but strongly recommended for CMYK / high-end inkjets.
- All temporary files cleaned up; original measurement data retained.
---
## Acceptance Criteria
1. User can launch a complete calibration workflow (generate → print → measure → compute curves) from a dedicated entry point.
2. Resulting `.cal` file is saved, listed, and can be loaded for future sessions.
3. “Apply Calibration” toggle correctly feeds the curves into subsequent `printtarg` and `colprof` runs.
4. Channel response plots and ink-limit recommendations are displayed and editable.
5. Calibration status is visible in Stages 1, 2, 4 and 5.
6. Existing full-profiling path continues to work unchanged when calibration is skipped.
7. Unit tests cover command argument generation, artefact handling, and common failure modes.
8. Documentation (README, AGENTS.md, tooltips) updated with clear guidance on when and why to calibrate.
9. No regression in Stage 3 measurement reliability or XY-table support.
---
## Technical Notes & References
- ArgyllCMS tools: `printcal`, `applycal`, calibration mode of `targen` / `printtarg`.
- Typical workflow reference: ArgyllCMS documentation “Calibrating Printers” section.
- Existing ICCery patterns to reuse: Stage 3 measurement state machine, artefact gating, preset serialization, raw-print engine, SVG charting (already used for drift analytics).
- File conventions: `.cal` (Argyll calibration), optional companion `.ti3` measurement.
---
## Out of Scope (for this ticket)
- Automatic association of a calibration with a specific OS printer queue / driver.
- Real-time closed-loop calibration while printing.
- Multi-channel (>4) device support beyond CMYK.
- Graphical curve editing (freehand node dragging) — v2 enhancement.
- Cloud sync of calibration libraries.
---
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Feature Summary & Background
Professional printer profiling workflows almost always begin with device calibration (per-channel linearization and ink-limit establishment) before the full ICC profile is built. ArgyllCMS provides this capability through
printcal(measurement-based curve generation) andapplycal(application of the resulting.calcurves to subsequent targets or device drivers).ICCery currently jumps straight from target generation to measurement and
colprof. This produces good profiles, but leaves two high-value capabilities missing:Adding a first-class Calibration workflow (optional Stage 0 / parallel mode) closes the largest remaining professional gap and elevates ICCery from an excellent profiler to a complete colour-management workstation.
Proposed Feature Requirements
1. Workflow Placement & Entry Points
Calibrate Printer
.cal(and optional associated measurement.ti3) become first-class artefacts that can be attached to a profiling project.2. Calibration Target Generation
printcal/targencalibration mode..ti1/.ti2artefacts, named with clear “CAL_” prefix.3. Measurement Integration
chartread, live swatch grid, multi-pass averaging, XY-table support, LED feedback, undo/skip).printcalto compute:4. Curve Application & Persistence
.calfile into the project working directory (and optionally a global calibrations library).printtargruns and Stage 4colprofautomatically receive the curves viaapplycalor equivalent Argyll flags..calfiles (file picker + recent list).5. UI Components
.btn-md/.btn-lg) and dark-theme styling.6. Backend (Rust / Tauri)
generate_calibration_target(config: PrintcalConfig) -> Result<Artefacts, String>compute_calibration_curves(ti3_path: String, options: PrintcalOptions) -> Result<CalResult, String>apply_calibration(cal_path: String, target_path: String) -> Result<(), String>list_saved_calibrations() -> Vec<CalMetadata>.calfiles.7. Integration with Existing Features
.calfile become part of a Profiling Preset / Recipe..cal.8. Safety & UX Guardrails
.calwithout confirmation.Acceptance Criteria
.calfile is saved, listed, and can be loaded for future sessions.printtargandcolprofruns.Technical Notes & References
printcal,applycal, calibration mode oftargen/printtarg..cal(Argyll calibration), optional companion.ti3measurement.Out of Scope (for this ticket)