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.
| Model | What it is | Availability |
|---|---|---|
| MODA (203M) | Zero-new-parameter serving recipe over frozen FashionSigLIP; 5 of 6 full-corpus wins over its own base | open 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 item | open weights |
| MODA Duo | Routes 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 workload | open recipe · open weights |
| MODA Pro | Our hosted retrieval system. Rank 1 or 2 on five of six full-corpus benchmarks at single-model query latency and cost | closed · hosted by Hopit AI |
| MODA-SigLIP-Distilled (203M) | Image-to-image specialist. #1 open model on LookBench | open weights (+3 variants) |
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.
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.3201 | 0.2887 | 0.2769 | 0.3055 |
| Polyvore (94K) | 0.4049 | 0.3726 | 0.3664 | 0.3952 |
| Atlas (78K) | 0.1904 | 0.1862 | 0.1826 | 0.1814 |
| Fashion200K (202K) | 0.1846 | 0.1946 | 0.1858 | 0.1758 |
| DeepFashion In-Shop (53K) | 0.1026 | 0.1642 | 0.1586 | 0.0930 |
| DeepFashion Multimodal (43K) | 0.0133 | 0.0147 | 0.0148 | 0.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).
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.3370 | 0.3221 | 0.3201 | 0.2887 | 0.2769 | 0.3201 | 0.3055 | 0.2951 |
| Polyvore (94K) | 0.4378 | 0.4106 | 0.4049 | 0.3726 | 0.3664 | 0.4049 | 0.3952 | 0.3804 |
| Atlas (78K) | 0.2309 | 0.2009 | 0.1904 | 0.1862 | 0.1826 | 0.1904 | 0.1814 | 0.1583 |
| Fashion200K (202K) | 0.1353 | 0.2065 | 0.1866 | 0.1946 | 0.1858 | 0.1846 | 0.1758 | 0.1775 |
| DeepFashion In-Shop (53K) | 0.1694 | 0.1663 | 0.1640 | 0.1642 | 0.1586 | 0.1026 | 0.0930 | 0.1024 |
| DeepFashion Multimodal (43K) | 0.0079 | 0.0137 | 0.0159 | 0.0147 | 0.0148 | 0.0133 | 0.0118 | 0.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.
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.
| Model | Params | Dim | Fine R@1 | nDCG@5 | Δ vs FashionSigLIP |
|---|---|---|---|---|---|
| MODA-SigLIP-Distilled | 203M | 768 | 67.63 | 53.85 | +3.79 |
| MODA-SigLIP-Matryoshka @256d | 203M | 256 | 67.42 | 57.48 | +3.58 |
| GR-Pro (SerendipityOne, closed) | n/a | 1024 | 67.38 | — | published, not re-run here |
| MODA-SigLIP-CrossDomain | 203M | 768 | 66.52 | 52.46 | +2.68 |
| Tianmu-MERE (Kuaishou) | 1.24B | 512 | 65.99 | 52.37 | +2.15 |
| GR-Lite (SerendipityOne, open) | 303M | 1024 | 65.71 | — | published, not re-run here |
| FashionSigLIP (our reproduction) | 203M | 768 | 63.84 | 49.63 | baseline used here |
| FashionSigLIP (published) | 203M | 768 | 62.77 | 49.44 | baseline (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.
| Your workload | Use | Why |
|---|---|---|
| Catalog / title search (marketplace queries: "red floral maxi dress") | moda-pro-lite-plus | Leads 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-duo | Routes 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 work | MODA 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 photo | moda-fashion-distilled | #1 open model on LookBench (Fine R@1 67.63, above a 1.24B model) |
| Same, but index size matters | moda-fashion-matryoshka @256d | 3× smaller index at no measurable quality loss; 32 bytes/vector with binary + Hamming rerank |
| Edge / mobile deployment | moda-fashion-vision-fp16 | 186 MB vision tower |
| Cheapest possible robust default | moda-duo | Covers 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.
| Model | Task | Params | Dim | Best for |
|---|---|---|---|---|
| moda-fashionsiglip-multiview-203m | Text to image | 203M | 768 | Searching a catalog in plain language. Zero added parameters. |
| moda-pro-lite-plus | Text to image | 213M | 768 | Strongest open catalog-search checkpoint; use with its serving recipe as MODA Pro Lite+ |
| moda-duo | Text to image | 213M | 768 | Two open indexes, one query; picks MODA or Pro Lite+ per query |
| moda-fashion-distilled | Image to image | 203M | 768 | Best overall quality |
| moda-fashion-matryoshka | Image to image | 203M | 64–768 | Choose your dimension at query time |
| moda-fashion-distilled-512d | Image to image | 203M | 512 | Compact indexes at no quality loss |
| moda-fashion-vision-fp16 | Image to image | 93M vision | 768 | Edge and mobile (186 MB) |
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
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.
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.
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.
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.
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.
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.
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.
Eight posts covering how the pipeline was built and measured, including the experiments that failed.
@software{moda2026,
title = {MODA: Open-source benchmark and models for fashion search},
author = {Hopit AI},
year = {2026},
url = {https://github.com/hopit-ai/Moda}
}