Holograin · AI Retouch Detection

Catch DocumentsRedrawn by AI.

Holograin flags payslips, bank statements and bills that an AI image generator has redrawn from a scan or a phone photo.

Schedule Demo
Caught after upload
90%
Genuine pages flagged
1%

Thirty Seconds
and One Prompt.

An applicant's payslip says 2,639.59 euros a month. They photograph it, open an image app and type: change the net pay to 3,639.59. Thirty seconds later they upload the same payslip with a better number.

No PDF editor's fingerprint, no box pasted over a figure, no digit in the wrong font. The generator did not patch the page. It drew a new one.

What it cannot do is draw like a scanner or a phone camera. It leaves its own texture, invisible to the eye, and Holograin is trained to find it.

One Payslip,
Two Versions.

Every name and number on this payslip is fictitious. We asked Nano Banana, Google's image model, to change the net pay.

Original

The original synthetic payslip, net pay 2,639.59 euros
Looks genuine4/100
0threshold100

After the AI edit

The same payslip after an AI image generator changed the net pay to 3,639.59 euros
AI re-rendered95/100
0threshold100

Scores run from 0 to 100. Above 50 a page is flagged, which happens to 1 genuine document in 100.

What the AI Actually Did

We asked for one number. The AI redrew the whole page. Same spot on both versions, magnified, original on top.

Net pay on the original: 2,639.59 eurosNet pay after the AI edit: 3,639.59 euros

The change we asked for: same font, same size, same place.

Contribution rows on the original payslipThe same rows after the AI edit, with an invented line

A change nobody asked for: an invented payroll line that pushed every row below it down.

The word Complémentaire on the original, magnified six timesThe same word after the AI edit, magnified six times

The rest of the page, redrawn. Magnified six times, an untouched word looks the same to the eye. Holograin measures the difference in the pixels.

The arithmetic broke too: 2,862.38 minus 222.79 is still 2,639.59, and Holofin checks that. A careful fraudster fixes the sum. What the generator leaves in the pixels stays.

More Documents,
Two Generators.

Three more fictitious documents, one prompt each. Every score is shown as measured.

Bank statement

Nano Banana 2.1

Our prompt: Change the closing balance from 2,589.93 to 8,589.93 euros.

A synthetic bank statement from Banque Exemple, closing balance 2,589.93 euros
Looks genuine2/100
0threshold100
The same bank statement after an AI edit, closing balance 8,589.93 euros
AI re-rendered94/100
0threshold100
Salary credit on the original: 2,639.59The same salary credit after the AI edit, now reading 2,630.59

A number nobody asked to change: the salary credit now reads 2,630.59 instead of 2,639.59. The AI also added an empty row.

Income tax notice

Nano Banana 2.1

Our prompt: Change the reference tax income from 31,846 to 48,846 euros.

A synthetic income tax notice, reference tax income 31,846 euros
Looks genuine2/100
0threshold100
The same tax notice after an AI edit, reference tax income 48,846 euros
AI re-rendered97/100
0threshold100
Reference tax income on the original: 31,846 eurosReference tax income after the AI edit: 48,846 euros

A clean edit. The only visible tell: the calculation below still adds up to 31,846.

Electricity bill

Nano Banana 2.1

Our prompt: Change the invoice date from 14/10/2026 to 30/10/2026.

A synthetic electricity bill dated 14/10/2026
Looks genuine1/100
0threshold100
The same electricity bill after an AI edit, dated 30/10/2026
AI re-rendered96/100
0threshold100
Two rows of the bill on the originalThe same rows after the AI edit, with an empty row inserted

An empty row appeared in the middle of the charges.

Electricity bill

GPT-5.4 image

Our prompt: Change the invoice date from 14/10/2026 to 30/10/2026.

A synthetic electricity bill dated 14/10/2026
Looks genuine1/100
0threshold100
The same electricity bill after an AI edit by another generator, dated 30/10/2026
AI re-rendered92/100
0threshold100

A generator Holograin never saw in training. Nothing a reader would notice: only the date changed. Holograin still flags it.

The Numbers,
at 1% False Positives.

At a setting that wrongly flags 1 genuine document in 100, Holograin catches 9 in 10 AI re-rendered documents after upload.

Generic AI-image detectors learn from photographs and miss documents. Holograin learned from 1,448 AI edits of real French financial documents, and its threshold is set on 1,061 genuine pages: a detector that keeps flagging honest applicants is one your team learns to ignore.

The numbers by channel

These come from our larger test set: each channel has its own threshold, set on about 825 genuine pages from that channel, and the AI pages come from documents never seen in training.

How the image reached usAI re-renders caught
The image as the generator returned it96%
After upload to Holofin90%
After WhatsApp recompression85%
After a phone screenshot97%
A generator kept out of training (GPT-5.4 image), after upload 95%

Why Not Ask
a General AI Model?

A general AI model either accuses your genuine customers or misses the fakes.

AI-made documents caught, when at most 1 genuine document in 100 may be flagged
  • HolograinHolofin

    89%
  • Gemini 4 ArgonGoogle

    69%
  • GPT-6.1 Sol ProOpenAI

    40%
  • Off-the-shelf open-source detectorCommunity Forensics

    22%

Left to their own judgement, Gemini 4 flagged 45 genuine documents in 100; GPT-6.1 missed 60 fakes in 100.

Method, 31 October 2026: every detector saw the same 200 pages after upload to Holofin, 100 re-rendered by five AI generators (Nano Banana 2.1, Gemini 2.5 and 3.1 image, GPT-5 image mini, GPT-5.4 image) and 100 genuine customer documents, none used in training. The general models read each page with a fraud analyst's prompt and gave a probability. F1, which combines catching fakes and not accusing genuine customers (1.0 is perfect): Holograin 0.91 at its production setting, Gemini 4 Argon 0.77 and GPT-6.1 Sol Pro 0.57 on their own verdict. A general model also sends every document to its provider; Holograin runs on Holofin's servers. The 90% and 1% higher on this page come from our larger test set, about 825 genuine pages per channel.

One Signal Among Many.

Holograin is one check in Holofin's fraud engine, never a verdict on its own.

Before conversion

What the file says

  • A provenance label declaring the image AI-generated (C2PA, IPTC)
  • An embedded thumbnail that no longer matches the image
  • Cropping, and the editing software recorded in the file

Holograin

What the pixels say

Metadata can be stripped. The texture a generator leaves in the pixels cannot.

Around it

What the content says

  • Fonts and layout that match the rest of the page
  • Totals and balances that add up
  • The issuer's genuine template
  • Metadata consistent with the story

What It
Does Not Catch.

A careful fraudster crops the one figure to change, edits that small square and pastes it back into the original scan. The rest of the page is genuine, and the square is too small to stand out from ordinary scan noise.

We measured it. On edits pasted back this way, Holograin catches close to nothing at the 1% threshold.

Holofin's other checks catch them: a digit in the wrong font, a column out of line, a total that no longer adds up. That is why Holograin is one signal, never the whole verdict.

Questions

Holograin, in short

Google's Gemini image models, Nano Banana among them, and OpenAI's image models. On GPT-5.4 image, kept out of training entirely, it still catches 95% of re-rendered pages after upload.

About 1 in 100, for each way a document can reach us. A flag goes to a reviewer; it never rejects a file on its own.

Mostly not. Holograin still catches 85% of AI re-rendered pages after WhatsApp recompression, and 97% after a phone screenshot.

No. Holograin was neither trained nor measured on identity documents. They go through Holofin's dedicated identity checks.

Holograin

See Holograin on your own documents.

Sandbox environment
Free API credits
Holofin