Build Windows Packages / Build Windows (push) Successful in 7m45s
Build Linux Packages / Build Linux (push) Successful in 9m59s
Build macOS Packages / Build macOS (Intel) (push) Successful in 11m12s
Build macOS Packages / Build macOS (Apple Silicon) (push) Successful in 11m18s
Add Install Profile to System after a successful profcheck run. Copies the working-directory artefact into the platform colour store (Windows ICM, macOS ColorSync, Linux colord) without moving it. Collisions require Overwrite / Rename / Cancel; permission errors mention elevation. When printcal curves were applied (#224) the success toast records that.
14 KiB
14 KiB
ICCery Development Roadmap & Architecture Strategy
This document outlines the architectural roadmap, completed milestones, and upcoming development goals for ICCery.
Note
Authoritative milestone and issue tracking lives in Gitea Issues → Milestones.
1. Architecture Summary
ICCery is a native, cross-platform desktop application built with:
- Backend: Rust + Tauri v2, managing asynchronous process pipes, native printer configurations (macOS Core Printing /
NSPrintPanel, Windows GDI & DEVMODE, Linux CUPS), and filesystem operations. - Frontend: Vanilla JS (ES Modules) + HTML5/CSS3 with a modern dark theme and responsive layout.
- Visualization: Three.js WebGL engine for 3D CIELAB color gamut volumes and sRGB reference comparisons.
- Engine: ArgyllCMS command-line utilities orchestrated over isolated standard stream IPC (
stdin,stdout,stderr). - Current Version:
v0.8.5(Production release).
2. Completed Milestones
Milestone 1 — Core Scaffolding & Subprocess Engine (v0.1.0)
- Initialized Tauri v2 + Rust multi-threaded asynchronous process manager.
- Implemented non-blocking event-driven stream pipes (
process:stdout,process:stderr,process:exit). - Established strict AGPLv3 isolation boundary.
Milestone 2 — Patch Set & Target Generation (v0.1.3)
- Integrated Stage 1
targenfor RGB/CMYK patch generation with presets and neutral axis boosting. - Integrated Stage 2
printtargmulti-page layout generation for major spectrophotometers (i1Pro, i1Pro2, ColorMunki, SpyderPrint). - Built working directory resolution and cross-platform binary detection.
Milestone 3 — Interactive Measurement & Live Delta E (v0.1.6)
- Developed bidirectional
chartread -ustate machine with prompt-driven calibration and strip reading. - Real-time JSON stream parsing (
ROW_COLORS_JSON) for dynamic swatch grid updates. - Implemented live CIEDE2000 (
\Delta E_{00}) calculation with traffic light quality indicators.
Milestone 4 — Profile Calculation & Quality Verification (v0.1.9)
- Integrated Stage 4
colprofcLUT profile mathematical generation. - Integrated Stage 5
profchecknumerical verification report (Peak, Average, RMS\Delta E). - Added automated dark-theme UI with responsive status indicators.
Milestone 5 — Native OS Printing & Previews (v0.1.13)
- Added raw unmanaged print pipelines (Windows GDI unmanaged printing + Linux CUPS
rawqueue printing). - Added high-resolution base64 TIFF thumbnail rendering pipeline.
- Optimized window constraints to 1280×800 minimum bounds.
Milestone 6 — 3D Gamut Visualization & Platform Extension Handling (v0.1.14)
- Extracted
.gamgamut datasets viaiccgamutand integrated 3D CIELAB WebGL viewer. - Bundled reference
sRGB.gamwireframe overlay for comparative volume analysis. - Resolved platform profile extensions (
.icmon Windows vs..iccon Unix).
Milestone 7 — Wizard Disk-Artefact Gating & v0.2 Ship (v0.2.0)
- Implemented disk-artefact gating for wizard stepper navigation (
.ti1→.ti2→.ti3→.icc/.icm). - Eliminated all hardcoded placeholder and fallback crutches across JavaScript modules.
- Comprehensive documentation, release testing, and packaging automation.
Hotfix Release (v0.2.1)
- Resolved P0 process manager deadlock and premature stdin pipe closure affecting interactive
chartreadinstrument workflows. - Decoupled
ChildStdinmutex management from child process wait/reap tasks.
Milestone 8 — Advanced Measurement & Workflow Enhancements (v0.3.0)
- Averaging & Multi-Pass Reading: Integrated Argyll
averagemulti-pass measurement sheet workflow for noise reduction. - Instrument Auto-Detection: Added hardware detection via
instlist. - Preset Management: Save, load, export, and import profiling recipes.
- Full 3D Convex Hull in CIELAB: Replaced 2D projected Delaunay triangulation with full 3D QuickHull in Lab space with touch rotation controls.
Maintenance & Hotfix Releases (v0.3.1 – v0.3.6)
- v0.3.1 (#103): Stage 1 file browse via backend
select_target_filedialog. - v0.3.2 (#108): Linux CI runner compatibility updated to Ubuntu 22.04 LTS so
.debpackages run without requiring newer GLIBC versions. - v0.3.3 (#127): ArgyllCMS binary sidecars dynamically fetched at build time from
Gronod/argyllcmsreleases; removed vendored binaries from repository; added Windows NSIS USB instrument driver installer hook. - v0.3.4 & v0.3.5 (#119, #134): TIFF preview metadata extraction, printtarg custom patch labels, and robust
instlistJSON parsing. - v0.3.6 (#137): Interactive
chartreadsupport for multi-key prompts (accept/override key combos).
Milestone 10 — Production Ready Features (v0.5.0 – v0.5.5)
- Structured Logging (#139): Integrated
tauri-plugin-logwith rotating logs in native OS app log directory and ArgyllCMS stdout/stderr stream capture. - Stage 3 Direct Resume (#140): Open existing
.ti2target file in Stage 1 to parse header metadata and jump directly to Stage 3 (Measurement). - Stage 1 Additional Customisation & Tooltips (#141): Exposure of 11 advanced
targentuning parameters (-g,-s,-n,-c,-N,-G,-A, algorithm selection,-l,-V,-p) in a collapsible section with contextual guidance tooltips and preset support. - Subprocess Lifecycle & Clean Exit (#147, #149): Tauri application and window close hooks invoking
ProcessManager::kill_allto prevent orphaned hardware-locking processes. - Stage 1 Layout Normalization & Stage 2 Deterministic Target Generation (#162, #163) (
v0.5.5): Reorganized Stage 1 Advanced Options into structured 2-column grids with normalized heights; enforced deterministic-R 1target generation with custom seed and raster order (-r) support in Stage 2. - macOS Universal Binary Target (#164) (
v0.5.5): Added macOS Universal Binary (universal-apple-darwin) build target combining Intel (x86_64) and Apple Silicon (arm64), ArgyllCMS universal sidecar packaging, runtime fallback resolution, and CI release asset automation.
Milestone 11 — Enterprise Colour Workflow (v0.6.0 – v0.7.2)
- macOS Driver Colour Management Bypass & Media Type Selection (#188) (
v0.7.2): Direct media type extraction via PPD/lpoptions, vendor uncorrected color bypass detection (CanonCNIJIntent2, EpsonColorCorrection),AP_ColorMatchingMode=AP_ApplicationColorMatchingColorSync suppression, CUPS printer management links, and Media Type selection UI. - 3D Gamut Visualisation Rework (#185) (
v0.7.1): Purpose-built CIELAB axis scaffold with tick marks and crisp CSS2D HTML text labels, clean sRGB reference rendering usingTHREE.EdgesGeometrywith faint transparent solid volume, per-vertex true-colour profile gamut shading vialabToSrgb(), and glassmorphic legend overlay with independent layer visibility toggles. - Workflow & Visualizer Enhancements (#176, #177, #178, #179) (
v0.7.0): Stage 4 OBA/FWA compensation and viewing conditions UI (-c,-d), global button standardization, Stage 3 swatch grid diagonal split rendering for CIEDE2000 visual comparison, and robust gamut.gamdual-table face parsing with regex fixes for profcheck. - CGATS Dataset Interoperability (#94) (
v0.6.0): Native Rust CGATS and Argyll.ti3dataset parser, canonical normalizer (0-255 scaling, field aliasing, metadata synthesis), and direct-jump workflow to Stage 4 (Profile Generation) and Stage 5 (Verification) using imported external datasets. - Stage 1 Layout Normalization (#162) (
v0.6.1): Standardized control heights and structural flexbox auto-margin layout for multi-column Stage 1 advanced settings. - Overlay Tooltip Rendering (#171) (
v0.6.2): Rendered tooltips as absolute overlay popups on hover/focus to prevent layout jitter while preserving in-flow hints in global tooltip toggle mode. - Preconditioning Profile File Type Filter (#172) (
v0.6.3): Dedicatedselect_profile_filecommand allowing selection of.icc,.icm, and.mppfiles for Stage 1 preconditioning profile input. - Windows Authenticode Code Signing in Gitea CI (
v0.6.4–v0.6.6): Integrated Tauri bundle signing hooks viasign.cmdbatch wrapper with PATH resolution, Gitea Actions secret-based PFX materialization, and ephemeral signing pipeline. - Stage 3 Chartread Completion & Snapshot IPC Fix (#175) (
v0.6.7–v0.6.8): Added dedicatedDone & Save .ti3action (d\n),Undo Stripaction (u\n), automated completion state detection, and corrected Tauri IPC deserialization parameter (passIndex) insnapshot_ti3.
Milestone 13 — UI/UX & Workflow Polish (v0.7.0 – v0.7.4, v0.8.0)
- Global Button Standardization (#177): Enforce
.btn-sm/.btn-md/.btn-lg/.btn-icon-sqtiers across all stages, remove inline button styles, and add CSS custom properties for button metrics. - Swatch Grid White Patch & Orientation Polish (#178): Finalise
is_padguard documentation, diagonally split swatch tooltips, and validateprinttargrow/column ordering. - Configurable CIEDE2000 Thresholds (#184): User-configurable good/warning ΔE₀₀ upper bounds in Settings, persisted across sessions and applied to the Stage 3 swatch grid.
- Stage 4 OBA/FWA Tooltips & Tests (#176): Contextual help for OBA/FWA, illuminant, observer, and viewing-condition controls; additional
colprofarg builder tests. - 3D Gamut Viewer Controls (#185): Camera reset, opacity sliders, keyboard shortcut, and full public-API JSDoc.
- Gamut / Profcheck Hardening (#179): Validate
.gamvertex/face parsing, improvedprofcheckregex fallbacks for legacy text output, and user-visible parser warnings.
Hardware Status Feedback Release (v0.8.1)
- i1Pro 2 LED Status Feedback (#204): Added optional
-Y lswitch support tochartreaddriving the dual RGB ring LEDs of the X-Rite i1Pro 2 for visual status feedback (calibration, swipe ready, misread, capture success). - macOS CI Cross-Compilation Testing: Hardened
.gitea/workflows/build-macos.ymlby compiling Apple Silicon tests with--no-runon Intel runner hosts to avoid architecture execution mismatch.
Milestone 12 — Future Workflow & Advanced Analytics (v0.8.2)
- Printer Drift Tracking & Verification Analytics (#95): Track longitudinal printer drift in Stage 5 over time with historical run logging in
verification_history.json(1,000 records), interactive dual-series SVG trend chart with ICCery verification reference bands, consecutive-breach alert recommendation card, and RFC-4180 CSV export. - XY Automated Scanning Tables (#93): Full Stage 3 support for automated XY scanning tables (GretagMacbeth SpectroScan, X-Rite i1iO) with pure multi-line prompt classification, fiducial alignment prompts, 4-step sequence checklist, and graceful head parking on cancel.
Multi-Language Localization (#96): Closed — Won't Fix (English UI retained as standard color-management terminology).
Maintenance & Reliability Release (v0.8.3)
- Gamut Viewer Node Test Runner Support (#212): Guarded
windowandwindow.__TAURI__globals ingamut_viewer.jsand added polyfill mock harness togamut_viewer.test.jsto enable automated headless test execution vianode src/js/gamut_viewer.test.js. - Custom Spectrum File Picker Dialog (#210): Implemented native
select_spectrum_filecommand wrapping Tauri file dialog with.spfilter for custom FWA/OBA spectrum selection in Stage 4 profile generation. - CGATS Dataset Import File Picker & State Synchronization (#211): Implemented native
select_dataset_filecommand with.ti3,.txt,.cgats, and.csvfilter, synchronized wizard target directory and basename upon import, and guarded against empty target states.
Maintenance & Reliability Release (v0.8.4)
- Atomic Verification History Persistence (#213): Hardened
quality_store.rswith atomic temporary file writes (.tmp), explicit flush/sync, and atomic rename to prevent historical drift data loss or corruption upon unexpected system crashes. - Frontend Unit Testing & CI Integration (#215): Added standard
npm testscript executing the 3 frontend test suites (profcheck,chartread, andgamut_viewer) and integrated automated frontend test validation into macOS, Linux, and Windows CI workflows. - macOS Monterey WKWebView survival (#225): Deferred Stage 5 WebGL until the gamut viewer is shown, hid the main window until first paint, painted a dark WKWebView backing, logged Web Content termination, and raised
minimumSystemVersionto 12.0.
Printer Calibration Release (v0.8.5)
- Printer Calibration Curves (#224): Optional Stage 0 dashboard for
printcallinearization and ink limits.CAL_artefacts, Apply Calibration toggle feedingprinttarg -Kandapplycal, channel-response plots, stale-cal warnings, and project/library persistence. - System-Wide Profile Installation (#223): Stage 5 “Install Profile to System” copies the verified ICC/ICM into the platform colour store (user or system), with overwrite/rename/cancel, elevation guidance, and a note when printcal curves were applied.
3. Future Roadmap
Milestone 9 — macOS Native Support & Enhanced Print Spooling (v0.4.0 / Post-v0.8)
- macOS Platform Bundle: Build and sign universal macOS
.dmgbundles with Apple Developer ID notarization and stapling. - macOS Raw Spooling: Native CoreGraphics/CUPS raw print dialog bypass.
Future Architecture Strategy (Post-v0.8.2)
- Multi-Device Drift Overlays: Overlay drift curves from multiple printers/media types on a shared timeline in Stage 5.
- Direct Remote Target Dispatch: Send
.ti2target jobs to network print spoolers or remote print labs with automated token callbacks. - Embedded ICC Profile Inspector: Direct inspection of cLUT tags, chromatic adaptation matrices, tone reproduction curves (TRC), and profile metadata from saved
.icc/.icmfiles.