Repository navigation
v2.0.0 — Profile Pool workbench, Combine tab, ICC.2 (iccMAX), iccApplyProfiles output parity
profiletool 2.0.0 turns the single-profile validator into a multi-profile workbench, and now documents support for ICC.2 (iccMAX) alongside ICC.1. Everything still runs entirely client-side — a WebAssembly build of iccDEV's IccProfLib — with no upload and no backend.
ICC.1 and ICC.2 (iccMAX)
ICC.2 profiles load, inspect, validate and round-trip like ICC.1 ones: the validation checklist includes iccMAX-specific checks, spectral PCS and multi-processing-element tags are decoded, and the transform engines are built against the full iccMAX stack. ICC.2 support is partial in this release — see Known limitations below.
The Profile Pool workbench
The app is now built around a Profile Pool: load as many profiles as you like and drag them onto four tabs — Profile, Compare, Combine, Spectral — each with its own accumulator.
Combine — chain profiles and put them to work
The Link Pipeline builds an ordered chain of pooled profiles as a vertical stack, showing each stage's transform (RGB → Lab), the connecting space between stages, and the end-to-end flow. Drag to reorder, flip the chain direction, and set a rendering intent globally or per stage. The chain is validated live by the CMM itself, so an unconnectable stage is reported exactly where it breaks.
From a chain you can:
- Make DeviceLink — bake the chain into one
link-class profile (iccApplyToLink), landing in the pool. - Transform Image — run a TIFF/PNG/JPEG through the chain (
iccApplyProfiles), streamed in bounded chunks so large CMYK rasters don't exhaust the heap. - Transform Data — run a CGATS/IT8, CSV, CxF or JSON dataset through the chain (
iccApplyNamedCmm), with spectral→colorimetry conversion via iccDEV's canonical calculator, selectable observer/illuminant, and duplicate filtering. - V4 Display Maker — build a v4.3 matrix/TRC display profile from a V5 display + V5 observer profile.
Image output options (new in 2.0.0)
Transform Image now exposes the destination knobs from the iccApplyProfiles CLI:
| Option | Choices |
|---|---|
| Encoding | Same as source · 8-bit · 16-bit · Float (32-bit IEEE) |
| Compression | None · LZW · ZIP (Deflate) |
| Planar | Composite · Separated planes |
| CMM interpolation | Tetrahedral · Linear |
| Embed ICC | Tag the output with the chain's output-space profile |
RGB/Gray output stays a PNG by default; selecting a TIFF-only option switches the container to TIFF.
Extended rendering intents
Beyond the four base intents, the per-stage and global listboxes now offer the decimal-coded flavours the CLI accepts — no D2Bx/B2Dx (10–13) and black-point compensation (40–42) — surfaced only for profiles that actually carry the required tables. Both controls carry a tooltip describing the selected intent.
Embedded-profile extraction
Drop an image carrying an embedded ICC and a banner offers to extract it in one click — the profile joins the pool and is placed at the head of the chain.
Compare — gamut comparison
The Compare tab overlays the gamut boundaries of two or more profiles as a 3-D shell plus a 2-D lightness slice, including matrix/TRC profiles.
Spectral
Assemble a set of single-channel spectral images into one multi-channel TIFF (iccSpecSepToTiff). Extensionless raster planes are accepted by content sniffing.
Analysis
A reworked Analysis tab: Profile Statistics, a unified Round-Trip (PRMG) engine with min/mean/max/stddev, cumulative ΔE buckets and a relative-frequency histogram, Neutral Axis Inking, and gamut/CLUT imagery per rendering intent. Tag visualizations are consolidated on Plotly, with a single-point transform evaluator.
Also new since 1.9
- New from .cube — build a DeviceLink from a
.cubeLUT (iccFromCubeparity). - Canonical libtiff / libpng / libjpeg WASM codecs replace the hand-rolled image and embedded-profile readers.
- Tag dumps are capped and lazily rendered;
describeTagmoved to a Web Worker.
Localization
The full 2.x interface is translated: 412 keys across 12 languages (English, Français, Deutsch, Italiano, Español, Português PT/BR, Svenska, 简体中文, 繁體中文, 日本語, 한국어), with the translation spreadsheets regenerated.
Documentation
The user guide gains a Combine tab chapter — chain building, DeviceLink, Transform Image and its output options, Transform Data, the V4 Display maker, and the Compare/Spectral tabs — with a new illustration.
Known limitations
- ICC.2 (iccMAX) support is partial. Not yet covered: multi-part ICS (Interchange Color Space) workflows, selecting a V5 sub-profile when applying a transform, and inverse search on some ICC.2 profiles. A profile using an unsupported ICC.2 construct is reported by the Validation tab rather than silently mis-read.
- Invert Transform (
iccApplySearch) is implemented but hidden in this release: the inverse search can trap under WebAssembly on some v5 iccMAX profiles. It returns once the search is isolated in a disposable worker. - Float TIFF source decoding is not yet supported (float output is); "Same as source" therefore resolves to 8- or 16-bit.
- Per-profile
-PCCconnection conditions and-ENVcalculator variables are not yet exposed.