From image-production
Strip EXIF / IPTC / XMP metadata from images using exiftool. Use when the user wants to remove identifying metadata (GPS, camera, timestamps, thumbnails) from a single image, a folder, or a recursive tree before sharing or publishing. Supports preview, backup-first, whitelist of fields to keep (e.g. Orientation), and recursive operation. Logs each run to notes/.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin image-productionThis skill is limited to using the following tools:
Remove EXIF / IPTC / XMP metadata from images in place (or to a copy), with preview and logging. Wraps `exiftool` — do not hand-roll metadata parsing.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Remove EXIF / IPTC / XMP metadata from images in place (or to a copy), with preview and logging. Wraps exiftool — do not hand-roll metadata parsing.
Ask the user (and confirm before touching files):
exiftool keeps _original sidecars automatically, but offer an explicit backup/ copy for the nervous case.Orientation so the image renders right-way-up. Ask if the user wants to preserve anything else (ColorSpace, ICC profile, copyright).command -v exiftool || echo "exiftool not installed — install with: sudo apt install libimage-exiftool-perl"
Abort if missing.
Run a read-only pass and show the user a summary:
# Show metadata currently present on a sample file
exiftool -G1 -a -s "sample.jpg"
# Count files that would be touched
find <target> -maxdepth <1|999> -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \
-o -iname '*.heic' -o -iname '*.webp' -o -iname '*.tif' \
-o -iname '*.tiff' \) | wc -l
Print:
backup/ copy will be made.Wait for user confirmation.
mkdir -p backup/
cp -r <target>/. backup/
Note that exiftool also keeps its own <file>_original sidecars in-place unless -overwrite_original is passed — decide with the user whether to keep those or clean them up at the end.
Two patterns — pick based on scope:
Folder (non-recursive):
exiftool -all= -tagsFromFile @ -Orientation \
-ext jpg -ext jpeg -ext png -ext heic -ext webp -ext tif -ext tiff \
"<target>"
Recursive tree:
exiftool -r -all= -tagsFromFile @ -Orientation \
-ext jpg -ext jpeg -ext png -ext heic -ext webp -ext tif -ext tiff \
"<target>"
If the user asked to keep additional fields, extend the -tagsFromFile @ -Field1 -Field2 ... list. If the user asked to preserve nothing (full nuke), drop the -tagsFromFile clause — just -all=.
To discard the _original sidecars in the same run, append -overwrite_original. Only do this if a backup was made in step 4, or if the user explicitly waived backup.
Sample a few output files and show their remaining metadata:
exiftool -G1 -a -s "<sample-output>.jpg"
Confirm only whitelisted tags remain. If unexpected metadata survived (common with PNG text chunks or XMP sidecars), flag it and offer a second pass with -xmp:all= or a manual exiftool -ext xmp -overwrite_original -all= <path>.
Write notes/scrub-metadata-{YYYY-MM-DD-HHMMSS}.md in the target folder (or the cwd if the target was a single file). Include:
If notes/ doesn't exist, create it.
exiftool is the only sane tool for this — don't use convert -strip (ImageMagick) as the primary path; it silently drops colour profiles and doesn't touch XMP sidecars reliably.exiftool -GPS:all <file> should return nothing).exiftool -all= handles both, but verify.tEXt / iTXt / eXIf chunks — exiftool -all= covers them. Do not rely on optipng -strip all as a primary scrubber.