Skip to content
🧠 模型×任务工作流第 7 / 16 节

FLUX.1 Kontext:角色一致性的多轮迭代修图 ​

FLUX.1 Kontext 是 Black Forest Labs 的多模态图像编辑模型:文字和图片一起输入,它先看懂画面上下文,再按指令精确动手。开源的 dev 版是 12B 参数的扩散 Transformer,官方最强调的能力是角色一致性——同一个角色迭代编辑多轮,面部特征和构图布局依然保持稳定。

这一页带你把官方 FLUX Kontext 工作流从头跑通:装好 fp8 权重四件套,用官方模板跑出第一轮指令修图,再把结果一轮轮喂回去,体验「改了三轮,人还是那个人」的迭代编辑。

学完你能做什么 ​

  • 跑通官方 FLUX Kontext 工作流:模板加载 → 四件套归位 → 第一轮指令修图出图
  • 用英文指令做角色一致性修图:换装、换背景,脸和姿势不跑偏
  • 多轮迭代编辑:把上一轮结果喂回下一轮,改几轮后角色依然稳定
  • 玩转双图参考:角色图 + 风格图拼接,按指定风格给角色换场景
  • 记住 Kontext 的铁律:提示词仅英文、cfg 1、20 步采样

你现在的困境 ​

  • 好不容易抽到一个满意的角色,想换套衣服,重新生成一张——脸变了
  • 用图生图硬改:重绘幅度调大全图跑偏,调小等于没改
  • 听说 Kontext 能「一句话修图」,但不知道 ComfyUI 里下哪个文件、节点怎么连

什么时候用这一招 ​

当你需要:

  • 同一个角色反复打磨:换装、换背景、换动作,长相和画风保持一致
  • 指令式编辑:一句话说清改哪里,画面其他部分原样保留
  • 风格参照:给一张参考图,让模型按这个风格生成新画面
  • 本地跑 12B 开源模型,不依赖云端编辑 API

而且不想:

  • 每改一处就重新抽卡,角色一致全靠运气
  • 蒙版圈范围一点点抹——那是下一课 FLUX.1 Fill 的活儿

🎒 开始前的准备 ​

  • 跑通了FLUX.1 文生图:四件套目录规则、cfg 1 这些 FLUX 家族共识都在那一课
  • 会加载模板、写提示词、按 Ctrl+Enter 运行(忘了回看第一次生图)
  • 硬盘预留约 16.5GB:扩散模型 11.09GB + t5xxl fp8 版 4.8GB + clip_l 234.7MB + VAE 319.8MB(上一课装过 clip_l / t5xxl / ae 的直接复用,只需新下扩散模型)
  • ComfyUI 更新到较新版本:这个模板要求 0.3.42 以上(用到了子图功能)
  • 网络能连 Hugging Face;连不稳就走 ModelScope 国内镜像(第 2 步给地址)
  • 准备一张要修的图——人像、产品图、插画都行;想跟官方示例对齐,就顺手下载官方示例图
  • 一杯水 ☕——本课最大的等待还是下模型

核心思路 ​

Kontext 和普通图生图不是一回事。 普通图生图拿你的图当起点重新生成,改动多少靠重绘幅度(denoise)控制,幅度一大整张图都会跟着漂。Kontext 是多模态编辑模型:官方介绍它的方式是「同时接收文本和图像输入,理解图像上下文后做精确编辑」——只对指令涉及的部分动手,其他部分不动。

官方给 Kontext 套件列的四项核心能力:

能力说明
角色一致性跨多个场景和环境,保留图中的参考角色或物体——多轮编辑后特征依然稳定
精准编辑只改指定元素,不影响画面其他部分
风格参照按文字提示生成新场景,同时保留参考图的独特风格
交互速度生成与编辑延迟低,适合来回改

三个版本,本页跑 dev:

