Draw Things 换装 LoRA 实战:用 Silo 秒装,同一提示词对比出图
# 一、前言
最近在 HuggingFace 上看到一个挺有意思的 LoRA:ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA (opens new window)。它干的事情很简单,给 Qwen Image 2.1 一张人物照和一张衣服图,让人物穿上这件衣服。
你可能会说,Qwen Image 2.1 本身就能换装啊,要这个 LoRA 干嘛?问题就出在「换完之后」:
- 整张图会悄悄挪几个像素,和原图对不齐
- 脸会被重画一遍,有时连人都不太像了
- 背景的招牌、灯光也会被顺手改掉
这个 LoRA 解决的就是这些,只换衣服,别的尽量不动。
想在 Draw Things 里用上它,我踩了几个点:
- 它只是个补丁:
LoRA必须挂在对应的底模上,这里要先有Qwen Image 2.1 - 直连下载慢:在我这边直连
HuggingFace只有1.43 MiB/s - 仓库里东西多:三个训练步数的权重,加上配图和演示视频一共
463 MiB,而实际只需要其中一个152 MiB的文件
所以这篇就从安装开始,用我自己写的 Silo (opens new window) 把这个 LoRA 装进 Draw Things,再用同一个提示词、同一个种子,分别生成加与不加 LoRA 的结果,看看差别到底有多大。
先看看最终效果,左边是原图,中间是不加 LoRA,右边是加了 LoRA:

# 二、安装
# 1、底模
底模直接在 Draw Things 里下载就好,在模型列表里搜 Qwen Image 2.1,用官方提供的版本。它会把配套的文本编码器(Qwen3-VL 8B)和 VAE 一起带下来,这些都是 Draw Things 转换好的格式,开箱即用。
这里需要注意,底模不建议自己从 HuggingFace 下载再导入:官方仓库是 diffusers 的分片格式,Draw Things 一次只能导入一个文件;ComfyUI 格式的单文件版本则要自己再配文本编码器,折腾下来远不如官方列表省事。
下载完成后,Models 目录里是这样的:
qwen_image_2.1_q8p.ckpt # 底模,7.4 GB
qwen_3_vl_8b_instruct_i8x.ckpt # 文本编码器,8.8 GB
qwen_image_2.1_vae_f16.ckpt # VAE
# 2、用 Silo 下载 LoRA
Silo 是我写的一个 macOS 本地模型库,一份模型只存一次,再链接到各个工具里,同时支持 HuggingFace、hf-mirror 和 ModelScope,下载前会先测速选最快的源。
下面以命令行的方式来演示,当然你也可以打开 Github 仓库下载 App 进行可视化操作。

安装:
brew tap linxunfeng/tap
brew install --cask linxunfeng/tap/silo # App
brew install linxunfeng/tap/silo # 命令行
先看看这个仓库在各个源上的速度:
$ silo sources --probe ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA
Racing sources on ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA ...
modelscope 10.93 MiB/s
hf-mirror 6.25 MiB/s
huggingface 1.43 MiB/s
同一个文件,ModelScope 比直连快了 7 倍多。下载时 Silo 会自动用最快的源,中途失败还会切到下一个源接着下,不用手动挑。
再看看仓库里都有什么,--files 会列出每个文件和大小:
$ silo inspect ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA --files
README.md 10.21 KiB
RESEARCH.md 10.17 KiB
figure_difference.jpg 780 KiB
...
outfit_swap_demo.mp4 3.24 MiB
qwen-image-2.1-outfit-swap-1250.safetensors 152 MiB
qwen-image-2.1-outfit-swap-1500.safetensors 152 MiB
qwen-image-2.1-outfit-swap.safetensors 152 MiB
workflows/qwen-image-2.1-outfit-swap.json 111 KiB
三个 safetensors 分别是训练到第 1000、1250、1500 步的权重。作者推荐从不带后缀的那个(第 1000 步)开始,它最擅长把旧衣服完整换掉。
重点来了,用 --file 只下这一个文件,并直接放进 Draw Things:
$ silo add ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA \
--file qwen-image-2.1-outfit-swap.safetensors --to drawthings
[1/1] ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA · qwen-image-2.1-outfit-swap.safetensors
done ausboss/Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA (qwen-image-2.1-outfit-swap.safetensors)
152 MiB transferred
linked into drawthings: 152 MiB visible, 0 B extra on disk
Only listed in Draw Things so far: import it there before it can be used.
测速加下载一共 45 秒。几个细节说明一下:
--file写文件名就行,同名文件只有一个时会自动匹配到完整路径- 文件会以
作者--仓库--文件名的名字放进Draw Things的导入目录,一眼就知道是哪个模型 0 B extra on disk:放进去的是硬链接,Silo库里那份和Draw Things里这份是同一份数据,不额外占空间- 不想敲命令的话,
Silo的App里搜索仓库后,点版本右侧的「文件」展开,选中单个文件再加入队列,效果一样
# 3、在 Draw Things 中导入
Draw Things 不会直接读取外部的权重,而是在导入时转换成自己的格式,所以还差最后一步:
- 在左侧设置里找到
LoRA,打开LoRA管理,点「导入LoRA」 - 文件列表里会出现刚才放进去的
ausboss--Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA--qwen-image-2.1-outfit-swap.safetensors,选中它 - 版本会自动识别为
Qwen Image 2.1,确认导入即可
导入完成后,LoRA 下拉框里就能选到它了。
# 三、实战
# 1、准备素材
为了让对比足够明显,我特意挑了一个「很难不动背景」的场景:雨后香港的霓虹小巷,背景里有大量招牌、灯笼、蒸汽和地面反光,任何一点重画都会很显眼。
两张素材都是直接用 Qwen Image 2.1 生成的。人物(图 1):

