imagor is a free, open source photo & video editors project written in Go and released under Apache-2.0. It has 4,026 GitHub stars, 176 forks and 2 open issues, and was last pushed 7 days ago. On this registry it ranks #31 of 56 tracked projects in Photo & Video Editors, with 5 head-to-head comparisons available.

What is imagor?

imagor is a fast, secure image processing server and Go library built on libvips, intended for developers who need on-demand image resizing, formatting, and filtering over HTTP or as an embedded Go package.

What it is

imagor is an image processing server and Go library written in Go, built on top of the libvips image processing library through the Go binding vipsgen. It runs as an HTTP server with first-class Docker support, and it is also usable directly as a library in Go programs. Its architecture implements libvips streaming, which facilitates parallel processing pipelines and high network throughput.

The concrete problem imagor solves is generating derivative images on demand — resizing, cropping, filtering, and reformatting source images at request time — without the latency and overhead of doing that work in-process or pre-generating every variant. imagor adopts the thumbor URL syntax, so it functions as a high-performance drop-in replacement for existing thumbor-style image URLs. Benchmarks cited by the project show it is typically 4–8x faster than using the quickest ImageMagick settings.

Key capabilities

  • Accepts requests using the thumbor URL syntax, so existing thumbor-style image URLs can be pointed at it as a drop-in replacement.
  • Performs fit-in bounding-box resizing, smart cropping, and fixed-rectangle cropping (for example fit-in/200x200 and 30x40:100x150 request paths).
  • Applies chained filters in a single request, including fill, hue, saturation, quality, format, and layered watermark with position and opacity arguments.
  • Handles animated GIF input, re-encoding individual frames such as the dancing-banban.gif test asset.
  • Supports output and input formats including JPEG, AVIF, JPEG XL (jxl), GIF, and automatic WebP negotiation via the -imagor-auto-webp flag.
  • Implements libvips true streaming to run parallel processing pipelines and achieve high network throughput.
  • Offers configurable storage backends and a security model, controlled by flags such as -imagor-unsafe, with an adjacent imagorvideo companion for video thumbnails via ffmpeg C bindings.

Who uses it and how

  • Teams already running thumbor who want to migrate: imagor adopts the thumbor URL syntax as a drop-in replacement, so request URLs remain unchanged.
  • Production deployments that want containerised operation: the project ships first-class Docker support and is also offered as a one-click deploy option on Elestio.
  • Organisations needing multi-tenant setups, custom loaders or storage backends, migration planning, or performance tuning, for which the project offers commercial consulting and support.
  • Developers embedding image processing in a Go application, since imagor is usable both as an HTTP server and as a Go library.
  • Integrators working with the companion imagorvideo component when video thumbnailing through ffmpeg is required alongside still images.

Getting started

Run it directly with Docker using docker run -p 8000:8000 shumc/imagor -imagor-unsafe -imagor-auto-webp, then request images such as http://localhost:8000/unsafe/fit-in/200x200/filters:fill(white)/.... Full documentation, including configuration and storage setup, is at docs.imagor.net.

How it compares

imagor is built on libvips rather than ImageMagick, and the project's own speed figures place it 4–8x faster than the quickest ImageMagick settings while using libvips streaming for parallel pipelines. Against thumbor it is positioned explicitly as a high-performance drop-in replacement that keeps the same URL syntax.

When to use it — and when not to

Self-hosters should expect to operate the HTTP server plus whatever storage and security configuration they choose — the README documents dedicated Storage, Security, and Configuration sections, and running with -imagor-unsafe disables URL signing, so a production deployment must configure the signed-URL scheme instead. It is not the right choice for teams unwilling to run a Go/libvips service or needing video editing rather than thumbnailing; note that licence is Apache-2.0, the repository shows only 2 open issues and a recent push, and the homepage and full docs live at imagor.net and docs.imagor.net rather than in the repository itself.

project readme (upstream, from github) — read inline

imagor

Test Status Codecov Docker Hub Docs

imagor is a fast, secure image processing server and Go library.

imagor uses one of the most efficient image processing libraries, libvips with the Go binding vipsgen. It is typically 4-8x faster than using the quickest ImageMagick settings. imagor implements libvips streaming to facilitate parallel processing pipelines and achieve high network throughput. Benchmarks show imagor is one of the fastest image processing servers.

imagor supports a wide range of image-processing use cases, available as a HTTP server with first-class Docker support. It adopts the thumbor URL syntax representing a high-performance drop-in replacement.

imagor is built with speed, security and extensibility in mind. Alongside there is imagorvideo bringing video thumbnail capability through ffmpeg C bindings.

Quick Start

docker run -p 8000:8000 shumc/imagor -imagor-unsafe -imagor-auto-webp

Deploy on Elestio

Original images:

https://raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png
https://raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif
https://raw.githubusercontent.com/cshum/imagor/master/testdata/gopher-front.png

Try out the following image URLs:

http://localhost:8000/unsafe/fit-in/200x200/filters:fill(white)/https://raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png
http://localhost:8000/unsafe/200x200/smart/filters:fill(white):format(jpeg):quality(80)/https://raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png
http://localhost:8000/unsafe/fit-in/-180x180/10x10/filters:hue(290):saturation(100):fill(yellow)/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png
http://localhost:8000/unsafe/30x40:100x150/filters:fill(cyan)/raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif
http://localhost:8000/unsafe/fit-in/200x150/filters:fill(yellow):watermark(raw.githubusercontent.com/cshum/imagor/master/testdata/gopher-front.png,repeat,bottom,0,40,40)/raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif

Documentation

Full documentation is available at docs.imagor.net.

Consulting

If your team is running imagor in production and needs help with architecture, custom imagor components, multi-tenant setups, loaders/storage backends, migration planning, or performance tuning, commercial support and consulting are available. See the Consulting page for details.

For bugs and feature requests, please continue to use GitHub Issues. For consulting inquiries, contact [email protected].

Frequently asked questions

Is imagor free to use?

imagor is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does imagor do?

Fast, secure image processing server and Go library, using libvips

What is imagor written in?

imagor is primarily written in Go. Its source is publicly available at https://github.com/cshum/imagor, and it has 4,026 GitHub stars.