How PromptWipe removes metadata without touching the pixels
An image file is a container: blocks of picture data and blocks of metadata. PromptWipe reads that structure in your browser, copies the picture blocks byte for byte and leaves the metadata blocks out. Nothing is re-encoded and nothing is uploaded. Invisible watermarks written into the pixels stay.
What does PromptWipe keep, and what does it remove?
It keeps what your browser needs to show the picture exactly as before: the image data, transparency, animation and colour information. It removes everything else. The file is cut along its own structure (each block states its length), never by searching for words in it.
| Format | Kept | Removed |
|---|---|---|
| PNG |
Image header and data (IHDR, PLTE, IDAT, IEND),
transparency (tRNS), animation (acTL, fcTL, fdAT),
colour information (sRGB, gAMA, cHRM, iCCP,
cICP, HDR chunks)
|
Text chunks (tEXt, zTXt, iTXt: Stable Diffusion parameters,
ComfyUI prompt and workflow, InvokeAI, Fooocus, XMP), eXIf, caBX (C2PA),
tIME, pHYs, bKGD and every other optional chunk, bytes after the end
|
| JPEG |
Everything needed to decode (quantization and Huffman tables, frame header, every scan of a progressive
JPEG), the JFIF header without its thumbnail, the Adobe segment (colour decoding), the ICC
colour profile
| EXIF (camera, software, date, GPS, description, UserComment, MakerNote, thumbnail), XMP and extended XMP, IPTC and Photoshop data, every C2PA segment, comments, other application segments, secondary images (HDR gain map, Motion Photo video), bytes after the end |
| WebP |
Image data (VP8, VP8L, ALPH), the extended header
(VP8X), animation (ANIM, ANMF), the ICC colour profile
(ICCP)
| EXIF, XMP , C2PA, every unknown chunk (inside animation frames
too), bytes beyond the declared size. The header flags and the file size are recomputed
|
One thing is written back on purpose: when a phone photo is stored sideways and the EXIF says “rotate”, PromptWipe writes a new 32-byte EXIF block that holds the orientation and nothing else, so the photo stays the right way up. If the file had an HDR gain map, the picture can look less bright on an HDR screen afterwards; if it was a Motion Photo, the short video is gone. The report says so when it happens.
Why not redraw the picture in a canvas?
Many online tools draw the image on a canvas and export a new file. That re-compresses a JPEG (quality loss), converts wide-gamut colours such as Display P3 to sRGB, and keeps only the first frame of an animation. Copying the blocks avoids all three, and the format never changes: a PNG stays a PNG, a JPEG stays a JPEG.
What is checked before you can download the file?
The cleaned file is offered only after two checks: it is read again and must contain no metadata block, then your browser decodes it and the original, and both must have the same dimensions. If anything looks wrong, nothing is offered and your image is not changed.
- Files over 50 MB are refused before being read.
- A structure PromptWipe does not expect stops the process with an explanation. So does an unknown critical PNG chunk, one that a decoder must understand to draw the picture.
- Pictures over 40 megapixels are not decoded, to protect your browser’s memory: only the structure is checked, and the page says so. The same happens when your browser cannot display the original.
- One image at a time: dropping a new file replaces the one being processed, and its result is ignored.
What does the report show?
Before you download anything, PromptWipe shows what your image contains, then what was removed and what was kept.
- Text blocks, such as the prompt and the settings, with the tool that usually writes each one.
- EXIF fields: camera, software, date, and the GPS position when there is one.
- XMP: the creator tool and the declared source type (for example “Created using generative AI”).
- C2PA: how many manifests, and the generator and signer they declare. PromptWipe does not verify the signature.
- What was kept: the image, the animation, the colour profile with its name, the orientation.
Values read from a file are untrusted. They are always shown as plain text, never interpreted as HTML. Very long values are cut at 20,000 characters on screen; the Copy button copies the full text.
How can you check that nothing is sent?
You do not have to take our word for it. Four checks take a few minutes:
- Network tab. Open your browser’s developer tools (F12, or Cmd+Option+I on a Mac), go to Network, then drop an image.
Processing adds no request to any server. The only new entries are
blob:addresses: copies held in your browser’s memory for the preview and the download. - Response headers. In the same tab, click the page itself and read its
Content-Security-Policyheader. It containsconnect-src 'none': the browser blocks any connection a script on the page tries to open (MDN: connect-src). It also forbids scripts from other sites and form submissions. - Offline. Load the page, turn on airplane mode, then drop an image. It still works: the tool is loaded with the page and needs nothing else.
- Source code. The code is open under the MIT licence on GitHub. Its tests fail if the site’s code contains a network call.
What is in the diagnostic?
If something goes wrong, the result offers a “Copy the diagnostic” button. The diagnostic describes the structure of the file only: format, size, dimensions, and the list of blocks with their position, name, size and what was done with them. It never contains a value from the file, a text, a location or the file name. Paste it into a bug report so we can reproduce the problem without seeing your image.
What are the limits?
- Invisible watermarks written into the pixels, such as SynthID, stay. So do visible marks. PromptWipe does not make an image undetectable as AI-generated.
- PNG, JPEG and WebP only. AVIF, HEIC and GIF are refused for now, with a link to request the format.
- One image at a time.
To clean an image now, go back to the tool.
Last updated: