Deploy imagor

Fast, secure image processing server in Go — drop-in Thumbor replacement.

Deploy imagor

Just deployed

Deploy and Host imagor on Railway

imagor is a fast, secure image processing server and Go library built on libvips. Resize, crop, smart-crop, rotate, watermark, filter and convert images on the fly through a URL-based API — typically 4–8x faster than ImageMagick, with libvips streaming for parallel pipelines and high network throughput.

It adopts the Thumbor URL syntax, so it works as a drop-in replacement: existing image URLs and integrations keep working.

About Hosting imagor

This template deploys imagor as a single stateless HTTP service from the official shumc/imagor image. Railway builds nothing — the container starts and binds to the platform-provided PORT. A public HTTPS domain is created automatically, and the deployment is health-checked at /healthcheck.

A signing secret is generated at deploy time and URL signing is required. Unsigned mode is deliberately not enabled: on a public deployment it lets any request make imagor fetch an arbitrary URL, which is an SSRF vector.

Because signing is on, a plain request returns 403. The signature is an HMAC of the URL path, prefixed to the path — recipes for Python, Go, PHP, Node and others are in the security docs. SHA-256 and SHA-512 are supported via IMAGOR_SIGNER_TYPE.

Why Deploy imagor on Railway?

The case for Railway over a self-managed VPS is operational: a managed HTTPS endpoint, health checks and usage-based scaling, with no container host to patch or babysit. Deploy, get a domain, point your URLs at it.

That makes it a practical replacement for a hosted image SaaS, or an image CDN origin in front of your own storage.

Common Use Cases

  • Image CDN origin — generate responsive variants (thumbnails, retina, format-specific) on demand behind a CDN or cache.
  • Replacing a hosted image service — Cloudinary, Imgix and similar, served from infrastructure you control, with no per-transformation billing.
  • Migrating off Thumbor — keep the same URL format and filter names, without the legacy runtime or the operational overhead.
  • E-commerce and marketplace catalogs — smart-crop, watermark and standardise product imagery at request time.
  • User-generated content pipelines — normalise uploads, strip metadata and produce derivatives without a batch job.
  • Media and publishing — dynamic crop and resize for editorial layouts.

Dependencies for imagor Hosting

imagor has no external dependencies. The official image bundles libvips and everything else it needs, and this template runs as a single stateless container — no database, no queue, and no other service to provision.

Deployment Dependencies

  • Docker image — shumc/imagor, published by the project author. No build step required.
  • libvips — bundled inside the image; nothing to install.
  • Networking — one public HTTPS domain.
  • Source images — loaded over HTTP(S) by default.

Implementation Details

Docker image: shumc/imagor:1.9.6

PORT: provided by Railway. imagor reads it and binds automatically — do not pin it, or the public domain will not reach the service.

Healthcheck: /healthcheck

Automatic image upgrades: enabled for patch releases.

The template sets five variables — IMAGOR_SECRET, plus HTTP_LOADER_ACCEPT and three network blocks (HTTP_LOADER_BLOCK_PRIVATE_NETWORKS, HTTP_LOADER_BLOCK_LOOPBACK_NETWORKS, HTTP_LOADER_BLOCK_LINK_LOCAL_NETWORKS) that restrict what the loader will fetch. Each is described in the deploy form.

Every imagor flag has an environment-variable equivalent (uppercase snake case) and can be added as a variable — see the configuration reference for output formats, cache headers, timeouts, concurrency limits and VIPS_* processing limits.

Using Your Own Storage

This template is stateless. To read and write your own storage, add the loader and storage variables for S3, Google Cloud Storage or the filesystem.

S3-compatible services work through the same S3 variables: set S3_ENDPOINT to the provider's endpoint, and S3_FORCE_PATH_STYLE where it needs path-style addressing. That covers Cloudflare R2, MinIO, DigitalOcean Spaces and other S3-compatible storage.

Notes

  • IMAGOR_UNSAFE exists for local testing only — set it to 1 temporarily, then remove it. It disables the verification described above, which is not a state to leave a public deployment in.
  • Built on libvips with the vipsgen bindings. Video thumbnails are available via imagorvideo.
  • Source: github.com/cshum/imagor · Docs: docs.imagor.net

Maintained by the imagor author.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
47
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51