imagemagick
Transform still images with ImageMagick v7
(magick command). Pairs well with vision.describe — describe an image to
decide what to do, then operate on it here. Always write to a new output file.
ImageMagick v7 uses magick in.png out.jpg. Legacy v6 uses convert; if only
convert exists, substitute it for magick in the examples below.
Setup health check (run first, every session)
Verify with one solo step:
[{ "tool": "os.shell.run", "args": { "cmd": "magick", "args": ["--version"] } }]
Outcome map:
exit 0 + Version: ImageMagick 7… → ready, proceed.
command not found: magick → try convert --version (v6); if also missing →
enter Setup playbook → "imagemagick missing".
Setup playbook (when prerequisites are missing)
imagemagick missing
Reply (solo reply step):
"ImageMagick is not installed. I can install it: brew install imagemagick. Install it?"
On yes:
[{ "tool": "os.shell.run", "args": { "cmd": "brew", "args": ["install", "imagemagick"] } }]
On Linux: apt-get install imagemagick.
When to use
- "Resize / crop / rotate this image", "convert PNG to JPG / WebP".
- "Compress this image", "make a thumbnail", "combine images into a montage".
- "Add a text caption / watermark to this image".
When NOT to use
- Understanding image content — use
vision.describe instead.
- Video frames / animation encoding — use the
ffmpeg skill.
- Multi-page PDF assembly from images — use the
pdf skill (magick can make a
PDF but page-level control lives in pdf).
Common operations
All examples invoke os.shell.run with cmd: "magick". The approval gate
surfaces each write.
| Goal |
args |
| Inspect dimensions/format |
["identify", "in.png"] |
| Convert PNG → JPG |
["in.png", "out.jpg"] |
| Convert → WebP |
["in.png", "-quality", "82", "out.webp"] |
| Resize to 800px wide |
["in.jpg", "-resize", "800x", "out.jpg"] |
| Thumbnail (fit 200x200) |
["in.jpg", "-thumbnail", "200x200", "thumb.jpg"] |
| Crop 300x300 from 10,10 |
["in.png", "-crop", "300x300+10+10", "+repage", "crop.png"] |
| Rotate 90° |
["in.jpg", "-rotate", "90", "rot.jpg"] |
| Compress JPG quality 75 |
["in.jpg", "-quality", "75", "small.jpg"] |
| Montage 2x2 grid |
["montage", "a.png", "b.png", "c.png", "d.png", "-tile", "2x2", "-geometry", "+4+4", "grid.png"] |
| Add caption |
["in.jpg", "-pointsize", "36", "-annotate", "+20+40", "Hello", "out.jpg"] |
Rules
- Always write to a NEW output path; never overwrite the source image.
- Use
magick identify first to learn dimensions/format before transforming.
- After a transform, optionally
vision.describe the result to confirm it
matches the user's intent for visual tasks.
- Echo the output path and final dimensions after each operation.
1---2name: imagemagick3description: Edit and convert images with the ImageMagick `magick` CLI — resize, crop, convert format, compress, rotate, montage, annotate. Use for any still-image transformation.4---56# imagemagick78Transform still images with [ImageMagick](https://imagemagick.org/) v79(`magick` command). Pairs well with `vision.describe` — describe an image to10decide what to do, then operate on it here. Always write to a new output file.1112> ImageMagick v7 uses `magick in.png out.jpg`. Legacy v6 uses `convert`; if only13> `convert` exists, substitute it for `magick` in the examples below.1415## Setup health check (run first, every session)1617Verify with **one solo step**:1819```20[{ "tool": "os.shell.run", "args": { "cmd": "magick", "args": ["--version"] } }]21```2223Outcome map:24- `exit 0` + `Version: ImageMagick 7…` → ready, proceed.25- `command not found: magick` → try `convert --version` (v6); if also missing →26 enter **Setup playbook → "imagemagick missing"**.2728## Setup playbook (when prerequisites are missing)2930### imagemagick missing3132Reply (solo `reply` step):3334> "ImageMagick is not installed. I can install it: `brew install imagemagick`. Install it?"3536On yes:3738```39[{ "tool": "os.shell.run", "args": { "cmd": "brew", "args": ["install", "imagemagick"] } }]40```4142On Linux: `apt-get install imagemagick`.4344## When to use4546- "Resize / crop / rotate this image", "convert PNG to JPG / WebP".47- "Compress this image", "make a thumbnail", "combine images into a montage".48- "Add a text caption / watermark to this image".4950## When NOT to use5152- Understanding image *content* — use `vision.describe` instead.53- Video frames / animation encoding — use the `ffmpeg` skill.54- Multi-page PDF assembly from images — use the `pdf` skill (`magick` can make a55 PDF but page-level control lives in `pdf`).5657## Common operations5859All examples invoke `os.shell.run` with `cmd: "magick"`. The approval gate60surfaces each write.6162| Goal | args |63|---|---|64| Inspect dimensions/format | `["identify", "in.png"]` |65| Convert PNG → JPG | `["in.png", "out.jpg"]` |66| Convert → WebP | `["in.png", "-quality", "82", "out.webp"]` |67| Resize to 800px wide | `["in.jpg", "-resize", "800x", "out.jpg"]` |68| Thumbnail (fit 200x200) | `["in.jpg", "-thumbnail", "200x200", "thumb.jpg"]` |69| Crop 300x300 from 10,10 | `["in.png", "-crop", "300x300+10+10", "+repage", "crop.png"]` |70| Rotate 90° | `["in.jpg", "-rotate", "90", "rot.jpg"]` |71| Compress JPG quality 75 | `["in.jpg", "-quality", "75", "small.jpg"]` |72| Montage 2x2 grid | `["montage", "a.png", "b.png", "c.png", "d.png", "-tile", "2x2", "-geometry", "+4+4", "grid.png"]` |73| Add caption | `["in.jpg", "-pointsize", "36", "-annotate", "+20+40", "Hello", "out.jpg"]` |7475## Rules76771. Always write to a NEW output path; never overwrite the source image.782. Use `magick identify` first to learn dimensions/format before transforming.793. After a transform, optionally `vision.describe` the result to confirm it80 matches the user's intent for visual tasks.814. Echo the output path and final dimensions after each operation.