Learning in public — this documentation is written in the open and updated as the engine moves.
paged.Paged Docs
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: IntermediateIntermediateIIexplanationDraft

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

  • 131 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.
  • In development: layered PSD import (groups, masks, smart objects, adjustment layers), retouching tools (spot heal, patch, dodge and burn, blur and sharpen brushes, mask painting, red eye), editable adjustment layers, and layers, masks and adjustments as typed objects (the object model).

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, re-test pending · ◍ shipped, untested · ◐ partial · ✗ failing · · planned

Plugin · image 86 features · 76% green

FeatureAPIImage
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
●
GPU tests that cannot pass silently
image.conformance.gpu-lanes
◐
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
●
Blur and sharpen brushes
image.editor.blur-sharpen-brush
●
Photoshop .abr brush libraries load and set the brush
image.editor.brush-presets
◐
Rotate, flip and Canvas Size over all layers
image.editor.canvas-ops
●
Clone stamp — the brush with a sampled paint layer
image.editor.clone-stamp
●
Foreground/background colour, picker and eyedropper
image.editor.color-fg-bg
◐
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
◐
Dodge, burn and sponge
image.editor.dodge-burn
●
Filters — blur / unsharp / hue-rotate / invert in the adjustments panel
image.editor.filters
●
Gradient tool (drag the line)
image.editor.gradient-tool
●
Healing brush — a clone tone-matched in the gradient domain
image.editor.healing-brush
●
History panel over the tile journal
image.editor.history-panel
◍
Host Cmd+Z inside an image
image.editor.host-undo
●
Hue/Saturation — master, six colour ranges, colorize
image.editor.hue-saturation
◐
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
◐
Live adjustment preview on a resampled proxy
image.editor.live-preview
●
Paint on layer masks (Pixels/Mask edit target)
image.editor.mask-painting
●
Move tool for pixels and layers
image.editor.move-tool
●
Brush / Pencil / Eraser — the raster paint lane
image.editor.paint
●◐
Paint bucket
image.editor.paint-bucket
◍
Patch tool
image.editor.patch
●
Define pattern, pattern fill and shape blur
image.editor.pattern-fill
●
Median, Maximum, Minimum and Color Lookup
image.editor.rank-filters
◐
Raster type — shaped glyphs painted into a layer
image.editor.raster-type
◐
Red eye
image.editor.red-eye
●
Resample — resize the working image through the registered kernels
image.editor.resample
●
Spot healing brush
image.editor.spot-heal
●
C-6 tile provider for placed images (host.images.claimImageResource, v44; honest level-0 subset)
image.editor.tile-provider
◐
Raster tool options in the host's tool-options bar
image.editor.tool-options
◐
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
◐
Layered PSD export
image.io.layered-psd
◐
Commit image edits to the document and reopen them
image.io.persistence
◐
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
●
Editable adjustment layers
image.layers.editable-adjustments
◐
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
◍
Smart objects
image.layers.smart-objects
●
Object model — layers, masks, adjustments and smart objects addressable through host.objects
image.object-model
●
A host path becomes the selection
image.paths.path-to-selection
●
A raster selection becomes a real vector path
image.paths.selection-to-path
◐
Work counters and count budgets
image.perf.budgets
●
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
●
Select ▸ Modify and wand options
image.selection.modify
●

Recent activity

On this page