muddler
A cocktail menu scanner that works most of the time.
Point a phone at a menu. It returns the ingredients, a best guess at the measurements, and a flavor profile. Run by one person who keeps finding new ways for it to be wrong.
- App Store coming soon
- Google Play coming soon
No. 1
Input, output.
Real menus have more mistakes in them.
The Long Pour
est. somewhere — cocktails, 14–18
Old Fashioned14
bourbon, demerara, ango, orange peel
Smoked Rosemary Gimlet16
gin, lime, rosemary syrup, mezcal rinse
Jungle Bird14
dark rum, campari, pineapple, lime
Paper Plane15
bourbon, amaro, aperol, lemon
Corpse Reviver No. 215
gin, lillet, cointreau, lemon, absinthe rinse
no substitutions · split checks fine
scan / the-long-pour / 02
| 2 oz | gin | base |
|---|---|---|
| ¾ oz | lime juice | citrus |
| ¾ oz | rosemary syrup1 | sweet |
| ~0.1 oz | mezcal, rinse3 | aromatic |
sweet2
sour2
bitter1
boozy3
aromatic6
Match confidence
All four ingredients matched exactly. Rosemary syrup has its own entry, scored less sweet and far more aromatic than simple syrup, which is why the profile leans the way it does.
Why “Sour”?
Gin + citrus + sweetener is the structural signature of the Sour family. The ratios are applied as 2 : ¾ : ¾ because the menu didn't list any.
Mezcal rinse
Marked aromatic rather than base because it was written as “rinse”. A rinse is ~0.1 oz coating the glass before pouring.
No. 2
Why this exists.
Cocktail menus are information design at its worst. Handwriting, ink on black, proprietary names, missing measurements, a bartender's sense of humor. muddler is a mobile app that tries anyway. For clean printed menus it's right most of the time. For chalkboards and cursive, it is humbled regularly.
No. 3
Three phases. Each fails in its own way.
An image becomes text, the text becomes ingredients, the ingredients become a recipe. Any of those steps can quietly be wrong.
Read the image
Tesseract runs three passes with different page segmentation modes. The highest-confidence result wins. Dark-background detection inverts menus printed on black.
Resolve the ingredients
Each parsed token goes through an eight-tier matcher: exact, alias-exact, alias-substring, substring, category, sequence similarity. Brand names and common OCR misreads are mostly covered.
Infer the specs
Menus rarely list measurements. muddler classifies each cocktail into one of seven structural families and applies the standard ratios for that family.
No. 4
Every cocktail is one of these underneath.
Modern bartending is mostly recombination. Most cocktails fit. The weird ones are flagged as weird.
Sour 2 : ¾ : ¾
base / citrus / sweet
As in: Whiskey Sour, Daiquiri, Gimlet
Spirit Forward 2 : 1 : dash
base / modifier / bitters
As in: Manhattan, Negroni, Boulevardier
Highball 1 : 3
base / long mixer
As in: Gin and Tonic, Moscow Mule
Collins 2 : 1 : 1 : 2
base / citrus / syrup / soda
As in: Tom Collins, John Collins
Fizz 2 : 1 : ¾ : top
base / citrus / syrup / soda
As in: Gin Fizz, Ramos Gin Fizz
Tiki blend
rums / citrus / orgeat or falernum
As in: Mai Tai, Jungle Bird, Zombie
Spritz 3 : 2 : 1
sparkling / aperitif / soda
As in: Aperol Spritz, Hugo Spritz
No. 5
Things we found in ten thousand ingredients.
An incomplete tour of the weirder corners.
Seven spellings of falernum
Three are wrong. Two are regional. Two we can't explain. The ingredient normalizer treats all of them as the same thing.
Angostura, 1824
Angostura Bitters has been in continuous production since 1824. The only ingredient in the database older than most American bars.
Three grenadines
Three different things are sold under that name. Two contain no pomegranate. One is red dye and corn syrup with a story.
Twelve botanicals
One Japanese gin lists twelve botanicals, six of which don't appear in any other entry. Yuzu, sansho, kabosu, hinoki, sakura leaf, and something called yomogi that is technically mugwort.
Category: Other
Quietly absorbs 144 ingredients that nobody could agree on. Egg whites. Toasted coconut. One entry just says “smoke.”
The word “dash”
Bartender sources disagree on what a dash is by a factor of three. We picked one and documented the choice. Someone will email us about it.
No. 6
What it gets wrong: an incomplete list.
- Handwritten menus
- OCR confidence drops sharply. Most handwriting gets parsed, some doesn't. Flourished cursive is a war.
- Menus rendered as images
- A PDF where the menu is an embedded JPEG reads the same as a photograph. Text on the page source doesn't help us.
- House specials with no listed ingredients
- A cocktail called “The Unicorn” is exactly as useful to us as a cocktail called “The Unicorn.” We pass them through untouched.
- New bottles and house-spec names
- New product releases and long proprietary names aren't in the database until someone adds them.
- Measurement inferences
- Bartenders will argue about every one of them. That is fine. The ratios are defensible, not definitive.
- Non-Latin scripts
- Basic Latin and Latin-1 only for now. Japanese, Thai, Cyrillic, Hangul menus all fail. We know.
- Anything photographed in the dark
- A menu in a mood-lit bar is functionally unreadable. Flash helps; flash on a laminated menu does not.
No. 7
Availability.
- Offline use
- A seed subset of the database ships with the app, so browsing and lookups work offline. Scanning needs a connection.
- Accounts
- Optional. Scanning and browsing work without one. A free account adds custom ingredients and more as the app grows.
- Privacy
- Photos are never saved. Scan results aren't either, unless you opt in. Details here.
- Made by
- Sticctape. One person, at a bar, usually.