FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
  • 内功心法

    • 《深入浅出设计模式Java版》笔记
前端
后端
  • 产品
  • 代理
  • 提效
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
  • 内功心法

    • 《深入浅出设计模式Java版》笔记
前端
后端
  • 产品
  • 代理
  • 提效
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • AI绘画

    • AI - stable-diffusion(AI绘画)的搭建与使用
    • AI - AI绘画的精准控图(ControlNet)
    • AI - stable-diffusion 艺术化二维码
    • Draw Things 换装 LoRA 实战:用 Silo 秒装,同一提示词对比出图
      • 一、前言
      • 二、安装
        • 1、底模
        • 2、用 Silo 下载 LoRA
        • 3、在 Draw Things 中导入
      • 三、实战
        • 1、准备素材
        • 2、在 Draw Things 中操作
        • 3、用命令行复现
        • 4、对比
        • 5、尺寸的坑
      • 四、最后
  • AI工具

  • 聚合平台

  • 人工智能
  • AI绘画
LinXunFeng
2026-10-13
目录

Draw Things 换装 LoRA 实战:用 Silo 秒装,同一提示词对比出图

欢迎关注微信公众号:[FSA全栈行动 👋]

# 一、前言

最近在 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 里用上它,我踩了几个点:

  1. 它只是个补丁:LoRA 必须挂在对应的底模上,这里要先有 Qwen Image 2.1
  2. 直连下载慢:在我这边直连 HuggingFace 只有 1.43 MiB/s
  3. 仓库里东西多:三个训练步数的权重,加上配图和演示视频一共 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 不会直接读取外部的权重,而是在导入时转换成自己的格式,所以还差最后一步:

  1. 在左侧设置里找到 LoRA,打开 LoRA 管理,点「导入 LoRA」
  2. 文件列表里会出现刚才放进去的 ausboss--Qwen-Image-2.1-Outfit-Swap-Consistency-LoRA--qwen-image-2.1-outfit-swap.safetensors,选中它
  3. 版本会自动识别为 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」:

  1. 模型选择 Qwen Image 2.1
  2. 把人物图放到画布上,强度调到 100%
  3. 把衣服图拖进「创意板」
  4. LoRA 选择刚导入的换装 LoRA,权重 100%(作者测过,权重降到 50% 时一半的偏移又回来了)
  5. 固定种子,填入提示词,开始生成

提示词用作者给的模板,没有触发词:

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

人物原图不是这个尺寸的话,先缩放裁切到这个尺寸再用。

# 四、最后

回顾一下整个流程:

  1. 在 Draw Things 模型列表下载 Qwen Image 2.1 底模
  2. silo add <仓库> --file <文件> --to drawthings,只下需要的那一个 LoRA 文件,自动选最快的源
  3. 在 Draw Things 里「导入 LoRA」
  4. 人物图放画布,衣服图放创意板,套作者的提示词模板,LoRA 权重 100%,尺寸用 64 和 28 的公倍数

几点使用建议:

  • 想把旧衣服换得更彻底(比如靴子、牛仔裤),可以在提示词末尾加上 Replace everything they wear.
  • 它不会让衣服画得更像,纽扣、腰带、花纹的还原度和不加 LoRA 一样,它管的是「衣服以外的部分别动」
  • 它会连姿势一起保留,如果一件衣服要换个姿势才穿得上,它不会帮你改姿势

至于 Silo,这次用到的 --file 正是为了这类场景加的:HuggingFace 上很多仓库把多个版本、多个精度放在一起,而 Draw Things 一次只导入一个文件,只下需要的那个能省下不少时间和空间。项目地址:LinXunFeng/silo (opens new window),觉得有用的话欢迎 Star,有问题也欢迎提 issue。

本篇到此结束,感谢大家的支持,我们下次再见!👋

#AI#Draw Things#LoRA#Silo
上次更新: 2026/10/13, 16:17:03
AI - stable-diffusion 艺术化二维码
AI - 免费搭建一个私有的 ChatGPT

← AI - stable-diffusion 艺术化二维码 AI - 免费搭建一个私有的 ChatGPT→

最近更新
01
从代码复用走向生态:Flutter Dart Package 实战全指南
08-28
02
Flutter 实战:如何轻松实现图片与视频保存到手机相册
08-26
03
Flutter 实战:使用 local_auth 实现生物识别(指纹 & Face ID)
08-25
更多文章>
Theme by Vdoing | Copyright © 2020-2026 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×