Images
Decode once, apply your operations, encode once — no lossless intermediate between steps. Everything below is what the image transport reads, writes, and does.
Formats
Unrecognised extensions are refused before upload. The full matrix across media is on Compatible files.
| Direction | Formats |
|---|---|
| Send us | png, jpg, jpeg, webp, gif, avif, tiff, tif |
| Get back | png, jpg, webp, gif, avif, tiff |
JPEGs come out smaller at the same quality; EXIF orientation is baked in on decode; the ICC profile is preserved on output.
Nodes
image.resize— scale by percentage or into a pixel box, with afitmode.image.convert— re-encode to another format at a quality. Terminal encoder of a branch.
Linear transforms → Recipes. Fan-out to several sizes or formats → Pipelines.
Order of operations
Resize and convert collapse into a single pass — resize then encode, regardless of the order you list them. Two of the same step on one branch — the last one wins.
The transport never upscales
Percentage resize above 100% is a no-op, and fit: inside never enlarges. Details and config defaults → image.resize.