Prompt & Forensics

AI Image Prompt Extractor & AI Image Checker

Recover the prompt, negative prompt and generation parameters embedded in Stable Diffusion, ComfyUI, Automatic1111, Forge and other AI-generated images — and check whether an image is AI from its C2PA content credentials. Reads PNG info chunks (tEXt, zTXt, iTXt), JPEG and WebP EXIF UserComment, XMP packets, ComfyUI workflow graphs, NovelAI stealth pnginfo, and C2PA caBX / JUMBF CBOR manifests from Grok Imagine, gpt-image and Google. A full forensic view lists every PNG chunk and EXIF tag.

PNG JPEG WebP GIF Automatic1111 Forge ComfyUI NovelAI InvokeAI Fooocus SwarmUI Midjourney Grok Imagine gpt-image Gemini / Imagen C2PA

Drop an image to see its embedded prompt and metadata.

How Stable Diffusion and other AI image metadata is stored

Every generator embeds its prompt differently. There is no shared standard, so a reader has to understand each container format and each tool's convention inside it. Stable Diffusion front-ends alone disagree: Automatic1111 and Forge write a plain parameters string, ComfyUI writes a node graph, and NovelAI hides data in the pixels. Here is what this extractor looks for.

Stable Diffusion PNG info: tEXt, zTXt and iTXt chunks

A PNG file is a sequence of length-prefixed chunks. Three of them carry text, and they are where the Stable Diffusion WebUI "PNG Info" tab reads from. tEXt holds a Latin-1 keyword, a NUL separator and an uncompressed value. zTXt holds the same pair but zlib-DEFLATE compressed after a one-byte compression method. iTXt holds UTF-8 with a compression flag, a compression method, a language tag and a translated keyword before the payload — and it may itself be compressed. Readers that only handle tEXt silently miss data written by tools that compress. This extractor inflates zTXt and compressed iTXt using the browser's native DecompressionStream, and also reads the eXIf chunk when present.

JPEG and WebP: EXIF UserComment and XMP

JPEG has no text chunks, so Automatic1111, Forge and Fooocus write the entire parameters string into the EXIF UserComment tag (0x9286) inside an APP1 segment. That field begins with an 8-byte character-code header — UNICODE, ASCII or JIS. The specification says UNICODE means UTF-16 big-endian, but piexif and several Windows tools write little-endian, so a correct reader has to try both and pick the sane result. WebP stores the same TIFF block in a RIFF EXIF chunk, plus XMP in an XMP  chunk.

ComfyUI: a node graph, not a prompt

ComfyUI does not save a prompt string at all. It saves two JSON documents: prompt (the API-format graph) and workflow (the editor graph). To show something a human can read, you have to start at the sampler node, follow its positive and negative conditioning links through any modifier nodes, and read the text input of the CLIPTextEncode node at the end. This tool performs that traversal and also surfaces the checkpoint, LoRAs, seed, steps, CFG and scheduler.

Stealth pnginfo: metadata in the pixels

NovelAI can hide generation data in the least-significant bits of the alpha channel, where stripping metadata chunks does not remove it. The bit stream starts with the magic stealth_pnginfo, stealth_pngcomp, stealth_rgbinfo or stealth_rgbcomp, followed by a 32-bit big-endian bit length and the payload, which is DEFLATE-compressed for the *comp variants.

Content Credentials (C2PA): caBX chunks and CBOR

Grok Imagine (xAI), OpenAI gpt-image, Google's Gemini and Imagen pipelines, and Adobe Firefly do not write prompt metadata at all. They embed a signed C2PA provenance manifest: a JUMBF box tree (ISO/IEC 19566-5) carried in a PNG caBX chunk, a JPEG APP11 segment, or a WebP C2PA chunk. Crucially the assertions inside are CBOR-encoded rather than JSON, which is why generic metadata viewers show nothing useful for these files.

This tool walks the JUMBF boxes and decodes the CBOR to surface the c2pa.actions software agent (for example Grok Imagine or gpt-image 2.0), the claim generator, the creation timestamp, the signing organisation, and the IPTC digitalSourceType — normally trainedAlgorithmicMedia, the standard marker for AI-generated media. Signature chains are read but not cryptographically verified.

Reading Stable Diffusion prompts and parameters

A Stable Diffusion image saved by Automatic1111, Forge or SD.Next stores everything needed to reproduce it in a single parameters text chunk: the positive prompt, the Negative prompt: line, and a comma-separated tail of Steps, Sampler, Schedule type, CFG scale, Seed, Size, Model hash, Model, Denoising strength, Clip skip and Version. That is the same block the WebUI's own PNG Info tab shows, and pasting it back into the prompt box restores the full generation settings.

This extractor parses that string the way the WebUI does, including the awkward cases: prompts containing commas or newlines, LoRA and hash values wrapped in quotes that must not be split on, and parameter blocks that arrive zlib-compressed in a zTXt chunk. When the image was saved as JPEG or WebP instead, the same string is read from EXIF UserComment.

Supported metadata formats

