简介:面向 ComfyUI 初学者与图生图实践者的基础工作流资源,聚焦 QwenImageEdit 的入门调用场景,适合想快速搭建图像编辑流程、理解节点数据流与参数配置的用户。整包对应编号 c0051,压缩包内仅 1 个文件,为 JSON 格式的 ComfyUI 工作流定义,大小只有约 3KB,导入后即可加载,省去从零手动连线与调试的环节。目前已有 223 人学习下载。借助这份工作流,读者能直观看到基础图生图涉及的模型加载、输入图像、提示词控制、采样参数与结果输出等关键节点,并据此替换图片、调整提示词或步数,继续扩展编辑效果;同时可通过节点间的连接关系掌握 QwenImageEdit 与基础图生图任务的最小可用结构。整体轻量、指向明确,既适合入门对照学习,也可作为后续在 ComfyUI 中二次开发图像编辑流程的基线。

1. ComfyUI/QwenImageEdit 基础图生图:一句话改图的工作流,到底和传统图生图差在哪

很多人第一次见到“ComfyUI/QwenImageEdit 基础图生图”这个组合时,会默认它和传统图生图一样:一张图进去,写提示词,调参数,然后赌运气。实际用下来差别非常大。QwenImageEdit 是通义实验室开源的指令式图像编辑模型,0.6B 参数,走 Apache-2.0 协议,它不做整图重绘,而是把你的中文指令直接翻译成像素级编辑操作。在 ComfyUI 里接入后,工作流简单到只剩五六个节点:加载图片、输入一句话、出图。这篇文章会从装插件、拉模型、搭工作流一路讲到 CFG、步数、指令写法这些真正影响出图质量的东西,最后给一份避坑清单。适合要做电商素材、概念图、日常快速改图的人,也适合刚入坑 ComfyUI 的新手照着搭出第一套能干活的基础图生图。

2. 装模型和插件:QwenImageEdit 的架构选型与环境准备

2.1 QwenImageEdit 的思路与传统图生图差在哪

传统图生图的底层逻辑是“噪声重绘”:把输入图加噪到一定程度,再用 SD 系列模型在去噪过程中根据提示词恢复画面。这套逻辑通用性很强,但“改”的能力很弱——你想改一处背景,它常常连着主体的材质、光影一起变了。所以后来才有了 ControlNet、局部重绘和 Inpainting 这些补丁式方案,用来把“改哪里”这个问题从提示词里硬拆出来。

QwenImageEdit 走的不是这条路。它基于 Qwen2.5-VL 的视觉语言能力,压缩成一个 0.6B 的轻量模型,输入是“图像 + 编辑指令”,输出是编辑后的图像。中间由视觉语言模型理解指令里“改什么、改成什么样”,再通过整流流(Rectified Flow)生成结果。换背景就是“把背景换成浅灰色摄影棚”,加元素就是“在桌面上加一杯咖啡”,指令写得越具体,结果越可控。整个过程不需要画 mask,不需要预设一堆反向提示词,也不需要另外接 ControlNet 来控制结构。

这带来两个直接好处。第一,工作流结构大幅简化,前面提到的“五六个节点”就能跑通一套基础图生图;第二,硬件门槛很低,0.6B 的模型权重只有一个多 GB,消费级显卡就能跑。但它也有自己的脾气:对指令措辞非常敏感,CFG 不能照着 SD 的习惯调,多轮编辑时构图容易漂移。这些在后面都会展开讲。

2.2 在 ComfyUI 里装插件与模型:把 Qwen-Image-Edit-0.6B 请到本地

在 ComfyUI 里接入 QwenImageEdit,分两步:装插件、放模型。插件这块,如果你用的是秋叶整合包这类一键包,建议先更新 ComfyUI 本体,再在 ComfyUI Manager 里搜 QwenImageEdit,一键安装;如果你是从官方仓库手动部署的,直接把插件目录放进 custom_nodes 后重启即可。我一般用 Manager 装,因为能顺带解决依赖问题,少踩很多坑。

# 如果你的 ComfyUI 是手动部署,可以这样进 custom_nodes 目录
cd ComfyUI/custom_nodes

# 把 QwenImageEdit 节点仓库 clone 到当前目录
git clone <QwenImageEdit 节点仓库地址>

# 安装节点依赖(注意在 ComfyUI 的虚拟环境里执行)
pip install -r QwenImageEdit/requirements.txt

