magick vs convert: ImageMagick 7 vs 6 in CI
On ImageMagick 7 the entry point is magick; convert still works but is deprecated, and the policy.xml path differs between v6 and v7.
CI scripts break when a runner image jumps from ImageMagick 6 to 7 (or vice versa). The command name, option ordering strictness, and config file location all changed.
What it does
ImageMagick 7 unifies the tools under one magick binary: magick input output replaces convert, and legacy names work as magick convert .... ImageMagick 7 is stricter about command-line ordering (operators must come before the output) and its config lives in a different path than v6.
Common usage
# v7 preferred form
magick input.png -resize 50% output.png
# v7 legacy compatibility
magick convert input.png output.jpg
# v6 (and v7 deprecated alias)
convert input.png output.jpg
# check which you have
convert -version || magick -versionOptions / Differences
| Aspect | ImageMagick 6 | ImageMagick 7 |
|---|---|---|
| Primary command | convert / mogrify | magick (convert deprecated) |
| policy.xml path | /etc/ImageMagick-6/policy.xml | /etc/ImageMagick-7/policy.xml |
| Option ordering | Lenient | Stricter (operators before output) |
| Default version on | Debian/Ubuntu LTS, older CentOS | Newer distros, Homebrew |
In CI
Write scripts to magick and fall back, or detect the version first. When editing the PDF policy or resource limits, edit the path matching the installed major version; editing the v6 file on a v7 host (or vice versa) silently does nothing.
Common errors in CI
"magick: command not found" on a v6-only host means you must call convert; "convert: command not found" on a strict v7 image means you must call magick. Edits to /etc/ImageMagick-6/policy.xml that "do nothing" are usually because the host runs v7 and reads /etc/ImageMagick-7/policy.xml. A v6 script that errors with "unrecognized option" on v7 is hitting the stricter operator ordering; move operators before the output filename.