
Qwen-Image-2.1 工作流:节点链、各项调节参数,以及自第零天以来发生的变化
- Orca新Orca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 每百万 tokens · 61 tok/s
- openai新OpenAI: GPT-6.1 Sol2026-09-2952智能
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856智能
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 每百万 tokens · 311 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238智能
- OpenAIOpenAI: GPT-6 Sol2026-09-2248智能
- AnthropicAnthropic: Claude Opus 5.52026-09-2258智能
- xAIGrok 4.72026-09-2146智能
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 每百万 tokens · 42 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 每百万 tokens · 239 tok/s
- DeepSeekDeepSeek: DeepSeek V4.1 Flash2026-09-1040智能
- OpenAIOpenAI: GPT-6 Astra2026-09-0453智能77代码
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241智能76代码
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245智能76代码
- AnthropicAnthropic: Claude Fable 5.12026-09-0153智能82代码
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 每百万 tokens · 56 tok/s
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 每百万 tokens · 120 tok/s
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642智能72代码
- DeepSeekDeepSeek: DeepSeek V4 Flash Vision (Exp)2026-08-21$0.22 / $0.66 每百万 tokens · 212 tok/s
- z-aiZ.ai: GLM 5.32026-08-1845智能75代码
你从这一页得到的,是一张Qwen-Image-2.1节点图,你可以从零重建并复现它——按加载器实际使用的名称排列的节点链,四五个决定输出是否如你所愿的旋钮,以及人们改了却浑然不知自己已经改动了噪声调度的那两个设置。模型本身是厂商在统一文生图与图像编辑上的发布版本,于 2026 年 9 月 20 日以研究许可开源:视觉生成组件为 70 亿参数、32 层单流 DiT、16 倍空间压缩的 64 通道 RGBA VAE,编辑路径上最多支持十张参考图。这个日期出现在这里,是为了告诉你正在接线的是哪个检查点,而不是要宣布什么。图才是主题,而这张图有一段值得一读的修订历史——在你相信别人截的图之前先读一读:今天随包发布的模板并非第零天发布的那份模板,而其中四处差异,恰恰是读者最容易搞错的地方。
这个页面描述的是哪个图表
以下所有内容均读取自 ComfyUI 工作流模板仓库 Comfy-Org/workflow_templates,版本为 2026 年 10 月 13 日当时的最新修订版,运行于 ComfyUI 稳定版 v0.39.0(发布于 2026 年 10 月 5 日)。节点名称即加载器在图中显示的显示名称;若某个节点在不同修订版之间被新增或重命名,则会标注相应日期。这些文件的获取路径来自 ComfyUI 自带的 Qwen-Image-2.1 教程页面——其中共有三个模板,而本页面沿用其中的文本到图像模板,随后对其加以变通。
这三个模板是 Qwen-Image-2.1 Text to Image、Qwen-Image-2.1 Image Edit,以及 Remove Background: Qwen-Image-2.1。最后一个并不是不同的图:ComfyUI 的文档称,它复用了图像编辑子图,并使用提示词“Remove the background, and output a PNG image”。所以需要学习两个图,而其中一个是在另一个之上套用的提示词模板。
节点链,按顺序
文本到图像模板是一个子图——画布上的一个可折叠节点,带有十八个对外暴露的输入——封装了一条由十三个节点组成的链。其内部顺序为:
• UNETLoader — 加载 qwen_image_2.1_int8_convrot.safetensors,权重 dtype 保持为 默认。这是扩散模型,你在此处选择的文件,是决定你的运行结果能否与他人一致的首要因素。
• Qwen Image 2.1 Cache —— 位于加载器与采样器之间。在当前模板中它不是可选的,但可以绕过,而且它是最容易在你第一周下载的工作流里缺失的节点。
• KSampler —— 从缓存节点获取模型,从文本编码器获取正向和负向条件,以及一个空潜变量。其在出厂模板中的控件读数为:种子 0,控制模式 fixed,步数 25,cfg 1,采样器 euler,调度器 simple,降噪 1。
• EmptyLatentImage — 宽度和高度由位于子图外部的 Resolution Selector 节点接入,而它的第三个输入(批量大小)默认为 1。
• VAEDecode → SaveImageAdvanced —— 解码器将像素交给保存节点,其文件名前缀为Qwen_image_2.1,并以 PNG、8 位、sRGB 格式输出。PNG 在这里并非只是装饰:VAE 携带四个通道,因此在写入磁盘的过程中,8 位 PNG 才能让 alpha 通道保持存活。
• CLIPLoader — 加载 qwen3vl_8b_int8_convrot.safetensors,并将类型设置为 qwen_image。Qwen3-VL 8B 是文本编码器,它同时也是读取你的参考图像的视觉塔。
• Text Encode Qwen Image 2.1(节点 id TextEncodeQwenImage21)——用于为提示词添加条件。它接收 clip、提示词、负面提示词、可选的 VAE、一个 resolution 整数,以及一组自动增长、名为 image_1 至 image_16 的图像插槽。它返回三项内容:正向条件、负向条件和一条 latent。这条 latent 正是大家容易忽略的部分——它是一个与第一张参考图像尺寸一致的空 latent;在文本到图像的图中它并不会被用到,因为空 latent 是由 Resolution Selector 提供的。
• VAELoader — qwen_image_2.1_vae_bf16.safetensors,同时为解码器和文本编码器的参考图像路径提供输入。
可选分支是最后一块。第二个 CLIPLoader 加载 qwen3.5_9b_qwen_image_2.1_pe_t2i.int8_convrot.safetensors,并将类型设为 stable_diffusion——而不是 qwen_image,这一差异是刻意为之的,因为这是一个文本生成检查点,而非视觉编码器。它向一个 Generate Text 节点提供输入,该节点的输出经由 Preview Any 流向采样器的正向提示词,并由 ComfySwitchNode连接至 refine_prompt 输入来切换。一个 Primitive String (Multiline) 节点保存着重写所依据的系统提示词,你可以查看并编辑它。
数一数这条链路,真正的工作只有六个节点:加载扩散模型、加载文本编码器、加载 VAE、编码提示词、从空潜变量采样、解码并保存。模板里的其他一切都只是内存占用或便利性设置。