代码里的 <QwenImageEdit 节点仓库地址> 请替换成你在 GitHub 或 Gitee 上搜到的实际仓库地址,不同作者维护的版本字段略有差异。装完后重启 ComfyUI,启动日志里能看到节点加载成功,节点列表里会出现以 QwenImageEdit 开头的Loader 和生成节点。

模型文件的路径有讲究。ComfyUI 读取模型的目录是 models/QwenImageEdit ,你需要把模型放在 models/QwenImageEdit/Qwen-Image-Edit-0.6B/ 下,目录里至少包含 safetensors 权重文件和 config.json。常见做法是用 ModelScope 下载,国内网络更稳,也支持断点续传:

# 用 git clone 方式拉模型,适合网络稳定的场景
git clone https://www.modelscope.cn/Qwen/Qwen-Image-Edit-0.6B.git

# 把模型目录移动或软链到 ComfyUI 的模型目录
mv Qwen-Image-Edit-0.6B <你的ComfyUI路径>/models/QwenImageEdit/

如果你习惯用 HuggingFace,也可以 huggingface-cli download Qwen/Qwen-Image-Edit-0.6B 拉到本地再移动过来。这里要提醒一句:不要只下载 safetensors 文件就完事,config.json 和 tokenizer 相关文件缺失时,Loader 节点会在加载阶段直接报错,而不是等出图才爆。

2.3 显存规划与启动参数:6GB 到 16GB 怎么分配

QwenImageEdit 模型本身不占多少显存,真正吃显存的是输入图的分辨率和 VLM 推理时的激活值。根据我的实测经验,6GB 显卡勉强能跑 1024 以内的图,8GB 显卡是舒适区,16GB 以上基本不用操心。启动参数按显存去配,不是越多越好。

显卡显存 推荐启动参数 建议最大输入分辨率
6GB --medvram --reserve-vram 1.0 1024 x 1024
8GB --medvram 或默认参数 1440 x 1440
12GB 默认参数 2048 x 2048
16GB+ 默认参数 原生分辨率,建议控制在 2048 内

--lowvram 和 --medvram 不要同时开,两个策略会互相打架,出图速度明显变慢。如果你只有 8GB 卡,最先做的事是把输入图压进 1024 再跑,这比任何启动参数都管用。

提示:ComfyUI 更新或插件更新后,启动参数和节点行为可能变化。遇到“昨天还能跑今天爆显存”的情况,先检查是不是后台有其他程序占显存,再考虑是不是模型文件被重新下载到了不完整状态。

3. 搭建基础图生图工作流:从 LoadImage 到 SaveImage 的完整链路

3.1 基础图生图工作流的节点清单与连线逻辑

这套工作流只有五个节点,但每个节点都不能缺。和 SD 图生图不同,这里不需要单独的 CLIP Text Encode 节点,编辑指令直接写进生成节点的 prompt 字段,因为 QwenImageEdit 内部自己完成了视觉和文本的对齐理解。

节点 作用 关键输入
LoadImage 加载待编辑图片 image(放在 ComfyUI/input 目录)
QwenImageEditLoader 加载模型与配置 model(选 Qwen-Image-Edit-0.6B)
QwenImageEdit 执行指令式图生图 model + image + prompt + seed + steps + cfg
VAEDecode 把 latent 解码为图像 samples(来自生成节点的 latent)
SaveImage 保存结果 images(来自 VAEDecode)

连线逻辑很直观:LoadImage 输出 image,QwenImageEditLoader 输出 model,两个输出在 QwenImageEdit 节点汇合,生成 latent,VAEDecode 把 latent 变成图像,最后 SaveImage 落盘。如果你想先预览再保存,可以把 SaveImage 换成 PreviewImage,或者两个都接上。

这套基础结构是所有后续变体的起点。比如想接放大模型,就在 VAEDecode 之前把 latent 引出去;想做局部编辑,就在这个基础上叠 mask 分支。先把这条链路跑通,后面怎么加节点都有据可依。

3.2 一份可以直接提交的 API 格式工作流 JSON

如果是在前端界面里拖节点,连线靠鼠标;如果想批量跑、或者不想开浏览器,可以直接用 ComfyUI 的 API 接口提交工作流。下面这份 python 脚本把完整的图生图工作流组装成 API 格式,提交到本地 ComfyUI 服务:

import json
import urllib.request

