Skip to content

v2.0.0 — Profile Pool workbench, Combine tab, ICC.2 (iccMAX), iccApplyProfiles output parity

Choose a tag to compare

@colourbill-ctrl colourbill-ctrl released this 20 Jul 01:31
· 14 commits to main since this release
v2.0.0
4bdf299

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 .cube LUT (iccFromCube parity).
  • Canonical libtiff / libpng / libjpeg WASM codecs replace the hand-rolled image and embedded-profile readers.
  • Tag dumps are capped and lazily rendered; describeTag moved 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 -PCC connection conditions and -ENV calculator variables are not yet exposed.