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.safetensors | 11.09 GB | models/diffusion_models/ | Hugging Face · ModelScope 镜像 |
clip_l.safetensors | 234.7 MB | models/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.safetensors | 319.8 MB | models/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) | 装 VAE | ae.safetensors |
| ImageStitch | 双图参考时把第二张图拼到右边 | 默认单图直通 |
| FluxKontextImageScale | 缩放到 Kontext 优选分辨率 | 17 档、约 1MP,按比例就近 |
| VAEEncode | 把图编码成 latent | — |
| CLIPTextEncode | 编码英文指令(正向条件) | 输出分两路:置零与挂参考 |
| ReferenceLatent | 把原图 latent 挂进正向条件 | 显示名 Set Reference Latent |
| ConditioningZeroOut | 负向条件置零 | cfg 1,不需要负向提示词 |
| FluxGuidance | FLUX 专属引导强度 | 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 的输入 = 图 + 指令。官方教程明说:提示词仅支持英文——指令写得具体,改得才准。
操作:
- 在子图的 prompt 框写指令。官方模板自带的示例是一段风格参照指令:
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.- 想先试最基础的单点修改,就换成官方便签里的例子:
Change the car color to red - Load Image 节点换成你自己的图(或上传官方示例图)
- 点 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 支持多图参考,模板里已经预埋了第二个取图入口。
操作:
- 把默认旁路的第二个 Load Image 节点取消旁路(切回启用),上传风格参考图
- 子图里的 ImageStitch 会把两张图左右拼成一张,作为共同参考
- 指令里写清要什么——官方模板自带的示例就是这种用法:用这种优雅风格,创作一只戴珍珠头饰和蕾丝领的天鹅肖像,同时保持精致的质感与柔和的色调
想参考更多图? 子图便签给了另一条路:不用拼接——每张图单独用 VAEEncode 编码,再用 ReferenceLatent 链式串联多个 latent 条件(源码注释:模型支持时可链式设置多张参考图);输出尺寸用 EmptySD3LatentImage 节点接 KSampler 的 latent_image 来自定义。
你应该看到:输出同时带上两张参考的信息——角色来自图 A,风格来自图 B。
- 双图参考跑通:角色和风格各取所需
检查点 ✅
- 第一轮指令修图跑通:模板 + 四件套 + 英文指令
- 连续迭代两三轮,角色的脸和构图没跑偏
- 说得出 ReferenceLatent 的作用:把原图 latent 挂进正向条件当参考
- 记住铁律:提示词仅英文、cfg 1、20 步、guidance 2.5
- (可选)双图参考跑通,角色与风格分开控制
踩坑提醒
❌ 提示词写中文
原因:官方教程明说 Kontext 提示词仅支持英文,中文指令模型不认。正确做法:先用中文想清楚改什么,再翻成英文写进 prompt;「保留什么不变」也要用英文写明。
❌ 一条指令把人整个换掉
❌ Transform the person into a Viking
✅ Change the clothes to be a viking warrior while preserving facial features原因:transform 这类词让模型把主体整个重画,角色特征跟着跑偏——这是官方便签里的典型错误示例。正确做法:用 change/replace 指定改哪件东西,再补一句保留特征。
❌ 改背景时人跟着挪位置
❌ 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) |
| VAE | ae.safetensors(319.8 MB) | 放 models/vae/;与 FLUX.1 文生图通用 |
| DualCLIPLoader | 第一格 clip_l、第二格 t5xxl、type flux | FLUX 家族配方 |
| KSampler | 20 步、cfg 1、euler、simple、denoise 1.0 | 官方模板配置 |
| FluxGuidance | 2.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