Back to Case Studies

FaceSearch: Face Search, LoRA Training and Virtual Try-On in One SaaS

A Django, Celery and React SaaS with FastAPI engines for face search, AI image generation, LoRA training and virtual try-on. GPU jobs are queued, and every try-on model was checked for commercial use.

djangoceleryreactfastapistable diffusionloravirtual try-on
FaceSearch LoRA training page and Outfit Studio
The LoRA training page and Outfit Studio. The four samples are real outputs of a LoRA trained through the pipeline.

What it does

Users upload photo collections and search them by face, generate images, train their own LoRA from a few photos, and try garments on people. Each of those is heavy GPU work, so the app never runs it inside a web request.

How it is built

  • A React front end and a Django API and admin.
  • Celery workers queue and track the GPU jobs.
  • FastAPI engines for image generation, LoRA training (a wrapper around kohya_ss) and virtual try-on.
  • Postgres, Redis and Nginx, all in Docker, with a GPU profile for real workloads.

The LoRA pipeline

Upload a dataset, queue the job, train, and the model is stored as a .safetensors file and marked ready. The run in the poster trained on Realistic Vision 5.1 for 150 steps at 512 pixels, network dim 16, in 126 seconds, and produced the four samples shown. Training ran end to end on Kaggle GPUs.

Virtual try-on and licences

Try-on goes through a provider router: two hosted APIs, a synthetic FLUX.2 klein 4B path (Apache-2.0), and a self-hosted model. The self-hosted one depends on a human parser under a non-commercial licence, so it is used for testing only and paying traffic is routed to a hosted provider. If a provider fails, the router falls back and marks the job.

Try-on demos

Screen recordings of Outfit Studio running on my machine: pick a garment photo and a person photo, choose the target group and garment type, and the job goes through the queue to the try-on engine. The finished image appears in the job list and opens full size. Recordings are sped up 2x; the waiting time is real GPU inference.

Kids: a printed shirt and shorts set, and a one-piece outfit, put on children.
Bottoms: printed trousers on an adult model.
Bottoms: wide-leg jeans swapped onto a model wearing skinny jeans.

Building an AI image product?

Generation, fine-tuning and try-on behind a queue, with the licences checked before anything goes to paying users.