Assembly Line

Instead of ImageMagick: libvips

For image processing on servers, such as thumbnails and format conversion at volume, use libvips. In its own benchmark it ran several times faster than ImageMagick with a small fraction of the memory. Keep ImageMagick for one-off command-line edits and its wider set of effects.

Old ImageMagick ★ 18k See repository C Pushed today imagemagick.org
Instead libvips ★ 12k LGPL-2.1 C Pushed today libvips.org

Both are for resizing, converting and processing images in scripts and servers.

Why libvips is better

  • In libvips's own benchmark (load a 10,000 by 10,000 pixel TIFF, crop, shrink, sharpen, save) the libvips C program took 0.57 seconds and 94.28 MB of memory, against 4.41 seconds and 1500.52 MB for ImageMagick's magick command.
  • It is demand-driven and horizontally threaded, so it streams the image through a pipeline across all cores instead of holding every step in memory.
  • In sharp's benchmark on a 4-core AMD server, sharp, which is built on libvips, resized 89.63 JPEG images per second against 16.23 for ImageMagick.
  • It has full bindings for Python, Ruby, PHP, .NET, Go, Lua and more, and is the image engine behind Mastodon, imgproxy, MediaWiki and Ruby on Rails.

When to keep ImageMagick

Keep ImageMagick for interactive command-line work and scripts that use its large set of operators, effects and drawing commands, and for its coverage of over 200 formats. libvips itself can load some formats, such as DICOM, through ImageMagick.

Switching

There is no drop-in replacement for the convert or magick command. You rewrite each operation against libvips: the vips command-line tool, or more often a binding such as pyvips or sharp. Thumbnails, resizing, cropping and format conversion map across directly; effects and drawing may not.

Watch out

libvips has around 300 operations, far fewer than ImageMagick, with no comparable drawing or text-effects toolkit. Its own notes warn that the vips command-line tool generates heavy disk traffic, so pipelines should use a language binding. It is LGPL-licensed and maintained by a small core team.

Also worth a look

  • sharp The Node.js image library built on libvips; the usual way to use libvips from JavaScript.
  • pyvips The official Python binding for libvips; use it to replace ImageMagick calls in Python code.

More newer, better libraries, runtimes and developer tools

Sources

Judged on 2026-11-06. See every libraries, runtimes and developer tools, or all 66 replacements.