版本定位用法
FLUX.1 Kontext Pro商业版,主打快速迭代编辑ComfyUI 里走 Partner Nodes API
FLUX.1 Kontext Max实验版,提示词遵循更强同上,API 调用
FLUX.1 Kontext Dev开源版,12B 参数,官方定位研究用途本页:本地部署

角色为什么不跑偏? 看数据流就明白——你的图在进 KSampler 之前走了两条路:

Load Image ─→ ImageStitch(双图参考时拼接)─→ FluxKontextImageScale(缩到优选分辨率)
                                              │
                                              └→ VAEEncode ─┬→ KSampler(latent_image:起始画布)
                                                             └→ ReferenceLatent ─→ FluxGuidance ─→ KSampler(positive)
CLIPTextEncode(英文指令)──┬─→ ReferenceLatent(把原图 latent 挂进条件)
                            └─→ ConditioningZeroOut ─→ KSampler(negative:置零)
UNETLoader(kontext 模型)────────────────────────→ KSampler
KSampler ─→ VAEDecode ─→ Save Image

关键在 ReferenceLatent(节点库里的显示名是 Set Reference Latent):它把原图编码后的 latent 挂进正向条件,等于告诉模型「这是要参考的画面,改的时候照着保持」。源码注释还写明:模型支持时可以链式串联多个 ReferenceLatent,一次参考多张图——第 6 步会用到这个思路。

FluxKontextImageScale 是 Kontext 专属预处理:官方节点描述就一句话——把图缩放到「对 Flux Kontext 更优」的分辨率。具体逻辑(源码):按长宽比从 17 档优选分辨率里选最接近的一档,从 672×1568(竖)到 1568×672(横),正中间是 1024×1024,总像素都在 1MP 上下。

跟我做 ​

第 1 步:加载官方 FLUX Kontext 工作流模板 ​

为什么:官方模板已经配好了参数、模型下载链接和提示词技巧便签,你只需要换成自己的图和指令就能跑起来。

操作:左侧栏 Templates 打开模板库,搜 Kontext,选「Flux Kontext Dev 图像编辑」(模板 ID flux_kontext_dev_basic)。不想用模板库,就下载 JSON 再用菜单 Workflows → Open(Ctrl+O)打开:flux_kontext_dev_basic.json。模板库的完整玩法见模板库。

你应该看到:画布是一个紧凑的三节点结构——Load Image(引用官方示例图 flux_kontext_dev_basic_input_image.jpg)→ 一个名为 Image Edit (Flux.1 Kontext Dev) 的子图节点 → Save Image。子图节点表面直接暴露 prompt、seed 和四个模型文件下拉框。旁边还有一个默认旁路(bypass)的第二个 Load Image,以及两张便签:一张写满模型下载链接,一张是官方提示词技巧(第 4 步会用到)。

  • 模板加载成功,画布上能看到子图节点和两张便签

第 2 步:下载 Kontext dev 四件套并归位 ​

为什么:Kontext 是独立训练的编辑模型,不能拿上一课的 flux1-dev 凑数;四个文件各归其位,loader 的下拉列表才找得到。

操作:从 Hugging Face 下载四个文件(模板便签附了全部链接):

文件大小放进哪个子目录下载
flux1-dev-kontext_fp8_scaled.safetensors11.09 GBmodels/diffusion_models/Hugging Face · ModelScope 镜像
clip_l.safetensors234.7 MBmodels/text_encoders/Hugging Face
t5xxl_fp8_e4m3fn_scaled.safetensors(或 t5xxl_fp16.safetensors)4.8 GB(fp16 版 9.12 GB)models/text_encoders/Hugging Face
ae.safetensors319.8 MBmodels/vae/Hugging Face · ModelScope 镜像

目录结构长这样:

ComfyUI/
├── models/
│   ├── diffusion_models/
│   │   └── flux1-dev-kontext_fp8_scaled.safetensors
│   ├── text_encoders/
│   │   ├── clip_l.safetensors
│   │   └── t5xxl_fp8_e4m3fn_scaled.safetensors
│   └── vae/
│       └── ae.safetensors

