Inspiration
Faking damage now takes one sentence: upload a photo of an intact item to a chat app, type "add a dent", and claim a refund. Sellers can't tell, and refusing every doubtful claim hurts honest buyers. We wanted a tool that asks: does this photo show what the seller shipped, and can its story be trusted? If not, the answer should be a fair next step, not an accusation.
What it does
A seller uploads the buyer's damage photo, their own listing photo and the claim. In about 10 seconds Lenzit returns:
- Verdict: Likely genuine / Needs verification / Likely manipulated
- Next step: refund as normal, or ask for a fresh photo (with a ready message)
- Plain-language reasons, a difference heatmap with a slider, and a downloadable report
How we built it
Independent checks, so fooling one isn't enough:
- Content Credentials (C2PA) + EXIF: an AI-generated declaration triggers a hard rule; a capture time before delivery is flagged.
- AI-image detector: frozen CLIP ViT-L/14 features (5 crops) + a head trained on FraudBench (6 generators), with real damaged items as hard negatives.
- Seller-photo match: DINOv2 same-item check, SIFT + RANSAC alignment, SSIM change map.
- Decision policy: thresholds set out-of-fold so only 5% of real-damage photos are flagged.
Every image is canonicalised first (crop, resize, re-encode) so file format can't leak the answer. Stack: Python, PyTorch, open_clip, OpenCV, scikit-learn, c2pa, FastAPI, Modal. Security: magic-byte upload checks, size/megapixel and decompression-bomb limits, rate limiting, strict security headers, threat model and red-team report in the repo.
Results (Lenzit-Bench v1)
3,260 test images from 200 products, plus attacks (stripped metadata, JPEG, screenshots, wrong items). Out-of-fold, grouped by product; at 5% false alarms on real damage:
- 66.5% of AI fakes caught, metadata stripped (AUROC 0.914)
- 56.3% for unseen generators (worst 31%)
- 83% of wrong-item photos flagged
- 95% of real-damage photos never marked manipulated
Challenges
- Shortcuts: file properties alone separated real from fake. Canonicalising fixed it, and held-out recall held.
- A model that looked too good: fusion scored higher but failed a fairness check, so we shipped the simpler, defensible policy.
- Edits of real photos: the pixel detector scored a ChatGPT edit 0.01; Content Credentials caught it. That's why we layer checks.
Accomplishments
A live end-to-end product with honest, reproducible numbers, and fair to honest buyers: the worst outcome for a genuine claim is a request for a fresh photo.
What we learned
"Is it AI?" isn't enough on its own; provenance and the seller's photo matter as much. Honest evaluation made us drop a model that only looked better.
Limits and what's next
- A screenshot of an AI edit strips credentials and can pass (shown in the demo).
- 13% of genuine buyers with very different photos are asked to verify.
- Next: a signed one-time re-capture link, a claim–photo consistency check, and a Shopify plug-in.
Team
Harshith Raghavapuram · Sriman · Hotrish
FraudBench is CC BY-NC-SA, so our detector head is non-commercial. Demo AI images were made by us from our own photos. AI coding assistants were used.
Built With
- c2pa
- dinov2
- fastapi
- modal
- open-clip
- opencv
- python
- pytorch
- scikit-learn
- timm