EntroπaLabs
Generative AIForensics · Provenance

Detecting generated media without a black box

Six stylometric tells, a forensic chain of custody for pixels, and a gauge that refuses to say 100% — how the AI detector works, and the paragraph on what it cannot prove.

Every AI detector on the market returns a percentage. Almost none will tell you where the number came from, and all of them want your file on their server first. Verity is built on the opposite premises: the analysis runs entirely in your browser, and the verdict is a weighted combination of named signals you can inspect and disagree with. This post is the whole method — the six stylometric signals for text, the forensic chain for images, what a video adds, how the gauge is calibrated, and the paragraph every detector should print in bold: what none of this can prove.

The shape of the problem

Detection is an adversarial statistics problem with a moving target. A language model is trained to produce the most plausible next token, and plausibility leaves fingerprints: regularity where a human would be erratic, safe word choices where a human would be idiosyncratic, tidiness where a human would leave mess. Every text signal below is a measurement of one of those regularities. None of them is decisive alone — a careful technical writer trips several — which is why the output is a likelihood built from many weak signals rather than a verdict built from one strong one.

Six signals for text

Sentence rhythm. Take the word count of every sentence and compute the coefficient of variation — standard deviation over mean. Human prose lurches: a forty-word sentence, then a four-word one. Model prose keeps a metronome beat, and the coefficient drops. This is the classic burstiness measurement from the stylometry literature, and it stays useful because it is hard to fake without actually varying your sentences.

Stock phrasing. A list of words and constructions that corpus studies keep finding wildly over-represented in LLM output — delve, tapestry, multifaceted, "it's important to note", "in today's fast-paced", the not-only-but-also frame. Each hit is counted per 250 words. One delve means nothing; a delve, two crucials and a "navigate the complexities" in three paragraphs is a pattern.

Phrase recycling. Count exact three-word sequences that appear more than once. Models reuse scaffolding — the same connective tissue restated between points. Humans repeat themselves too, but less mechanically, and the trigram duplication rate separates the two populations at meaningful rates.

Vocabulary spread. Distinct words over the square root of total words — root type-token ratio, which unlike the raw ratio does not collapse as texts get longer. Model output clusters around safe mid-frequency vocabulary; an unusually narrow spread for the length is a signal, an unusually wide one is a counter-signal.

Absence of human mess. The inverse signal, and quietly the strongest: typos, double spaces, "gonna", lowercase i, expressive punctuation. Models produce none of these unprompted. Their presence is stronger evidence of a human than their absence is of a machine — which is exactly how the weighting treats it.

Template structure. Heavy bulleting, bold lead-ins, and a formal wrap-up ("In conclusion,") — the intro-bullets-conclusion mold that is the LLM house style. Weak alone, because plenty of humans write listicles; it earns a small weight.

Each sentence is also scored individually, and the most machine-flavoured passages are highlighted in the original text — so the tool's claim is checkable line by line, which is the entire point of building it this way.

Images: a chain of custody, then physics

Image forensics is easier than text in one way: files carry paperwork. The checks run in order of conclusiveness.

Generator metadata. Stable Diffusion and ComfyUI write their entire generation recipe — prompt, sampler, seed — into PNG text chunks; other services tag exports with an IPTC trainedAlgorithmicMedia marker. Finding one is close to a confession, and it is scanned for first, as raw bytes, before any pixels are decoded.

Content Credentials. C2PA manifests (JUMBF boxes in the file) are provenance records signed by the tool that made the image. DALL·E and Firefly attach them today. A manifest is not itself proof of generation — cameras are starting to sign real captures too — so it scores moderate and the page points you at a manifest inspector rather than overclaiming.

Camera provenance, inverted. EXIF naming a real camera vendor is evidence against generation and is weighted accordingly. Its absence proves little — screenshots and web re-saves strip EXIF too — and gets only a mild weight, an asymmetry that matters for not smearing every image that ever went through a chat app.

Geometry. Diffusion models generate on a 64-pixel grid at a handful of stock sizes. A 1024×1024 with no camera data is suggestive; a 4032×3024 — a phone sensor's native resolution — is suggestive the other way.

Noise, the physical signal. A real sensor adds noise to every pixel, including the boring ones: a clear sky from a camera jitters at the pixel level. Generators produce eerily clean flat regions next to sharp detail. The page decodes the image to a canvas, computes Laplacian energy over 16-pixel blocks, and compares the quietest tenth of blocks to the median block. When the flats hold almost none of the image's texture energy, that is the diffusion signature — with the honest caveat, printed in the result, that aggressive JPEG compression scrubs noise from flats too.

Video: the same physics, sampled

A video is a container wrapped around frames, so both layers get checked: the first megabytes are scanned for service markers (Sora, Runway, Pika, Kling, Luma) and C2PA boxes, then the file plays muted in a hidden element while five frames spread across its duration go through the same block-noise analysis as a still. Camera footage is noisy in every frame; generated video shows the same clean-flats signature, averaged across samples so a single dark frame cannot swing the verdict.

Calibrating the gauge

The signals combine as a weighted mean, and then the result is deliberately pulled toward the centre in proportion to how much strong evidence actually arrived — one weak signal on a short input barely moves the needle off 50%. The scale is clamped so it can never display 0% or 100%, and inputs under about sixty words are refused rather than scored, because a confident number on a tweet-sized sample would be noise wearing a suit.

What this cannot do

A paraphrasing pass defeats most of the text signals. A human editing model output, or a model polishing human writing, lands honestly in the middle — because it is the middle. Metadata can be stripped, noise can be re-added, and every published discriminator becomes a training objective for the next generator. This is why the page's caveat is not boilerplate: a detector score is a reason to look closer, never grounds to fail a student or fire a writer. The tools that present themselves as certainty machines are selling exactly the thing the mathematics cannot deliver — and showing the evidence instead is both the more useful product and the only honest one.

Open the detector