Capability

When a screen leaks, identify the source — not just the fact that it leaked

ZeroLeak puts a visible per-user mark on every protected page and embeds an invisible trace ID into the pixels themselves. A leaked screenshot — even one that has been cropped, scaled, or photographed off a monitor — carries the identity of the session that produced it.

Most leak-prevention controls stop at the boundary: detect the attempt and block it. The harder problem is what happens when a leak does occur — someone with view-only access photographs the screen, posts a screenshot online, or shares it externally. Without a forensic mark, you know the data leaked but you cannot prove which user produced it. ZeroLeak adds two complementary layers to every protected page: a visible per-user watermark that acts as deterrent, and an invisible trace ID written into the pixels that survives cropping, scaling, and re-photographing. When a leak is discovered, the source is provable.

2 layers
Visible per-user mark plus invisible trace ID embedded in the pixels
3 layers
Independent visible watermark layers, each configurable per service
Per session
Invisible trace ID is unique per session and decodes to session identity

Without attribution, a leak is just a fact — not an investigation lead

Once a screen has been photographed or screenshotted and shared externally, the data is out. The only useful question that remains is: who produced it? Without that answer, the incident becomes an unsolvable mystery — and the absence of consequences becomes its own incentive for the next leak.

The traditional answer — a visible watermark with the user's name on screen — works as a deterrent. But cropping or photographing just the part without the watermark removes it. The user knows this; the deterrent value erodes.

Modern attribution needs two layers. A visible mark that makes the user feel identifiable, plus an invisible mark embedded into the actual pixel data that survives the obvious attacks on the visible one. ZeroLeak adds both: the visible mark deters casual leaks, the invisible mark catches the careful ones.

Two layers, one outcome — every leak is attributable

Both watermark layers are applied at the same point: in the noVNC viewer that the user's browser receives. Neither layer lives in the protected web application's DOM, so no website can interfere with them and no front-end policy can strip them. The visible layer is configured per protected service; the invisible trace ID is generated per session.

Visible per-user watermark, layered on top of the rendered page

Username, session ID, or custom text is overlaid on the rendered page using mix-blend-mode so it stays visible on both light and dark content. The user knows they are personally identifiable on every screen they see — a strong, ever-present deterrent against casual screenshotting.

Invisible trace ID embedded into the pixels

A session-unique pattern is written into the actual pixel data of every frame the user sees. It is engineered to survive cropping, scaling, JPEG re-compression, and re-photographing. When a screenshot turns up later, the embedded ID identifies which session produced it — even if the visible watermark was cropped out first.

Up to three configurable visible layers

The visible watermark supports up to three independent layers, each with its own text, position, rotation, font, opacity, and tile size. Combine a diagonal username, a centred session ID, and a corner timestamp to make the visible mark much harder to crop around without losing useful screen area.

Survives the obvious attacks on the visible layer

Cropping out the visible watermark, scaling the image down for a chat client, photographing the monitor with a phone — the invisible trace ID survives all of these because it is part of the pixel data itself, not an overlay. Decoding the trace ID from a recovered image identifies the session.

What the watermark system gives you

Each item below is independently configurable per protected service. Use the visible layer alone for low-sensitivity content where deterrence is enough; combine both layers for high-sensitivity content where attribution must be possible.

Per-user, per-session visible text

The visible watermark text is composed at session start from the authenticated user identity, the session ID, the timestamp, or any combination chosen at policy time. The watermark on screen reflects the specific person watching, not a generic logo.

Mix-blend-mode rendering for any background

The watermark uses mix-blend-mode that inverts against the background colour. A watermark that would normally be invisible on a black or white page stays readable everywhere — the eye sees a consistent mark regardless of what the page shows underneath.

Three independent visible layers

Up to three visible layers can be configured together. Each layer has its own text, colour, opacity, font, rotation, tile size, and position. Layers can be diagonal repeating, centred, or anchored to a corner — combine them so that cropping the screenshot to remove one layer still leaves the others.

Invisible trace ID written into pixel data

A session-unique trace pattern is embedded into the rendered frames the user sees. The embedding is engineered to be robust under common screen-leak attacks — cropping, downscaling for messaging apps, JPEG re-compression, and re-photographing the monitor with a phone camera all preserve enough of the trace pattern to recover the session ID.

Decoder for recovered leaked images

When a leaked image is found, the operator runs it through the decoder. The decoder reads the embedded trace pattern and returns the session ID that produced it. The operator looks up the session in the audit log to find the user identity, timestamp, and protected service involved.

Lives outside the protected application