💡 上一课的文件能复用吗?

clip_l、t5xxl、ae 三个文件与 FLUX.1 文生图通用,装过就直接复用——只有扩散模型必须新下:flux1-dev-kontext_fp8_scaled.safetensors 是 Kontext 专用权重,和文生图的 flux1-dev.safetensors 是两个文件,互不通用。国内下载走 ModelScope 镜像(上表已附)。

放好后画布上按 r 刷新,子图的四个下拉框选中对应文件(或双击进子图,在 loader 节点里选)。

你应该看到:红色缺失警告全部消失,下拉框显示正确的文件名。

  • 四个文件各归其位,子图上的模型下拉框都选中了文件

第 3 步:读懂 Kontext 修图的节点链 ​

为什么:知道图和指令在哪汇合、哪些参数能动,后面调参排错才有方向。

操作:双击子图节点进入内部,逐节点对照这张表:

节点干什么模板里的关键参数
UNETLoader(Load Diffusion Model)装 Kontext 扩散模型flux1-dev-kontext_fp8_scaled.safetensors
DualCLIPLoader一次装两个文本编码器第一格 clip_l.safetensors,第二格 t5xxl_fp8_e4m3fn_scaled.safetensors,type flux
VAELoader(Load VAE)装 VAEae.safetensors
ImageStitch双图参考时把第二张图拼到右边默认单图直通
FluxKontextImageScale缩放到 Kontext 优选分辨率17 档、约 1MP,按比例就近
VAEEncode把图编码成 latent—
CLIPTextEncode编码英文指令(正向条件)输出分两路:置零与挂参考
ReferenceLatent把原图 latent 挂进正向条件显示名 Set Reference Latent
ConditioningZeroOut负向条件置零cfg 1,不需要负向提示词
FluxGuidanceFLUX 专属引导强度2.5
KSampler去噪采样20 步、cfg 1、euler、simple、denoise 1.0
VAEDecode → SaveImage解码并保存文件前缀 flux.1_kontext_dev,落 ComfyUI/output/

DualCLIPLoader 的格子顺序沿用 FLUX 家族配方:第一格 clip_l、第二格 t5xxl、type 选 flux(源码依据在上一课讲过)。

你应该看到:从左到右能说出每个节点的职责;能指出「图走了两条路——一条进 KSampler 当起始画布,一条挂进条件当参考」。

  • 我能说出 ReferenceLatent 的作用和 KSampler 的关键参数

第 4 步:写英文编辑指令,跑出第一轮修图 ​

为什么:Kontext 的输入 = 图 + 指令。官方教程明说:提示词仅支持英文——指令写得具体,改得才准。

操作:

  1. 在子图的 prompt 框写指令。官方模板自带的示例是一段风格参照指令:
text
Using this elegant style, create a portrait of a swan wearing a pearl tiara and lace collar, maintaining the same refined quality and soft color tones.
  1. 想先试最基础的单点修改,就换成官方便签里的例子:Change the car color to red
  2. Load Image 节点换成你自己的图(或上传官方示例图)
  3. 点 Run(旧界面叫 Queue),或按 Ctrl+Enter

指令四原则(官方便签「核心原则」节):

原则怎么做
具体清晰用精确描述,别用模糊指代——写「the woman with short black hair」,别只写「she」
分步编辑复杂修改拆成多轮简单指令——先改背景,再改动作
显式保留写明什么不能变:while maintaining the same facial features, hairstyle, and expression
动词选择用 change、replace,别用 transform(后者容易把主体整个重画)

四个万能公式(官方便签「最佳实践模板」节,方括号换成你的内容):

场景公式
物体修改Change [object] to [new state], keep [content to preserve] unchanged
风格迁移Transform to [specific style], while maintaining [composition/character] unchanged
背景替换Change the background to [new background], keep the subject in the exact same position and pose
文字编辑Replace '[original text]' with '[new text]', maintain the same font style

