Skip to main content

Benchmarks

imagor is one of the fastest image processing servers available today.

That result comes from the combination of libvips, Go binding vipsgen, and imagor's streamed processing path. imagor keeps the request path close to libvips, avoids unnecessary buffering and copies for common streamed inputs, and exposes a libvips-friendly source path that works well for resize and thumbnail workloads.

Why imagor is fast

imagor uses libvips for image processing and vipsgen for low-level libvips integration from Go. vipsgen provides generated, type-safe libvips bindings with streaming support, which helps keep the integration robust while staying close to libvips. For streamed sources, imagor keeps the data path efficient before the image even reaches the processing stage.

In practice, the main speed advantages come from a few places:

  • imagor prepares streamed inputs in a way that libvips can consume efficiently
  • blob reuse reduces avoidable reader churn after content sniffing and source preparation
  • fanout and shared-reader handling reduce duplicated work around streamed sources
  • the seekable libvips source path lets libvips load and process common inputs more efficiently
  • libvips itself is highly optimized for resize, thumbnail, and transcode workloads

Benchmark summary

The benchmark summary on this page is based on the committed AWS EC2 c7i.large rerun documented in the benchmark results. On this benchmark set, imagor 1.9.1 is consistently faster than thumbor overall and competitive with imgproxy.

Quick comparison:

JPEG

PNG

WebP

AVIF

Benchmark shape:

  • AWS EC2 c7i.large
  • 2 VUs, 5m, 10s warmup
  • resize to 512x512
  • compared runtimes:
    • imagor: ghcr.io/cshum/imagor:1.9.1
    • imgproxy: benchmark harness used darthsim/imgproxy:latest, corresponding to imgproxy v4.0.3
    • thumbor: local benchmark-thumbor:latest, resolved from thumbor/Dockerfile to thumbor 7.7.7

Representative throughput from the committed summaries:

Formatimagorimgproxythumbor
JPEG74.35 req/s82.01 req/s59.45 req/s
PNG18.56 req/s17.35 req/s10.23 req/s
WebP21.23 req/s24.27 req/s15.80 req/s
AVIF17.77 req/s17.15 req/s14.85 req/s

The exact ranking still depends on image format, output settings, source shape, and deployment environment. The measured result from the current benchmark set is that imagor is one of the fastest image processing servers, clearly ahead of thumbor overall and competitive with imgproxy across common formats.

Notes

  • imagor and imgproxy are both libvips-based, so the gap is often determined by request-path overhead, source handling, and encoder settings rather than by the core image library alone
  • thumbor remains a strong compatibility reference, but its Pillow-based pipeline is generally slower on this workload
  • for AVIF, encoder settings matter a lot; benchmark conclusions should always be read together with the exact runtime configuration