BS-VTON β Outfit Transfer LoRA for FLUX.2 Klein 9B
Person-to-person outfit transfer. Give anyone's outfit to anyone else.
BS-VTON is a high-rank LoRA (r=128) fine-tuned on FLUX.2 Klein 9B for outfit-to-outfit transfer between people. Pass an anchor (base person) and a target (outfit donor), and the model dresses the anchor in the target's outfit β transferring garments, textures, and layering while preserving the anchor's identity, pose, and background.
Trained on a 100k synthetic dataset: 50k female-to-female and 50k male-to-male pairs with FLUX.1 Fill [dev], FLUX.1 Redux [dev], and the CatVTON LoRA (xiaozaa/catvton-flux-beta) for outfit transfer supervision.
Results
Input Requirements
β οΈ Both anchor (base person) and target (outfit donor) must be full-body, frontal-facing photos. The model was trained exclusively on full-body frontal poses. Cropped, side, or angled shots will produce degraded results.
- Resolution: 512Γ1024 (width Γ height)
- Output: 512Γ1024
- Use
central_crop_resize()from the quickstart code to preprocess any image automatically
Files
| File | Format | Use |
|---|---|---|
bs_vton_diffusers.safetensors |
Diffusers-native | Python / diffusers pipeline |
bs_vton_comfyui.safetensors |
ComfyUI-native | ComfyUI workflow |
Quickstart (Diffusers)
import torch
from diffusers import Flux2KleinPipeline
from huggingface_hub import snapshot_download, login
from PIL import Image
def central_crop_resize(path, size=(512, 1024)):
img = Image.open(path).convert("RGB")
w, h = img.size
target_ratio = size[0] / size[1]
current_ratio = w / h
if current_ratio > target_ratio:
new_w = int(h * target_ratio)
left = (w - new_w) // 2
img = img.crop((left, 0, left + new_w, h))
else:
new_h = int(w / target_ratio)
top = (h - new_h) // 2
img = img.crop((0, top, w, top + new_h))
return img.resize(size, Image.LANCZOS)
login(token="YOUR_HF_TOKEN")
bs_vton_dir = snapshot_download(
repo_id="canberkkkkk/bs-vton-outfit-klein-9b",
repo_type="model",
allow_patterns=["bs_vton_diffusers.safetensors"],
)
device = "cuda"
pipe = Flux2KleinPipeline.from_pretrained(
"black-forest-labs/FLUX.2-klein-9B",
torch_dtype=torch.bfloat16,
)
pipe.vae.to(device="cuda", dtype=torch.bfloat16, memory_format=torch.channels_last)
pipe = pipe.to(device)
pipe.load_lora_weights(f"{bs_vton_dir}/bs_vton_diffusers.safetensors", adapter_name="bs_vton")
pipe.set_adapters(["bs_vton"], adapter_weights=[1.25])
pipe.fuse_lora()
# Both images must be full-body, frontal. Input and output resolution: 512x1024.
anchor = central_crop_resize("anchor.png") # base person β full body, frontal
target = central_crop_resize("target.png") # outfit donor β full body, frontal
result = pipe(
prompt="bs_vton: The exact person from image 1 wearing the outfit from image 2. Maintain the facial features and identity of image 1 precisely.",
image=[anchor, target],
num_inference_steps=4,
height=1024,
width=512,
guidance_scale=1.0,
).images[0]
result.save("output.png") # output resolution: 512x1024
LoRA weight: Default is
1.25. Tune between0.8β1.25depending on transfer strength.
Prompt: Always use
"bs_vton: The exact person from image 1 wearing the outfit from image 2. Maintain the facial features and identity of image 1 precisely."β the model was trained with this trigger prefix.
Quickstart (ComfyUI)
1. Download the workflow
bs_vton_klein_9b_workflow.json
2. Download the LoRA and place it in your models/loras/ folder
3. Make sure you have FLUX.2 Klein 9B downloaded
The workflow requires the Klein 9B FP8 diffusion model. Download from black-forest-labs/FLUX.2-klein-9b-fp8).
4. Load the workflow in ComfyUI, set your anchor and target images, and run.
Prompt: Always use
"bs_vton: The exact person from image 1 wearing the outfit from image 2. Maintain the facial features and identity of image 1 precisely."β already set in the workflow. LoRA strength: Default1.0. Tune between0.8β1.25. Resolution: Both input images must be 512Γ1024, full-body frontal.
Inference Speed
Benchmarked with torch.compile enabled, 4 steps, 512Γ1024.
| Hardware | Inference Time |
|---|---|
| NVIDIA B200 | ~0.4s |
| NVIDIA RTX Pro 6000 | ~0.7s |
| NVIDIA RTX 5090 | ~1.1s |
Training Details
| Detail | Value |
|---|---|
| Base model | FLUX.2 Klein 9B |
| LoRA rank | 128 |
| Dataset size | 100k pairs |
| Split | 50k female-to-female, 50k male-to-male |
| Transfer supervision | FLUX.1 Fill [dev] + FLUX.1 Redux [dev] + CatVTON LoRA |
| Input/output resolution | 512Γ1024 |
Limitations
- Skirt / fitted bottom bias: The model exhibits a leaner body shape bias on skirts and fitted bottoms, inherited from the training data distribution. Structured and oversized garments (coats, jackets, blazers) transfer more consistently across body types.
- Hair: The anchor person's hair can occasionally bleed into the output. Works best when anchor and target have similar hair lengths.
- Cross-gender: Not supported β the dataset is same-gender pairs only. Cross-gender transfer will produce artifacts.
- Pose: Trained exclusively on full-body frontal poses. Seated, side-on, or heavily occluded poses will degrade quality.
- Resolution: Trained at 512Γ1024. Other aspect ratios may produce inconsistent results.
License
This LoRA is released under the FLUX Non-Commercial License.
The base model (FLUX.2 Klein 9B), FLUX.1 Fill [dev], and FLUX.1 Redux [dev] are all under BFL's non-commercial license. The training pipeline also builds on the CatVTON LoRA (xiaozaa/catvton-flux-beta, CC-BY-NC-2.0).
Non-commercial use only. For commercial licensing, contact Black Forest Labs at bfl.ai/licensing.
This model is intended for virtual try-on, fashion visualization, and creative applications. Users are responsible for ensuring their use complies with applicable laws and respects the rights and consent of individuals depicted.
Author
- π€ HuggingFace: canberkkkkk
- π¦ X: @canberkkkkk10
Citation
@misc{bsvton2026,
author = {Canberk},
title = {BS-VTON: Outfit Transfer LoRA for FLUX.2 Klein 9B},
year = {2026},
url = {https://huggingface.co/canberkkkkk/bs-vton-outfit-klein-9b}
}
@inproceedings{chong2024catvton,
title = {CatVTON: Concatenation Is All You Need for Virtual Try-On with Diffusion Models},
author = {Zheng Chong and Xiao Dong and Haoxiang Li and Shiyue Zhang and Wenqing Zhang and Xujie Zhang and Hanqing Zhao and Xiaodan Liang},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2025}
}
- Downloads last month
- 347
Model tree for canberkkkkk/bs-vton-outfit-klein-9b
Base model
black-forest-labs/FLUX.2-klein-9B





