Inspect once.
Render what fits.
The Sharp engine validates input, applies orientation, converts to sRGB, and writes width-specific AVIF and WebP renditions. It never enlarges an image beyond its source width.
RenditionKit turns an original image into responsive AVIF and WebP files in a background worker. Your queue, storage, and asset records stay under your control.

Start with one original.





The image engine shown here uses RenditionKit's default width ladder and output formats. Register it in a worker runtime to process queued assets.
import { createImageEngine } from "renditionkit/image";
const imageEngine = createImageEngine({
widths: [400, 800, 1600, 2400],
formats: ["avif", "webp"],
});Queue states are an illustration. The image files and sizes shown were generated with RenditionKit and a local storage adapter.
A real source image, processed with RenditionKit's defaults.





Register this image engine in a worker runtime to process your own assets.
import { createImageEngine } from "renditionkit/image";
const imageEngine = createImageEngine({
widths: [400, 800, 1600, 2400],
formats: ["avif", "webp"],
});Queue states are illustrative. The files and sizes shown were generated with RenditionKit and a local storage adapter.
RenditionKit handles the repeatable parts of an image pipeline while leaving your application's data model and delivery URLs to you.
The Sharp engine validates input, applies orientation, converts to sRGB, and writes width-specific AVIF and WebP renditions. It never enlarges an image beyond its source width.
The BullMQ adapter deduplicates overlapping enqueues and supports retries, dead letters, and stalled-attempt recovery when the repository provides it.
Stored renditions include format, dimensions, byte count, and a deterministic object key. Ready metadata includes a checksum and optional ThumbHash placeholder.
The core is built around repository and storage contracts. The included adapters cover a practical Node.js stack.
Your API stores the original and an asset record. It enqueues only the asset ID; the worker loads current data from the repository before processing.
Install the package, configure an image engine and your adapters, then enqueue a durable asset. The reference app runs the full stack locally.
npm install renditionkitawait media.enqueue(assetId)One source. Width-specific AVIF and WebP. Your infrastructure.