你应该看到:进度条走满 20 步,SaveImage 出图——指令提到的元素变了,没提的部分保持原样。

  • 第一轮修图出图:改动的部分符合指令,其余画面没跑偏

第 5 步:多轮迭代——把上一轮结果喂回下一轮 ​

为什么:迭代是 Kontext 的招牌——官方介绍强调,多轮迭代编辑后角色特征和构图布局依然保持稳定。迭代的心法只有一句话:上一轮的输出,是下一轮的输入。

操作:

方式 A:用模板自带的 Load Image,重新上传(最简单) ​

第一轮跑完,结果图已经存进 ComfyUI/output/。把它重新上传进 Load Image 节点(替换掉第一轮的输入图),改一句指令,再按 Ctrl+Enter。

方式 B:换上 Load Image(from output) 节点(官方推荐的迭代姿势) ​

官方教程专门介绍过这个节点:从 output 目录取图,多轮编辑时拿上一轮结果更方便。节点自带刷新按钮,点一下会更新文件列表并自动选中第一张——源码里的节点描述原话就是「方便迭代」。

做法:添加一个 Load Image(from output) 节点(在节点搜索里输入 output image 或 previous generation 也能找到它),把它的 IMAGE 输出连到子图的 image1 输入,替换原来 Load Image 的那根线。

迭代节奏(官方便签「角色一致性」节的建议):复杂修改拆成多轮简单指令——先改背景,再改动作。每轮只提一个改动点,保留语句照写。

你应该看到:第二轮的输入是第一轮的输出。两轮下来,角色的脸、发型、表情还是同一个人,构图没漂。

  • 连改两轮,角色仍是同一个人

第 6 步:双图参考——角色图加风格图(可选) ​

为什么:想让角色按另一张图的风格出场,一张参考图不够——Kontext 支持多图参考,模板里已经预埋了第二个取图入口。

操作:

  1. 把默认旁路的第二个 Load Image 节点取消旁路(切回启用),上传风格参考图
  2. 子图里的 ImageStitch 会把两张图左右拼成一张,作为共同参考
  3. 指令里写清要什么——官方模板自带的示例就是这种用法:用这种优雅风格,创作一只戴珍珠头饰和蕾丝领的天鹅肖像,同时保持精致的质感与柔和的色调

想参考更多图? 子图便签给了另一条路:不用拼接——每张图单独用 VAEEncode 编码,再用 ReferenceLatent 链式串联多个 latent 条件(源码注释:模型支持时可链式设置多张参考图);输出尺寸用 EmptySD3LatentImage 节点接 KSampler 的 latent_image 来自定义。

你应该看到:输出同时带上两张参考的信息——角色来自图 A,风格来自图 B。

  • 双图参考跑通:角色和风格各取所需

检查点 ✅ ​

  • 第一轮指令修图跑通:模板 + 四件套 + 英文指令
  • 连续迭代两三轮,角色的脸和构图没跑偏
  • 说得出 ReferenceLatent 的作用:把原图 latent 挂进正向条件当参考
  • 记住铁律:提示词仅英文、cfg 1、20 步、guidance 2.5
  • (可选)双图参考跑通,角色与风格分开控制

踩坑提醒 ​

❌ 提示词写中文 ​

原因:官方教程明说 Kontext 提示词仅支持英文,中文指令模型不认。正确做法:先用中文想清楚改什么,再翻成英文写进 prompt;「保留什么不变」也要用英文写明。

❌ 一条指令把人整个换掉 ​

text
❌ Transform the person into a Viking
✅ Change the clothes to be a viking warrior while preserving facial features

原因:transform 这类词让模型把主体整个重画,角色特征跟着跑偏——这是官方便签里的典型错误示例。正确做法:用 change/replace 指定改哪件东西,再补一句保留特征。

