Video virtual try-on technology provides a cost-effective solution for creating marketing videos in fashion e-commerce. However, its practical adoption is hindered by two critical limitations. First, the reliance on a single garment image as input in current virtual try-on datasets limits the accurate capture of realistic texture details. Second, most existing methods focus solely on generating full-shot virtual try-on videos, neglecting the business's demand for videos that also provide detailed close-ups. To address these challenges, we introduce a high-resolution dataset for video-based virtual try-on. This dataset offers two key features. First, it provides more detailed information on the garments, which includes high-fidelity images with detailed close-ups and textual descriptions; Second, it uniquely includes full-shot and close-up try-on videos of real human models. Furthermore, accurately assessing consistency becomes significantly more critical for the close-up videos, which demand high-fidelity preservation of garment details. To facilitate such fine-grained evaluation, we propose a new garment consistency metric VGID (Video Garment Inception Distance) that quantifies the preservation of both texture and structure. Our experiments validate these contributions. We demonstrate that by utilizing the detailed images from our dataset, existing video generation models can extract and incorporate texture features, significantly enhancing the realism and detail fidelity of virtual try-on results. Furthermore, we conduct a comprehensive benchmark of recent models. The benchmark effectively identifies the texture and structural preservation problems among current methods.
- Environment
We recommend using Anaconda to manage your environment. Please ensure you have CUDA 12.4 or higher installed.
# 1. Clone the repository
git clone https://github.com/AMAP-ML/Eevee.git
cd Eevee
# 2, Create conda environment and activate it
conda create -n eevee python=3.10 -y
conda activate eevee
# 3. Install PyTorch for CUDA 12.4
pip install torch==2.5.1 torchvision==0.20.1 --index-url https://download.pytorch.org/whl/cu124
# 4. Install other dependencies
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 5. Install flash attention for acceleration (Optionally)
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.5cxx11abiFALSE-cp310-cp310-linux_x86.whl
pip install flash_attn-2.7.4.post1+cu12torch2.5cxx11abiFALSE-cp310-cp310-linux_x86.whl- Pre-trained weights
Eevee requires the Wan2.1-VACE checkpoints for training and testing. Please download the weights as follows:
# 1. Sets the environment variable to point to a mirror site for faster and more stable Hugging Face connections (Optionally)
export HF_ENDPOINT=https://hf-mirror.com
# 2. Download the weights
python ./utils/download_vace.py- Dataset access
The Eevee dataset is a core contribution of our work. Please download it as follows
# 1. Sets the environment variable to point to a mirror site for faster and more stable Hugging Face connections (Optionally)
export HF_ENDPOINT=https://hf-mirror.com
# 2. Download the dataset
python ./utils/download_dataset.py
# 3. Merges the split multi-part files into a single zip archive and extracts the contents
cd ./data
cat Eevee.zip.part* > Eevee.zip
unzip Eevee.zip -d ./Eevee
cd ..- Recommended Directory Structure
After downloading, your project structure should look like this:
Eevee
|-- checkpoints/
| |-- Wan2.1-VACE-14B/
| | |-- google/
| | | |-- umt5-xxl/
| | | | ...
| | |-- config.json
| | |-- Wan2.1_VAE.pth
| | |-- diffusion_pytorch_model-00001-of-00007.safetensors
| | |-- diffusion_pytorch_model-00002-of-00007.safetensors
| | |-- diffusion_pytorch_model-00003-of-00007.safetensors
| | |-- diffusion_pytorch_model-00004-of-00007.safetensors
| | |-- diffusion_pytorch_model-00005-of-00007.safetensors
| | |-- diffusion_pytorch_model-00006-of-00007.safetensors
| | |-- diffusion_pytorch_model-00007-of-00007.safetensors
| | |-- models_t5_umt5-xxl-enc-bf16.pth
| | ...
| |-- Eevee/
| | |-- step-3000.safetensors
|-- data/
| |-- Eevee/
| | |-- dresses/
| | | |-- 00030/
| | | | |-- garment_caption.txt
| | | | |-- garment_detail.png
| | | | |-- garment_line.png
| | | | |-- garment_mask.png
| | | | |-- garment.png
| | | | |-- person_agnostic.png
| | | | |-- person_mask.png
| | | | |-- person.png
| | | | |-- video_0_agnostic_sam.mp4
| | | | |-- video_0_agnostic.mp4
| | | | |-- video_0_densepose.mp4
| | | | |-- video_0_mask.mp4
| | | | |-- video_0.mp4
| | | | |-- video_1_agnostic_sam.mp4
| | | | |-- video_1_agnostic.mp4
| | | | |-- video_1_densepose.mp4
| | | | |-- video_1_mask.mp4
| | | | |-- video_1.mp4
| | | |-- 00032/
| | | ...
| | |-- lower_body/
| | | |-- 00003/
| | | ...
| | |-- upper_body/
| | | |-- 00000/
| | | ...
| | |-- dresses_test.csv
| | |-- dresses_train.csv
| | |-- lower_test.csv
| | |-- lower_train.csv
| | |-- upper_test.csv
| | |-- upper_train.csv
|-- assets/
| | ...
|-- dataset/
| | ...
|-- models/
| | ...
|-- test/
| | ...
|-- train/
| | ...
|-- utils/
| | ...
|-- requirements.txt
|-- README.md
The training script consumes the public dataset file names shown above and loads the tokenizer from the Wan2.1-VACE-14B checkpoint. By default it launches eight processes on GPUs 0 through 7, saves a LoRA checkpoint every 1,000 steps, and writes checkpoints to checkpoints/Eevee_v0:
bash train/train.shThe command runs in the foreground so initialization or training errors are returned directly. Configure the GPU list, process count, checkpoint interval, epoch count, or output directory with environment variables. For example, to launch one process on GPU 0:
CUDA_VISIBLE_DEVICES=0 NUM_PROCESSES=1 SAVE_STEPS=1000 \
bash train/train.shAdditional train.py arguments can be appended to the command. To run in the background explicitly, redirect the launcher yourself:
nohup bash train/train.sh > train.log 2>&1 &Testing requires both the base Wan2.1-VACE-14B checkpoint downloaded in the Preparation section and the Eevee LoRA checkpoint. Download the LoRA without downloading the large dataset files from the same Hugging Face repository:
# Optional: use a Hugging Face mirror
export HF_ENDPOINT=https://hf-mirror.com
python - <<'PY'
from huggingface_hub import hf_hub_download
hf_hub_download(
repo_id="JianhaoZeng/Eevee",
filename="step-3000.safetensors",
local_dir="./checkpoints/Eevee",
)
PYThe default test case uses the files below from data/Eevee/dresses/00030:
garment_caption.txtas the text prompt;garment_detail.pngas the VACE reference image;video_0_agnostic.mp4as the conditioning video;video_0_mask.mp4as the editable-region mask.
From the repository root, run:
bash test/test.shThe generated video is saved to outputs/eevee_00030_video_0.mp4. To test another sample or the close-up video, pass arguments through test.sh:
bash test/test.sh \
--case-dir ./data/Eevee/dresses/00137 \
--video-id 1 \
--output-path ./outputs/eevee_00137_video_1.mp4Run python test/test.py --help to see all options, including custom checkpoint, LoRA, reference-image, resolution, frame-count, and output paths. The script checks that all required files exist before loading the models.
When the published checkpoint is loaded successfully, the script reports 80 tensors are updated by LoRA. before inference starts.
The launcher uses one CUDA device. Select a different GPU when needed, for example with CUDA_VISIBLE_DEVICES=1 bash test/test.sh. Full inference was not designed as a CPU test and requires enough GPU memory for Wan2.1-VACE-14B.
| File Name | Source | Description |
|---|---|---|
| --- Garment Data --- | ||
| garment.png | Raw data | In-shop garment image |
| garment_detail.png | Raw data | Dataied garment image |
| garment_caption.txt | Qwen-VL-MAX | Detailed text description of garment image generated by Qwen-vl-max |
| garment_line.png | AniLines | Lineart of garment image generated by AniLines |
| garment_mask.png | Grounded SAM-2 | Binary mask of garment image generated by Grounded SAM-2 |
| --- Person Data --- | ||
| person.png | Raw data | Image of a person wearing the corresponding garment |
| person_mask.png | Grounded SAM-2 | Binary mask of the garment area on the person image generated by Grounded SAM-2 |
| person_agnostic.png | Multiplication | Person image with garment area masked out generated by pixel-wise multiplication |
| --- Full-shot person video Data --- | ||
| video_0.mp4 | Raw data | Full-shot person video |
| video_0_mask.mp4 | OpenPose | Binary mask of the garment area on the full-shot person video generated by OpenPose |
| video_0_agnostic.mp4 | Multiplication | Full-shot person video with garment area masked out generated by pixel-wise multiplication |
| video_0_agnostic_sam.mp4 | Grounded SAM-2 | Full-shot person video with garment area masked out generated by Grounded SAM-2 |
| video_0_densepose.mp4 | Detectron2 | DensePose UV coordinates for the human body of full-shot person video generated by Detectron2 |
| --- Close-up person video Data --- | ||
| video_1.mp4 | Raw data | Close-up person video |
| video_1_mask.mp4 | Grounded SAM-2 | Binary mask of the garment area on the Close-up person video generated by Grounded SAM-2 |
| video_1_agnostic.mp4 | Multiplication | Close-up person video with garment area masked out generated by pixel-wise multiplication |
| video_1_agnostic_sam.mp4 | Grounded SAM-2 | Close-up person video with garment area masked out generated by Grounded SAM-2 |
| video_1_densepose.mp4 | Detectron2 | DensePose UV coordinates for the human body of close-up person video generated by Detectron2 |
If you have any questions, please reach out via email at jh_zeng@tju.edu.cn
If you find this work useful for your research, please cite our paper:
@article{zeng2025eevee,
title={Eevee: Towards Close-up High-resolution Video-based Virtual Try-on},
author={Zeng, Jianhao and Bai, Yancheng and Chen, Ruidong and Zhang, Xuanpu and Sun, Lei and Jin, Dongyang and Xu, Ryan and Zhang, Nannan and Song, Dan and Chu, Xiangxiang},
journal={arXiv preprint arXiv:2511.18957},
year={2025}
}