- Make parseGamutFile support multiple BEGIN_DATA blocks, inline #
comments, out-of-bounds vertex warnings, and user-visible parser
warnings (returned in { vertices, faces, warnings }).
- Harden profcheck report parsing: prefer the last JSON object with
avg_de/max_de/rms_de keys, then fall back to a wider set of regex
patterns for legacy plain-text output.
- Add parser warnings to the process log when metrics cannot be found.
- Fix loadGamutMesh call signature and add try/catch around gamut load.
- Add manual gamut parser tests in src/js/gamut_viewer.test.js.
- Update AGENTS.md, README.md, and ROADMAP.md.
Generated with Devin
113 lines
6.2 KiB
Markdown
113 lines
6.2 KiB
Markdown
# ICCery 🎨
|
|
|
|
> Modern, cross-platform native desktop application for printer profiling, powered by ArgyllCMS.
|
|
|
|
[](https://git.i3omb.com/gronod/ICCery)
|
|
[](https://git.i3omb.com/gronod/ICCery)
|
|
[](https://tauri.app)
|
|
[](LICENCE.md)
|
|
|
|
**ICCery** is a native GUI frontend designed to make creating custom ICC/ICM printer profiles seamless, visual, and reliable. It wraps the powerful color management capabilities of [ArgyllCMS](https://www.argyllcms.com/) within an intuitive, artefact-gated 5-stage wizard.
|
|
|
|
---
|
|
|
|
## Key Features
|
|
|
|
- 🪄 **Linear 5-Stage Wizard Workflow**:
|
|
1. **Stage 1 — Patch Generation (`targen`)**: Configure RGB (driver-managed) or CMYK (RIP-managed) patch sets with custom counts, profiling presets, and neutral/grey axis boosting.
|
|
2. **Stage 2 — Target Creation & Raw Printing (`printtarg`)**: Format patch targets for spectrophotometers (i1Pro, i1Pro2, ColorMunki, SpyderPrint). View high-resolution downscaled TIFF previews and print directly using native OS raw unmanaged pathways (Windows GDI uncorrected / Linux CUPS `raw`).
|
|
3. **Stage 3 — Interactive Measurement (`chartread`) & Averaging (`average`)**: Instrument auto-detection (`instlist`), real-time calibration prompts, interactive strip reading state machine, live swatch grid with CIEDE2000 ($\Delta E_{00}$) quality indicators and user-configurable traffic-light thresholds, diagonally split intended-vs-measured colour swatches, white reference patch preservation, and multi-pass sheet averaging for measurement noise reduction.
|
|
4. **Stage 4 — Profile Calculation (`colprof`)**: Generate high-precision cLUT mathematical ICC/ICM profiles with configurable algorithm quality, OBA/FWA compensation, illuminant/observer selection, viewing-condition transforms, custom ambient spectrum support, descriptions, and copyright tagging.
|
|
5. **Stage 5 — Verification & 3D Gamut (`profcheck` + `iccgamut`)**: Comprehensive mathematical validation report (Peak, Average, RMS $\Delta E$) paired with an interactive 3D CIELAB convex hull color volume viewer, per-vertex true-colour rendering, layer opacity controls, camera reset, keyboard shortcut, touch controls, bundled sRGB reference wireframe comparison, and robust parsing of both JSON and legacy profcheck output formats.
|
|
- 📋 **Profiling Presets**: One-click configuration presets (Standard RGB Photo, High-Gamut CMYK Proofing, Fast RGB Draft) with custom preset export/import and security validation.
|
|
- 🐧 **glibc Compatibility**: Pre-built Linux packages compiled with Ubuntu 22.04 LTS compatibility for Debian/Ubuntu environments.
|
|
- 🛡️ **Disk Artefact Gating**: Stepper navigation strictly verifies generated artefacts on disk (`.ti1`, `.ti2`, `.ti3`, `.icc`/`.icm`), preventing out-of-order execution while preserving backward navigation.
|
|
- 🌐 **Platform-Aware**: Automatic handling of platform profile conventions (`.icm` on Windows, `.icc` on Linux/macOS) and native OS printer subsystems.
|
|
- 🎛️ **Consistent UI Controls**: Tiered button sizing (`btn-sm`/`btn-md`/`btn-lg`/`btn-icon-sq`) and standardised action row classes provide a uniform, polished interface across all wizard stages and dialogs.
|
|
- ⚖️ **Clean AGPL Boundary**: Complete isolation of AGPLv3 binaries via asynchronous tokio IPC process pipelines.
|
|
|
|
---
|
|
|
|
## Architectural Overview
|
|
|
|
ICCery is built on **Tauri v2** and **Rust**, coupled with a reactive Vanilla JavaScript frontend and **Three.js** WebGL visualization:
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph Host ["ICCery Host (Tauri + Rust + Vanilla JS)"]
|
|
UI[Wizard UI & Swatch Grid]
|
|
ThreeJS[3D CIELAB Gamut Viewer]
|
|
State[Wizard State & Artefact Verifier]
|
|
PrintEngine["Raw Print Subsystem (GDI / CUPS)"]
|
|
ProcMgr[Async Subprocess IPC Manager]
|
|
|
|
UI <--> State
|
|
State <--> ProcMgr
|
|
ProcMgr --> ThreeJS
|
|
UI --> PrintEngine
|
|
end
|
|
|
|
subgraph Argyll ["ArgyllCMS Subprocesses (AGPLv3)"]
|
|
BIN_TAR[targen]
|
|
BIN_PRT[printtarg]
|
|
BIN_CHR[chartread]
|
|
BIN_COL[colprof]
|
|
BIN_CHK[profcheck]
|
|
BIN_GAM[iccgamut]
|
|
end
|
|
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_TAR
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_PRT
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_CHR
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_COL
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_CHK
|
|
ProcMgr -- stdin/stdout/stderr pipes --> BIN_GAM
|
|
```
|
|
|
|
---
|
|
|
|
## Building from Source
|
|
|
|
### Prerequisites
|
|
- [Node.js](https://nodejs.org/) (v18 or newer)
|
|
- [Rust](https://www.rust-lang.org/) (1.78+ stable)
|
|
- Operating system dependencies:
|
|
- **Windows**: Microsoft Visual Studio C++ Build Tools & WebView2 runtime.
|
|
- **Linux (Debian/Ubuntu)**: `libwebkit2gtk-4.1-dev`, `build-essential`, `curl`, `wget`, `file`, `libxdo-dev`, `libssl-dev`, `libayatana-appindicator3-dev`, `librsvg2-dev`, `libcups2-dev`.
|
|
|
|
### Development Mode
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://git.i3omb.com/gronod/ICCery.git
|
|
cd ICCery
|
|
|
|
# Install frontend dependencies
|
|
npm install
|
|
|
|
# Download ArgyllCMS sidecars for this OS (from github.com/Gronod/argyllcms/releases)
|
|
npm run fetch-argyll
|
|
|
|
# Run the development app
|
|
npm run tauri dev
|
|
```
|
|
|
|
> **Note:**
|
|
> - Sidecars are not stored in git; `tauri build` / `tauri dev` will fail until `npm run fetch-argyll` has been run at least once.
|
|
> - You can override the downloaded ArgyllCMS release version using `ARGYLL_RELEASE_TAG=vX.Y.Z npm run fetch-argyll`.
|
|
> - On Windows, the NSIS installer package bundles the ArgyllCMS USB instrument driver suite and offers an optional driver setup step when run with administrative privileges.
|
|
|
|
### Production Build
|
|
```bash
|
|
# Download sidecars (if not already fetched)
|
|
npm run fetch-argyll
|
|
|
|
# Build desktop packages (MSI/NSIS on Windows, DEB/AppImage on Linux)
|
|
npm run tauri build
|
|
```
|
|
|
|
---
|
|
|
|
## Licence
|
|
|
|
The ICCery GUI application is proprietary software licensed under the terms of the [EULA](LICENCE.md). ArgyllCMS binaries and source code are licensed under the GNU Affero General Public License (AGPLv3).
|