第零天的图表和这张图表之间有什么变化?
这是在从教程截图中照搬工作流之前值得了解的部分,因为 Qwen-Image-2.1 模板在首次发布后被修改了五次,而且这些修改并非表面性的。
• 2026 年 9 月 20 日——第一个模板。提交 96309bd530,“添加 Qwen Image 2.1 模板”。文生图子图中共有七个节点:加载器、编码器、空潜变量、采样器、解码器。CLIP 加载器被设置为 bfloat16 文本编码器,qwen3vl_8b_bf16.safetensors——即那个 16.33 GB 的文件。
• 2026年9月20日,当天晚些时候。提交 371a7b7171将那个加载器切换为qwen3vl_8b_int8_convrot.safetensors,即那个 8.71 GB 的文件,提交信息为“Switch Qwen Image 2.1 CLIP to int8 convrot”。该模板自身的注释将其标注为“由模板加载,内存占用更低”。根据早上的文件构建的工作流,与根据晚上的文件构建的工作流,并不是同一个工作流。
• 2026年9月25日。该Qwen Image 2.1 Cache 节点首次出现在图中,连同整个提示词增强分支——第二个 CLIP 加载器、Generate Text、Preview Any、开关、系统提示词节点。在此日期之前,没有可设置的缓存节点,也没有可关闭的重写步骤。图像编辑模板在同一天获得了匹配的输入。文生图说明在此修订中也新增了 4 百万像素这一行以及透明图像提示词包装器。
• 2026年9月28日。下载说明中新增了文件大小——这是文档层面的改动,而非图表改动,但读者用来与自己的下载管理器核对的数字正源于此。
• 2026 年 9 月 30 日。提交 9fae1041be,“Qwen Image 2.1: Update PE settings”——这是两个 2.1 模板最后一次被改动的时间。这是最重要、也最不显眼的一处。Generate Text 节点上有三个值发生了变化:token 预算 max_length从 16256 降至 4096,重复惩罚从 1.05 降至 1.0,还有 thinking从关闭改为开启,节点自身的注释现在写道,该检查点“在带有推理块的情况下训练,没有它就会损失质量”。模板注释将较早的那组取值描述为官方值,并称设置这个上限是为了让“单次重写不会持续运行好几分钟”。
没有改变的部分才是这件事中有用的那一半。采样块在初始模板和今天的模板之间逐字节完全相同:steps 25、cfg 1、euler、simple、denoise 1、种子控制 固定、Resolution Selector 输出处的空 latent、batch size 1。图从来不是靠移动采样器修好的。它是靠更改加载哪个文本编码器文件、添加缓存节点,以及修正提示词增强器自身的设置来修好的。
图之下还有一层。模板定型之后,ComfyUI 的核心仍在不断变化:9 月 29 日的 v0.38.0 改进了 Qwen 2.1 KV 缓存位置逻辑,而 10 月 5 日的 v0.39.0 发布了“修复在 qwen image 2.1 中选择 int8 或 int4 缓存时崩溃”。如果你的图是今天的最新版,而你的构建版本比这更旧,那么缓存下拉菜单就不是一个缓慢的选项,而是会直接崩溃。

