# Changelog of Image Tools (`marcel-rbro/image-tools`) Actor

- **URL**: https://apify.com/marcel-rbro/image-tools/changelog.md
- **Full Actor documentation**: https://apify.com/marcel-rbro/image-tools.md

## Changelog

### 0.1 - unreleased

Initial version.

- Resizes, crops, rotates, flips, grayscales, blurs, watermarks and re-encodes images with
  ImageMagick, in a fixed and documented operation order.
- Processes a single image or a batch of up to 100, uploaded together or passed as a list of URLs in
  `files`. A failed image becomes a dataset row with `ok: false` and is skipped rather than ending the
  run; only a colliding output key gets a `-2` suffix. `OUTPUT` is the image for a single run and a
  ZIP for a batch, falling back to a JSON manifest past 192 MB of output.
- Bounds a run with a shared budget (100 images, 512 MB of input, 128 MP per image, 4,000 MP per run)
  and gives downloads a 60-second timeout, so a dead host cannot stall the queue behind it.
- Keeps the frames of an animated GIF when the output is also GIF, and warns when a target format
  can only hold one frame.
- Reads JPEG, PNG, GIF, WebP, TIFF, BMP, HEIC and AVIF; writes JPEG, PNG, WebP, AVIF, TIFF and GIF.
  Leaving the output format empty keeps the source format, so a pure resize stays a PNG.
- Identifies the source from its magic bytes rather than its extension, and refuses video, PDF and
  PostScript with an explanation.
- Accepts the source as a URL (including the Console file upload field) or as base64.
- Takes typed, allowlisted operations rather than an ImageMagick argument string. No caller value
  reaches the command line unvalidated, and the container's `policy.xml` denies the coders that read
  or write outside the image.