衣服(图 2),一件镭射银色的飞行员夹克:

这里有个小坑:参考图会被等比缩放后居中裁切到输出尺寸。夹克图是正方形,直接拿去用会被裁成竖图,两只袖子就没了。所以我先把它上下补成同样灰色背景的竖图,再作为图 2 使用。
人物图则直接用输出尺寸 896 x 1344,至于为什么是这个尺寸,后面会单独说,这是我踩到的最大的坑。
# 2、在 Draw Things 中操作
Qwen Image 2.1 的编辑模式里,画布上的图就是「图 1」,创意板里的图依次是「图 2」、「图 3」:
- 模型选择
Qwen Image 2.1 - 把人物图放到画布上,强度调到
100% - 把衣服图拖进「创意板」
LoRA选择刚导入的换装LoRA,权重100%(作者测过,权重降到50%时一半的偏移又回来了)- 固定种子,填入提示词,开始生成
提示词用作者给的模板,没有触发词:
Dress the person in image 1 in the holographic silver bomber jacket shown in image 2. Keep their face, hair, hands, pose and the background exactly the same.
其余参数保持模型推荐值:40 步、DDIM Trailing、文本引导 1、分辨率 896 x 1344、种子 42。
# 3、用命令行复现
在 App 里来回切 LoRA 很难保证每次参数都一模一样,所以我做对比时用的是官方的 draw-things-cli。它直接读取 Draw Things 的模型目录,不需要重复下载,而且可以重复传 --image 来提供多张参考图。
brew install draw-things-cli
不加 LoRA:
draw-things-cli generate --local \
--model qwen_image_2.1_q8p.ckpt \
--prompt-file swap.txt \
--image person.png --image outfit.png \
--strength 1 --width 896 --height 1344 --seed 42 \
--output swap_nolora.png
加 LoRA,只多了一个 --config-json,文件名是导入后 Draw Things 生成的 .ckpt:
draw-things-cli generate --local \
--model qwen_image_2.1_q8p.ckpt \
--prompt-file swap.txt \
--image person.png --image outfit.png \
--strength 1 --width 896 --height 1344 --seed 42 \
--config-json '{"loras":[{"file":"ausboss__qwen_image_2.1_outfit_swap_consistency_lora__qwen_image_2.1_outfit_swap_lora_f16.ckpt","weight":1}]}' \
--output swap_lora.png
在我的 M4 Max(64 GB)上,每张图大约 5 分钟,加不加 LoRA 速度几乎一样(每步 7.01s 对 7.10s)。
如果 CLI 一带参考图就直接退出(Bus error),可以检查一下 Models 目录:我这边 App 把文本编码器改存成了 qwen_3_vl_8b_instruct_i8x.ckpt 加 qwen_3_vl_8b_instruct_i8x.ckpt-tensordata 两个文件,当前版本的 CLI 读这种格式的视觉权重时会崩,纯文生图则不受影响。我的做法是单独准备一个模型目录,放入原始的单文件编码器,其余文件用 cp -c 克隆过去(APFS 克隆不额外占空间),再用 --models-dir 指过去,App 那边的文件一个都不动。
# 4、对比
回到开头那张对比图,乍一看两张都换得不错,夹克的镭射质感、黑色罗纹领口和袖口都还原了。差别要放大才看得出来,先看脸:

