Blog / Technology

How Hugo actually finds a fashion trend

Not a dashboard. A method: start from a handful of real accounts, follow the evidence outward, read the clothes themselves, and only keep what a real score says is worth keeping. Here's exactly how that works, with the accuracy numbers and the parts still in progress.

Every number below comes from a real, held-out run. Nothing here is a projection.

267,386
labelled garment photos every new crop gets checked against
82%
first-guess accuracy naming a garment's category
0.81
out-of-sample accuracy of the score deciding what to follow next
2 → 9
garments found on the same person, before and after fixing the crop

The sampling problem

There's no list of "runners in Helsinki" to query

Every research method has to start somewhere. Most start from a list: a panel company's opt-in respondents, a set of hashtags, a handful of accounts someone on the team already follows. That list is the whole ceiling on what the research can find. If the real audience isn't on it, no amount of analysis afterward fixes that.

For most of what Hugo gets asked, that list doesn't exist. There's no directory of "women who run in Helsinki" or "people who'd actually buy oversized tailoring in Manchester." So Hugo doesn't start from a list. It starts from a handful of real, validated accounts and grows outward, the same way researchers study a hard-to-reach population with no sampling frame: ask who's already in it, then ask who else belongs. It's called chain referral sampling, and it's a real, established method, not something built to sound clever.

First hop from the seed Passed the relevance score, kept expanding Below the cutoff, dropped

Starting from one seed account, Hugo checks its recent posts, pulls out the people, places and things mentioned, and scores every candidate before deciding whether to follow it further.

Every candidate, a new account or a new entity mentioned in a post, gets scored on two things: how close it reads to the actual research question, and how far it reads from things that look similar but aren't the target. A tourist's account sounds a lot like a local's right up until you check what it's actually about. Only candidates that are close to the target and clearly separate from the near-misses get to expand the search further.

This relevance score was calibrated against four real chain referral runs where the correct next step was hand-labelled by a person. Checked out of sample against that labelled set, it's right about 81% of the time. A single post needs to score at least 0.40 to get broken down into entities. An account needs its best three posts to average 0.55 before Hugo keeps following it.

Hugo also uses who comments on a post, not only who posts it. Peer comments use a register only close contacts actually use, and in three test cities, accounts admitted this way scored 0.36 to 0.45 higher on average than random accounts commenting on the same posts. Real local peers separate cleanly from noise; they don't need a human to eyeball every profile.

What that looks like on a real run

Three cities, seeded the same week, run in parallel. None of them started from more than a handful of accounts.

CityAccounts foundWhat stopped itCost
Paris335Ran out of page budget$2.35
New York402Hit the target and stopped$2.82
London263Ran out of page budget$2.52

Reading the clothes themselves

A photo says more than its caption. Hugo reads the photo.

Most research tools only know what a caption or a comment says about a photo, which is a small fraction of what's actually there. Hugo also looks at the picture directly: who's wearing what, exactly, not just what they wrote about it.

1
Photo
2
Find each person
3
Crop each garment
4
Turn it into a vector
5
Match against 267,386 labelled crops
6
Check how unusual it is

The single biggest accuracy fix wasn't a smarter model, it was cropping. A detector resizes every photo to a fixed size before it looks at it. A person filling a third of a normal photo shrinks down to roughly 130 by 260 pixels once that happens, not enough detail left to tell a jacket from a jumper. Find the person first, crop tight to them, then look for garments inside that crop: the same photo went from returning 2 detected garments to 9 on the same subject. A separate pass also checks the whole frame for garments on nobody, flat lays, racks, product shots, so nothing worn by no one gets missed either.

How accurate is the naming

Categoryjacket, trouser, dress, sneaker…
82.0%top-1
95.8%top-5
Specific stylee.g. cargo trouser, not just trouser
54.9%top-1
88.3%top-5
Fine detaile.g. neckline shape
40.4%top-1
82.9%top-5

Weighted across every level checked: 70.8% top-1. A simple nearest-match lookup gets 68.8% here; a small classifier trained per label does better, 72.4%, and that's the one in production.

The honest bottleneck isn't naming, it's whether a garment gets detected at all. Once something is correctly boxed, getting the name almost right barely costs any accuracy, a loose crop costs about 3 points. On real photos, detection finds roughly 74% of garments, 55% of garment parts like collars and cuffs, and 14% of small decorative details. That gap, not the naming step, is where most misses actually come from.

Some categories had no existing vocabulary to check against at all: shoes, bags, hats. There's no ready-made list of "is this a stiletto, a loafer, or a mary jane." So Hugo built one: grouped tens of thousands of shoe photos by how visually similar they are, looked at one representative image per group, and named the whole group at once. 40,733 shoe photos collapsed into 36 groups that way. The result: 15 shoe types across 29,334 crops, 11 hat types across 1,994 crops, and 10 bag types across 4,940 crops, each backed by thousands of real examples, not a guess.