workflow = {
    # 节点1:加载待编辑图片,图片放在 ComfyUI/input 目录
    "1": {
        "class_type": "LoadImage",
        "inputs": {
            "image": "product_photo.png"
        }
    },
    # 节点2:加载 Qwen-Image-Edit-0.6B 模型
    "2": {
        "class_type": "QwenImageEditLoader",
        "inputs": {
            "model": "Qwen-Image-Edit-0.6B",
            "device": "cuda"
        }
    },
    # 节点3:执行指令式编辑,prompt 就是编辑指令
    "3": {
        "class_type": "QwenImageEdit",
        "inputs": {
            "model": ["2", 0],
            "image": ["1", 0],
            "prompt": "把背景换成浅灰色摄影棚,保留产品细节",
            "seed": 42,
            "steps": 30,
            "cfg": 2.0,
            "sampler_name": "euler",
            "scheduler": "simple"
        }
    },
    # 节点4:VAE 解码
    "4": {
        "class_type": "VAEDecode",
        "inputs": {
            "samples": ["3", 0]
        }
    },
    # 节点5:保存结果
    "5": {
        "class_type": "SaveImage",
        "inputs": {
            "images": ["4", 0],
            "filename_prefix": "qwen_edit_output"
        }
    }
}

req = urllib.request.Request(
    "http://127.0.0.1:8188/prompt",
    data=json.dumps({"prompt": workflow}).encode(),
    headers={"Content-Type": "application/json"}
)
print(urllib.request.urlopen(req).read().decode())

脚本里的几个关键点说明一下。 ["2", 0] 表示取节点 2 的第 0 个输出,ComfyUI 的 API 格式就是靠这种引用关系连线的,字段名与前端节点面板上的输出标签一一对应。 class_type 是节点类名,不同作者维护的 QwenImageEdit 插件可能有细微差别,装好后在节点面板里看一眼生成节点的类名,保持一致即可。 prompt 字段支持中文指令,这是这套模型最舒服的地方。

有一点要注意:不同版本的插件对生成节点的输入字段定义可能不一样,有的版本把 seed、steps、cfg 单独拆在采样器节点里,有的版本合并在一起。上面这份脚本是合并版写法,如果你的节点面板里是拆分版,把参数挪进采样器节点就行。

3.3 跑通第一次的检查点顺序

第一次跑这套工作流,按顺序检查四个地方,能省很多排查时间。

第一,ComfyUI 启动日志里有没有 Import failed for custom node 的提示,有的话说明插件没装成功,回到第 2 章检查依赖。第二,Loader 节点的模型下拉框里有没有 Qwen-Image-Edit-0.6B ,没有就是模型路径不对,看目录结构是否多套了一层。第三,LoadImage 节点选的图片是不是真的在 ComfyUI/input 目录下,这是新手最容易忽略的——前端有图不代表文件存在。第四,提交后盯住日志窗口,确认 Queue 在跑而不是卡在等待。

跑的过程中日志会出现三类高频报错。 CUDA out of memory 是显存不足,按上一章的显存规划调整; Can't load model 是模型文件缺失或损坏,回看 2.2 的下载细节; AttributeError 是插件版本和 ComfyUI 本体不兼容,升级插件或回退 ComfyUI 版本,二选一。

成功输出的判断标准也很明确:输出图分辨率默认与输入保持比例一致,主体轮廓基本保留,只有指令描述的区域发生变化。如果整体构图都换了,说明指令里带了“重新生成”的暗示,或者 CFG 过高,下一章专门讲参数怎么调。

4. 让编辑结果可控:CFG、步数、指令写法与分辨率的配合

4.1 CFG 与步数:为什么这套模型调高 CFG 反而翻车

QwenImageEdit 底层是整流流模型,CFG 的语义和 SD 的 DDIM 系不完全一样。SD 里 CFG 调高能增强提示词跟随,但这套模型里 CFG 超过 3 就会出现色彩过饱和、阴影发灰、文字边缘糊掉的现象;低于 1.0 则指令跟随明显变弱,编辑结果像没干活。我一般建议在 1.5 到 2.5 之间试,默认 2.0 是个好起点。

CFG 取值 表现 建议
1.0 以下 指令跟随弱,编辑痕迹不明显 不推荐
1.5 ~ 2.5 指令跟随和画面稳定性平衡 首选区间
2.5 ~ 3.0 结构仍稳定,色彩开始偏浓 风格化编辑时可用
3.0 以上 过饱和、发灰、文字崩坏 避免

步数的影响相对线性。低于 15 步细节明显不够,衣服纹理、发丝会出现糊斑;超过 50 步边际收益很小,只是增加等待时间。30 步对一张 1024 x 1024 的图在 8GB 卡上大概 20 到 40 秒,想要细节更稳可以走到 45 步,快速出草稿用 25 步就够。我用过很多采样器组合,目前最顺手的是 euler + simple ,换成 beta 调度器出来的色彩会软一点。这不是主要变量,不值得在这里花太多时间,稳定复现比采样器玄学重要得多。

