Comparison
| Feature | poops-images | sharp-cli | responsive-images-generator | responsive-image-builder | @11ty/eleventy-img |
|---|---|---|---|---|---|
| Multiple size variants | Config array, all at once | One size per command | Config array | Config-driven | Config array |
| Output naming | {name}-{sizeName}-{width}w.{ext} |
Manual | Custom suffix | Custom template | Hash-based |
| Crop modes | false / true / [x,y] (9 positions) |
Via sharp flags | crop: true only (center) |
Basic | None |
| WebP/AVIF conversion | Auto, per variant | Manual per command | Single format option | WebP only | WebP + AVIF |
| Smart format selection | smart picks smallest of jpg/webp |
No | No | No | No |
| Transparency detection | Auto JPEG if opaque | No | No | No | No |
| SVG minification | SVGO built-in | No | No | No | SVG passthrough |
| GIF handling | Static: full pipeline; animated: copy | Process (loses animation) | No | No | Passthrough |
| Watch mode | Chokidar, incremental | No | No | No | Dev server integration |
| Caching | Manifest + mtime/size + config hash | No | No | Fingerprinting | In-memory + disk |
| Config file | JSON, poops.json fallback |
CLI flags only | JS API only | JSON | JS API (Eleventy-coupled) |
| CLI | Standalone | Standalone | No (API only) | No (API only) | No (Eleventy plugin) |
| Concurrency control | Configurable worker count | No | No | Multi-threaded | Yes |
| Preprocessors | Blur, grayscale, watermark, etc. per image | No | No | No | No |
| SSG coupling | Designed for Poops, usable standalone | None | None | None | Tightly coupled to Eleventy |
| Maintained | Active | Last publish 2022 | Last publish 2019 | Last publish 2018 | Active |
Key differentiators
- Smart format selection โ
smartcompares jpg vs webp and keeps whichever is smaller. The others write every format blindly, sometimes producing a larger file than the one they replaced. - Transparency detection โ opaque PNGs and static GIFs become JPEG automatically. No other tool in the table does this.
- WordPress-style crop API โ the full 9-position anchor grid (
["left", "top"]), not just a center crop. - Integrated SVG pipeline โ SVGO minification in the same tool. The others need a separate build step.
- Convention-based naming โ
{name}-{sizeName}-{width}w.{ext}is purpose-built for Poops'discoverImageVariants(). - Preprocessors โ LQIP placeholders, grayscale hover variants and watermarked copies alongside the originals, all from config. No other tool here has a preprocessor pipeline.
- Standalone CLI and API โ works with any build system or none, unlike the Eleventy-coupled or webpack-coupled alternatives.
Where it loses
@11ty/eleventy-img is the better choice inside an Eleventy project โ it is coupled to
Eleventy on purpose, and that coupling buys you a shortcode that already knows your
build. sharp-cli exposes far more of sharp's surface, one operation per command, which
is what you want for a one-off transform rather than a repeatable pipeline.
poops-images is narrower than all of them by design: a directory in, predictable variants out, a cache in between. What it refuses to become is written down in CONTRIBUTING.md.