Figure 1. ART enables high-fidelity transfer of diverse makeup styles (simple to complex) at up to 2K resolution, while preserving identity, geometry, and makeup placement under challenging expressions, occlusions, and cross-gender scenarios.
Figure 2. Method overview. ART is a two-stage framework that shifts supervision from the synthetic pseudo-target to the real reference. Stage I performs pseudo-target initialization by training the transfer model for global makeup placement and an auxiliary makeup remover for bare-skin extraction. Stage II predicts a differentiable makeup carrier ẑ at noise level σtr, and then reconstructs the real reference from its bare-skin counterpart conditioned on ẑ. Since ẑ remains differentiable, the gradient of Lrefine back-propagates into the transfer prediction, helping recover fine-grained makeup cues and suppress synthetic artifacts, while Lbottleneck preserves the global structure.
⚓ Reality-Anchored Refinement. We propose ART, a two-stage DiT framework that breaks the pseudo-target ceiling. By anchoring a refinement cycle to the real reference, ART overrides pseudo-target artifacts while stabilizing training through a controlled-noise bottleneck.
💄 A 2K-Resolution In-the-Wild Makeup Dataset. We introduce MakeupFaces2K (MF2K), the first 2K-resolution makeup portrait dataset with 8,573 images, spanning diverse makeup intensities and underrepresented demographics to support high-fidelity makeup transfer and related tasks.
🏆 State-of-the-Art Performance. ART achieves superior makeup fidelity across diverse styles, consistently preserving fine-grained details and source identity even under occlusions and extreme expressions.
Plan:
- Inference code
- 512×512 LoRA weights
- 1024×1024 LoRA weights
- Higher-resolution weights (not planned for the current release)
- Training code
- MF2K dataset
Updates:
2026/07/09: We launched the Hugging Face Space demo. Try ART online!2026/07/09: We released an interactive Gradio app and added more example images.2026/07/07: We released the MF2K dataset.2026/07/07: We released the 1024×1024 LoRA weights.2026/07/01: We released the 512×512 LoRA weights.2026/06/30: We released the inference code. Continuous updates, stay tuned!
# Create and activate environment
conda create -n art python=3.10
conda activate art
# Install dependencies
pip install -r ./requirements.txtDownload the ART LoRA checkpoints and place them under ./checkpoints/, or use the following command:
# pip install -U "huggingface_hub[cli]"
# If Hugging Face is not directly accessible, you can use hf-mirror:
# export HF_ENDPOINT=https://hf-mirror.com
hf download csbowei/ART --local-dir ./checkpoints --include "*.safetensors"| Model | Link |
|---|---|
| ART LoRA | csbowei/ART |
| FLUX.1-Kontext-dev | black-forest-labs/FLUX.1-Kontext-dev |
# Makeup transfer: apply the reference's makeup onto the input face
python infer.py \
--task mt \
--input ./examples/source/src_001.jpg \
--ref ./examples/ref/ref_001.jpg \
--lora_path ./checkpoints/art_transfer_lora_1024.safetensors \
--resolution 1024 \
--output_dir ./examples/outputs \
--save_concat# Makeup removal: strip cosmetics from the input face
python infer.py \
--task demakeup \
--input ./examples/ref/ref_002.jpg \
--lora_path ./checkpoints/art_demakeup_lora_1024.safetensors \
--resolution 1024 \
--output_dir ./examples/outputs \
--save_concatThe generated results should look similar to the following:
The
--resolutionparameter should match the resolution of the LoRA model.--save_concatcreates a side-by-side concatenated image of the input and output.
Or you can launch the interactive Gradio app:
python app.pyAfter launching, open the local URL shown in the terminal. The app automatically lists examples from ./examples/source/ and ./examples/ref/.
Figure 3. MF2K, the first 2K-resolution in-the-wild makeup dataset. MF2K contains 8,573 images spanning four makeup intensities from bare skin to artistic styles, with broad demographic diversity. Compared with existing datasets, it captures fine-grained makeup textures and thus serves as a demanding benchmark for high-fidelity transfer.
Due to redistribution constraints of source images, MF2K is released as metadata and reconstruction scripts. Please download the original images from the URLs provided in the metadata, rename them according to metadata.origin_path, and organize them under images/origin/.
MF2K/
├── metas/
│ ├── train.jsonl # 8,373 training images, one JSON object per line
│ └── test.json # 100 source/reference test pairs
├── make_crop.py # Reconstruct aligned crops from original images
└── images/
├── origin/ # User-downloaded original images
├── crop/ # Reconstructed aligned face crops
└── crop_resize2048/ # 2048x2048 resized crops generated by the script
Metadata entry format:
{
"id": "<image_id>", // Image id
"split": "train | test",
"makeup_category": "bare | light | heavy | artistic",
"gender": "male | female",
"metadata": {
"photo_url": "...", // Original image URL
"author": "...", // Image author or provider
"license": "...", // Source image license
"origin_size": [<width>, <height>], // Original image size
"origin_path": "images/origin/...", // Path for the downloaded original image
"crop_path": "images/crop/...", // Output path for the aligned crop
"crop_resize2048_path": "images/crop_resize2048/...",
"origin_md5": "...", // MD5 checksum of the original image
"crop_md5": "...", // MD5 checksum of the crop image
"face": {
"crop_size": <crop_size>, // Aligned crop resolution before resizing
"affine_matrix": [[...], [...]] // Affine transform from original image to crop
}
}
}
The training split contains 8,373 images across four makeup categories: bare, light, heavy, and artistic. All training face crops are at least 2048x2048.
The test split contains 100 source/reference pairs, where each source is bare-faced and each reference uses artistic makeup. Some test crops are below 2048x2048 but remain approximately 1K or higher. All evaluations reported in our paper are conducted at 512x512 resolution.
After downloading the original images, place each file according to metadata.origin_path, for example:
MF2K/images/origin/00001.png
MF2K/images/origin/08374.jpg
Then generate aligned crops and 2048x2048 resized crops:
python MF2K/make_crop.py \
--dataset_root ./MF2K \
--workers 16Outputs are written to images/crop/ and images/crop_resize2048/. Use --no_resize2048 if only aligned crops are needed.
Our evaluation covers four datasets with complementary challenges:
-
MT: A standard makeup-transfer dataset with mostly aligned frontal portraits under controlled settings. BeautyGAN
-
MT-Wild: An in-the-wild makeup transfer dataset with varied poses, expressions, and backgrounds under unconstrained settings. PSGAN, Google Drive
-
LADN: A makeup transfer dataset with diverse and extreme makeup styles involving large color and spatial variations. LADN, Google Drive
-
MF2K: The artistic subset split of the MF2K dataset, emphasizing high-frequency cosmetic details for stress-testing transfer fidelity.
We sincerely thank the authors of FLUX.1-Kontext for releasing the foundational generative model that our work builds upon. We also acknowledge Diffusion-4k for its inspiring wavelet loss design.
We are also grateful to previous makeup transfer works and datasets, including PSGAN, EleGANt, MAD, SHMT, Stable-Makeup, BeautyGAN, and LADN. Their valuable contributions and released resources have inspired our research and enabled fair comparison.
If you find our work or code useful for your research, please cite:
@article{wei2026art,
title={Anchoring on Reality: Breaking the Pseudo-Target Ceiling in Makeup Transfer},
author={Wei, Bo and Lin, Xianhui and Dong, Yi and Li, Zhongzhong and Li, Zonghui and Wang, Zirui and Yang, Jiachen and Liu, Xing and Gu, Hong and Li, Xiaoming and Zuo, Wangmeng},
journal={arXiv preprint arXiv:2606.31089},
year={2026}
}