读者最有可能弄错的表盘
先从文档明确陈述的内容开始,因为这样能消除大部分猜测。所有三个 Qwen-Image-2.1 工作流都使用 steps 25、cfg 1、euler 采样器和 simple 调度器进行采样。这是 ComfyUI 自己的总结说明,与随附的控件完全一致。
问题在于,25 和 40 都是不同问题的正确答案。供应商自己的模型卡在运行 diffusers 流水线时,采用的是 num_inference_steps=40,而 diffusers 流水线本身的默认值也是 40;ComfyUI 的文档称,已发布的流水线“使用 euler 采样器时大约需要 40 到 50 步,而模板从更低的 25 步开始”。这两个数字都没有错。它们一个是图的默认值,一个是参考运行值。
• 步数——方向与取舍。步数越低速度越快,而且根据 ComfyUI 的文档,其表现会因任务类型而异:简单的局部编辑在 4 到 8 步时仍能保持效果,"而重写整个画面的编辑则会失去连贯性,需要完整的 25 步"。手和手指这类顽固的精细细节"大约到 30 步才会稳定下来",而从 25 步提升到 40 步可以减少细节区域的噪点抖动。方向是单调的,取舍是线性的:文档的建议是,只有在某些具体内容无法解决时才调整步数,而不要为了保险起见而调高步数。
• 引导 — cfg 1 表示关闭引导,而这正是官方发布的路径。在 cfg 1 下,ComfyUI 会跳过负面条件处理阶段,因此负面提示词不会产生任何效果。该模板保留 cfg 1,“因为这是 Qwen-Image-2.1 官方发布的路径”;diffusers 流水线也用自己的说法表达了同样的意思,将 true_cfg_scale 默认设为 1.0,因为“Qwen-Image 2.1 本就应在无引导的情况下采样”。只有当你确实希望负面提示词生效时才调高它,并且要清楚代价:cfg 2 会更严格地遵循密集提示词,包括小号文字和数字,“代价是边缘过度锐化”;更高的值会使曝光偏向过亮或过暗;cfg 5 会严重降低质量;cfg 0.5 会破坏图像。ComfyUI 的建议是一次只改动一个值,并在固定种子下进行比较。
• 分辨率是百万像素目标,而不是一个矩形。分辨率选择器节点会设置宽高比和百万像素预算,其中 1.0 MP 约为 1024x1024。Qwen-Image-2.1 原生以 2K 生成,因此 2048x2048 正方形的目标约为 4.0 MP。模型想要的是 32 的倍数——文本编码器的 resolution 输入上的工具提示称,参考图像会被缩放到大约 resolution x resolution 像素,为 32 的倍数,并保持宽高比,而管线自身的尺寸辅助函数也会舍入到 32。厂商的模型卡公布了 2K 预设:1:1 为 2048x2048,4:3 为 2400x1792,3:4 为 1792x2400,3:2 为 2528x1696,2:3 为 1696x2528,16:9 为 2752x1536,9:16 为 1536x2752。
• 超出 2K 会损害遵循度,而非锐度。远高于模型训练所用 2K 尺寸的目标分辨率(例如 4K)会丧失提示词遵循能力。这是有文档记录的行为,而非从架构推断出的结论。
• 真正反直觉的一点:分辨率同样会改变噪声调度。 Qwen-Image-2.1 使用带有动态时间步偏移的流匹配 Euler 调度器进行采样,而流水线会根据潜变量序列的长度——也就是你所选分辨率产生的 token 数量——来计算该偏移。检查点的调度器配置在 256 到 8192 的图像序列范围内设置了 base_shift 为 0.5、max_shift 为 0.9,而流水线在每次调用时都会把你本次运行的序列长度代入该公式。因此,改变画布不仅改变了画面,也改变了采样器的调度。在 ComfyUI 模板中没有任何可设置的 shift 控件——KSampler 的输入是 model、positive、negative、latent image、seed、steps、cfg、sampler name 和 scheduler,清单就这些。如果你在 4 MP 下的结果与 1 MP 下的结果不同,而这种差异无法仅用细节来解释,原因就在这里。
• 在编辑图上,分辨率的表现不同,而且它是默认设置中单项开销最大的一项。当 custom_size 关闭时——这是模板的默认值——编辑结果会按第一张参考图的尺寸生成。resolution 为 0 时,每张参考图保持各自的像素尺寸,并取整到 32 的倍数,因此一张 3000x4000 的照片会生成 3008x4000 的画布。而大于 0 的值则会把该图像的宽高比缩放到 resolution x resolution 的像素预算——这是总像素数,而不是宽度。ComfyUI 官方给出的成本示例(在 RTX 5090 上测得):3000x4000 的参考图在 resolution 为 0 时每次迭代约需 6 秒;同样的编辑在 resolution 为 1024 时每次迭代约需 0.3 秒,尺寸约为 896x1184。开启 custom_size,从 Resolution Selector 中获取画布尺寸,并让它接近缩放后第一张图像的尺寸,“否则编辑可能会发生偏移”。
确定性:种子能固定什么,以及它不能固定什么
固定种子是必要但不充分的,而随附的模板在这一点上彼此并不一致。文生图的 KSampler 随附的控制项是 固定;两个编辑模板——图像编辑和背景移除——随附的控制项都是 随机。同一个采样器,同样的默认值,重新排队时的行为却相反。
假设随机种子已固定。以下几点仍会影响图像:
• KV 缓存。这才是重头戏,而且它有文档记载,并非坊间传闻。Qwen-Image-2.1 会在第一步之后缓存文本与参考图像的键和值;流水线源码解释说,这样做是合理的,因为在模型的因果条件化下,条件化 token 与步数无关。随后它道出了对任何想要复现某张图的人都至关重要的一点:在降低精度的情况下,切换该缓存“无法逐比特复现同一张图像”,因为解码步骤与前填充步骤所使用注意力机制的序列布局不同,二者切分图块的方式不同,因而落在不同的舍入结果上——而第一个图块处 1 ULP 的差异会被 32 个图块以及每个采样器步数不断放大,所以“这两种设置会给出同样有效但肉眼可见不同的样本”。源码自身的指示是:通过固定这个标志来固定样本。在 ComfyUI 中,该标志位于 Qwen Image 2.1 Cache 节点上,表现为 device(auto、gpu、cpu、off)和 dtype(default、int8、int4)。
• 缓存节点自身的发布历史。它在 2026 年 9 月 25 日之前并不存在,因此零日工作流没有这样的设置,也不会像如今的版本那样运行。而关闭——唯一能排除缓存的设置——“每一步都重新计算前缀,这样虽然更慢,却是排除缓存的唯一办法”。
• 哪些模型文件。该模板会加载一个 int8 扩散模型和一个 int8 文本编码器。把其中任何一个换成 bf16 文件,运算方式就随之改变。下载说明中之所以同时列出两者及其文件大小,正是因为这个选择确实存在。
• 提示词增强器,前提是它处于开启状态。当 refine_prompt 开启时,图像模型是从改写后的提示词中采样的,而不是你输入的那一条——而改写是由一个独立的 Generate Text 节点生成的,它有自己的采样参数:temperature 1.0、top_k 20、top_p 0.95,有它自己的种子字段,以及一个 max_length 的 token 预算。你的 KSampler 种子并不覆盖其中任何一项。子图内的 Preview Any 节点会显示实际送入图像模型的提示词,这是唯一能知道你刚才到底复现了什么的方法。
• ComfyUI 构建版本。 这些模板自带提示:加载工作流时出现节点缺失,通常意味着该构建版本早于这些节点,而 Desktop 和 Cloud 遵循稳定版发布节奏,可能会落后于每夜构建版。
所以,复现别人的 Qwen-Image-2.1 图像并不是换个种子就行。它取决于模板修订版本、两个模型文件、分辨率设置、步数、cfg、采样器、调度器、缓存设备与 dtype、增强器的开/关状态及其自身种子——而且对于编辑图,还包括第一张参考图的尺寸。ComfyUI 并未对这些工作流发布种子可复现性保证,diffusers 源码也明说切换缓存会改变样本;要把精确匹配当作你刻意拼装出来的结果,而不是种子随手交给你的东西。

