Vision-based photo condition assessment (paid tier) #11

Closed
opened 2026-03-26 23:32:18 -07:00 by pyr0ball · 1 comment
Owner

Description

Use a visual model to analyze listing photos for condition signals — scratches, dents, missing parts, screen damage, etc. — beyond what title keyword scanning can catch.

Approach

  • PhotoScorer stub already exists in app/trust/photo.py
  • Free tier: perceptual hash dedup only (already implemented)
  • Paid tier: vision model analysis via circuitforge-core LLM router
  • Local: moondream2 (fast, runs on CPU)
  • Cloud: Claude vision or equivalent

Signals to extract

  • Cosmetic damage visible in photos (scratches, dents, cracks)
  • Missing accessories or components
  • Screen condition (for laptops/phones)
  • Packaging condition

Privacy note

  • Photos are public eBay URLs — no user data involved
  • Results stored in photo_analysis_json on TrustScore (field already exists in model)

Acceptance criteria

  • PhotoScorer.analyze() calls vision model via LLM router
  • Results surfaced as additional red flags or score modifier
  • Gated behind paid tier check
## Description Use a visual model to analyze listing photos for condition signals — scratches, dents, missing parts, screen damage, etc. — beyond what title keyword scanning can catch. ## Approach - `PhotoScorer` stub already exists in `app/trust/photo.py` - Free tier: perceptual hash dedup only (already implemented) - Paid tier: vision model analysis via `circuitforge-core` LLM router - Local: moondream2 (fast, runs on CPU) - Cloud: Claude vision or equivalent ## Signals to extract - Cosmetic damage visible in photos (scratches, dents, cracks) - Missing accessories or components - Screen condition (for laptops/phones) - Packaging condition ## Privacy note - Photos are public eBay URLs — no user data involved - Results stored in `photo_analysis_json` on `TrustScore` (field already exists in model) ## Acceptance criteria - [ ] `PhotoScorer.analyze()` calls vision model via LLM router - [ ] Results surfaced as additional red flags or score modifier - [ ] Gated behind paid tier check
Author
Owner

Infrastructure status (2026-04-04):

  • trust_photo_analysis background task type registered in scheduler (PR #14)
  • trust_scores.photo_analysis_json column exists in DB model
  • tasks/runner.py downloads photo + calls LLMRouter stub for vision analysis
  • PhotoScorer.analyze() not implemented — photo.py is phash-only; no vision model call yet
  • Results not surfaced as red flags or score modifier

Superseded by #21 which is the full classification pipeline. #11 acceptance criteria (damage detection from photos) become Phase 1 of #21. Closing this in favour of #21.

**Infrastructure status (2026-04-04):** - ✅ `trust_photo_analysis` background task type registered in scheduler (PR #14) - ✅ `trust_scores.photo_analysis_json` column exists in DB model - ✅ `tasks/runner.py` downloads photo + calls LLMRouter stub for vision analysis - ❌ `PhotoScorer.analyze()` not implemented — `photo.py` is phash-only; no vision model call yet - ❌ Results not surfaced as red flags or score modifier **Superseded by #21** which is the full classification pipeline. #11 acceptance criteria (damage detection from photos) become Phase 1 of #21. Closing this in favour of #21.
Sign in to join this conversation.
No labels
backlog
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/snipe#11
No description provided.