Skip to content

SnapDish

Build only

Photograph an ingredient, get recipes. A Core ML classifier I trained, running entirely on device.

Overview

A solo project with a paper attached. I trained an image classifier in Create ML on 706 photos of four ingredients, ran it through Vision on device, and used the predicted label as the search term against TheMealDB. The write-up is an ACL-style report covering the data, the training, the results and the limits.

Problem

Deciding what to cook from what is in front of you is a vision problem and a retrieval problem stacked on each other. Neither half is hard alone; the interesting part is that the output of the first is literally the input of the second.

Trade-off

Inference stays on device instead of calling a hosted vision API. That means no API key, no per-call bill, no photo of someones kitchen leaving their phone, and a classifier that works with the network off — the connection is only needed at the end, to fetch the recipe. Because the backbone ships with the operating system, the whole trained model is a 49 KB file.

What it does

Image classifier trained in Create ML on 706 photos across four ingredients
Transfer learning: a linear head over a 2048-dimension Apple vision backbone
89.9% training accuracy and 78.9% validation accuracy, over 25 optimisation rounds
Inference runs entirely on device through Vision and Core ML
Predicted label queries TheMealDB for matching recipes and instructions
ACL-style report and public source, both written solo

Stack

SwiftSwiftUICreate MLCoreMLVisionPhotosUIUIKit

What I took from it

The first model only knew banana and apple and scored a perfect 100% on both splits — which is mostly a statement about how narrow the problem was. Widening it to four ingredients dropped the numbers, and that drop is the more honest measurement of the two.

More iOS work

Work

Set in Uncut Sans and Commit Mono. Built to the iOS metrics: 8pt grid, 17px body, 44px targets, spring physics.

© 2026 Lucas Santhiago. All rights reserved.