5 open source tools compared. Sorted by stars. Scroll down for our analysis.
| Tool | Stars | Velocity | Score |
|---|---|---|---|
Sharp High performance Node.js image processing | 32.2k | +13/wk | 83 |
Squoosh Make images smaller using best-in-class codecs | 25.2k | +39/wk | 83 |
Pillow Python Imaging Library (Fork) | 13.6k | +9/wk | 81 |
imgproxy Fast and secure image processing server | 10.7k | +25/wk | 81 |
thumbor thumbor is an open-source photo thumbnail service by globo.com | 10.5k | +3/wk | 61 |
Stay ahead of the category
New tools and momentum shifts, every Wednesday.
Sharp is the fastest image processing library in the Node.js ecosystem for resizing, converting formats, and optimizing uploads. It's a wrapper around libvips, the C library that runs circles around ImageMagick and GraphicsMagick. Apache 2.0. Used by Next.js for its built-in image optimization, by Strapi, by Payload CMS, basically any serious Node.js project that touches images. Resize a 4000x3000 JPEG in 20ms instead of 200ms. That's the pitch. Fully free. No paid tier. It's an npm package. The catch: Sharp depends on native binaries (libvips), which means installation can fail on unusual platforms or restricted build environments. Serverless platforms like AWS Lambda need a compatible binary. It works but you might need a Lambda Layer. And Sharp is for server-side image processing only. If you need client-side image manipulation in the browser, look at the Canvas API or a library like Pica. For Python projects, Pillow is the equivalent.
Squoosh compresses and converts images using the best codecs available, shrinking bloated PNGs and JPEGs that eat bandwidth. AVIF, WebP, JPEG XL, MozJPEG, OxiPNG, all in one tool. Drag an image in, adjust quality, compare before/after, download the result. Apache 2.0, built by Google Chrome Labs. The web app at squoosh.app runs entirely in your browser; your images never leave your machine. Side-by-side comparison shows exactly what quality you're trading for file size. Also available as a CLI (@squoosh/cli) for batch processing in build pipelines. Fully free. No paid tier, no account needed. The web app and CLI are both open source. Every team size: free. The web app is useful for one-off compressions. The CLI is what matters for teams. Integrate it into your build pipeline and every image gets optimized automatically. The catch: the CLI is technically in maintenance mode. Google hasn't been actively developing it. The web app works great, but the CLI may not keep up with newer codecs. Sharp (libvips-based Node.js library) is the production standard for server-side image processing. Squoosh is best for manual compression and quick comparisons, not as your primary image pipeline.
Pillow is the Python library for image manipulation: resize, crop, add text, convert formats, apply filters, generate thumbnails. It's the maintained fork of PIL (Python Imaging Library), which was the standard for 15+ years before it was abandoned. Pillow picked it up and kept it alive. open source (HPND license, basically do whatever you want). You `pip install Pillow`, import PIL, and start manipulating images. It supports JPEG, PNG, GIF, TIFF, BMP, WebP, and dozens more formats. Everything is free. No paid tier, no commercial version. It's a Python package: you install it and use it. The catch: Pillow is great for basic to moderate image processing but it's CPU-bound and single-threaded. If you're processing thousands of images or need real-time manipulation, look at OpenCV (faster, C++ backed) or libvips (dramatically less memory usage). Pillow loads entire images into memory, which kills you on large files. For a web app generating thumbnails or watermarking uploads, Pillow is perfect. For a pipeline processing 10,000 high-res photos, you'll want something faster.
Imgproxy sits between your storage and your users and resizes, crops, and optimizes images on the fly. Instead of pre-generating every size you might need, you request the exact dimensions in the URL and imgproxy handles it. The open source version covers the core use case well: resize, crop, rotate, watermark, convert between formats (WebP, AVIF, JPEG, PNG), and serve optimized images. It's a single Docker container that processes images from S3, GCS, local storage, or any HTTP source. The Pro version ($699/year per instance) adds advanced features: object detection for smart cropping, PDF/SVG/video thumbnail support, blur detection, and priority support. Solo devs: free version behind Cloudflare is all you need. Small teams: same setup, scales well. Growing teams with advanced needs (smart crop, video thumbnails): Pro at $699/year is reasonable. Large orgs: Pro, but also evaluate Cloudflare Images or Imgix if you want zero ops. The catch: you need to handle caching yourself. imgproxy doesn't cache; put a CDN like Cloudflare in front of it or you'll re-process the same image on every request. Without caching, you're burning CPU for nothing.
Thumbor is an on-demand image processing server that handles cropping, resizing, and transformations via URL parameters. Point it at your image storage, construct a URL with the dimensions and filters you want, and it delivers the processed image. Wikipedia, Forbes, and Square all run it in production. Runs as a Python service with optional face detection (using OpenCV) and smart cropping powered by AI. You will need a storage backend (S3, filesystem, or others via plugins) and a caching layer for performance. Not a one-click install, but the architecture is clean and well-documented. Free for everyone, no restrictions. Solo devs can spin it up for a side project. Teams with heavy image traffic should pair it with a CDN and proper caching. At scale, the ops burden is mostly about tuning workers and cache invalidation. The catch: you are running and maintaining an image processing pipeline yourself. If you would rather not think about scaling image workers, Cloudinary or Imgix handles all of that for a monthly fee.