4.2 指令写法:把改图需求翻成模型听得懂的三层结构

指令质量决定这套工作流的上限。常见翻车写法是“帮我改一下”“把这个弄好看点”——模型是视觉语言模型,但它需要明确的目标状态,而不是抽象感受。我平时写指令遵循一个三层结构:主体 + 动作 + 目标状态,必要时加第四层限制条件。

对比一下。失败的写法:“换背景”。模型不知道换成什么背景、光影怎么处理、主体要不要保留。成功的写法:“把背景换成浅灰色摄影棚,给地面加轻微阴影,保留人物的发型和衣服颜色”。前一句话是动作,后两句是目标状态和限制条件,模型能明确知道哪里动、哪里不动。

复合指令要拆成两轮。一次只做一个主操作,“改 A 和 B”这种并列结构很容易让模型理解成重绘整张图。比如先换背景,再改服装颜色,分两步跑,每步的结果都比一步到位更可控。

还有一个细节:避免否定句。“不要红色”经常输出红色,模型对否定词的理解还不太可靠,把它改写成“改成蓝色”就稳妥很多。中文指令用“把”字句比松散的主谓宾更明确,加上“保持 XX 不变”这类不变量约束,能显著降低编辑过头的概率。这是指令式编辑和文生图提示词最大的区别——文生图允许抽象堆积,指令必须说清楚每个变化的落点。

4.3 分辨率与 Seed:什么时候用原生分辨率,什么时候固定 Seed

分辨率直接影响显存峰值和出图耗时。输入图超过 2048 时,8GB 卡基本必爆,12GB 卡也会显著变慢。我一般先把超过 2048 的图等比缩到 1024 到 1536 再喂给模型,编辑完如果需要大图,再接一个放大模型补分辨率。注意放大时要固定住那次编辑的 seed,否则构图可能变。

Seed 是调试阶段最重要的变量之一。当你调指令措辞时,固定同一个 seed,才能确定画面变化是来自指令还是来自随机噪声。但“固定 seed 保证复现同一构图”这个说法不严谨——模型更新、ComfyUI 版本变化、甚至显卡不同,都可能让同一 seed 出不同结果。Seed 更合理的用法是:判断这个参数改得有没有效,而不是当作生成结果的后悔药。

有些 QwenImageEdit 节点版本还带 denoise_strength 参数,默认 1.0。做轻微颜色调整时降到 0.7 到 0.85,能保留更多原始细节;大改背景或风格时保持 1.0 不动,给模型完整的重绘空间。这跟 SD 图生图的 denoise 逻辑类似,但在这套模型里它不是核心参数,别指望靠拉这个值解决编辑过头的所有问题。

5. QwenImageEdit 基础图生图的避坑清单:从爆显存到指令失效的五条血泪经验

5.1 显存爆掉:6GB/8GB 卡加载即崩,先查分辨率再查启动参数

现象:提交工作流后几秒内日志报 CUDA out of memory ,或者整个前端界面直接卡死无响应。在 6GB 卡上这个现象尤其频繁,8GB 卡在输入图超过 2048 时也会触发。

原因:大多数人以为模型有 0.6B 参数所以显存占用很小,忽略了 VLM 推理时的激活值和扩散采样的中间变量。输入图原始分辨率越大,峰值显存涨得越快,这是最常见的翻车点。

解决:先做一个实验——把输入图压到 1024 以内再跑,如果还爆显存,再加 --medvram 启动参数;如果稳定了,说明就是分辨率问题。不要在 --lowvram 和 --medvram 之间反复切换,选一个用到顺手为止。8GB 卡同时开两个 ComfyUI 服务是自找麻烦,关闭其他占显存的程序再试。

5.2 模型文件缺失:Loader 节点报错找不到 Qwen-Image-Edit-0.6B

现象:Loader 节点显示红色状态,日志里出现 path not found 或 model not found ,节点下拉框是空的。

原因:模型放错目录层级,或下载过程文件不完整。最常见的是把 Qwen-Image-Edit-0.6B 整个文件夹放进了 models/QwenImageEdit/Qwen-Image-Edit-0.6B/Qwen-Image-Edit-0.6B/ 这种重复嵌套,或者只下载了 safetensors 漏了 config.json。

解决:目录结构必须严格是 models/QwenImageEdit/Qwen-Image-Edit-0.6B/ ,里面至少包含 safetensors 和 config.json。下载别用浏览器点链接,那个方式文件多容易漏,用 2.2 里的 git clone 或 modelscope CLI,断了能续传。下完检查目录里文件数量,至少三个以上才算完整。

