Presets

A preset is a named, versioned, immutable transformation recipe. Public URLs name one; they cannot describe one.

Built-ins

NameWidthFitQualityDPR ceiling
original-safeunchangedscale-down822
thumbnail320scale-down782
card640scale-down802
content1280scale-down822
hero1920scale-down822

Fields

width / height
Null means unchanged. All built-ins use scale-down, so an image smaller than the target is never enlarged.
formatPolicy
negotiate picks the best format the client accepts. preserve keeps the container and recompresses. force-webp prefers WebP but still yields to a client that cannot decode it — a policy is a preference, a declared capability is a fact.
dprCeiling
The highest device-pixel-ratio variant emitted. This is what bounds the size of a responsive srcset.
sharpen
Applied only when the image is actually downscaled. Sharpening an unresized image adds bytes and artefacts for no benefit.
metadata
none by default: EXIF often carries GPS coordinates and camera serial numbers that nobody intended to publish.

Versions and rollback

Presets are never edited in place. Publishing a change inserts a new version and repoints the project at it. The version is part of the cache key, so:

Responsive widths

A srcset is built from the preset's own width family, never from a width the caller supplies.card (640px, DPR ceiling 2) yields exactly two widths:

.../card/photo.jpg 640w, .../card-2x/photo.jpg 1280w

If you need another size, define a preset for it once. A component that accepted arbitrary widths would let a single page create dozens of derivatives of one image.