Fashion-Native Foundation Model for Any-item Virtual Try-On
Oxygen AIGC Group & Joy Future Academy, JD
Overview
Oxygen-TryOn is a unified, open-source foundation model for any-item virtual try-on. Given one or more reference items — provided either as clean product shots or as in-the-wild photos of someone already wearing them — together with a single target subject image, the model synthesizes a photorealistic image of that subject wearing the referenced items, spanning virtually any fashion category — clothing, outerwear, accessories, footwear, bags, and beyond.
Unlike general-purpose image editors merely prompted for the task, Oxygen-TryOn is fashion-native: it is built specifically for try-on through a dedicated data engine and try-on-specific training. To our knowledge, it is the first open-source system to deliver any-item, multi-reference try-on at this level of fidelity.
Highlights
- 🧥 Any item, any combination — garments, outerwear, accessories, shoes, bags, and more; from a single item to free multi-item outfits, with the model resolving layering and occlusion ("OOTD"-style full-outfit composition).
- 🖼️ Heterogeneous references — accepts both clean product shots and in-the-wild worn-on photos; full- or half-body subjects with a variable number of references.
- 🧍 Faithful preservation — keeps both the subject's identity and the referenced items' appearance intact.
- ✏️ Built-in editing — general instruction-based edits (e.g., pose change) within the same generation pass, with no second model or pass.
- 🎭 Cross-domain generalization — even dresses stylized 3D avatars, illustrated characters, statues, or posters while respecting the original style and geometry.
- 🏆 State-of-the-art single-item consistency & realism, matching or surpassing strong proprietary systems (Nano Banana Pro, GPT-Image-2, Seedream5 Lite) and leading open-source models (FLUX.2).
Performance
Per-dimension VLM-judge scores on TStars-VTON — Oxygen-TryOn (red) holds the most balanced, leading profile for both single- and multi-item try-on.
Oxygen-TryOn sets a new state of the art for open-source try-on:
- TStars-VTON (single-item). Leads on every dimension — overall quality, identity consistency, item fidelity, background preservation, and physical/structural plausibility — surpassing strong proprietary systems (GPT-Image-2, Nano Banana Pro, Seedream5 Lite) and the best open-source model (FLUX.2), as shown above.
- DressCode & VITON-HD (paired reconstruction). Improves on the strongest specialist baseline (FastFit) across FID / KID / SSIM / LPIPS.
- Oxygen-TryOn Bench (in-the-wild). Achieves the highest share of directly shippable results among all models — detailed below.
In-the-Wild Usability — Oxygen-TryOn Bench
Our deployment benchmark of 1,000 real-world samples, judged by GPT-5 on a 1–5 scale. Usability Rate is the share of results whose identity, garment, and image quality are all good enough to ship directly. C2M uses clean product-shot references; M2M uses in-the-wild worn-on references.
| Method | C2M Overall | C2M Usability % | M2M Overall | M2M Usability % |
|---|---|---|---|---|
| Open-source | ||||
| FastFit | 3.027 | 34.96 | 2.923 | 25.51 |
| Qwen-Image-Edit-2511 | 3.194 | 53.18 | 3.144 | 55.90 |
| FireRed-Image-Edit1.1 | 3.332 | 64.28 | 3.248 | 63.31 |
| FLUX.2-dev | 3.367 | 67.48 | 3.306 | 68.43 |
| Closed-source | ||||
| Nano Banana Pro | 3.431 | 70.16 | 3.539 | 73.18 |
| Seedream5 Lite | 3.507 | 77.67 | 3.428 | 74.70 |
| GPT-Image-2 | 3.532 | 80.35 | 3.542 | 77.58 |
| Oxygen-TryOn (Ours) | 3.575 | 86.79 | 3.656 | 85.43 |
Oxygen-TryOn reaches 86.79% (C2M) and 85.43% (M2M) usability — clearly ahead of the strongest proprietary system, GPT-Image-2 (80.35% / 77.58%). Full tables across all four benchmarks are available in the technical report.
Usage
The full, runnable inference code lives in the GitHub repository. Try-on is run as a command-line script.
1. Environment
git clone https://github.com/jd-opensource/Oxygen-TryOn
cd Oxygen-TryOn
conda create -n oxygen-tryon python=3.10 -y
conda activate oxygen-tryon
pip install -r requirements.txt
A CUDA-capable GPU is required. Dependency versions are checked at runtime and must satisfy transformers>=4.57.0,<4.58.0 and diffusers==0.36.0, plus torch/torchvision; flash-attn>=2.8.0 is strongly recommended for best performance.
2. Download the checkpoint
from huggingface_hub import snapshot_download
snapshot_download(repo_id="jd-opensource/Oxygen-TryOn", local_dir="./ckpt")
The directory passed to --ckpt-root must follow this layout:
ckpt/
├── infer_config.py # inference config (a subclass of InferConfig)
├── transformer/
│ └── transformer.pth # MMDiT weights
├── vae/
│ └── <single vae file> # exactly one VAE checkpoint
└── JoyAI-Image-Und/ # MLLM / text-encoder directory
3. Run try-on
Single item — references are fed garments first, person last, so Picture 1 = garment and Picture 2 = person:
python inference.py \
--ckpt-root ./ckpt \
--model-image test_images/person.jpg \
--garment test_images/garment.jpg \
--prompt "Make the person in Picture 2 wear the clothing from Picture 1. Keep the pose, body shape, and lighting from Picture 2." \
--output outputs/result.png \
--steps 30 --guidance-scale 6.0 --seed 42 --basesize 1024
Multiple items — garments are Picture 1…N and the person is the last picture:
python inference.py \
--ckpt-root ./ckpt \
--model-image test_images/person.jpg \
--garment test_images/top.jpg test_images/bottom.jpg test_images/shoes.jpg \
--prompt "Put the top from Picture 1, the bottom from Picture 2, and the shoes from Picture 3 onto the person in Picture 4. Keep the pose, body shape, and lighting from Picture 4." \
--output outputs/result.png
Evaluation
Reproduce the paired/unpaired DressCode and VITON-HD metrics with eval.py:
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python eval.py \
--ckpt-root ./ckpt \
--config ./ckpt/infer_config.py \
--output-root /path/to/eval_outputs \
--viton-root /path/to/VITON-HD \
--dresscode-root /path/to/DressCode \
--datasets VITON-HD DressCode \
--pair-modes paired unpaired \
--metrics-csv /path/to/eval_outputs/metrics.csv
CLI reference
| Argument | Type | Default | Description |
|---|---|---|---|
--ckpt-root |
str | required | Oxygen-TryOn checkpoint root |
--prompt |
str | see inference.py |
Try-on instruction |
--model-image |
str | ./test_images/test_3.png |
Person / model image path |
--garment |
str+ | ./test_images/test_1.png ./test_images/test_2.png |
One or more garment image paths |
--output |
str | ./test_images/example.png |
Output image path |
--steps |
int | 30 | Number of denoising steps |
--guidance-scale |
float | 6.0 | Classifier-free guidance scale |
--seed |
int | 42 | Random seed |
--basesize |
int | 1024 | Bucket base size for resizing |
--config |
str | <ckpt-root>/infer_config.py |
Optional config path |
--rewrite-prompt |
flag | off | Enable LLM-based prompt rewriting |
--rewrite-model |
str | gpt-5 |
Model name for prompt rewriting |
Negative prompts are built into Oxygen-TryOn and are not exposed as a CLI argument.
Prompt design
Oxygen-TryOn is understanding-driven: the wording of the instruction governs how the references are interpreted and composed.
- Reference images are ordered garments first, person last; refer to them by natural-language position ("Picture 1", "Picture 2", …) rather than special tags.
- A typical single-garment prompt: "Put the clothing from Picture 1 onto the person in Picture 2. Keep the pose, body shape, and lighting from Picture 2."
- For multiple garments, state which item comes from which picture number.
- You can append an editing directive to run within the same pass, e.g. "…, and change the pose to a three-quarter view."
Limitations
- High-cardinality references (5+ items): since the foundation is pretrained for at most four references, quality degrades when more than four references are provided. This is the primary direction for future improvement.
- Domain focus: the model is specialized for fashion/human-centric try-on; behavior on out-of-domain content is not guaranteed.
- Reference quality: heavily occluded, very low-resolution, or ambiguous references may reduce item-fidelity.
- Instruction sensitivity: because the model is understanding-driven, ambiguous instructions can lead to incorrect item-to-region mapping; following the templates above (or enabling the prompt enhancer) is recommended.
- Non-distilled release: the currently open-sourced checkpoint is the non-distilled version; a distillation-accelerated variant for faster inference is planned for a future release.
Responsible Use
Virtual try-on synthesizes images of people wearing specified items. By using this model you agree to:
- Obtain proper rights/consent for any person image and any garment/brand assets you use.
- Not create misleading, defamatory, deceptive, or non-consensual content, or otherwise infringe on portrait rights, privacy, or intellectual property.
- Comply with all applicable laws and the terms of the model's license.
- Consider disclosing AI-generated content where appropriate.
The authors are not responsible for misuse of the model.
Citation
If you find Oxygen-TryOn useful, please cite:
@techreport{oxygentryon2026,
title = {Oxygen-TryOn: Fashion-Native Foundation Model for Any-item Virtual Try-On},
author = {{Oxygen AIGC Group \& Joy Future Academy, JD}},
institution = {JD.com},
year = {2026},
url = {https://github.com/jd-opensource/Oxygen-TryOn}
}
Acknowledgements
Oxygen-TryOn is built on the JoyAI-Image-Edit foundation model and leverages Qwen3-VL-8B-Instruct (MLLM) and Wan-2.1-VAE. We thank the open-source community for these foundations.
License
This model is released under the CC BY-NC 4.0 (Creative Commons Attribution-NonCommercial 4.0 International) license. Please also review the licenses of the upstream components (JoyAI-Image-Edit, Qwen3-VL, Wan-2.1) for any additional terms that may apply to your use case.