MODA: open-source fashion retrieval benchmark and models

MODA is an open-source benchmark and model family for fashion retrieval, built by Hopit AI. It covers both halves of fashion search: finding products from an image, and finding products from a text description. Everything is MIT licensed, and every benchmark result is reproducible from the repository.

6 public text-to-image benchmarks at full corpus · LookBench image-to-image · 6 open models + 1 retrieval system + hosted MODA Pro

GitHub repository Models on Hugging Face Reproduce these numbers Book a call Interactive demo

The MODA family

ModelWhat it isAvailability
MODA (203M)Zero-new-parameter serving recipe over frozen FashionSigLIP; 5 of 6 full-corpus wins over its own baseopen source + open weights
MODA Pro Lite (213M)Trained encoder (verified fashion-vocab build of a SigLIP2 base); beats MODA on catalog search as a plain bi-encoder. MODA Pro Lite+ adds a serving recipe calibrated for it, still one vector per itemopen weights
MODA DuoRoutes each query to MODA or MODA Pro Lite+ by its shape; one encoder and one nearest-neighbour query per search. Beats both constituents on a mixed workloadopen recipe · open weights
MODA ProOur hosted retrieval system. Rank 1 or 2 on five of six full-corpus benchmarks at single-model query latency and costclosed · hosted by Hopit AI
MODA-SigLIP-Distilled (203M)Image-to-image specialist. #1 open model on LookBenchopen weights (+3 variants)

Text-to-image retrieval

Finding products from a written description. Two claims, smallest class first. Every number is full-corpus MAP@10 through one shared harness, no gallery subsampling anywhere.

Models under 250M parameters

The size class most production deployments use. Best per row in green, second in bold:

Benchmark (corpus)MODA Pro Lite+
213M · with recipe
MODA
203M
FashionSigLIP
203M
MODA Pro Lite
213M · bare
KAGL (44K)0.32010.28870.27690.3055
Polyvore (94K)0.40490.37260.36640.3952
Atlas (78K)0.19040.18620.18260.1814
Fashion200K (202K)0.18460.19460.18580.1758
DeepFashion In-Shop (53K)0.10260.16420.15860.0930
DeepFashion Multimodal (43K)0.01330.01470.01480.0118

Every benchmark in this class is led by a MODA-family model except DeepFashion Multimodal, where frozen FashionSigLIP itself holds a 0.8% edge. MODA Pro Lite+ owns catalog and title search (KAGL +10.9%, Polyvore +8.7% over MODA, both significant under a paired bootstrap), storing one vector per item and issuing one nearest-neighbour query; MODA owns caption-style and instance retrieval, with 5 of 6 wins over FashionSigLIP under a paired bootstrap (confidence intervals in the repository).

All systems, including larger models

ZooClaw-FashionSigLIP2 (375M, Xue & Xu 2026) and SigLIP SO400M-384 (878M) measured at full corpus through the same harness; the pipeline reproduces published FashionSigLIP within +0.08%. Values come from a single aligned run. Columns are ordered by number of first places, then by top-two finishes, best on the left. Best per row in green, second in bold. All values are MAP@10 at full corpus under one evaluator (pytrec_eval map_cut.10).

Benchmark (corpus)SO400M
878M
MODA Pro
hosted (~400M parameters)
MODA Duo
2 indexes
MODA
203M
FashionSigLIP
203M
MODA Pro Lite+
213M · with recipe
MODA Pro Lite
213M · bare
ZooClaw
375M
KAGL (44K)0.33700.32210.32010.28870.27690.32010.30550.2951
Polyvore (94K)0.43780.41060.40490.37260.36640.40490.39520.3804
Atlas (78K)0.23090.20090.19040.18620.18260.19040.18140.1583
Fashion200K (202K)0.13530.20650.18660.19460.18580.18460.17580.1775
DeepFashion In-Shop (53K)0.16940.16630.16400.16420.15860.10260.09300.1024
DeepFashion Multimodal (43K)0.00790.01370.01590.01470.01480.01330.01180.0099

MODA Pro is rank 1 or 2 on five of six rows above, making it the steadiest system in the comparison. Its mean gain over MODA on these six is +5.1% (peak +11.6%). The 878M SO400M wins the three generic-catalog benchmarks and pays 1152-d vectors on every query; ZooClaw leads only on its own vendor-constructed query sets. MODA Pro Lite+ is the strongest open system at ≤250M on catalog search, leading KAGL, Polyvore and Atlas. MODA Duo routes each query to MODA or MODA Pro Lite+ by its shape and beats both on a mixed workload (+5.0% and +5.4% pooled over all six benchmarks, both significant) while running one encoder and one nearest-neighbour query per search.