Generator Container Where the data lives Encoding
Automatic1111, Forge, SD.Next PNG tEXt keyword parameters Prompt, Negative prompt:, comma-separated Key: value
Automatic1111, Forge, Fooocus JPEG, WebP EXIF UserComment (0x9286) 8-byte charset header + UTF-16 (BE or LE)
ComfyUI PNG prompt and workflow chunks JSON node graph, traversed to recover prompts
NovelAI PNG Description, Comment, Software Text plus JSON parameters
NovelAI stealth PNG pixels Alpha / RGB least-significant bits stealth_pnginfo magic + DEFLATE + JSON
InvokeAI PNG invokeai_metadata, sd-metadata JSON
SwarmUI / StableSwarmUI PNG sui_image_params JSON
Fooocus PNG, JPEG parameters, fooocus_scheme JSON or A1111-style text
Midjourney PNG, JPEG XMP dc:description, Job ID XMP / RDF XML
Draw Things PNG JSON with c / uc keys JSON
Grok Imagine (xAI) PNG C2PA manifest in a caBX chunk JUMBF + CBOR — provenance, no prompt
OpenAI gpt-image / DALL·E PNG, JPEG caBX chunk / APP11 segment JUMBF + CBOR — provenance, no prompt
Google Gemini / Imagen ("nano banana") PNG, JPEG C2PA manifest, IPTC Credit, XMP JUMBF + CBOR, "Made with Google AI"
Adobe Firefly PNG, JPEG, WebP C2PA JUMBF box JUMBF + CBOR — provenance

Frequently asked questions

Can this tool check whether an image is AI-generated?

Yes, when the image still carries the evidence. It reads two independent signals. The first is generation metadata — a Stable Diffusion parameters block, a ComfyUI workflow, or a prompt in EXIF UserComment — which is direct proof the image came out of an AI tool. The second is C2PA Content Credentials: Grok Imagine, OpenAI gpt-image, Google Gemini / Imagen and Adobe Firefly embed a signed manifest whose IPTC digitalSourceType is trainedAlgorithmicMedia, the standard marker for AI-generated media. If neither is present the tool cannot certify an image is a real photograph — metadata is easily stripped by screenshots, re-encoding or social platforms — but it will always show you exactly what evidence the file does and does not contain.

What is in the Forensics tab?

A complete breakdown of the file itself, beyond the prompt. It lists every PNG chunk (or JPEG segment, or WebP RIFF chunk) in order with its byte offset, length and CRC, and decodes the structural chunks in place — IHDR dimensions, bit depth and colour type, sRGB rendering intent, gAMA gamma, pHYs pixel density and DPI, iCCP ICC profile, cHRM chromaticities and tIME timestamp — alongside a full dump of every EXIF / TIFF tag, not just the handful that carry a prompt. Unrecognised critical chunks are highlighted because they can be a sign of a hand-edited or tampered image.

Is this the same as the Stable Diffusion WebUI "PNG Info" tab?

It reads the same data, without needing Stable Diffusion installed or running. The WebUI's PNG Info tab reads the parameters tEXt chunk from Automatic1111 and Forge images; this page reads that too, and additionally handles compressed zTXt/iTXt chunks, JPEG and WebP EXIF UserComment, ComfyUI node graphs, NovelAI stealth pnginfo, and C2PA manifests — formats the built-in tab either misses or shows as unreadable JSON.

Why does my JPEG not show a prompt?

JPEG has no PNG text chunks, so the parameters string goes into EXIF UserComment instead. This tool reads that field. If nothing appears, the EXIF block was most likely stripped — re-saving in an image editor, screenshotting, or uploading to a platform that normalises images all remove it, and the prompt is then genuinely gone from the file.

The image came from Discord / Twitter / Reddit and has nothing in it.

Most social platforms re-encode uploads and drop all ancillary metadata. Discord preserves the original file when you download the attachment itself rather than the preview, so try "Open original" and download that.

What is the difference between the "prompt" and "workflow" chunks in a ComfyUI PNG?

prompt is the API-format graph that was actually executed — a flat map of node id to class_type and inputs. workflow is the editor graph, including node positions and UI state, which is what loads when you drag the image into the ComfyUI canvas. The prompt text is recoverable from either, but the API format is cleaner to traverse.

Can this tool remove or edit metadata?

No. It only reads. To strip metadata, re-encode the image with a tool such as exiftool -all= image.png, and note that this will not remove stealth pnginfo because that lives in the pixel data.

Why does my Grok, GPT-image or Google image show no prompt?

Hosted generators increasingly ship C2PA Content Credentials instead of prompt metadata. The manifest lives in a PNG caBX chunk (or a JPEG APP11 segment) and its assertions are CBOR-encoded, not JSON. It records the software agent — Grok Imagine, gpt-image, Google's media pipeline — along with a digital-source-type of trainedAlgorithmicMedia and a signing certificate, but deliberately not the prompt. This tool decodes and displays that manifest, so you learn which tool made the image even though the prompt itself was never embedded.

Privacy

Metadata extraction runs in your browser: the file is read with the File API and every parser on this page is JavaScript executing on your own machine, so results appear without waiting on a server. Submitted images are also retained so that unrecognised metadata formats can be added to the parser. Avoid submitting images you consider private. Third-party scripts on this page (web fonts, syntax highlighting, ads) may set their own cookies.