- Shape match
- 0.75 lowest view 0.66
- Genuine re-photos
- 0.83–0.95 same pair, new photos
- Colour shift
- 2.6 ΔE looks alike
The delivery agent photographs the product at handover. When it comes back, ReturnGuard checks it is the same unit: a free visual screen first, Gemini agents only when they're needed, and an explainable verdict before the refund goes out.
Loading evaluation results…
Most platforms only inspect returns at the warehouse, days after pickup and often after the refund has gone out.
Sources: Appriss Retail press release · Deccan Herald
A customer orders new headphones, keeps them, and returns the pair they already owned in the new box. Same brand, same shape at a glance, so a quick look at the warehouse can pass it. The seller refunds a new product and gets a used one back.
The shape and colour of the exact unit handed over are stored at delivery, so the return is compared with that unit, not with a catalogue photo.
Dark navy and black are close for a colour check (2.6 ΔE, inside the normal range). Here the object-only DINOv2 shape match is what flagged the swap.
If the unit has a printed serial or model label, Gemini is told only where it was and must read it back. The match is checked in code.
Real photos and scores from ReturnGuard's test set (pair 49, python scripts/evaluate.py). Headphones are a hard case: the reverse swap (black delivered, navy returned) scored 0.82, close to genuine re-photos, so it went to a human reviewer instead.
3 photos at handover. Background removed, object-only DINOv2 embeddings and colour stored once. The identity agent reads labels, serials, marks and tags.
Return photos are compared locally on shape and colour. Clearly different products are rejected and clear matches accepted with no LLM.
If a label exists, it's read blind and compared in code. If evidence still conflicts, a visual inspector compares all six photos.
Evidence becomes a 0–100 risk score with every contribution shown. Accept, human review or reject, plus a seller-ready evidence report.
A different or cheaper item comes back in the box.
An old or broken unit of the same model replaces the new one.
Handed over intact, returned scratched or broken.
"Arrived damaged", but the handover photos show it intact.
Returns outside the category's return window.
Customers with earlier flagged returns get stricter cut-offs.
Register the blue speaker as a delivery, then return the black one. Sample photos are one click away.
Photograph the product as it is handed to the customer. This creates the order and its identity fingerprint.
Photograph the item the customer hands back. The pipeline runs in the background and you can watch each agent work.
Waiting for the agents…
Waiting for the agents…
Only your own deliveries and returns, linked to your customer ID. This is the same history the customer-history agent reads.
Every number on this page is produced by a script and read from its results file: python scripts/evaluate.py for the labelled pair dataset and python scripts/stress_test_precision.py for the robustness test.
Loading…
Two entry points: delivery registration builds the fingerprint once; return verification is a LangGraph state machine where every LLM agent sits behind a cheaper check.
Cut-outs are padded to a square. For tall items 65–77% of patches were padding, which made a shaker and a bottle score 0.77 "similar". Pooling only object patches drops that to 0.38.
DINOv2 is trained to ignore colour. Median object chroma (ΔE in a*b*) separates the blue and black speakers that DINOv2 calls near-identical.
The return-time identity agent is told where the label was, never what it said, and the comparison happens in code with fuzzy matching. It can't just agree with the expected answer.
The visual inspector never sees the similarity scores or the label result, so its verdict is a second opinion, not an echo. Its prompt doesn't claim the items are the same product.
Every agent returns schema-validated JSON. The decision is an evidence-weighted log-odds score with each contribution shown, not a number the LLM made up.
Signing in with email and phone creates a customer ID. Every delivery and return is tied to it, so the history agent can count earlier flagged returns and tighten the auto-accept cut-off for repeat offenders.
Reviewers see "colour difference 2.1, normal is under 2.8" rather than a bare score, plus which way each finding pushed the decision. Gemini's verdict, or the reason it wasn't needed, is always shown, and a second opinion can be requested on demand.
Timeouts, retries with backoff and rate-limit handling. If an agent still fails, the return goes to a human instead of being auto-accepted, and nothing stays "processing" forever.
Sign in with the email and mobile number you registered with.
Photos you upload are processed only to verify returns. This is a demo, so please don't upload personal photos.
ReturnGuard verifies that a returned product is the unit that was delivered, using photos taken at the doorstep. It is decision support: clear cases are automated, ambiguous ones reach a person with the evidence already laid out.
Current evaluation data covers 6 physical items. Larger real-world datasets, a mobile capture app and integration with marketplace return flows are on the roadmap.