The evaluation is self-declared and non-blind: benchmark results were known during development. The comparison protocol (one harness, identical preprocessing per model, full corpus only) is reproducible from the repository, and each model's losses are shown, not hidden.

Image-to-image retrieval

Finding visually similar products from a photo, measured on LookBench (2,345 queries), the live fashion retrieval benchmark from SerendipityOne (Gao et al., 2026). FashionSigLIP was reproduced in the repository before any comparison was made.

ModelParamsDimFine R@1nDCG@5Δ vs FashionSigLIP
MODA-SigLIP-Distilled203M76867.6353.85+3.79
MODA-SigLIP-Matryoshka @256d203M25667.4257.48+3.58
GR-Pro (SerendipityOne, closed)n/a102467.38published, not re-run here
MODA-SigLIP-CrossDomain203M76866.5252.46+2.68
Tianmu-MERE (Kuaishou)1.24B51265.9952.37+2.15
GR-Lite (SerendipityOne, open)303M102465.71published, not re-run here
FashionSigLIP (our reproduction)203M76863.8449.63baseline used here
FashionSigLIP (published)203M76862.7749.44baseline (paper)

Tianmu-MERE, the top open model on the LookBench multi-attribute leaderboard, was evaluated through this same harness (weighted across the four subsets); it reproduces its own published subset scores within 0.5 points, which independently validates the harness. MODA-SigLIP-Distilled leads it on all four subsets, on Fine R@1 and nDCG@5 alike, at 6× fewer parameters.

Selection and provenance. The configuration above was chosen from eight candidates ranked on LookBench itself, so the headline carries the upward bias of a maximum over eight. We have now measured that bias directly rather than bounding it. Selecting the configuration on the two aigen subsets (353 queries) and reading the winner on the two real subsets (1,992 queries, disjoint, same domain), the arm chosen on the held-out slice is the arm that scores best on the reported slice: selection penalty +0.00, with a margin of +0.85 between first and second on the selection slice. The maximum-over-eight did not pick a lucky arm. Two of the eight had no per-subset scores on record and were re-measured for this check with the evaluation harness unchanged; the harness was validated first by reproducing a known arm's aigen_streetlook figure of 74.38 exactly. One arm, ranked seventh of eight, is excluded because its checkpoint no longer exists; it sits some 14 to 18 points below the winner on the selection slice and cannot change the outcome. Reproduce with python3 -m benchmark.lookbench_honest_headline. That the test can fail is not hypothetical: applied to a query-side test-time-augmentation experiment on this same benchmark, the identical protocol turned a reported +0.94 into +0.00, a selection penalty of 1.05 points, and that experiment is withdrawn (python3 -m benchmark.lookbench_honest_tta). The headline figure was also independently reproduced at 67.59 by a separately built harness — different encode path, different scorer, different handling of the distractor pool. And when the configuration is instead selected on a held-out DeepFashion In-shop development set, with LookBench scored once on the winner, score-level fusion gains +0.56 over the FashionSigLIP baseline; that is the honest size of that class of intervention. A note on the comparison itself: our same-slice figure on the real subsets is 65.32, while GR-Pro's published 67.38 spans all four subsets including the easier aigen ones, where every model scores far higher. Those two numbers are on different query sets and we do not treat them as comparable. GR-Pro and GR-Lite rows are the authors' published figures and have not been re-run in this harness, unlike Tianmu-MERE.

On LookBench, 256 dimensions matches 768 on Fine Recall@1, so a three times smaller index costs no measurable quality. With binary codes plus a Hamming-distance rerank, quality holds at 32 bytes per vector.

Which model should I use?

Your workloadUseWhy
Catalog / title search (marketplace queries: "red floral maxi dress")moda-pro-lite-plusLeads the ≤250M class on KAGL, Polyvore and Atlas (+10.9% on KAGL over MODA). One vector per item; drop into any vector DB
Caption-style or exact-item search (long descriptions, instance retrieval)moda-duoRoutes long queries to the description-tuned constituent and short ones to MODA Pro Lite+; beats either alone on a mixed workload, one encoder per query
Agentic and multi-step search, or highest accuracy with no integration workMODA Pro (hosted)Rank 1 or 2 on five of six full-corpus benchmarks at single-model latency. One hosted API — no indexes to build or operate, which is what an agent calling retrieval repeatedly needs
Find visually similar products from a photomoda-fashion-distilled#1 open model on LookBench (Fine R@1 67.63, above a 1.24B model)
Same, but index size mattersmoda-fashion-matryoshka @256d3× smaller index at no measurable quality loss; 32 bytes/vector with binary + Hamming rerank
Edge / mobile deploymentmoda-fashion-vision-fp16186 MB vision tower
Cheapest possible robust defaultmoda-duoCovers both query shapes without choosing; two CPU-servable indexes, one query each

