Image Metadata Remover — EXIF, C2PA & AI Label Stripper
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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?
| Layer | Examples | Handled |
|---|---|---|
| EXIF | GPS coordinates, camera Make/Model, serial numbers, timestamps, Software | Yes |
| IPTC | Caption, credit, byline, copyright | Yes |
| XMP | Creator, rights, editing history, DigitalSourceType (the AI label) | Yes |
| PNG text chunks | Stable Diffusion / ComfyUI / A1111 prompt, seed, model, sampler | Yes |
| WebP / HEIC / AVIF boxes | EXIF and XMP RIFF/ISOBMFF chunks | Yes |
| C2PA / JUMBF | Content Credentials manifests and signatures (APP11 / jumb boxes) | Yes |
| ICC profile | Optional — keep it with keepColorProfile | Yes |
| Embedded thumbnails | The small preview that often survives naive strippers | Yes |
| Classic invisible watermarks | DWT-DCT style frequency-domain marks | scrub mode |
| SynthID, Stable Signature, Tree-Ring | Model-space watermarks | No — 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.
cleandeliberately does not touch pixels, so any pixel-domain watermark survives it — usescrubfor 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.