A plain-language walkthrough of everything the MarkMyAI WordPress Plugin does: what happens to your image, why WordPress delivers different sizes, what gets stored, and how the Chrome Extension verifies it all.
When you publish an AI-generated image, EU AI Act Article 50 requires that it remain machine-readably marked and verifiable — not just at creation, but through your entire publishing workflow. Enforceable from August 2, 2026.
The problem: embedded metadata is silently destroyed by almost every image pipeline. In our tests, C2PA signatures survived 0 of 10 common transformations — JPEG re-compression, resize, CDN optimization, social upload. All of them.
No single layer covers every scenario. Together, they do. Even if someone downloads a compressed thumbnail from your site years from now, there is still a recoverable proof trail.
In the MarkMyAI Dashboard or Media Library, you click Mark on an image. A modal asks for Creator (your name or organisation) and AI Model (e.g. ChatGPT, Midjourney). All marking is manual — nothing happens on upload without your action.
Before doing anything, the plugin calls our API with a perceptual fingerprint of the image (takes ~3 seconds). If a match is found in our database, the existing proof record is adopted — no new mark is created, no file is replaced. A toast shows: "Already marked — use Re-mark to change metadata."
The plugin downloads the marked image and overwrites the original in your wp-content/uploads/ directory. It also overwrites the -scaled version (created by WordPress for images over 2560px). All existing thumbnails are deleted — so WordPress regenerates every size from the newly marked original. From this point, every image size on your site derives from the marked file.
The plugin saves the mark ID, verify URL, creator, and AI model as post meta on the attachment. The Dashboard shows ✓ Verified with Verify, Proof PDF, History, and Re-mark buttons.
When you insert an image in WordPress, WordPress doesn't deliver a single file. It generates multiple resized versions and lets the browser choose the most appropriate one based on screen width and resolution — this is called srcset.
<img src="image-800x600.jpg"
srcset="image-300x225.jpg 300w,
image-800x600.jpg 800w,
image-1024x768.jpg 1024w"
sizes="(max-width: 800px) 100vw, 800px">A visitor on a phone might receive image-300x225.jpg. A desktop visitor gets image-1024x768.jpg. These are different files, re-encoded from the original.
This re-encoding strips all embedded metadata:
MarkMyAI → Settings → Frontend & Verification (Chrome Extension / Checker)
image-300x225.jpg (no C2PA)image-1024x768.jpg (no C2PA)srcset and sizes are removed for marked imagesdata-markmyai-mark-id is injected on the <img> tag<!-- Normal WordPress: -->
<img src="image-300x225.jpg" srcset="..." sizes="...">
<!-- With Preserve Proof ON: -->
<img src="image-original.jpg"
data-markmyai-mark-id="mk_rRVQQYDqV-"
data-markmyai-verify-url="https://...">
wp-image-{ID} CSS class — which Beaver Builder, Elementor, Divi, and WPBakery all set automatically. Even when a builder bypasses standard WordPress image hooks, marked images are still rewritten to the full-size original.The Extension adds a shield badge to images on any page. Click the badge to verify.
The Extension picks the largest available image URL from srcset (avoiding tiny thumbnails), sends it to /api/v1/check-batch. A perceptual fingerprint is compared against our database. If a match is found: mark ID, creator, AI model, marked date, blockchain status are shown immediately.
Click "Run full watermark check." The image is sent to /api/check-watermark. The server:
| Fingerprint | MATCHED | Visual fingerprint matched a mark in our database |
| Blockchain | ANCHORED | Proof transaction confirmed on Polygon |
| Watermark | FOUND / NOT FOUND | TrustMark token decoded from pixel data (requires Deep Check) |
| C2PA | FOUND | Publisher certificate found — only if original file is delivered |
| C2PA | IN ORIGINAL | C2PA stripped in this rendition, but original was C2PA-signed |
| C2PA | NOT FOUND | C2PA not present and no record of original being signed |
h:creator_hash — GDPR-pseudonymizedh:model_hash — GDPR-pseudonymized| Situation | What to do |
|---|---|
| Chrome Extension shows C2PA: NOT FOUND | Enable "Preserve proof in frontend images" in Settings, clear builder/CDN cache, reload page |
| Chrome Extension shows C2PA: IN ORIGINAL | Normal for thumbnails. Enable Preserve Proof to get FOUND instead. |
| Chrome Extension shows wrong MarkID | Old cached thumbnail. Clear CDN and browser cache after re-marking. |
| Dashboard says Verified, Extension shows No Signal | Check if the image URL is publicly accessible. Localhost installs won't work without a tunnel. |
| Mark failed / spinner forever | API timeout. Retry from Dashboard. Check Settings → Test Connection. |
| Re-mark needed (new creator or model) | Click Re-mark — new mark ID, new watermark, new C2PA. Clear CDN cache afterward. |
| Already marked toast shown | Image was detected as already having a mark. Use Re-mark only if you need a new proof record. |
| C2PA IN ORIGINAL on Large image | The image on page may still be a cached pre-Preserve-Proof version. Clear cache and reload. |
Reach out directly — we respond to every message.
We use Google Analytics 4 only if you agree, to understand which pages bring traffic and where visitors drop off. No advertising features are enabled. You can change your choice at any time in the privacy settings.