Changelog
v0.1.0 — 2026-11-12
Section titled “v0.1.0 — 2026-11-12”First release. One Rust core (dusrelimage), with JavaScript/TypeScript
(WASM), Python (PyO3) and CLI bindings in lockstep. MIT licence. Fully
offline — no network, no uploads.
The 10 tools
Section titled “The 10 tools”- Compress —
compress_image(quality 1–100, format override, progressive, lossless WebP/PNG, WebP effort) andcompress_to_size(iterative binary search on quality, max 10 steps, fails withTARGET_SIZE_UNREACHABLEwhen even the lowest quality exceeds the target). - Resize —
resize_imagewith width / height / percent, aspect lock, fit modesFit | Fill | Stretch | Crop, filtersNearest | Triangle | CatmullRom | Gaussian | Lanczos3(default Lanczos3). - Crop —
crop_imagewith x/y/width/height plus anchor presetsCenter | TopLeft | TopRight | BottomLeft | BottomRight; out-of-bounds fails withCROP_OUT_OF_BOUNDS, never silently clips. - Convert —
convert_imageacrossJpeg, Png, WebP, Avif, Gif, Bmp, with quality, alpha-flatteningbackground(default white) and progressive output. - Watermark —
add_watermarkwith text (size, colour, opacity, rotation) or a logo image (scale, opacity, margin), 9 anchors plusTiled. - Annotate —
annotate_imagewithArrow,Rect,Ellipse,LineandTextops in absolute pixels, drawn in raster in the core. - Colour picker —
pick_colourreturnsColour { hex, r, g, b, a, hsl }; out-of-bounds fails withPIXEL_OUT_OF_BOUNDS. - Palette —
extract_palette(median-cut quantisation, count 1–16, most frequent first, hex + share 0–1 per colour). - Collage —
make_collagewith grid layouts1x1–4x4plusgrid/row/column, cell gap, background colour, output size and per-cell fit. (masonryis out of scope for v0.1.0.) - Pixelate —
pixelate_imageover a rectangle with block size 2–100 px (downscale-Nearest + upscale-Nearest of the rect only).
Helpers and control layer
Section titled “Helpers and control layer”get_image_info— format, width, height, alpha, colour type, file size.bulk_process— one call, one result per input, same order; partial failures are reported per item and never abort the batch.CommonOptionson every operation:auto_orient(default true),keep_exif(default false),dpi,max_pixels(default 120,000,000),max_dimension(default 16000).- 11 stable error codes, each with
message_enandmessage_hi— see Error codes. - CLI
dusrelimagewithcompress, resize, crop, convert, watermark, annotate, pick-colour, palette, collage, pixelate, info, mock. - Docs website (Astro + Starlight) with a WASM playground at dusrelimage.pages.dev.
Known limits (v0.1.0)
Section titled “Known limits (v0.1.0)”- SPEC deviation: the SPEC §2 PNG
palettequantise flag is NOT implemented in v0.1.0 — PNGqualitymaps to a compression level only (≥67Best, 34–66Default, elseFast). - No HEIC support (libheif + licence).
- AVIF encode is lossy-only / 8-bit (underlying crate limit).
- GIF encode is first-frame only for animated input.
- Whole image in memory, no streaming.
- Text drawing uses the bundled DejaVu Sans font.
Not in v0.1.0 (planned)
Section titled “Not in v0.1.0 (planned)”- v0.2.x: Go via C API, napi-rs native Node package, PHP FFI wrapper.
- v0.3.x: UniFFI Kotlin/Swift (Android/iOS).