
Local vision, grounded, free
Photograph a wine label — get a grounded profile and pairings, cited to real reviews from a 30,000-bottle index. Plus a locally fine-tuned model that guesses the grape from a blind tasting note, no label needed.
Ask a chatbot to identify a wine from a photo and it will happily invent a producer, a score, a tasting note it never read. Cellar Scanner reads the label for real — local OCR + Claude, no vision API key — retrieves genuinely similar wines, and refuses to say anything the retrieved reviews don't support.
Local OCR (tesseract) + Claude reads the label — refuses non-wine photos, flags low-confidence reads.
Stratified across every represented grape variety, not just the highest-rated bottles.
Every claim checked against retrieved reviews before it ships. Ungrounded claims are dropped, not shown.
A LoRA-tuned model guesses grape variety from a tasting note alone — runs on a laptop, $0 marginal cost.
Paste or speak a tasting note with the label hidden. A Qwen2.5-1.5B model — fine-tuned locally on 41,389 masked Wine Enthusiast notes across 40 varieties — guesses the grape before the reveal. Benchmarked honestly against the untrained base model and Claude:
| System | Top-1 | Top-3 | Cost |
|---|---|---|---|
| Base model (no fine-tune) | 8.7% | 14.3% | $0 |
| + LoRA fine-tune | 27.7% | 27.7% | $0 |
| Claude (teacher, zero-shot) | 23.0% | 30.5% | Max subscription |
claude -p call per action — no metered API, no vision API key. See the full writeup for the honest engineering story, including three real bugs found and fixed along the way.