All models serve on CPU. Where a model is the wrong pick, its row above says so implicitly. Pro Lite is not the choice for instance retrieval (it loses In-Shop badly), and MODA is not the choice for marketplace titles. Full loss tables: repository.

Models

ModelTaskParamsDimBest for
moda-fashionsiglip-multiview-203mText to image203M768Searching a catalog in plain language. Zero added parameters.
moda-pro-lite-plusText to image213M768Strongest open catalog-search checkpoint; use with its serving recipe as MODA Pro Lite+
moda-duoText to image213M768Two open indexes, one query; picks MODA or Pro Lite+ per query
moda-fashion-distilledImage to image203M768Best overall quality
moda-fashion-matryoshkaImage to image203M64–768Choose your dimension at query time
moda-fashion-distilled-512dImage to image203M512Compact indexes at no quality loss
moda-fashion-vision-fp16Image to image93M vision768Edge and mobile (186 MB)

Quick start

Text to image, searching a catalog in plain language:

pip install "git+https://huggingface.co/HopitAI/moda-fashionsiglip-multiview-203m"
python inference.py --gallery ./my_catalog --query "red floral summer dress"

Image to image, finding visually similar products:

huggingface-cli download HopitAI/moda-fashion-distilled --local-dir ./moda-fashion-distilled
python inference.py --image path/to/image.jpg

Frequently asked questions

What is MODA?

MODA is an open-source benchmark and model family for fashion retrieval, built by Hopit AI. It provides an end-to-end fashion search pipeline measured component by component, five released image-to-image checkpoints, and one text-to-image retrieval system, all MIT licensed. "MODA" here refers to this project at github.com/hopit-ai/Moda, not to other organisations using the same name.

How does MODA compare to Marqo FashionSigLIP?

On image-to-image retrieval, MODA reaches Fine Recall@1 of 67.63 against a reproduced FashionSigLIP baseline of 63.84, as a single 203M model. On text-to-image retrieval across six public benchmarks, the multi-view system beats FashionSigLIP on four with statistical significance, improves the point estimate on all six, and loses none, at the same parameters and dimension.

What are MODA Pro Lite and MODA Pro?

MODA Pro Lite is a trained 213M fashion encoder released as open weights (HopitAI/moda-pro-lite): a verified fashion-vocabulary build, fine-tuned with a proprietary recipe on LLM-annotated commercial product data. It beats MODA on catalog search at full corpus as a plain bi-encoder. MODA Pro is our closed, hosted retrieval system, rank 1 or 2 on five of six full-corpus benchmarks at single-model query latency. Its weights and architecture are not distributed; it is available as a hosted service from Hopit AI.

Is the text-to-image model a new set of weights?

No. It is a retrieval system, not a checkpoint. It downloads the unchanged Apache-2.0 Marqo/marqo-fashionSigLIP weights and applies a frozen recipe: two text encodings per query, three image views per product, and a late fusion step. There are no weight files to download from MODA itself.

Can I run MODA without a GPU?

Yes. Every result was produced on Apple Silicon with no cloud GPU. The heavy evaluations take hours and checkpoint to disk so they can resume.

What are the known limitations?

Absolute nDCG values are low because ground truth is purchase-based, one bought item per query against 105,542 products, so relative gains between configurations are the meaningful signal. The text-to-image result is self-declared and non-blind, as stated above.

Is MODA free to use commercially?

The MODA code and released models are MIT licensed. The base checkpoint used by the text-to-image system is Apache-2.0. Some datasets referenced for research are research-only or noncommercial and are not redistributed.

The write-up

Eight posts covering how the pipeline was built and measured, including the experiments that failed.

Citation

@software{moda2026,
  title  = {MODA: Open-source benchmark and models for fashion search},
  author = {Hopit AI},
  year   = {2026},
  url    = {https://github.com/hopit-ai/Moda}
}