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 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; 4 of 6 statistically significant 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, with no serving recipe requiredopen weights
MODA ProOur hosted retrieval system. Rank 1 or 2 on 9 of 10 benchmark cells 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)FashionSigLIP
203M
MODA
203M
MODA Pro Lite
213M
KAGL (44K)0.27690.28900.3185
Polyvore (94K)0.36650.37260.3997
Atlas (78K)0.18260.18840.1945
Fashion200K (202K)0.18580.19470.1802
DeepFashion In-Shop (53K)0.15870.17030.1031
DeepFashion Multimodal (43K)0.01480.01470.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.2%, Polyvore +7.3% over MODA, both significant under a paired bootstrap) from a single checkpoint with no serving machinery; MODA owns caption-style and instance retrieval, with 4 of 6 wins over FashionSigLIP statistically significant 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. Best per row in green, second in bold.

Benchmark (corpus)FashionSigLIP
203M
MODA
203M
SO400M
878M
ZooClaw
375M
MODA Pro Lite
213M
MODA Pro
hosted
KAGL (44K)0.27690.28900.33700.29510.31850.3263
Polyvore (94K)0.36650.37260.43780.38040.39970.4088
Atlas (78K)0.18260.18840.23090.15830.19450.2053
Fashion200K (202K)0.18580.19470.13530.17750.18020.2101
DeepFashion In-Shop (53K)0.15870.17030.16950.10240.10310.1762
DeepFashion Multimodal (43K)0.01480.01470.00790.00990.01180.0144

MODA Pro is rank 1 or 2 on every row above, and on 9 of 10 cells once the H&M and ZooClaw-Fashion query sets are included (receipts in the repository), making it the only system in the comparison without a bad benchmark. Its mean gain over MODA on these six is +6.9% (peak +12.9%). 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 single model at ≤250M on catalog search (KAGL +10.2%, Polyvore +7.3% over MODA, both significant under a paired bootstrap), from one checkpoint with no serving machinery.

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
MODA-SigLIP-DeepFashion2203M76866.5252.46+2.68
Tianmu-MERE (Kuaishou)1.24B51265.9952.37+2.15
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.

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-liteStrongest ≤250M on catalog benchmarks (KAGL +10.2% over MODA); plain bi-encoder. Drop into any vector DB, no serving code
Caption-style or exact-item search (long descriptions, instance retrieval)MODALeads the ≤250M class on Fashion200K, In-Shop, and Multimodal; 4 of 6 significant wins over FashionSigLIP
Best possible text search, no integration workMODA Pro (hosted)Rank 1 or 2 on 9 of 10 benchmarks at single-model latency. The only system with no bad benchmark
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 defaultMODABest worst-case of any single system; cheapest index build; CPU-servable

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-liteText to image213M768Strongest open catalog-search checkpoint; plain bi-encoder, no recipe
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)
moda-fashion-deepfashion2Image to image203M768Simplest reproducible recipe

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-deepfashion2 --local-dir ./moda-fashion-deepfashion2
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.68 against a reproduced FashionSigLIP baseline of 63.84. 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 9 of 10 benchmark cells 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}
}