Save Image (Fake EXIF)
Make your ComfyUI image pass as a phone photo (and kill the metadata leak)
- images
The name undersells it. Save Image (Fake EXIF) isn't just about stamping a fake camera tag onto your output - it's a full metadata scrubber plus a disguise, in one node. If you've ever exported a ComfyUI image, opened it in a file inspector, and watched it hand over your entire workflow - prompt, negative, seed, checkpoint, every LoRA hash - you already know the problem it exists for. By default ComfyUI embeds the whole graph in the PNG, so "share the image" and "share the source code" are the same gesture until you strip it.
This node replaces the stock SaveImage and does two things at once: it re-encodes your output so the embedded workflow/prompt chunks are gone, and it writes in plausible smartphone EXIF - iPhone 16 Pro Max, GPS coordinates, current timestamp - so the file reads like a photo a phone took, not a picture a GPU generated.
Why you'd reach for it
Two audiences. First, anyone who shares or sells images and doesn't want to broadcast the exact prompt and settings that made them. Second, the photorealism crowd: a file with no EXIF is one of the quiet tells that an image is synthetic. If you've already done the smartphone-snapshot LoRA and the "name a physical camera" prompt trickery, finishing with plausible EXIF is the last mile - and this node is that last mile, prebuilt.
How it works
The mechanism is boring on purpose. It uses the piexif library, converts your image tensor to a PIL image, builds a standard EXIF dict (camera make/model, DateTime in EXIF format, GPS latitude/longitude with N/S/E/W references, plus a Software field), and re-encodes through PIL. That re-encode is what actually nukes the ComfyUI metadata: re-encoding writes a fresh file from pixels, and the text chunks don't survive it. There's no explicit "strip" call - the re-encode just doesn't carry them.
The fields you'll actually touch:
- format - defaults to
jpg, and keep it. JPEG is where EXIF lives naturally, and the README is right that JPG is the reliable choice. PNG technically gets the EXIF too, but viewer support for EXIF-in-PNG is patchier. - latitude / longitude - the trap. The defaults are
48.8566, 2.3522, which is central Paris. Leave them alone and every "photo" you export is geotagged to the Eiffel Tower's arrondissement. Set them to wherever the shot was supposedly taken, or something plausibly generic. Worth noting the inversion: you're adding location data here, not removing it. - camera_make / camera_model - default
Apple/iPhone 16 Pro Max. Change them if the "photo" should have been taken on, say, a Galaxy or a Canon. - filename_prefix - defaults to
IMG; the node appends the date and time plus an auto-incrementing counter, so you getIMG_20260821_143022_00001.jpg.
One nitpick: the baked-in Software field is 17.4.1, a spring-2024 iOS release - a "16 Pro Max" still running it in 2026 is a hair anachronistic. Nobody's reading that closely, but it's there.
It has no outputs. Like SaveImage, it's a terminal node, and it writes straight to ComfyUI/output/.
Install
One tiny dependency, zero model downloads. Through ComfyUI Manager, search "Fake EXIF" or "ComfyUI-FakeEXIF" and install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Bigornh2o/ComfyUI-FakeEXIF.git
cd ComfyUI-FakeEXIF
pip install -r requirements.txt # just piexif
Restart ComfyUI and the node shows up in the image category.
Where people get burned
Keep expectations honest: fake EXIF fixes a metadata tell, not the whole detection game. In a 2023 r/StableDiffusion thread, someone who tried "inserting fake EXIF and copyright data" alongside every other trick in the book found AI detectors still flagged their images at ~99%. The pixel-level tells - skin texture, lighting physics, noise statistics - are where detection actually bites. Use this node because your metadata should be clean and plausible, not because it launders a generation.
And the trade-off: as a JPEG, the file won't drag back into ComfyUI as a workflow anymore. If you might want to re-edit later, keep a PNG master from a normal SaveImage and treat the Fake EXIF output as the deliverable copy. Save the original, share the fake.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | IMG | — |
| format | COMBO | jpg | 2 options: jpg, png |
| camera_make | STRING | Apple | — |
| camera_model | STRING | iPhone 16 Pro Max | — |
| latitude | FLOAT | 48.8566-90–90 | — |
| longitude | FLOAT | 2.3522-180–180 | — |
Outputs (0)
No outputs