多个图像,以及内存的去向
在出厂配置下,该图每次运行会生成一张图像,而用于改变这一行为的调节项并不起眼:EmptyLatentImage节点的第三个输入项,即批大小,接入值为1。提高它,就能让采样器从一次队列中输出多张图像。
这些开销究竟如何,正是需要坦诚以对的地方。模板会明确告诉你缓存存放在哪里—— auto 会使用空闲的显存,然后是系统内存; cpu 会在计算背后预取,文档称其几乎不损失速度; off 每一步都会重新计算前缀,因而更慢。他们还量化了精度方面: int8 将缓存减半,精度大致相当于 bf16,而 int4 将其缩减到四分之一,但每步误差大约翻倍。他们没有公布的是批大小与显存的对照表,ComfyUI 的文档也没有。如果你正在为某块显卡确定批大小,诚实的答案是:没有任何第一方数据涵盖这一点;有公开效果说明的调节手段是缓存设备与 dtype,以及分辨率目标——后者会同时提高潜空间数量与缓存前缀。
有两个批次陷阱位于围栏的另一侧,也就是在 diffusers 管道中,两者都值得了解,因为 ComfyUI 的计算图把它们隐藏了起来。在那里,num_images_per_prompt会成倍放大批次规模,而如果你传入一个生成器列表,其长度必须与有效批次大小完全一致,否则管道会报错。而且条件图像列表是“一组由批次中每个提示词共享的图像,而不是每个提示词对应一个条目”——你无法为批次中的每个提示词分别提供各自的参考图像;源文档的指示是改为对每个提示词各调用一次管道。编辑子图在另一处存在形式相同的约束:它的BatchImagesNode最多将十张参考图像批处理送入文本编码器,这是对输入进行批处理,而不是对输出。十张参考图并不会给你十张图片。
来自同一张图像的图像到图像
你不需要为此另做一张图。图像编辑模板就是文生图链路,只是把空潜变量换成文本编码器的潜变量输出,然后是两个 LoadImage 节点,把 image_1 和 image_2 送入子图的参考槽位,末尾再放一个 ImageCompare 节点,这样你就能把输入和输出并排对比。在 image_1 里放一张图,把 image_2 留空,写一条指令,这就是图生图:你的图片是模型读取的上下文,而不是它部分去噪的起始潜变量。这条路径上没有强度或去噪滑块需要设置,因为目标从噪声开始,而你的参考图是通过编码器和 VAE 进入的。
下面用一句话分别说明界限,因为这两者只差一次搜索,而人们往往会拿错那一个。
• 图生图是指当你想要一个变体时:把一张图片和一段描述交给模型,它就会在你选定的画布上绘制出一张与你的图片相似的新图。
• 编辑是指你想要做出更改时:你把一张图像和一条指明哪些地方应当不同的指令交给模型,还可选择附上遮罩或涂抹标记,而模型会保留画面其余部分。
破绽就在你即将输入的那句话里。“让它看起来像这样,但换成夜晚”是 i2i;“把夹克改成红色,其余一律不动”是编辑,而在这张图上,编辑路径才是遮罩、十个参考槽位和局部编辑行为所栖身的地方。那个相邻的问题属于另一个页面的主题,而本篇则止步于这条分界线,好让你分辨自己正走在哪一条上。
Turbo 检查点,一段话说明
这里要加一条交叉引用,因为 turbo 这个拼写就落在该查询词族里,读者总会遇到它。Qwen-Image-2.1-Turbo 是同一套 7B 视觉生成架构的另一个独立 8 步 checkpoint,发布于 2026 年 10 月 9 日,同样由 QwenImage21Pipeline 加载。它自己的 model card 写道,该 checkpoint“包含其推荐的采样调度,因此无需手动配置调度器即可直接使用”;默认情况下生成使用 CFG 1;并且仅设置 num_inference_steps 并不会覆盖已保存的调度——只有在调用时显式传入 sigmas 参数才会覆盖。这些都不改变本页上的节点链:相同的加载器、相同的编码器、相同的采样器节点。改变的只是调度从何而来,而这正是你在把一次 turbo 运行与一次基础模型运行作比较、并据此断定模型变差之前,值得在自己图里检查的唯一一件事。
接下来在图表中做什么
从 ComfyUI 的模板库加载模板,而不是从截图加载,然后在排队任何任务之前先读四个节点。在Resolution Selector上,设置你真正想要的宽高比,如果想要模型原生的 2K,就把目标设为 4.0 MP。在KSampler上,如果想复现某次运行,就确认 control 为fixed;在出现具体故障之前,steps 保持 25、cfg 保持 1。在Qwen Image 2.1 Cache上,现在就决定device 和 dtype并写下来,因为之后你无法更改它们,却还把两张图当作只有提示词变了来比较。而在Generate Text节点上,先让refine_prompt保持关闭,直到你有一个满意的基线——然后再打开它,在Preview Any 中查看重写后的内容,并保持你原先使用的 seed,这样比较才有意义。
