Signed URLs, on by default
HMAC-signed, imgproxy-compatible URLs, an SSRF-guarded fetcher, and a service that fails closed at startup until signing is configured.
URL grammar
An imgproxy-compatible service that fetches, resizes and caches images behind signed URLs. No C or C++ dependencies.
HMAC-signed, imgproxy-compatible URLs, an SSRF-guarded fetcher, and a service that fails closed at startup until signing is configured.
URL grammar
JPEG, PNG, WebP, AVIF and animated GIF/WebP through a SIMD resampler, with no C or C++ dependencies to build or patch.
How it is built
Local filesystem, S3/MinIO or in-memory, chosen at compile time with Cargo features.
Pick a backend
A Helm chart, a Knative Service chart for serverless setups, and Docker images for each storage flavour.
Deploy it
Welcome to the documentation for EmgR, a high-performance, imgproxy-compatible image resizing service built in Rust. It fetches a source image over HTTP(S), resizes/transforms it according to a signed URL, caches the result, and redirects the caller to it.
fast_image_resize) and a pure-Rust JPEG decode/encode path (jpeg-decoder/jpeg-encoder; DCT-scaled decode, progressive/subsampling control). Every image codec this service links — JPEG, WebP, AVIF — is pure Rust; there are no C or C++ dependencies./metrics endpoint, available behind the otel feature.Two things surprise newcomers, and both are deliberate:
emgr has no default storage backend. Cargo.toml sets default = [], so a plain cargo build compiles but the resulting binary refuses to start ("No storage features are enabled"). Every build must name at least one of local_fs, s3, or in_memory explicitly.SIGNING_KEY + SIGNING_SALT) or you explicitly opt out with ALLOW_UNSIGNED_REQUESTS=true. A build with the otel feature adds a second, independent check for /metrics.See Getting Started → Installation for the full explanation, the exact commands, and every feature combination CI tests.
git clone https://github.com/vaam-store/image-resizer.git
cd image-resizer
# local_fs storage, signing turned off for local dev only - see
# Installation for the signed-URL alternative. --bin is required because
# the crate also ships `healthcheck` and `benchmark` binaries.
LOCAL_FS_STORAGE_PATH=./data/images ALLOW_UNSIGNED_REQUESTS=true \
cargo run --no-default-features --features local_fs --bin emgrcurl -i http://localhost:3000/healthThe service exposes a RESTful, imgproxy-compatible resize endpoint plus a download endpoint for already-cached results. See the API Reference for the full URL grammar, status codes and processing options, and Examples for computing a valid signature in Python/JavaScript/bash.
The service is a hand-written Axum router (no OpenAPI code generation) over a small set of modular Rust services. See the architecture overview and components pages.
Run it with Docker, or deploy it to Kubernetes with the Helm chart.