不加 LoRA 时,眼型、鼻子、嘴唇和发丝都被重画了一遍,细看已经有点不像同一个人;加了 LoRA 之后,五官和原图几乎一模一样。
再把「和原图相比变化明显的像素」标成黄色(任一通道差值超过 24):

左边不加 LoRA,左侧的霓虹招牌、灯笼、远处的人群都被重画了一遍;右边加了 LoRA,背景基本是暗的,黄色几乎都集中在衣服上。
量化一下(脸部和背景分别统计,衣服区域不计入背景):
| 指标 | 不加 LoRA | 加 LoRA |
|---|---|---|
| 脸部明显改动的像素 | 14.6% | 6.3% |
| 背景明显改动的像素 | 20.6% | 10.8% |
衣服以外区域的平均像素差(0~255) | 11.7 | 7.1 |
脸部和背景的改动都降到了一半以下,这就是它「只换衣服」的价值。当然也没有作者测出来的那么夸张(他的数据是背景改动从 10.8% 降到 0.9%),毕竟我是在 Draw Things 里跑的,流程和参数都和作者的 ComfyUI 工作流不完全一样,夹克这种高反光材质也会把一部分光影反射到周围。
# 5、尺寸的坑
一开始我用的是 832 x 1216,结果加不加 LoRA 都差不多,背景都有三成多的像素被改动,看起来 LoRA 完全没起作用。
仔细对比后发现,问题根本不在 LoRA:两张结果都相对原图在水平方向被压窄了约 3%(832 宽的内容只剩约 807),垂直方向却没变,所以整张图左右两边都对不上。像素一错位,自然全图都是「改动」。
我的猜测是,Qwen3-VL 视觉编码器按 28 像素一块来切图,832 不是 28 的倍数,参考图在某一步被缩放了。验证方法也很简单,把尺寸换成同时是 64 和 28 倍数的 896 x 1344,同样加 LoRA:

换尺寸后压窄的现象消失了(最佳拟合缩放比例从 0.97 变成 1.0),LoRA 的效果才真正显现出来。
所以在 Draw Things 里用 Qwen Image 2.1 做这类「要和原图对齐」的编辑时,宽高最好同时是 64 和 28 的倍数,例如:
| 比例 | 推荐尺寸 |
|---|---|
2:3 竖图 | 896 x 1344 |
1:1 | 896 x 896、1344 x 1344 |
3:2 横图 | 1344 x 896 |
人物原图不是这个尺寸的话,先缩放裁切到这个尺寸再用。
# 四、最后
回顾一下整个流程:
- 在
Draw Things模型列表下载Qwen Image 2.1底模 silo add <仓库> --file <文件> --to drawthings,只下需要的那一个LoRA文件,自动选最快的源- 在
Draw Things里「导入LoRA」 - 人物图放画布,衣服图放创意板,套作者的提示词模板,
LoRA权重100%,尺寸用64和28的公倍数
几点使用建议:
- 想把旧衣服换得更彻底(比如靴子、牛仔裤),可以在提示词末尾加上
Replace everything they wear. - 它不会让衣服画得更像,纽扣、腰带、花纹的还原度和不加
LoRA一样,它管的是「衣服以外的部分别动」 - 它会连姿势一起保留,如果一件衣服要换个姿势才穿得上,它不会帮你改姿势
至于 Silo,这次用到的 --file 正是为了这类场景加的:HuggingFace 上很多仓库把多个版本、多个精度放在一起,而 Draw Things 一次只导入一个文件,只下需要的那个能省下不少时间和空间。项目地址:LinXunFeng/silo (opens new window),觉得有用的话欢迎 Star,有问题也欢迎提 issue。
本篇到此结束,感谢大家的支持,我们下次再见!👋
