Download Latest Version v1.8.3 source code.tar.gz (9.5 MB)
Email in envelope

Get an email when there's a new version of imagor

Home / v1.8.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-03-18 2.8 kB
v1.8.0 source code.tar.gz 2026-03-18 9.2 MB
v1.8.0 source code.zip 2026-03-18 9.8 MB
Totals: 3 Items   19.0 MB 0

imagor 1.8 — Introducing imagorface Face Detection

This release adds a pluggable region detection pipeline to imagor, and introduces imagorface — the first detector plugin — bringing face-centred smart crop and redaction to imagor. It wires directly into imagor's new detection pipeline — no third-party API, no per-call cost, cascade embedded in the binary.

https://github.com/cshum/imagorface

New in imagor: Detector Interface

imagor now defines a Detector interface for region-of-interest detection:

:::go
type Detector interface {
    Startup(ctx context.Context) error
    Detect(ctx context.Context, imagePath string, blob *Blob) ([]DetectorRegion, error)
    Shutdown(ctx context.Context) error
}

DetectorRegion carries a normalised [0.0, 1.0] bounding box with an optional class Name (e.g. "face") and confidence Score. Detection runs on a downscaled probe image (capped at --vips-detector-probe-size, default 400 px) derived from the raw decoded pixels, keeping overhead minimal.

Multiple detectors can be composed — their results are merged and all downstream features (smart crop, redact(), /meta) see the combined set:

:::go
vipsprocessor.NewProcessor(
    vipsprocessor.WithDetectors(faceDetector, objectDetector),
)

New Filters (imagor)

These filters are part of imagor core and work with any Detector implementation:

filters:draw_detections() — draws colour-coded bounding boxes for all detected regions. Each class name is assigned a deterministic colour via FNV-32a hash over a 12-colour palette (same name → same colour always).

filters:redact([mode[,strength]]) — obscures all detected regions with rectangular masks:

  • redact() — Gaussian blur, sigma 15
  • redact(blur,25) — blur with custom sigma
  • redact(pixelate) — pixelate, block size 10
  • redact(pixelate,20) — pixelate with custom block size
  • redact(black) / redact(white) / redact(ff0000) — solid colour fill

filters:redact_oval([mode[,strength]]) — same as redact but applies an elliptical mask to each region, producing oval-shaped redactions that closely follow the contour of a face.

filters:pixelate([block_size]) — standalone pixelation of the entire image (no detector required).

Detection in /meta/meta responses now include a detected_regions array when detection is triggered. Detection only runs when semantically requested: smart, draw_detections(), or redact() in the URL.

What's Changed

Full Changelog: https://github.com/cshum/imagor/compare/v1.7.5...v1.8.0

Source: README.md, updated 2026-03-18