Fangtai Wu1,2 · Hailong Guo2 · Shijie Huang2 · Jiayi Song2,3 · Yubo Huang2 · Mushui Liu1 · Zhao Wang1 · Yunlong Yu1,* · Jiaming Liu2,*‡ · Ruihua Huang2
1 Zhejiang University · 2 Qwen Applications Business Group, Alibaba · 3 Xi'an Jiaotong University
* Corresponding authors · ‡ Project lead
TL;DR: CollectionLoRA is a multi-teacher on-policy distillation framework that distills the concepts from many effect LoRAs (e.g., 50~180) and few-step generation capability into a single LoRA, cutting deployment cost and reducing interference from cascading many adapters with acceleration modules.
| Key | Summary |
|---|---|
50→1 |
Beats the Teachers — Higher VSA & lower BCR vs. per-effect Base on EffectBench @ 8 NFE (Base: 40×2). |
8 NFE |
Two Abilities, One LoRA — Many experts, few steps in one LoRA. |
A ⊕ B |
Emergent Composition — Zero-shot A ⊕ B: pair any two trained teachers at inference; no extra training. |
180→1 |
Mega Distillation — One LoRA fits 180 effect teachers, competitive with single-effect baselines. |
- ✅ Release the paper
- ✅ Open-source training and inference code
- Open-source model weights
conda create -n collectionlora python=3.10 -y
conda activate collectionlora
pip install -r requirements.txt
pip install -e .
Download the weights and follow this ckpt/ layout (paths relative to the repo root). Use 50_in_1/ for inference; data/manga_tone/ holds the starter teacher LoRA and toy training assets referenced by the training demo.
ckpt/
├── 50_in_1/
│ ├── model.pt
│ └── lora_config/
│ └── adapter_config.json
└── data/
├── general_data_demo.jsonl
├── 50_in_1_lora_type.jsonl
├── 180_in_1_lora_type.jsonl
└── manga_tone/
├── models/
│ ├── model.safetensors
│ └── lora_config/
│ └── adapter_config.yaml
└── data/
├── lora_type.jsonl
├── train_data_with_base_pred.jsonl
└── …
The script defaults to ckpt/50_in_1 and the same config as training:
cd /path/to/CollectionLoRA
python minimal_inference/collectionlora/qwen_image_edit_inference.py
The __main__ block runs several zero-shot composition demos (effect A, effect B, then A→B in one instruction). Replace the hard-coded prompts and image paths for your own data.
For scripted runs over the built-in eval subsets (test_images/ per data type), use:
cd /path/to/CollectionLoRA
python minimal_inference/collectionlora/batch_infer.py
By default, the script samples up to two images per effect from minimal_inference/collectionlora/test_images/{pet,animal,portrait} according to each line in lora_type_path.
We provide a teacher LoRA to start the training demo. You can directly run the following command:
bash train_qwen_image_edit_plus_multi_lora_teacher.sh
NOTE: The template config configs/multi_lora/train_demo.yaml sets switch_lora_ratio: 1.0, so no general dataset is used (data_path is ignored in that mode).
Optional (PDSR): To use PDSR, build your own general-data JSONL in the same schema as
ckpt/data/general_data_demo.jsonl. Then pointdata_pathintrain_demo.yamlto that file and setswitch_lora_ratiobelow1.0so those samples are sampled. Also, verifylora_data_path/lora_type_pathmatch your effect JSONLs (defaults assume paths underdata/manga_tone/…; adjust if you keep assets underckpt/data/manga_tone/…).
If you find CollectionLoRA useful or relevant to your research, please kindly cite our papers:
@misc{wu2026collectionloracollecting50effects,
title={CollectionLoRA: Collecting 50 Effects in 1 LoRA via Multi-Teacher On-Policy Distillation},
author={Fangtai Wu and Hailong Guo and Shijie Huang and Jiayi Song and Yubo Huang and Mushui Liu and Zhao Wang and Yunlong Yu and Jiaming Liu and Ruihua Huang},
year={2026},
eprint={2605.25378},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2605.25378},
}
We would like to express our gratitude to the following projects: