ChronoVerify

Benchmark and calibration

This is a calibration and safety report, not a real-world accuracy score. It documents exactly what we have measured, how, and what we have deliberately not claimed. ChronoVerify returns investigative triage, so the failure that matters most here is wrongly flagging an authentic photo. On every real photo we have measured so far, that has not happened.

The short version

  • No false positives on real photos: no authentic smartphone capture in the corpus was flagged, and the strongest authentic signal sat far below the flag line.
  • No known edited derivative of those photos was cleared as authentic. Most read inconclusive by design: the pipeline would rather say it cannot tell than guess.
  • A manipulation verdict requires two corroborating pixel signals. No single signal, error level analysis included, is ever decisive on its own.
  • The pipeline never returns a manipulation verdict on an image with validated C2PA Content Credentials, and it is biased toward inconclusive when evidence is thin.

What the pipeline optimizes for

For a verification tool, the worst outcome is calling a genuine photo fake. A false accusation is the failure that destroys trust, so the system is tuned to avoid it rather than to maximize raw detection.

Concretely, a manipulation_indicated verdict needs a localized error-level-analysis spike and a corroborating noise-dispersion signal, each above a calibrated level, and the flag is suppressed entirely when valid C2PA Content Credentials are present. When metadata and forensic signals are absent or ambiguous, the pipeline returns inconclusive rather than guess.

No false positives on real photos

In June 2026 we ran a corpus of real smartphone captures with known history, unedited and straight off the device, through the exact production pipeline at the production forensic resolution.

None
real photos wrongly flagged as manipulated
Wide margin
strongest authentic signal sat far below the flag line
None
known edits cleared as consistent

Every capture in the corpus returned consistent, and the strongest authentic error-level-analysis signal sat far below the flag line.

We then generated edited derivatives of those same photos with a reproducible script: splices from a different photo, copy-move edits, and double compression. Not one came back consistent. Flagging is deliberately conservative, so most edits read inconclusive for a human to review, but nothing manipulated was cleared as authentic. That is the contract the pipeline is tuned to keep: it says it cannot tell before it will clear a fake or accuse a real photo.

We also stress-tested the gates on a device-diverse public corpus covering 20 camera models and deliberately hard cases: night shots, macro fine texture, HDR merges, panoramas, and editor re-saves. Extreme fine-texture macros can push the error-level signal all the way to the flag line, and in that stress set one macro that had been re-saved by a desktop photo editor crossed both gates. Hard cases like these are exactly why a flag requires two corroborating signals, why re-saving is treated as caution rather than evidence, and why we will not loosen the thresholds to chase a higher detection count.

The synthetic regression set

Alongside the real-photo corpus, we run a labeled set of 80 synthetic images (4032 by 3024, a typical phone resolution) through the same pipeline before any change to the forensic path. The classes are authentic camera captures, authentic recompressed images, stripped or screenshot-like images, and edits.

None
synthetic authentic images flagged as manipulated
Far from the line
every synthetic authentic signal vs the flag level
inconclusive
verdict on stripped / screenshot-like images, as intended

Every authentic image, camera-original and recompressed alike, returned consistent. None were flagged, and the authentic error-level-analysis values sat far from the flag level.

These levels were not tuned on synthetic data. They were hand-calibrated against real photos, and the real-photo corpus above is what validates them. An earlier synthetic-only calibration over-fired on a small share of real photos; testing on real images and recalibrating removed those false flags entirely. Synthetic error-level analysis is not representative of real photos (synthetic authentic values run lower and tighter than real ones). This set is a regression check that the verdict logic does not over-fire; the real-photo section above is the measurement that matters.

Signal separation on a known edit

The other question is whether the pipeline can tell a real edit apart from an authentic file. On a controlled double-compression splice, where a region was recompressed at a different JPEG quality and composited back in, the localized error-level-analysis signal is unmistakable:

ImageELA localizationVerdict
Authentic capture1.3consistent
Double-compression splice1000manipulation_indicated

The separation is large: the spliced region produces a localized signal roughly 750 times the authentic baseline. We are not publishing a detection rate across diverse real edits.

Why the forensic resolution stays at 4000 pixels

A natural way to cut compute is to downscale the forensic working copy. We tested that directly, sweeping the same known splice across working resolutions, and it is not safe: downscale far enough and the spliced patch smooths out, the localized signal collapses, and a real edit starts reading as a clean result.

Authentic photos only move further from the flag as resolution drops, so a lower resolution adds no false positives, but it trades away detection. We keep the forensic copy at 4000 pixels. More to the point: nothing that touches the forensic input ships without a sweep like this one. We measure first.

What we have not measured, and will not fake

Reproduce it, or help us improve it

The harness is a single script that builds the labeled corpus, runs every image through the exact production verify pipeline, and reports the false-positive rate, the inconclusive rate, and a per-image verdict diff across resolutions. The same script is run as a regression check before any change to the forensic path.

The most useful thing you can do is send us real photos whose history you know: authentic captures, known edits, and screenshots. Upload one at the verifier and tell us what you expected, or email support@chronoverify.com. We will report where the verdict is right and where it is wrong, and fold real misses back into the calibration.

See how the verdict is produced, signal by signal.

Read the method and limits