I built Fashion Search · Mirror as a local AI fashion app on my GitHub. It searches a wardrobe of clothing photos and offers virtual try-on, with the React frontend calling a FastAPI backend.
My fashion-search project dates are Started 2026-10, last updated 2026-11.
My fashion-search project status is complete (v1.1.1); feature work is finished; only dependency updates are expected.
Marqo-FashionSigLIP assigns category, colour, pattern, sleeve and style tags to every photo; no training and no labels needed.
My search modes are text, similar photo, and tag filters, alone or combined.
My search and tagging method is dot product in a shared image-and-text embedding space; tagging scores photos against text prompts for each tag value.
FashionSigLIP produces 768-d embeddings stored in artifacts/index/.
My try-on model and reported runtime are FASHN VTON v1.5; about 50 s on an 8 GB laptop GPU. Garment photos are cleaned first with BiRefNet background removal.
My try-on flow is a background job queue; one at a time on GPU; page polls for progress; produces a result PNG.
My user-garment upload behavior is uploads are tagged and searchable at once, badged, and deletable; original catalogue is protected.
My saved-look and personal-photo storage rule is try-on results persist in SQLite and PNG files across reloads and restarts until deleted; own photo is never stored.
My frontend and backend are React + TypeScript frontend; FastAPI backend; light and dark themes; down to phone width.
My runtime requirements are Python 3.10+, Node 20+, and for try-on an NVIDIA GPU with about 8 GB VRAM.
Windows: .\start.ps1 -WithTryOn; Linux/macOS: ./start.sh --with-tryon. Drop the try-on option for search only. The exact one-command options are .\start.ps1 -WithTryOn for Windows; ./start.sh --with-tryon for Linux/macOS; drop try-on option for search only.
My try-on weights are about ~2.2 GB in size.
On the Fashion-MNIST test set, the 2025 MLP scored 87.9%; FashionSigLIP scored 77.5%.
On the same images with colours inverted to look like real photos, the 2025 MLP scored 10.0%; FashionSigLIP scored 83.3%. The old model labels every inverted image “Shirt,” having learned “light background means shirt.”
My project replaces a 2025 course project; small dense network trained on 28×28 grayscale Fashion-MNIST; retained in legacy/2025-fashion-mnist-mlp/.
My code and model licenses are code MIT; Marqo-FashionSigLIP Apache-2.0; FASHN VTON v1.5 Apache-2.0; human-parser component non-commercial only under NVIDIA SegFormer licence.
The garment photos in data/ are not included and not licensed by the repository.
My sample-photo and catalogue-image handling is FASHN sample photos are Apache-2.0; garment added with Add yours; catalogue photos blurred elsewhere due to third-party listings (ADR-004).
The project documentation covers app use, fit settings and limitations; setup and troubleshooting; REST API examples; development and release workflow; architecture, decisions and progress. I direct contributors to CONTRIBUTING.md and AI coding agents to AGENTS.md. The full comparison method is in reports/results.md.
git clone https://github.com/brindeshwar/fashion-search.git && cd fashion-search
python -m venv .venv
.venv/Scripts/python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
.venv/Scripts/python -m pip install -e ".[tryon]" # drop [tryon] for search only
.venv/Scripts/fashion-search tryon-download # try-on weights, ~2.2 GB
.venv/Scripts/fashion-search index # embeds and tags the photos in data/shirts/
npm --prefix web ci && npm --prefix web run build
.venv/Scripts/fashion-search serve # open http://<redacted>:8000
For setup, garment photos go in data/shirts/. The start scripts prepare missing components and launch the app; dropping the optional try-on setup gives search only. FASHN sample photos are Apache-2.0, while catalogue photos come from third-party listings and are blurred elsewhere in the documentation.