Image Resize
Resize one image file to a user-specified width and height via ImageMagick. Both dimensions are required — do not run this skill until the user (or task) provides target pixel size.
Rules
When this skill applies, read and follow skill-dependency-manager — run scripts as documented, install missing tools into .dependency/.
- Require target size first. If width/height are missing, ask the user before running.
- Single file only. Pass one image with
--image; directories are not supported. - Run
resize.pythrough the bundled script — do not hand-writemagick -resizecommands. - Never overwrite source files. Output goes to
image-resize/(or--output) by default. populated: falseforimagemagickis not a reason to skip. Install first, setpopulated: true, retry the same command.
Setup (first run)
Download ImageMagick portable build from imagemagick.org and extract to
.dependency/imagemagick/.Windows result example:
.dependency/imagemagick/magick.exeRegister in
.dependency/manifest.json:
"imagemagick": {
"populated": true,
"bin": ".dependency/imagemagick/magick.exe"
}
Use bin/magick on Unix (no .exe).
Quick Start
Both --width and --height are required:
.dependency/python/python .ai/image-resize/resize.py --image assets/sprites/hero.png --width 128 --height 128
Example: assets/ui/icon.png → assets/ui/image-resize/icon.png at 64×64
Custom output path:
.dependency/python/python .ai/image-resize/resize.py --image assets/icons/badge.png -o assets/icons_64 --width 64 --height 64
Resize Modes
| Mode | Flag | Behavior |
|---|---|---|
fit (default) |
--mode fit |
Fit inside WxH, preserve aspect ratio (letterbox area unused) |
fill |
--mode fill |
Cover WxH, center-crop overflow |
exact |
--mode exact |
Force WxH, ignore aspect ratio |
# Fit within 128×128 (default — no distortion)
.dependency/python/python .ai/image-resize/resize.py --image assets/hero.png --width 128 --height 128
# Cover 128×128, crop center
.dependency/python/python .ai/image-resize/resize.py --image assets/hero.png --width 128 --height 128 --mode fill
# Stretch to exactly 128×128
.dependency/python/python .ai/image-resize/resize.py --image assets/hero.png --width 128 --height 128 --mode exact
Defaults
| Option | Default | Notes |
|---|---|---|
--image |
Required | Single supported image file |
--width / --height |
Required | Must be positive integers |
--mode |
fit |
fill or exact when user needs crop or stretch |
| Output | <source-dir>/image-resize/<source-name> |
Use --output for custom file or directory |
| Format | Same as source | Extension preserved (.png, .jpg, etc.) |
Supported inputs: .jpg, .jpeg, .png, .webp, .gif, .bmp, .tif, .tiff, .avif, .ico.
Agent Workflow
- Confirm size — get explicit width and height from the user (e.g. "128×128", "64 wide and 64 tall"). Do not guess from context unless the user already stated dimensions.
- Pick mode — default
fit; usefillfor square thumbnails from non-square art; useexactonly when the user accepts distortion. - One file per run — resize one image, verify dimensions, then repeat for additional files if needed.
- Paths — pass whatever image path the user gives; output lands in
image-resize/next to that file by default. - Revert — delete output file or
git restore; sources are never modified.
Agent Notes
- Use the bundled script, not hand-written ImageMagick commands.
- Missing Python/ImageMagick → populate
.dependency/per skill-dependency-manager, retry same command. - Do not copy, move, or replace the source with resized output — tell the user where the output file is.
- Need format conversion only (no resize) → image-to-png.
- Need trim borders after resize → image-trim.
Troubleshooting
| Issue | Fix |
|---|---|
imagemagick missing in manifest |
Follow Setup; update manifest |
Missing --width / --height |
Ask user for target size; both flags are required |
Directory passed to --image |
Run once per file; this skill accepts image files only |
| Output larger/smaller than expected | Check --mode — fit preserves aspect inside the box |
| Distorted sprite | Switch from exact to fit or fill |
| Animated GIF | Only first frame is processed by default ImageMagick behavior |
CLI
Copy-paste commands: cli/image-resize.md