5.3 指令失效:图变了但和需求完全不是一回事

现象:指令写“把背景换个颜色”,输出图把主体颜色也改了;指令写“保持人物姿势不变”,结果人物重新摆了个姿势。

原因:指令里包含多个动作或代词指代不清。“换个颜色”到底换哪个区域的颜色?“保持”这个否定词对 VLM 来说是个弱约束,模型可能把整张图重新想象了一遍。

解决:回到第 4 章的指令三层结构,把指令拆成“主体要做什么变化 + 变化具体到什么样 + 哪里不动”。同一张图连续试两个版本的指令,一个具体,一个模糊,对比输出就知道模型对措辞有多敏感。另外检查 CFG 是否在 2.0 附近,CFG 过高会让模型过度发挥。

5.4 输出灰蒙蒙、色彩发白,像蒙了一层雾

现象:编辑结果轮廓对、内容对,但整张图对比度低,颜色发灰发白,尤其是深色区域明显变淡。

原因:CFG 过高导致整流流采样过激,另一个常见原因是模型权重以 fp16 加载时部分算子溢出,输出动态范围被压缩。

解决:先把 CFG 降到 2.0 以内,看是否恢复。如果 CFG 正常仍发灰,换 scheduler 为 beta 试一组,再不行检查是否在 QwenImageEditLoader 节点里选了 fp16 精度选项,改成 bf16 或默认精度。这个现象在换模型版本后更容易出现,更新插件前先记录当前参数,给自己留个后悔药。

5.5 多轮编辑构图漂移:第二轮改完,第一轮的结果白做了

现象:第一轮把背景换成摄影棚,效果很好;第二轮在同一张结果图上改服装颜色,输出人物位置、姿态甚至表情都变了。

原因:多轮编辑时,第二轮把上一轮的输出当作输入,VLM 可能重新解析整个图像并产生新的构图想象。如果第二轮没固定 seed,或者指令里没有“保持其他部分不变”的约束,漂移几乎是必然的。

解决:第二轮不要从内存引用第一轮的 latent,而是把第一轮保存的 PNG 通过 LoadImage 重新加载,这一步能锁住大部分构图信息。固定 seed 保持一致,指令里明确加“保持人物姿势、表情、背景不变,只改服装颜色”。如果节点支持 denoise_strength ,第二轮降到 0.85 左右,给模型留一点改动空间,又不至于推翻重来。

6. 进阶验证:指令矩阵与多轮编辑,把工作流从“能跑”变成“能用”

一套工作流能不能上线,不是跑通一张图说了算。我现在的习惯是,任何新的图生图方向都先做一轮指令矩阵测试。方法很简单:准备 3 张有代表性的输入图,选 5 类常见编辑指令,固定 seed、步数、CFG,跑 15 组输出,然后用表格记录每组的验收结果。

指令类别 预期结果 验收标准
背景替换 背景变化,主体不变 主体轮廓与原始图重叠度 > 90%
局部属性修改 指哪改哪 未指定区域像素差异极小
风格迁移 整体风格变,内容不变 构图、主体位置一致
元素增删 元素出现或消失 周边环境自然衔接
细节修复 模糊区域变清晰 修复区域无纹理冲突

跑一轮矩阵大概二十分钟,但省下的是批量重跑的返工时间。矩阵里如果有超过两格不达标,就别急着接真实需求,先回头调参数或指令写法。这套方法救过我很多次,当初接电商场景的批量改图,直接跑真实需求翻车率接近四成,后来老老实实做矩阵,翻车率降到个位数。

多轮编辑值得单独提一个技巧:把每一轮的中间结果存盘,下一轮从磁盘加载,而不是在内存里传递 latent。这个习惯能明显抑制构图漂移,代价是多了几次 VAE 解码和文件读写,但对 0.6B 模型来说耗时完全可以接受。多轮编辑时每条指令里都带“保持其他部分不变”,这是最容易忘、但效果最直接的一句话。

参数验证方面,我习惯每调一个参数只动一个变量。比如测 CFG 就从 1.5 到 2.5 各跑一张,固定其他所有参数;测指令措辞就保持 seed、步数、CFG 全部不动。这样最后看输出图能明确知道是哪个参数在起作用,不需要靠感觉猜。希望这些经验和踩坑记录能帮你在自己的 ComfyUI/QwenImageEdit 基础图生图工作流上少走几段弯路。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