Not every garment is worth a deeper look. Hugo scores how visually unusual a piece is compared to everything else in its category first, a hand-knit sweater with an odd pattern scores high, a plain t-shirt scores low, and only spends the extra step of a product lookup on pieces distinctive enough to be worth checking. That score measures how unusual something looks, not whether it's a recognisable brand. A plain t-shirt from an expensive label still scores low, correctly: there's nothing visually distinctive about it to go check.

The same pipeline runs on video, not just single photos. Multiple frames have to agree before Hugo calls a garment: one early version let overlapping boxes from different people in the same frame each cast a vote, so a crowded shot could look ambiguous when it wasn't. Fixed to one vote per garment per frame.

This is built and tested end to end against real social content. It's rolling into the live product now, not every workspace has it yet, and we'd rather say that plainly than let a demo imply otherwise.

Turning posts into a graph

Every brand, product and place becomes one node, not a hundred duplicates

A single brand gets mentioned a dozen different ways: misspelled, translated, shortened, tagged. If every mention became its own entry, the graph would be useless within a week. Hugo resolves each one down to a single real entity the moment a post is processed, not in an overnight batch job.

01

Exact match

If the name already exists in the graph, word for word, that's the entity. Free, instant, and how most mentions resolve.

02

Compare by meaning

For everything else, Hugo compares the new mention against nearby entities by what it's actually about, not just spelling. Nothing under a real similarity floor is even considered a candidate.

03

One combined decision

Every plausible candidate goes to a single judgment call together, rather than a string of separate checks that can each be wrong in a different direction.

04

When it's genuinely unclear

Hugo leaves it as a separate entity rather than guessing. A wrong merge corrupts the graph. A missed merge is just two entries waiting to be cleaned up.

The result lives in a dedicated graph database and it's browsable, not just queryable. Click a brand, a product or a person in the graph and you see the actual photos behind that node, the real posts it came from, not a label someone trusted blind. Earlier versions rebuilt the whole graph in one batch after each research run finished. It's rebuilt one post at a time now, as soon as that post is validated, which is also why a run doesn't need to finish before the first useful answer is available.

The honest part

Where this is strong, and where it still needs work

Good at

  • Starting from almost nothing. A handful of seed accounts becomes hundreds of relevant ones for a few dollars.
  • Catching real, niche communities that a keyword search would never find, because it follows who people actually are, not which hashtag they used.
  • Correcting itself. Every candidate gets re-scored against the same bar, so one bad early guess doesn't compound down the chain.

Still developing

  • A photo is a weaker signal for location than for the garment in it. The clothes usually say more than the background does.
  • If the scoring model changes mid-run, results can drift. This has happened on one live run, caught by re-checking it against the same benchmark rather than shipped as a finished number.
  • The garment recognition pipeline above is real and tested, but still rolling out. Ask what's live for your workspace today versus what's coming next.
Bottom line

None of this replaces judgment. It replaces guessing at the start of the process with something that can be checked.

Method

How these numbers were produced

Every number on this page comes from a real run: hand-labelled benchmark data withheld from whatever was doing the scoring, or a production run against real social content, not a curated demo. The Paris run that needed re-scoring stays on this page as an example instead of getting quietly dropped. We'd rather publish the number that isn't flattering than let the good ones stand in for a system that's still being built.

Reading

Where this fits into the rest of the product

Frequently asked questions

What is chain referral sampling, and why does Hugo use it?

A method for studying a population with no existing list to sample from: start with a few known members, ask who else belongs, and grow outward from there. Hugo uses it because most audiences it's asked about have no directory to query. It starts from a handful of validated accounts, follows the people, places and things mentioned in their posts, and scores every new candidate before letting it expand the search further.

How accurate is Hugo's garment recognition?

82.0% first-guess accuracy on garment category, 95.8% within the top five guesses, checked against labelled photos the model never trained on. Naming the specific style is harder: 54.9% first guess. The main limit isn't naming, it's whether a garment gets detected at all.

Is the computer vision garment pipeline live for every Hugo customer today?

It's built and tested end to end against real social content, and it's rolling into the live product now. Not every workspace has it yet. Ask on a call what's active for your specific workspace versus what's coming next.

How does Hugo avoid merging two different people, brands, or products into one entity by mistake?

Through a deliberately conservative cascade: an exact name match resolves most mentions instantly, anything else is compared by meaning against nearby entities with a real similarity floor, every plausible candidate is judged together in one decision, and when it's genuinely unclear, entities stay separate rather than get merged on a guess.

How much does a real research run cost?

Single-digit dollars for hundreds of validated accounts. Three real runs, seeded the same week: Paris found 335 accounts for $2.35, New York found 402 for $2.82, London found 263 for $2.52.

See your own category run through this.

Pick a category you're buying for next season. We'll run it through Hugo live on the call, chain referral, garment recognition, the graph, and you can check the answer against what you already know.