Both watermark layers are applied in the noVNC viewer that the user's browser receives, not in the protected application's DOM. The protected application has no awareness of the watermark and cannot interfere with it. Front-end frameworks, trusted-HTML policies, browser extensions on the protected app's side — none of them can strip the mark.

What survives a leak — and what does not

Different leak channels degrade the leaked image in different ways. The invisible trace ID is engineered against realistic attacks; it is honest about what it can and cannot recover from.

01

Cropping out the visible watermark

An attacker crops the screenshot down to just the data region they want, removing all visible watermark text. The invisible trace ID is distributed across the entire frame and survives the crop — recovering a moderate-sized region of the original frame is enough to decode it.

02

Downscaling and re-compression by messaging apps

Most messaging apps downscale and JPEG-recompress shared images. The trace pattern is engineered with redundancy that survives common downscale ratios and JPEG compression artifacts.

03

Photographing the monitor with a phone

An attacker who does not want to leave file-system traces points their phone at the screen and takes a picture. The trace pattern is designed to survive optical capture — phone-camera photographs preserve enough of the spatial frequency information that the decoder can still find the session ID.

04

Heavy cropping to a tiny region

An attacker who only leaks a very small portion of the screen — a single sentence or single number — reduces the amount of trace pattern available. The decoder reports lower confidence on small regions, and at the extreme end the trace becomes unrecoverable. An honest limit — not every leak is attributable.

05

Heavy filtering or generative-AI repainting

An attacker who runs the leaked image through a heavy Gaussian blur, a generative AI image filter, or hand-redraws the visible content can destroy the trace pattern along with much of the original information. At that point the leaked image is no longer a faithful copy of what was on screen — attribution is not the only thing lost.

Where attribution matters

Financial deal rooms and trading floors

Pre-IPO documents, M&A materials, trading positions — high-value information read by many people before public disclosure. When a leak appears in the press, identifying which session it came from is the difference between an unsolved incident and an actionable investigation.

Clinical records and patient data

Healthcare staff legitimately read patient data on screen. When a leaked patient record appears externally, the visible watermark deters casual leaks, and the invisible trace ID identifies the session if a leak does occur — supporting HIPAA accountability for view-only roles.

Government and intelligence analyst consoles

Analyst desks where multiple people see the same classified content. Per-user marks make individual accountability concrete; the invisible trace ID makes investigations possible when a leak surfaces in open-source intelligence.

Contractor and third-party access

External parties granted view-only access into your environment. The visible per-user mark on every screen reminds them they are identifiable; the invisible mark makes it provable if a leak appears in their downstream network.

Common questions

Can a user disable the watermark from their browser?
No. The watermark is rendered in the noVNC viewer that the user's browser receives — it is part of the pixel stream itself, not an overlay in the protected application's DOM. Browser extensions, DevTools, custom CSS injected into the protected application — none of them reach the watermark layer.
Does the visible watermark interfere with reading the page?
It is tuned to be visible enough to identify the user without obscuring the content. Opacity, colour, and tile spacing are configurable per protected service. For high-sensitivity content the visible layer can be heavier; for routine content it can be subtle. Mix-blend-mode keeps the watermark legible on both light and dark backgrounds without needing high opacity.
How does the invisible trace ID survive cropping?
The trace pattern is distributed across the entire frame with significant redundancy, not encoded into a single corner or region. Recovering a moderate-sized region of the original frame still leaves enough pattern for the decoder to identify the session. Heavy cropping down to a very small region reduces decoder confidence — there is an honest limit.
What happens when a leak is found — what is the workflow?
The operator submits the leaked image to the trace decoder. The decoder reads the embedded pattern and returns the session ID. The operator looks up that session in the audit log to recover the user identity, the protected service, the timestamp, and the activity record. From that point the investigation proceeds with full context.
Does this work for video leaks, not just screenshots?
Yes. The trace pattern is present in every frame the user sees, so a screen recording or smartphone video capture of the session also carries the trace. Decoding a single frame from the recording is enough to identify the session; multiple frames provide higher confidence.
How does this relate to anti-OCR and text cipher?
Anti-OCR and text cipher make the leaked content harder to extract usefully (OCR fails, copy-paste returns nonsense). Forensic watermark goes further: it makes the leak itself attributable. Anti-OCR raises the cost of exfiltration; the forensic mark raises the cost of being caught. Most deployments combine all three for layered defence.

Make every leak attributable

See ZeroLeak's forensic watermark in a live demo. We will run a session, take a screenshot, crop it, downscale it, photograph it from a monitor — and decode the trace ID back to the session each time.