The darkroom · Strip

Remove EXIF data and GPS from photos — losslessly

JPEG, PNG and WebP are rewritten without being decoded: the compressed picture is copied byte for byte and the metadata is left out — all of it, or only the location. One photo or a batch, with a ZIP at the end.

Open the tray How it works

All the metadata, or only the location · the picture’s bytes copied, compared, read back · JPEG, PNG, WebP · 0 bytes uploaded

The tray

Drop them in. Read them. Clean them.

Each photograph gets a card: what the file really is (by its bytes, not its name), its size, and a flag for every thing in it that points at a place or a person. What it says opens the lot, tag by tag. Strip takes the metadata out and leaves the picture exactly as it was; Develop writes a new file in the format and size the developer is set to. Beside the tray, the bench holds the other tools — the Exif viewer, Convert, Resize, Compress and Crop. Several photos at once is the point: the buttons under the drop zone do the whole tray.

The tray

Empty — nothing read yet

Drop photographs hereYour photographs, read here

JPEG, PNG and WebP; HEIC and AVIF where this browser can decode them. Or paste an image. Nothing is uploaded.

Change it

    The tray is empty. Choose some photographs, drop them anywhere on this page, paste one, or try the sample — a picture drawn by this site whose metadata was written by hand the way a phone writes it.

    A batch lives in this tab’s memory until you clear it or close the tab. Nothing is written to the browser’s storage except the developer’s settings.

    Remove EXIF and GPS

    Remove EXIF data from a photo without re-encoding it

    Copied, not saved again

    One way to remove metadata is to open the picture and save it again. For a JPEG that means compressing it a second time, and the picture changes. The darkroom does not do that. It walks the file, copies every part that belongs to the picture exactly as it is, and leaves out the parts that are metadata.

    FormatRemovedKept
    JPEGEXIF (with GPS, maker note and thumbnail), XMP and extended XMP, Photoshop and IPTC, comments, the multi-picture index, every other application segment, and anything after the end-of-image markerThe tables, the frame header, every scan and restart marker; the JFIF header; the Adobe segment, which the decoder needs for the colours; the ICC profile, unless you remove it
    PNGtEXt, zTXt, iTXt (XMP included), eXIf, tIME, content credentials, anything after IENDIHDR, PLTE, IDAT, IEND and the chunks that say how to draw it; iCCP, unless you remove it
    WebPEXIF, XMP, anything after the RIFF container; the VP8X flags are corrected and the RIFF size rewrittenThe VP8 / VP8L picture data, alpha, animation frames; ICCP, unless you remove it

    After writing, the page reads its own output again with the same walker, compares the image data with the original’s byte for byte, and says how many things are still in the file — so you see the result rather than take it on trust.

    Orientation: three honest choices

    A camera can store the picture sideways and write an Orientation tag that says how to turn it. Remove that tag from such a file and the photo lies on its side. So:

    1. Keep the Orientation tag, and only that (the default). The output gets a new EXIF block of 26 bytes holding that one tag. Still lossless.
    2. Remove it too. Nothing of EXIF remains. A rotated photo will show on its side.
    3. Re-encode upright. The picture is decoded, turned, and compressed again at quality 92. No Orientation tag is needed afterwards — but this is not lossless, the colours are converted to sRGB and the ICC profile is not carried over.

    Strip GPS from a photo and keep the rest

    “Only the location” leaves the camera, the date and the exposure in place and takes out the position. The pointer to the GPS directory is removed from EXIF, and every byte of that directory and of its values is overwritten with zeros, so the coordinates are gone from the file and not merely unlinked. The EXIF block keeps its length, so nothing else in it moves. If the file also has an XMP packet that mentions GPS, the whole packet is removed; so is a PNG’s hex-encoded EXIF profile that holds GPS.

    What this mode does not touch: the maker note, which this page cannot read; the embedded thumbnail; and place names someone typed into a caption or an IPTC field, which are words, not coordinates. The read-back under each result lists what is still there. If that matters, remove everything.

    A batch in, a ZIP out

    Add as many photos as you like and press Strip all. Each result can be downloaded by itself, or all of them as one ZIP. The ZIP is written by this page too — stored, not compressed, with a CRC-32 for every file — so the batch never leaves your device either. Stripped files end in -clean, location-only ones in -nogps and re-encoded ones in -upright.

    Limits

    HEIC and AVIF are read but not rewritten: to get a clean copy, convert the picture in a browser that can decode it. A JPEG whose structure cannot be followed from its first marker to its picture data is refused rather than guessed at. Animated PNG and WebP keep their frames. Stripping removes notes about the picture; it cannot remove what the picture shows.

    How to check that nothing is uploaded. The page’s own scripts make one request of their own — the sample card, from this site, when you press for it — and none that carries a file. The folder is served with a Content-Security-Policy header that lets the page connect only to this site and to Google’s analytics hosts, so even a mistake here could not send a photo anywhere else: the browser would refuse it. Open the developer tools, choose the Network tab, clear it, then add a photo and run the tool, and watch. Google’s analytics counts the visit and that a tool was used; nothing in this page hands it a file name, a pixel or a tag.

    Method

    What is read, what is written, and what is sent: nothing.

    Fetched, computed, sent

    There is no upstream and no server doing the work. The page loads its own files from this site, and the sample card from this site when you ask for it; your photographs are read from disk into this tab’s memory, worked on there by the page’s own readers and the browser’s own decoders and encoders, and handed back as downloads made in that memory.

    The folder is served with a Content-Security-Policy header whose connect-src allows this site and Google’s analytics and ad-measurement hosts — *.google-analytics.com, analytics.google.com and *.analytics.google.com, *.googletagmanager.com, www.google.com and its country domains, and stats.g.doubleclick.net — and nothing else. The full method — every format read by hand, every limit, every source — is on the darkroom’s front page.

    Sources for this tool