❌ 改背景时人跟着挪位置 ​

text
❌ Put him on a beach
✅ Change the background to a beach while keeping the person in the exact same position, scale, and pose

原因:没写「位置、比例、姿势不变」,模型理解成重新构图。正确做法:套背景替换公式,保留语句三件套(position、scale、pose)写全。

❌ 拿 flux1-dev.safetensors 当 Kontext 用 ​

原因:flux1-dev 是文生图权重,flux1-dev-kontext 才是编辑权重,两个文件互不通用;文件放错子目录 loader 也找不到。正确做法:按第 2 步的表格下载归位;还找不到就看模型加载失败。

进阶技巧(可选) ​

🔧 风格迁移指令的三种写法(官方便签「风格迁移」节,可组合):明确命名风格——Transform to Bauhaus art style;描述风格特征——Transform to oil painting with visible brushstrokes, thick paint texture;保留构图——Change to Bauhaus style while maintaining the original composition。

🔧 图里的文字也能改:用引号包住原文和新文——Replace 'joy' with 'BFL',再补一句 maintaining the same font style 保持字体不变(官方便签「文字编辑」节)。

🔧 想用原版权重:模板用的 fp8_scaled 是官方打包的量化版;要原始权重,官方 Tip 指路——去 Black Forest Labs 的相关仓库获取。

🔧 修图路线怎么选:全图范围的指令式编辑用本课 Kontext;圈定范围的局部重绘、扩图用下一课 FLUX.1 Fill;多参照一致性上 FLUX.2 和 FLUX.3 Klein;想用中文指令修图,看 Qwen-Image-Edit 和 Qwen-Image-2.1。

本课小结 ​

✅ FLUX Kontext 工作流跑通了:模板加载 → 四件套归位 → 英文指令 → 20 步出图。

✅ 角色一致性的两根支柱会用了:结构上靠 ReferenceLatent 把原图挂进条件;指令上靠「change/replace + 显式保留 + 分步迭代」。

✅ 多轮迭代会喂图了:输出变输入;用 Load Image(from output) 节点从 output 目录取图,免来回上传。

✅ 铁律记住了:提示词仅英文、cfg 1、20 步 euler/simple、guidance 2.5。

关键配置回顾:

配置推荐值说明
扩散模型flux1-dev-kontext_fp8_scaled.safetensors(11.09 GB)放 models/diffusion_models/;注意文件名带 kontext
文本编码器clip_l.safetensors + t5xxl_fp8_e4m3fn_scaled.safetensors(4.8 GB)放 models/text_encoders/;显存充裕可换 t5xxl_fp16.safetensors(9.12 GB)
VAEae.safetensors(319.8 MB)放 models/vae/;与 FLUX.1 文生图通用
DualCLIPLoader第一格 clip_l、第二格 t5xxl、type fluxFLUX 家族配方
KSampler20 步、cfg 1、euler、simple、denoise 1.0官方模板配置
FluxGuidance2.5官方模板默认
提示词仅英文;change/replace + 保留语句官方明说仅支持英文
保存前缀flux.1_kontext_dev输出落 ComfyUI/output/,迭代时从这里取图

下一课预告 ​

Kontext 是「整图范围」的指令编辑;下一课的 FLUX.1 Fill 专攻「圈定范围」:蒙版圈哪改哪。下一课:FLUX.1 Fill:局部重绘与扩图。

你会学到:

  • FLUX.1 Fill 的模型下载与部署
  • 局部重绘(inpaint):蒙版圈定范围,只改选区内的内容
  • 扩图(outpaint):把画面边界向外扩展,方图变横图
  • Fill 与 Kontext 的分工:改局部用 Fill,全图指令编辑用 Kontext
搞懂AI关于我们怎么写隐私说明

独立的第三方教程,与文中提到的任何产品及其公司没有隶属或合作关系;产品名称和商标归各自所有者。价格和政策以官方页面为准。