CRAFT: Constrained Reward via Attention Fine-Tuning for Subject Personalization without Composed Targets
Paper • 2608.14403 • Published • 1
How to use JIHUN999/CRAFT with Diffusers:
pip install -U diffusers transformers accelerate
import torch
from diffusers import DiffusionPipeline
# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.2-klein-9B", dtype=torch.bfloat16, device_map="cuda")
pipe.load_lora_weights("JIHUN999/CRAFT")
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]LoRA weights of CRAFT (SIGGRAPH Asia 2026): Constrained Reward via Attention Fine-Tuning for Subject Personalization without Composed Targets.
[arXiv] | [Project Page] | [Code]
This is the checkpoint used for the results in the paper (rank 64, 3,000 steps).
git clone https://github.com/Jihun999/CRAFT && cd CRAFT
pip install -r requirements.txt
huggingface-cli download JIHUN999/CRAFT craft_flux2_klein_9b_lora.safetensors --local-dir checkpoints
python inference.py --lora_ckpt checkpoints/craft_flux2_klein_9b_lora.safetensors \
--refs man.jpg dog.jpg --prompt "A man walking a dog in a park" \
--labels man dog --categories human animal --output out.png
Defaults: 1024×1024, 4 steps, guidance 1.0. References are raw images (no segmentation needed).
@article{park2026craft,
title = {CRAFT: Constrained Reward via Attention Fine-Tuning for Subject Personalization without Composed Targets},
author = {Park, Jihun and Lee, Kyoungmin and Gim, Jongmin and Jo, Hyeonseo and Kim, Jaeyeul and Zou, Han and Zhan, Zhenpeng and Zhang, Yan and Im, Sunghoon},
journal = {arXiv preprint arXiv:2608.14403},
year = {2026}
}
The weights are an adapter for FLUX.2-klein-9B and are subject to its license.
Base model
black-forest-labs/FLUX.2-klein-9B