Learning in public — this reference is being written in the open. Unfinished pages are excluded from search engines.
paged.IDML Reference
Plugins

paged.image — raster

The raster-image plugin — a Rust/WASM pipeline of GPU kernels with PSD round-trip, dual processing engines, color management, and in-editor ingest into the engine's image scene layer.

Tier: IntermediateIntermediateIIexplanation

In short paged.image is a raster-processing subsystem in Rust/WASM — GPU-executed adjustment kernels, two processing engines, color management, and byte-faithful PSD/PSB round-trip ("paged never destroys a PSD"). It's wired into the editor: place → ingest → GPU adjust → in-frame composite.

What it does

  • A library of GPU compute kernels (adjustments, transforms, blurs) with scalar reference twins used only in tests.
  • Two engines — a demand-driven streaming pipeline and a persistent tiled buffer.
  • PSD/PSB parsing + mutation + preservation-safe round-trip; hybrid color management.
  • In-editor ingest: placed-asset bytes → decode → GPU adjust → scene-layer composite → tiles.

How it's built

A Cargo workspace (image-core, image-kernels, image-gpu, image-pipeline, image-psd, image-cms, image-codecs, image-js) plus a TS bundle. A registry-driven coverage gate requires every kernel to have a test.

Capability state

shipped & verified · shipped, untested · partial · failing · · planned

Plugin · image 61 features · 72% green

FeatureShellAPIImage
A sampled .abr tip paints through the existing stroke accumulator
image.abr.engine-bridge
.abr brush-preset reader over a new PSD descriptor reader
image.abr.reader
The .abr regression gate, split into the two lanes its roles can run
image.abr.regression-gate
Per-channel statistics, from the same buffer as the histogram
image.channels.readout
Load a channel as the selection (luminosity masking)
image.channels.to-selection
CMS display lane — qcms RGB↔RGB (the exact build core ships, page/editor agree)
image.cms.display
CMS behind the swappable CmsEngine seam (D-11: hybrid)
image.cms.engine
CMS rung 1 — the RGB display transform at decode
image.cms.ingest-transform
CMS print lane — moxcms per-intent RGB↔RGB + CMYK8→RGBA8 ingest
image.cms.print
AVIF / JXL / camera-RAW / HEIC — codec verdicts (deferred + explicit non-goals)
image.codec.avif
·
EXIF/TIFF read — orientation + DPI + color-space tag, auto-orient at ingest
image.codec.exif
Codec adapter contract (ImageSource/ImageTarget over sans-IO ByteSource) + PNG + raw
image.codec.traits
Conformance harness — scalar references, gpu↔ref parity, fixture corpus
image.conformance.harness
Panel + chain integration of the new adjustments and generators
image.editor.adjust-breadth
Auto-enhance — gray-world WB + percentile auto-levels params from the panel histogram
image.editor.auto-enhance
Photoshop .abr brush libraries load and set the brush
image.editor.brush-presets
Clone stamp — the brush with a sampled paint layer
image.editor.clone-stamp
Content-aware fill — coarse-to-fine exemplar inpainting
image.editor.content-aware-fill
Editor crop + straighten tool — host-agnostic crop machine over the geom.crop window
image.editor.crop
Crop straighten commits (arbitrary-angle rotation resample)
image.editor.crop-straighten
Editor levels/curves/white-balance panel — histogram view + adjust kernels
image.editor.curves
K-3 decode worker pool — off-main-thread ingest decode (host.workers consumer)
image.editor.decode-pool
Filters — blur / unsharp / hue-rotate / invert in the adjustments panel
image.editor.filters
Healing brush — a clone tone-matched in the gradient domain
image.editor.healing-brush
History panel over the tile journal
image.editor.history-panel
M4 editor enablement — C-5 placed bytes → decode → adjust → C-1 Stage-A in-frame composite
image.editor.ingest
Pixel-layer stack with a compose.* fold
image.editor.layers
Brush / Pencil / Eraser — the raster paint lane
image.editor.paint
Raster type — shaped glyphs painted into a layer
image.editor.raster-type
Resample — resize the working image through the registered kernels
image.editor.resample
C-6 tile provider for placed images (host.images.claimImageResource, v44; honest level-0 subset)
image.editor.tile-provider
Bounded COW tile journal — undo/redo for pixel edits
image.editor.undo-journal
Engine B — persistent buffer graph (invalidation, mip-aware eval, Gestures/Operations)
image.graph.engine-b
16-bit PSD sources open, reduced to 8 and reported
image.io.depth-16bit-ingest
Save-back — adjusted composite to PSD / PNG / JPEG
image.io.save-back
Kernel breadth — 24 new point/compose/gen kernels (73 → 97)
image.kernel.breadth-2026-08
T0 generated kernel families (arith/relational/boolean/cast/band/minmax/linear)
image.kernel.family-t0
T1 crown-jewel kernels (conv/resample/compose — handwritten WGSL modules, ABI v1.1)
image.kernel.family-t1
T2 editor-bearing kernels (adjust/geom/generators)
image.kernel.family-t2
T3 breadth kernels (morphology, rank/median, distance transform)
image.kernel.family-t3
1D and 3D LUT sampler classes
image.kernel.lut-samplers
General backward-map warp
image.kernel.warp-backward
Frozen WGSL kernel ABI v1 (4 bind groups, 16×16, mask-mixed pointwise)
image.kernel.wgsl-abi
Clipping layers — an adjustment confined to the layer beneath
image.layers.clipping
The layer fold keeps adjustment layers in f16
image.layers.f16-fold
Layer groups — pass-through and isolated, nesting up to eight
image.layers.groups
A host path becomes the selection
image.paths.path-to-selection
A raster selection becomes a real vector path
image.paths.selection-to-path
Engine A async sinks — to_buffer_async/to_encoder_async (the wasm32/WebGPU readback lane)
image.pipeline.async-sink
Engine A — demand-driven streaming pipeline skeleton
image.pipeline.engine-a-skeleton
paged.image bundle (media.paged.image) — manifest + activate + panel
image.plugin.bundle-manifest
PSD structural session — layer list/edit/save reach the editor
image.psd.editor-doors
PSD import populates the layer stack (declines rather than approximates)
image.psd.layer-import
PSD mutatable — edits re-encode through the preservation writer
image.psd.mutatable
PSD rendered tier — channel decode + flatten render oracle
image.psd.rendered
PSD/PSB structural parse + preservation-invariant writer
image.psd.roundtrip
Reductions — histogram + min/max/mean statistics
image.reduce.statistics
Residency Tier 0/1 hardening under working-set pressure
image.residency.tier01
Selection-mask plumbing — the §6.1 mask surfaced end-to-end
image.selection.mask
Selection system — marquee/ellipse/lasso/wand over the mask ABI
image.selection.mask-tools
Selection coverage threaded through the GPU adjust chain
image.selection.masked-pipeline

Recent activity

On this page