Skip to content
Mir AIhome

Designer look for less: how similarity scoring works in Dupely

5 min readMir Labs

People ask how the similarity score in Dupely is calculated, and the answer is worth giving in full, because the honest version includes several things the score deliberately is not. This is a walk through the pipeline from photograph to comparison card, written for someone deciding how much weight to put on the result.

Step one: name the thing before comparing it

A dupe is only meaningful relative to a specific product, so identification comes first and everything else depends on it.

The phone downsizes your photo to at most 1024 pixels on its longest side and re-encodes it as a JPEG before upload. That is mostly a privacy measure, since re-encoding discards the camera’s EXIF block and any GPS coordinates in it, but it also means the model sees a modest image rather than a 12-megapixel one. The reduced image goes to a vision model with a prompt written for exactly one job, and the model has to return an answer that fits a strict schema. Anything that does not validate is rejected and retried on a fallback model rather than shown to you half-formed.

The first field in that schema is a yes-or-no: is this a product at all? A person, a plate of food, a screenshot or a drawing is not, and the app says so with the model’s reason instead of guessing. The second is an image quality rating, and if the photo is blurred, dark, too far away or cut off, the result carries one concrete tip about what to do differently.

Only then comes the product: a brand, a name, and a confidence figure between 0 and 1 that both are correct. The rule the model is given is blunt. Name the brand only if you actually recognise it from the bottle, label, logo, hardware or silhouette. If you recognise the brand but not the exact item, say the brand and describe the item plainly. If you recognise neither, give a generic description and a low confidence. Never invent a brand. The app buckets that confidence into high, medium and low, and a low-confidence result on a poor photo is shown as a photo problem to fix rather than as a shaky identification to trust.

Step two: what defines this product

Before any alternative is proposed, the model lists up to six attributes that actually define the thing. The list is category-specific by design. For a fragrance it is top, heart and base notes, concentration and character. For makeup it is shade, undertone, finish, coverage and formula. For a bag or a pair of shoes it is material, hardware, silhouette, colourway and closure.

These attributes are what “similar” is going to mean. A handbag dupe is being compared on leather, hardware and shape, not on smell, and a lipstick dupe on shade and finish, not on the case. Writing the attributes down first, and showing them to you on the result screen, is what stops the comparison from being a vibe.

Step three: up to three alternatives, each judged alone

The model is then asked for up to three cheaper alternatives, most similar first, with a hard set of conditions. Each one must be a real product it is confident is currently sold. Each must be cheaper than the original. Each carries:

  • a similarity figure, a probability from 0 to 1 that a reasonable buyer would call it a close dupe;
  • why it is similar, in at most 25 words;
  • how it differs, in at most 25 words;
  • an approximate US retail price, or nothing if the model does not know;
  • where to buy it, as a retailer’s name only. Never a link, because a link a model invented is a link that sends someone somewhere real.

The similarity figure is per dupe and independent. Dupely does not force the three to add up to anything or rescale them against each other, because three alternatives can each genuinely be a strong match. The server sorts them by that figure and caps the list at three. Nothing else is done to the number.

If the model is not sure an alternative exists, the instruction is to leave it out and return fewer. An empty list is a correct answer, and it has its own screen. This is the single most important rule in the product, because a hallucinated dupe is the central risk of an app like this: it looks like help and is actually a fiction with a price on it.

What the score is, and is not

So, plainly:

  • It is a model’s judgement of how close a reasonable buyer would find the two products, given the attributes it identified.
  • It is not a measured overlap of ingredients, materials or formulas. Nobody outside the manufacturer has those.
  • It is not a review score, a popularity score or a count of anything.
  • It can be wrong, in both directions, and it is more likely to be wrong when the identification underneath it was low-confidence.

The two short text fields beside the number carry most of the information. “Same saffron-amber opening, shorter drydown” tells you what the number cannot: which part of the experience you are keeping and which part you are giving up.

Step four: the money

Every price on the card is approximate. It is an estimate of US retail for a standard size, produced by the same model, not pulled from a price feed or a shop. The savings line is computed on the server from the original’s estimated price and the closest dupe’s estimated price, and it is simply not shown if either is missing or if the “dupe” turns out not to be cheaper. Readers in a language whose speakers do not think in dollars see a second line converted at the European Central Bank’s daily reference rate, marked “today”, with the dollar figure kept above it. Both lines say “approximately” because that is what they are.

What happens to the result afterwards

The identification, the attributes and the dupes are stored against a random identifier your phone generated on first launch, so the scan is in your history when you come back. There is no account, no name, no email. The photo itself is held for at most seven days and then deleted; deleting your data from Settings removes it immediately. Details are in the privacy policy.

You can also tell the app whether it got the product right with a thumbs up or down, and which dupe you opened. That feedback is what lets accuracy be tracked by confidence bucket over time, so a model that is systematically overconfident at “medium” shows up in the numbers rather than in complaints.

How to use the score well

Treat it as an ordering, not a verdict. Read the two text fields before the number. Check the confidence of the identification before trusting anything built on it. And when the list is empty, believe it: the app has been told, repeatedly, that inventing a product is worse than admitting there is nothing to suggest.

All articles