Image Metadata Remover — EXIF, C2PA & AI Label Stripper avatar

Image Metadata Remover — EXIF, C2PA & AI Label Stripper

Pricing

Pay per usage

Go to Apify Store
Image Metadata Remover — EXIF, C2PA & AI Label Stripper

Image Metadata Remover — EXIF, C2PA & AI Label Stripper

Bulk image metadata remover. Remove EXIF, GPS, IPTC, XMP, ICC, Stable Diffusion prompt chunks, C2PA Content Credentials and the AI-generated label from photos. Lossless by default, optional pixel scrub against classic invisible watermarks.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Andrew Babo

Andrew Babo

Maintained by Community

Actor stats

0

Bookmarked

468

Total users

287

Monthly active users

12 days ago

Last modified

Share

Bulk image metadata remover for Apify. Remove metadata from photos and images — EXIF, GPS, IPTC, XMP, ICC, Stable Diffusion prompt chunks, C2PA Content Credentials and the "generated by AI" label — in one run.

The default mode is lossless: the decoded pixels of the output are bit-identical to the input (verified, mean delta 0). Only the metadata containers are removed.

What metadata does it remove?

LayerExamplesHandled
EXIFGPS coordinates, camera Make/Model, serial numbers, timestamps, SoftwareYes
IPTCCaption, credit, byline, copyrightYes
XMPCreator, rights, editing history, DigitalSourceType (the AI label)Yes
PNG text chunksStable Diffusion / ComfyUI / A1111 prompt, seed, model, samplerYes
WebP / HEIC / AVIF boxesEXIF and XMP RIFF/ISOBMFF chunksYes
C2PA / JUMBFContent Credentials manifests and signatures (APP11 / jumb boxes)Yes
ICC profileOptional — keep it with keepColorProfileYes
Embedded thumbnailsThe small preview that often survives naive strippersYes
Classic invisible watermarksDWT-DCT style frequency-domain marksscrub mode
SynthID, Stable Signature, Tree-RingModel-space watermarksNo — flagged, not removed

Supports JPEG, PNG, WebP, HEIC, AVIF, TIFF and GIF.

How to remove metadata from photos in bulk

Send a list of image URLs and pick a mode. One dataset record per image is returned, plus the cleaned file in the run's key-value store.

{
"imageUrls": ["https://example.com/photo.jpg"],
"mode": "clean",
"outputFormat": "auto",
"concurrency": 5
}

Images can also come in as imagesBase64, or as keyValueStoreKeys from an existing key-value store (sourceKeyValueStoreId).

Three modes:

  • inspect — report only. Lists every layer, every tag, whether a C2PA manifest or an AI label is present. The file is not modified.
  • clean (default) — remove all metadata and C2PA. Pixels untouched.
  • scrub — clean, plus a pixel-level pass (re-encode, resize round-trip, light noise, optional border crop) that destroys classic invisible watermarks.

Remove the AI-generated label and C2PA Content Credentials

Modern AI generators tag their output. The IPTC/XMP DigitalSourceType = trainedAlgorithmicMedia field marks an image as AI-made, and C2PA Content Credentials embed a signed provenance manifest (JUMBF boxes / APP11 segments) that can name the generator, the account and the full edit history.

This Actor strips both: the AI label tags and the entire C2PA manifest. The manifest is bound to the exact byte sequence of the file, so dropping it invalidates the signature and removes the provenance chain outright — no C2PA library needed, no pixel touched.

For classic invisible watermarks (DWT-DCT frequency-domain marks), scrub mode applies a pixel-level attack. Verified against a real DWT-DCT watermark: decode accuracy falls from 100 % to 42 %, where random guessing sits at 50 % — nothing recoverable. For scrub runs, set outputFormat to webp or jpeg; PNG cannot compress the added noise and the file grows a lot.

Does it change my pixels?

No, not in the default clean mode. The decoded image is bit-identical before and after (mean/max pixel delta 0 across the test set); only the metadata containers are dropped.

scrub mode intentionally changes pixels — that is how it breaks invisible watermarks. Every scrub record reports the exact pixel mean/max delta and byte sizes so you can see how much the image changed.

Output

One dataset record per image with the layers found before and after, the full tag dump before and after, aiLabelRemoved, c2paRemoved, clean, pixelChanged, pixel mean/max delta, byte sizes, warnings, and a public link to the cleaned file in the run's key-value store.

Limitations

  • Google SynthID, Meta's Stable Signature and Tree-Ring watermarks are embedded in the generative model itself, not in the file. There is no cheap CPU method to remove them, so this Actor does not pretend to. When the source metadata points at such a generator, the record carries an explicit warning instead.
  • clean deliberately does not touch pixels, so any pixel-domain watermark survives it — use scrub for those.

FAQ

Does it reduce image quality? No. The default clean mode is lossless — pixels are bit-identical. Scrub mode changes pixels on purpose and reports the exact difference.

Can it remove metadata from AI-generated images? Yes. It removes the IPTC/XMP AI label (DigitalSourceType), Stable Diffusion / ComfyUI prompt chunks, and C2PA Content Credentials left by generators such as Adobe Firefly.

Can it remove the Gemini / SynthID watermark? No — SynthID lives in the model, not the file, and no cheap removal exists. The Actor flags a warning when an image likely carries it instead of claiming a fake removal.

What does it cost? Fractions of a cent per image on the Apify platform — roughly $0.00002 per image at 1 GB RAM, plus any Actor pricing if set.

Full measurements: docs/ai-footprint-remover-poc.md.

For AI agents (MCP-ready)

This actor is built to be called by AI agents. It works out of the box with the Apify MCP Server — add it to Claude Desktop, Cursor or any MCP client: the agent can strip image metadata and AI provenance labels on its own.

{
"mcpServers": {
"ai-footprint-remover": {
"url": "https://mcp.apify.com/?actors=andrew_babo/ai-footprint-remover",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Agent skill (paste into your agent's instructions)

Use the "ai-footprint-remover" tool to strip EXIF/XMP/IPTC metadata, C2PA
provenance manifests and AI-generation labels from images, and optionally
disturb invisible watermarks. Typical asks: "remove metadata / GPS from
these photos", "clean this AI image before publishing".
HOW TO CALL
- { "imageUrls": ["https://.../a.jpg"], "mode": "clean" }
- "mode": "clean" strips metadata only (lossless-ish, default);
"deep" additionally re-encodes, resizes, adds light noise and crops a few
pixels to disturb invisible watermarks — use only when the user asks.
- Batch up to a few dozen images per run; "concurrency" defaults to 5.
- Keep "storeOutput": true to get downloadable cleaned files.
OUTPUT CONTRACT
- One row per image: output URL, removed metadata keys, detected C2PA /
AI labels, before/after size.
- errorCode on a row means that image failed (404, too large, unsupported
format) — report which ones failed instead of claiming all were cleaned.
- Never promise that invisible watermark removal is guaranteed; "deep" mode
degrades watermarks, it does not certify their absence.