Synthetic-media screening
Attestation is the product; screening is the fallback. Provenance proves authenticity cryptographically for media captured through its SDK. For legacy submissions that never touched the SDK, screening is a probabilistic trailing indicator — a real, external AI-detection signal, kept strictly separate from the cryptographic risk score.
What it is
A live call to a real third-party detector (Sightengine) covering AI-generated images (genai), AI-generated video, and deepfakes. The result is a synthetic_media_score (0–100, higher = more likely AI-generated) plus factors:
{
"factor": "ai_generated_likely",
"score_contribution": 87,
"description": "Detector confidence 0.87 (Sightengine genai)",
"detector": "sightengine",
"detector_model": "genai"
}
synthetic_media_score = round(100 × max(genai_confidence, deepfake_confidence)).
When to use it
Only for un-attested / legacy media — anything that yields no_manifest. If an asset has a valid signature and matching hash, you already have cryptographic proof; a detector score adds nothing. Copy in your product should never imply detection is the core value proposition.
Screening an asset you already hold
We store an asset's hash, not its bytes, so to screen a stored asset you supply the original file. Bind it first: compare the file's SHA-256 with the asset's sensor_hash from the verification result, and only screen on a match. Otherwise the score describes some other file. The dashboard's Screen this asset button works this way: the hash is computed in the browser, and a file that doesn't match is refused without being sent. The score is shown beside the risk score and is never added into it.
No fabricated scores, ever
This path never invents a number. The only sources of a score are (a) a live Sightengine response or (b) a cache row created from a previous live response. Concretely:
- credentials unset →
detector_not_configured(503) - provider errors →
screening_provider_error(502) - budget spent →
usage_limit_reached(402)
Never a silent fallback, never a canned score.
Caveats
Detector accuracy degrades with recompression and screenshots, and scores are advisory. Display bands (copy only, not statuses): 0–30 "no AI signals detected", 31–70 "inconclusive — human review", 71–100 "likely AI-generated".
Quota
Screening spends a real external budget, so the sandbox is tranched: a daily cap inside a monthly cap, resetting daily and monthly. Repeated demo fixtures cost one provider call ever, because results are cached by content hash. See environments.