Image Watermark Detector
Check an image for a visible overlay, an LSB statistic, an invisible DWT+DCT watermark (and read its text), EXIF/XMP/IPTC copyright fields and AI-provenance metadata (C2PA, DigitalSourceType). Runs in your browser.
Try the demo instantly
Loads a 200×200 gradient PNG — no upload needed
Drop your image here or click to browse
PNG, JPEG, BMP, WebP · Max 50 MB
All processing runs locally — your image never leaves your device
Processed in your browser
Your image is decoded in this browser tab and is not sent to a StegoToolkit server. Basic usage analytics record coarse facts such as file type and size range, never the image or your text. The Embedder saves the watermarked result as a PNG. In our tests the invisible watermark was not recovered when images were kept at a smaller final size or cropped; other transformations may behave differently.
How to Check if an Image Has a Watermark (4 steps)
- Upload an image (PNG, JPEG, BMP or WebP, up to 50 MB; 10 MB on phones). Quick mode runs every check; Standard lets you switch categories off.
- Read the signal level (HIGH, MEDIUM or LOW) and the list of findings. Each row says what was measured and whether it was run.
- Open 'Full technical details' for the scores, the recovered watermark text (if any) and the metadata fields found; the heatmap marks a visible overlay's region.
- Download the JSON report, or switch to Standard mode for a batch of images with a CSV export.
What the Detector Checks
| Category | Technique | Finds | Limit |
|---|---|---|---|
| Visible overlay | A heuristic over five regions (four corners and the centre): edge density or transparency clearly above the image's own | A medium-sized overlay on a photograph; it can miss text in busy areas and can flag a locally busy region | Informational only: shown, but not counted in the signal level |
| LSB statistic | Chi-square p-value on R, G and B value pairs, counted only when the lowest-bit plane also looks random | A lowest-bit plane that is almost completely overwritten with random-looking data | Not light or partial LSB data; the Steganography Analyzer or LSB Extractor go further |
| Invisible frequency pattern (DWT+DCT) | Quantization pattern in 8 × 8 DCT blocks of the Haar LL subband, with a detection threshold of 0.75; a successful blind text reading also counts as detection | Marks written by this site's Image Watermark Embedder | Tested on two other open-source libraries' marks (invisible-watermark dwtDct and dwtDctSvd, blind_watermark; 8 photo crops each): none of the 24 marked images were detected. Other products were not tested |
| EXIF / XMP / IPTC fields | Copyright and Artist (EXIF), Copyright Notice and By-line (IPTC), Rights, Creator and Credit (XMP), PNG Copyright and Author text | What the file declares | Selected fields only; availability depends on the format and how the file was created or saved. A re-save or screenshot may remove it; metadata-stripping operations commonly do. Parser compatibility has not been tested against every camera or application |
| AI provenance metadata | A C2PA / Content Credentials manifest, or an IPTC/XMP DigitalSourceType term such as trainedAlgorithmicMedia | What the file declares | Does not read invisible AI watermarks such as SynthID; a manifest's signature is not validated |
What the Detector Checks, and What It Cannot
The Detector runs three pixel-based checks (visible overlay, LSB statistic, and the invisible frequency pattern with a blind text reading) and parses the file's metadata for copyright/rights fields and AI-provenance declarations. The table lists these as five rows, and Standard mode lets you switch four categories on or off (the two metadata rows share one). It is built around the marks the Image Watermark Embedder writes, plus the declarations an image file can carry; it is not a general-purpose detector for every watermark product. This detector does not detect or verify SynthID or other invisible AI watermark systems. It reads selected provenance declarations stored in image metadata, but it does not establish whether an image was AI-generated. The declarations it can read are a C2PA / Content Credentials manifest and the IPTC or XMP DigitalSourceType field; they may be lost when an image is re-saved, screenshotted or stripped of metadata.
No detection result establishes whether you have permission to use an image. A LOW signal level means only that these checks found nothing; it does not mean the image is free to use, because copyright generally exists without any watermark.
How Each Check Works
Visible overlay: the image is divided into five regions (the four corners and the centre, up to 100 px square). For each, the tool counts adjacent pixels that differ strongly and pixels that are not fully opaque, and compares that with the same measure over the whole image. A region clearly above the image's own level is reported, with its position. Comparing with the whole image is what stops a uniformly textured photograph from being flagged. It is informational only: it is shown in the table but adds nothing to the score and never changes the signal level, because it cannot reliably tell an overlay from a busy area. We measured it on 37 clean real photographs (7 full-size camera photographs of 3 to 16 megapixels, 14 crops of them at 800 × 600, and 16 crops of one wallpaper photograph): it flagged 8 of them. With the Embedder's default text overlay (white, bold, 28 px, 40% opacity, bottom-right) added to the same 37 images it detected 28 and named the right position in 23; the result was identical after a JPEG re-save at quality 95 and at 75. Across a sweep of 864 overlays (six positions, three opacities, three sizes, white and black text, on eight photographs) it detected 609, but that count includes the photographs it flags without any overlay, and for the tiled overlay it never named the right position (0 of 144). We also tried a redesigned check based on the fact that an alpha-blended single colour lifts every stroke pixel by the same share of its distance to that colour: it separated an overlay clearly on smooth backgrounds, but on busy photographs the figures of the overlay and of clean regions overlapped, so it was not adopted. Treat the row as a pointer to look at the image, not as evidence of a watermark.
LSB statistic: for each of R, G and B, a chi-square test (Westfeld and Pfitzmann) asks whether the counts of the two values in each pair 2k and 2k+1 are unusually equal, which happens when the lowest bits were overwritten with random-looking data. Smooth gradients and flat graphics also have equal pairs, so a channel counts only when its lowest-bit plane also looks random at distances 1 and 2 in both directions. The statistic only rises when almost the whole lowest-bit plane was overwritten: in our tests a full random overwrite was flagged in 16 of 16 photographs, 25–75% overwrites in none, and clean photographs in none.
Invisible frequency pattern: the brightness channel is transformed (Haar wavelet, then an 8 × 8 DCT of the LL subband) and, for each of the four embedding strengths, the share of blocks whose largest coefficient sits near a quantization target is scored. A score of 0.75 or more counts as detected. Separately the Detector tries to read the text: for every strength and every text length from 4 to 128 bytes it takes the majority vote of the repeated bits and accepts a reading only when the copies agree, the text is readable, at least 12 copies of each bit exist and the reading is consistent at twice the length. A text read this way is strong evidence in itself, so it also counts as a detection. The strength shown is approximate: neighbouring strengths can be confused.
Metadata: EXIF Copyright and Artist (IFD0), IPTC Copyright Notice and By-line, XMP rights, creator and credit, and the PNG text fields Copyright and Author are read from JPEG, PNG and WebP files (the parser handles these layouts; it was tested on files built to them, not on files from every camera or program). A copyright or rights field raises the level to HIGH; authorship alone (an Artist or Author name) raises it to MEDIUM.
How the Signal Level Is Decided
HIGH: the frequency pattern (score at least 0.75, or a text read blind), or a copyright or rights field in the metadata. MEDIUM: an LSB statistic, or authorship-only metadata (an Artist or Author name). LOW: nothing found. The LSB statistic is weak evidence that also appears in some clean images, so on its own it only reaches MEDIUM. The visible-overlay heuristic is shown for information but is not counted: it adds nothing to the score and never changes the level. The level is a summary of evidence, not a probability and not a legal finding; the level itself is never a percentage. Each row that fired shows its own strength on a 0–100% scale, which is not a probability.
When a Result Looks Wrong
A watermark you embedded is not found: check whether the image was resized, cropped, rotated, screenshotted or printed afterwards (in our tests a copy kept at a smaller size and small crops lost the mark every time; other edits were not tested systematically; see the table above). Check also that the text is not too long for the image: the Detector attempts a blind reading only with at least 12 copies of each bit (a rule built into it; longest readable text: 19 bytes in 800 × 600, 4 in 400 × 300). A pattern can still be flagged without readable text.
A clean image shows a flagged row: the visible-overlay row (informational, it does not change the level) can fire on a locally busy region, and the LSB statistic on an image whose lowest bits were genuinely rewritten (an editor, a converter, added grain). Look at which row fired before drawing a conclusion; a frequency pattern or a rights field is much stronger evidence than either.
How Often Each Check Fired (our tests)
16 clean crops of 800 × 600 from one photograph, then the same crops carrying this site's watermarks. The two overlay rows use the Embedder's default text overlay (white, bold, 28 px, 40% opacity, bottom-right), drawn in a browser with the Embedder's own drawing code; the visible row is informational and not counted in the level. One photograph: an example, not a rate for all images.
| Input | Visible heuristic | LSB statistic | Frequency pattern or blind text |
|---|---|---|---|
| Clean photographs | 0 of 16 | 0 of 16 | 0 of 16 |
| Invisible mark, Balanced, untouched | — | — | 16 of 16 (text read exactly) |
| Invisible mark, Balanced / Archival / Maximum, JPEG q60 | — | — | 16 of 16 each |
| Invisible mark, Light, JPEG q75 / q60 | — | — | 16 / 11 of 16 |
| Invisible mark, any strength, resized to 90% (kept smaller) | — | — | 0 of 16 |
| Clean photographs, mixed (37 files: 7 full-size camera photographs, 14 crops of them, 16 wallpaper crops) | 8 of 37 flagged | — | — |
| Embedder's text overlay (default settings) added to those 37 files | 28 of 37 detected, 23 at the right position (same after JPEG q95 and q75) | — | — |
| Every lowest bit overwritten with random bits | — | 16 of 16 | — |
| 25%, 50% or 75% of the lowest bits overwritten | — | 0 of 16 | — |
Examples
Input: A photograph watermarked with the Embedder (Balanced, text '© Test Studio 2026') and saved as JPEG quality 75
Result: Signal level HIGH. The frequency row shows the recovered text '© Test Studio 2026' and a strength of Balanced.
Meaning: The watermark remained recoverable after JPEG compression at quality 75 in this test, so the repeated bits could be voted back to the exact text.
Input: The same watermarked image resized to 90% and saved at that smaller size
Result: Signal level LOW; the frequency row shows nothing.
Meaning: The smaller image did not preserve a recoverable pattern in our test; the changed block grid is a likely explanation.
Input: A JPEG with an EXIF Copyright field '© Ada 2026' and no watermark in the pixels
Result: Signal level HIGH; the metadata row lists 'EXIF Copyright: © Ada 2026'.
Meaning: The file contains a rights declaration; it is not independently verified, and it may be lost if the image is re-saved without metadata.
Input: A test PNG containing a C2PA-style manifest in a caBX chunk
Result: The AI provenance row reports a C2PA / Content Credentials manifest; the signal level is unchanged.
Meaning: The manifest is reported as present; its signature is not validated, and the provenance row is separate from the copyright level.
How the Watermark Detector Works
1. Decode the image
The browser decodes the file to raw pixels in a Web Worker; the tool's own code does not upload the image.
2. Read the file's metadata
The tool also reads selected EXIF, IPTC, XMP and AI-provenance metadata where supported (JPEG, PNG and WebP; a BMP is checked in the pixels only). Metadata availability depends on the file format and its contents.
3. Run the pixel checks
Visible overlay heuristic, LSB statistic, frequency pattern and blind text reading; categories you switched off are reported as not run.
4. Combine
The signal level is derived from the checks that fired; the rows show each check's own strength, not a probability.
5. Report
Findings, the recovered text, a heatmap for a visible region, and a JSON report with a SHA-256 hash of the decoded RGBA pixel data (not the original file's bytes: different files can decode to the same pixels, and a browser's decoding can differ).
What the results mean
| Result | What it means | What to do |
|---|---|---|
| HIGH — frequency pattern or recovered text | A watermark of the kind this site's Embedder writes is present | Treat it as strong evidence; check the image's licence before use |
| HIGH — copyright or rights field | The file declares a rights statement | Check the licence; the declaration may be lost when metadata is stripped |
| LOW with the visible-overlay row marked Found | A region of the image has unusually many strong edges or transparent pixels; this row is informational and not counted in the level | Look at the heatmap; it may be a logo or simply a busy area |
| MEDIUM — authorship only | An Artist, Author or By-line name is present without a rights field | A credit, not necessarily a rights claim |
| LOW | None of these checks found a signal | Not a licence: copyright exists without a watermark |
| AI provenance metadata present | The file declares a C2PA manifest or an AI DigitalSourceType | Reported separately; not validated and not a pixel analysis |
Limitations
- The frequency check and the text reader are built for this site's Embedder; other watermark products are not read. In our tests, 24 images marked with two open-source libraries (16 with invisible-watermark in its dwtDct and dwtDctSvd modes, 8 with blind_watermark, all 800 × 600 photo crops) were reported as not found in all 24 (the 8 unmarked originals were also not found); AI watermark systems such as SynthID were not tested and are not detected.
- In our tests the invisible mark was not recovered when the image was kept at a smaller final size (90%: 0 of 16). Cropping also prevented recovery in our tested cases (0 of 8). Resizing down and back to the original dimensions can have different results depending on the resampling method. Other programs and websites were not tested systematically.
- The text can be read without being told its length only with at least 12 copies of every bit and at most 128 bytes; small images limit long texts. That is the longest text the Detector can read blindly: a longer watermark may still be embedded, and it can be read when its length is known.
- The visible-overlay check is an informational heuristic over five regions and does not change the signal level. In our test with 37 real photographs it flagged 8 clean ones and found this tool's own default overlay in 28 (at the right position in 23), and it did not name the position of any tiled overlay.
- The LSB statistic is designed to flag images whose lowest-bit plane resembles a random overwrite. The additional randomness checks reduce false positives but do not eliminate them: some natural image patterns or editing operations can still trigger it, and it detects neither every steganographic message nor every partial LSB overwrite. It only sees a lowest-bit plane that is almost completely overwritten, and it can also fire on clean images with very smooth value histograms (for example rendered gradients with fine shading, or an image to which film grain was added and then saved losslessly); that is why it never raises the level above MEDIUM. On images smaller than 160,000 pixels the statistic is not used at all (the row says "Too small to judge"): in tests on crops of real photographs it fired on 16 of 36 clean crops of 7,000 pixels and still on 3 of 36 at 120,000 pixels, but on none of 30 at 172,800 pixels, while a full random overwrite was flagged at every size. The 160,000-pixel limit comes from about 30 crops of five or six photographs per size, so treat it as an approximation. Ten tiny camera JPEGs (about 100 × 70 pixels) from an open sample collection also triggered it before this limit was added.
- AI provenance is what the file declares. AI provenance metadata may be lost when an image is re-saved, screenshotted or stripped of metadata, and this tool does not validate a C2PA signature. The JPEG check was run on three sample files from the C2PA project's own test set (all three manifests found, none validated); one PNG and one WebP signed with the open-source c2pa-python library (version 0.4.0, using the library's published test certificate, so the signer is not trusted) were also found, while the same two files unsigned were not; both signed files were also read by the library's own reader. That is one file per format made with one tool, not a sample of Content Credentials files from cameras or AI services.
- Results are evidence, not legal advice. The figures on this page come from 16 crops of one photograph.
Privacy
Your image is decoded and analysed in your browser, in a Web Worker, and is not sent to a StegoToolkit server by the tool's own code; the metadata is read from the file's bytes in the page. The only things the tool keeps in your browser are your chosen mode (localStorage) and a flag that you dismissed the mobile tip (sessionStorage). Site analytics, if you accept them, may record coarse facts such as the detection mode, the file type, a size range and timing — never the image, any extracted text or metadata, or the file name. The hosting provider's ordinary request logs still record your visit.
Which Tool Next?
- Image Watermark Embedder — Add the visible and invisible watermarks this Detector reads
- Steganography Detector — Tests whether an image looks modified by steganography
- LSB Extractor — Read hidden LSB data rather than test for a statistic
- EXIF Metadata Viewer — See every metadata field, not only copyright and provenance
Frequently Asked Questions
If the detector shows no watermark, is the image free to use?
No. Copyright generally arises automatically for eligible original works in many jurisdictions (laws vary), with or without a watermark, and most images carry none. A LOW signal level only means these checks found nothing. Always check the image's source and licence before commercial use. This page is not legal advice.
Can this detect AI watermarks such as SynthID?
No. This detector does not detect or verify SynthID or other invisible AI watermark systems. It reads selected provenance declarations stored in image metadata, but it does not establish whether an image was AI-generated. What it can report is a C2PA / Content Credentials manifest or an IPTC/XMP DigitalSourceType term such as trainedAlgorithmicMedia, as AI provenance metadata, separately from the copyright level.
Can this detector verify watermarks I embedded with the Watermark Embedder?
Yes. It checks for the frequency pattern and tries to read the text without being told its length or strength (all four strengths, 4 to 128 bytes), accepting a reading only when the repeated copies agree. In our tests on crops of one photograph it read the text exactly after JPEG down to quality 60 for Balanced, Archival and Maximum. It needs at least 12 copies of each bit, so long texts in small images are reported as a pattern without text.
Why is my image flagged when it looks unprotected?
Open the technical details to see which row fired. The visible-overlay row is informational and never changes the level, and the LSB row is weak evidence that can also appear in clean images, so on its own it only gives MEDIUM; HIGH needs the frequency pattern or a text read from it, or a copyright or rights field in the metadata. In our tests none of 16 clean crops of one photograph fired any pixel check.
What does the LSB row mean?
It is a chi-square statistic on the R, G and B value pairs, counted only when the lowest-bit plane looks random. It fires when almost every lowest bit was overwritten with random-looking data, and a light or partial LSB message is not seen; use the LSB Extractor or the Steganography Detector for that.
Is this image uploaded to a server during analysis?
Decoding and every check run in your browser, in a Web Worker, and the tool's own code does not upload the image. If you accept analytics, limited usage information (option choices, file type, size range, timing) may be recorded, never the image, extracted text or file name, and hosting logs may record your visit. See the Privacy section above.
Can this tool detect AI image watermarks from ChatGPT, Gemini, Midjourney or other generators?
It reads what the file declares, not the pixels: a C2PA / Content Credentials manifest (in a JPEG, PNG or WebP) or an IPTC/XMP DigitalSourceType term. If the file has one, the AI provenance row says so, and a detected manifest only shows that provenance data is present: its signature is not validated here and its claims are not checked, so use an official Content Credentials verifier for that. Whether a given service attaches this information to the images you download was not tested here, and it is lost when the image is re-saved, screenshotted or uploaded to a site that strips metadata. Invisible watermark systems are not read (see the SynthID answer above).
Does the Detector need a password, or can the watermark be encrypted?
No. The Embedder stores the text as plain bits so that anyone with this Detector can read it; there is no password and no encryption on either side. The only secret in the Embedder is the master key of its per-recipient copies, which derives each identifier; the Detector reads the identifier but cannot check which key made it.
Related Tools
Image Watermark Embedder
Add a visible copyright overlay and/or an invisible DWT+DCT frequency watermark to an image. Reports PSNR and checks your own image against JPEG, brightness, contrast and resize. Runs in your browser; the result is a PNG.
Text-in-Image Hider
Hide secret text inside an image with Sequential, Seeded Scatter or Adaptive Edge LSB. Shows PSNR and SSIM after encoding, optional AES-256 password, and always saves a PNG.
Text-in-Image Extractor
Extract hidden text from images. Auto-Detect tries 11 common LSB settings; manual mode, bit plane viewer, chi-square pre-scan, CTF flag detection and an optional AES-256 password.
Image Steganography Hider
Hide secret messages or files inside PNG, BMP, WebP or JPEG images; the result is saved as PNG. Optional AES-256 encryption, processed in your browser.