Tooling

Photo Watermarking & Batch Processing

ImageMagick, XnConvert, Lightroom export, GIMP Script-Fu — watermark, resize, rename in bulk.

Bulk operations on hundreds or thousands of photos: resize for web, watermark for portfolio, rename to a sortable scheme, convert format. The CLI tools are unbeatable at scale; the GUI tools win on convenience. For the underlying server-side image libraries see Image Editing (sharp, libvips); for develop-app exports see Photo RAW Editors.

CLI (free / OSS)

  • ImageMagick — Apache 2.0, C. The canonical CLI image toolkit; resize, convert, composite, watermark, format-convert, OCR-grade text overlay. magick mogrify for in-place batch. Pairs with shell loops.
  • GraphicsMagick — MIT, C; an ImageMagick fork focused on stability and speed for batch. Often faster on large batches; smaller surface area.
  • libvips / vips CLI — LGPL; the engine behind sharp. Faster + lower memory than ImageMagick on large files; smaller feature surface.
  • ffmpeg — for image-sequence work, format conversion, batch transcoding.
  • ExifTool — see Photo EXIF & Metadata; great for batch rename based on EXIF (exiftool '-FileName<DateTimeOriginal' -d '%Y-%m-%d_%H%M%S.%%e' .).

GUI batch (free)

  • XnConvert — free for personal use, paid commercial. Cross-platform GUI batch; resize / watermark / rename / convert / metadata. The default free batch GUI; very capable.
  • IrfanView Batch Conversion / Rename — free; Windows; basic but fast.
  • FastStone Image Viewer Batch — free; Windows; integrated batch tools.
  • GIMP Script-Fu / Python-Fu / BIMP plug-in — free; batch via scripting; the BIMP (Batch Image Manipulation Plugin) gives a GUI on top.
  • darktable export — free; bulk export with watermark, resize, ICC convert from the lighttable.
  • digiKam Batch Queue Manager — free; integrated batch in digiKam.

GUI batch (paid)

  • Lightroom Classic Export — included; the most ergonomic batch the average photographer uses; presets per use case (web, print, full-res, watermarked). Watermarks via the built-in editor.
  • Capture One Process Recipes — included with C1; multi-recipe export (e.g. one TIFF + one JPEG + one watermarked web JPEG per shot).
  • Affinity Photo Export Persona — paid one-time; per-slice batch export.
  • Photoshop Image Processor / Actions — paid CC; classic batch via Actions.
  • BatchPhoto, FastStone Photo Resizer — paid; consumer-flavored batch.

Watermarking-specific

  • iWatermark Pro — paid Win/Mac; watermark-only specialist, signatures + branding.
  • Marksta — paid iOS; mobile watermark.
  • Visual Watermark — paid Win/Mac; consumer.
  • PhotoBulk — paid macOS; consumer.

Common batch patterns (CLI)

# Resize all JPGs in a folder to 2000px long edge
magick mogrify -resize 2000x2000 -quality 92 *.jpg
 
# Add a watermark (lower-right, 30% opacity)
magick input.jpg watermark.png -gravity SouthEast -geometry +20+20 \
  -compose dissolve -define compose:args=30 -composite output.jpg
 
# Convert raws to JPEG via dcraw + ImageMagick
for f in *.CR3; do magick "$f" -resize 2000x2000 "${f%.CR3}.jpg"; done
 
# Rename to YYYY-MM-DD_HHMMSS.ext from EXIF
exiftool '-FileName<DateTimeOriginal' -d '%Y-%m-%d_%H%M%S.%%e' .
 
# Strip metadata from a folder of exports
exiftool -all= -overwrite_original *.jpg

Web / on-the-fly batch

  • imgproxy / Cloudflare Polish / <Next/Image> — see File Uploads; resize / convert / strip metadata at delivery time. Eliminates a build-step batch for many use cases.
  • Cloudinary / ImageKit — hosted versions of the same.
  • Cloudflare Workers + sharp via @cf-wasm/photon — run a tiny edge resize service.

Patterns to know

  • Watermark on a layer copy, not the master — keep a clean export pipeline; watermark only on web-bound JPEGs.
  • Output sharpening per use — Lightroom / darktable export presets handle this; for screen vs. matte vs. glossy.
  • Strip EXIF on web exports at minimum strip GPS. See Photo EXIF & Metadata.
  • Batch with previews — XnConvert and Lightroom both preview before commit; CLI doesn't, so test with one file first.
  • Parallelize CPU batchesmagick mogrify -limit thread 8 or GNU parallel for big runs.

Pick this if…

  • Default scriptable / pipeline: ImageMagick CLI (mogrify).
  • Default cross-platform GUI batch: XnConvert.
  • Already in Lightroom / Capture One: their built-in Export / Recipes.
  • Watermark-only use case: iWatermark Pro or Lightroom watermark presets.
  • Edge / on-the-fly: imgproxy or Cloudflare Polish.
  • Bulk EXIF rename: ExifTool one-liner.

On this page