Microsoft Paint and Photos Embed Server-Issued GUIDs as Invisible Watermarks in Locally-Generated Images
-
Core Discovery:
- Reverse engineering of Microsoft Paint and Microsoft Photos reveals that AI images generated locally on Copilot+ PCs contain an invisible, server-issued GUID watermark embedded directly into the pixels.
- While users can toggle visible Copilot watermarks in settings, the invisible pixel watermark cannot be disabled.
-
Architecture and Workflow:
- Local Model Execution: Paint ships with local ONNX models (
.onnxedecrypted via XOR keys insegapi.dll) to run Stable Diffusion on the local NPU. - Mandatory Remote Moderation: Even for local generation, Paint sends the user's prompt and style over HTTPS to an Azure endpoint (
/v1/paint-cocreator/moderate-prompt). - GUID Generation: The moderation server responds with a
promptGenerationIdand a uniquewatermarkId(GUID). Subsequent generation requests pass the prior ID (lastPromptGenerationId), linking sequential prompts. - Watermark Injection: The
Watermarker.dlllibrary embeds the 16-byte GUID into the pixel data viaWmkWriteWatermarkusing a content-adaptive block-domain, SVD-style algorithm across 8x8 pixel blocks (modifying thousands of pixels). - Enforcement Differences: In Paint, if
WmkWriteWatermarkfails, the generation process aborts with an error rather than outputting an unwatermarked image. In Photos, it logs an error and still returns the image.
- Local Model Execution: Paint ships with local ONNX models (
-
C2PA Metadata & Soft Binding:
- Paint submits the image to Azure (
/v1/paint-cocreator/image-sign) to obtain a signed C2PA manifest embedded in acaBXPNG chunk. - The C2PA manifest contains a
c2pa.soft-bindingassertion (com.microsoft.invismark.1) holding the exact same watermark GUID embedded in the raw pixels, tying file-level metadata and pixel-level data together.
- Paint submits the image to Azure (
-
Export Format Restrictions:
- Direct saves and canvas exports restrict formats to C2PA-compatible types (PNG, JPEG, GIF,
.paint). - Legacy formats like BMP are intentionally excluded because BMP cannot store embedded C2PA manifests without external files.
- Direct saves and canvas exports restrict formats to C2PA-compatible types (PNG, JPEG, GIF,
Hacker News Discussion
-
Privacy & De-Anonymization Concerns:
- Commenters heavily criticized the silent injection of unique GUIDs, noting it eliminates anonymity. If an image is published online, the GUID can be traced via Microsoft servers back to the user account, timestamp, prompt, and device.
- Parallels were drawn to modern government surveillance and legal risks (e.g., subpoenas identifying meme creators or political dissidents).
-
Comparisons to Historical Tracking (Printer Yellow Dots):
- Many users compared this mechanism to machine identification codes (yellow tracking dots) used by color laser printers for decades, famously used to identify leakers like Reality Winner.
- Others noted that embedded UUIDs have quietly existed in document formats (DOCX, PDF) and OS telemetry for a long time.
-
Bypass and Neutralization Ideas:
- Replacing or shimming
Watermarker.dllwith a no-op implementation or intercepting network requests to supply zeroed-out GUIDs. - Applying image transformations such as lossy recompression, slight pixel noise, smart directional blur, or re-running through local denoisers to break the watermark pattern.
- Switching entirely to standalone open-source tools (e.g., ComfyUI, Automatic1111) and Linux to avoid proprietary OS-level telemetry.
- Replacing or shimming

