From image-production
Write EXIF, IPTC, and XMP metadata tags to image files. Use when you need to add or update metadata like artist name, copyright, description, keywords, or GPS coordinates on individual images.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin image-productionThis skill is limited to using the following tools:
Set metadata tags on image files using `exiftool`. Supports EXIF, IPTC, and XMP metadata, with automatic backup of original files.
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.
Set metadata tags on image files using exiftool. Supports EXIF, IPTC, and XMP metadata, with automatic backup of original files.
Artist — photographer or creator name.Copyright — copyright statement (e.g., "© 2026 Daniel Rosehill").Description / ImageDescription — image description text.Keywords — comma-separated keywords.LensModel — lens description (if not auto-detected).GPSLatitude / GPSLongitude / GPSAltitude — GPS coordinates.DateTimeOriginal — capture date/time (format: YYYY:MM:DD HH:MM:SS)._original sidecars; offer an explicit backup copy for safety.command -v exiftool || echo "exiftool not installed — install with: sudo apt install libimage-exiftool-perl"
Abort if missing.
Ask the user to confirm the exiftool tag names. Common mappings:
| User-facing | exiftool tag |
|---|---|
| Artist | Artist |
| Creator | Creator |
| Copyright | Copyright |
| Description | ImageDescription |
| Keywords | Keywords |
| Lens | LensModel |
| Camera model | Model |
Gotcha: EXIF, IPTC, and XMP may use different tag names for the same logical field. exiftool auto-detects the appropriate target; document which format will be used:
exiftool -a -G1 "<sample.jpg>" | grep -i copyright
This shows which groups (EXIF, IPTC, XMP) currently carry copyright info on the sample file.
Print a summary:
_original sidecars will be stored.# exiftool creates _original sidecars by default, but also offer explicit backup
mkdir -p backup/
cp -r "<target>" backup/
Single file:
exiftool -Artist="Daniel Rosehill" -Copyright="© 2026 Daniel Rosehill" \
-ImageDescription="Sample photo" "<file.jpg>"
Multiple tags at once:
exiftool \
-Artist="<artist>" \
-Copyright="<copyright>" \
-ImageDescription="<desc>" \
-Keywords="<key1>,<key2>" \
"<file.jpg>"
Batch (directory or recursive):
find <target> -maxdepth <1|999> -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \
-o -iname '*.heic' -o -iname '*.webp' -o -iname '*.tif' \) \
-exec exiftool -Artist="<artist>" -Copyright="<copyright>" {} \;
Append -overwrite_original to discard _original sidecars, but only if a backup was made in step 4.
Sample a few output files and confirm the metadata was written:
exiftool -Artist -Copyright -ImageDescription "<sample.jpg>"
If metadata did not stick (e.g., PNG text chunks), try the XMP-specific path:
exiftool -XMP:Artist="<artist>" -XMP:Copyright="<copyright>" "<file.png>"
If the user accepted -overwrite_original, remove _original sidecars:
find <target> -maxdepth <1|999> -type f -iname '*_original' -delete
_original sidecars created in the same directory as each file (unless -overwrite_original was used).exiftool intelligently maps to the appropriate group, but document which format was used:
_original sidecar to ensure metadata persisted.exiftool -Tag=value file preserves all other metadata. Use -all= if you want to nuke everything before writing (not recommended).apt install libimage-exiftool-perl.