FLUX.2 [pro] 挂不了 LoRA。 截至 2026 年 10 月 2 日,它在 BFL 官方 API 和 fal 上的请求参数里都没有 LoRA 字段,让同一件商品在不同场景里保持一致,靠的是参考图:API 一次最多传 8 张。想用 LoRA,有两条别的路:BFL 自己的 FLUX.2 [klein] 微调端点(公测,LoRA 要自己训练后上传),或者 fal 上基于 FLUX.2 [dev] 的托管训练加 LoRA 推理。
三条路线在 n8n 里的接法几乎一样,都是“提交任务 → 等待 → 轮询状态 → 下载保存”,区别只在端点、鉴权头和请求体里的几个字段。先按自己的情况对号入座:
| 你的情况 | 路线 | 一致性靠什么 | 1 MP 单张标价 | 前期投入 |
|---|---|---|---|---|
| SKU 多,每款只出几张 | BFL:FLUX.2 [pro] + 参考图 | 每次请求带商品图,最多 8 张 | $0.03,每张参考图加 $0.015 | 无 |
| 少量主打款或统一品牌风格,出图量大,账单想留在 BFL | BFL:FLUX.2 [klein] -finetuned 端点 | 自己训练的 LoRA,每次请求 1 个 | 9B 为 $0.015 | 自备显卡训练并上传 |
| 同样是大批量,但不想自己搭训练环境 | fal:FLUX.2 [dev] LoRA | 托管训练的 LoRA,最多叠 3 个 | $0.021 | 每个 LoRA 训练费 $6.40(1,000 步) |
价格分别来自 BFL 价目表和 fal 的模型页,都是美元标价,会变动。下面的节点设置按 BFL、fal 和 n8n 的官方文档整理,没有经过实际运行和付费调用,接批量之前先用一条商品数据单独跑通。
FLUX.2 [pro] 能挂 LoRA 吗:BFL 和 fal 的端点都没有这个字段
不能。BFL 的 FLUX.2 [pro] 接口文档列出的字段是 prompt、input_image 到 input_image_8、width、height、seed、safety_tolerance、output_format、webhook_url、webhook_secret、disable_pup,里面没有 finetune_id,也没有任何 LoRA 相关参数。fal 上的 fal-ai/flux-2-pro 同样没有 loras 参数。BFL 没有写过“[pro] 不支持 LoRA”这句话,这个结论来自两处参数表里都找不到入口,加上 BFL 的 LoRA 文档只列了 [klein] 系列。
让人以为可以,主要有三个原因:
- “FLUX.2 支持 LoRA”这句话对整个家族成立,对 [pro] 不成立。BFL 的 FLUX.2 LoRA 推理文档只提供 [klein] 的
-finetuned端点,没有 [pro]、[max]、[flex] 的对应端点。 - fal 的 LoRA 端点 ID 是
fal-ai/flux-2/lora,名字里不带型号,页面说明才写明它跑的是 FLUX.2 [dev]。 - 一些第三方介绍页把“FLUX 2 Pro 支持 LoRA 微调”当成卖点,这和上面两份第一方参数表对不上。
BFL 在 2026 年 10 月 1 日又发布了 FLUX 3 Image。这里的结论只针对 FLUX.2,新模型能不能用 LoRA 要看它自己的文档;FLUX.2 各端点仍在价目表上照常计价。
三条路线怎么选:先看 SKU 数量和每款出图量
每款商品只出几张图时,LoRA 的训练成本摊不下来,用 [pro] 加参考图;同一个对象要出几百张以上时,LoRA 的单张价格更低,才值得训练。
SKU 多、每款几张:选 FLUX.2 [pro] + 参考图。不用训练,新品上架当天就能进工作流,商品图直接从表格里的图片链接传进去。以 100 个 SKU、每款 5 张为例,500 张 × $0.045 = $22.50;同样的量如果每款都在 fal 上训练一个 LoRA,光训练费就是 100 × $6.40 = $640。
少量主打款,或者要统一的品牌风格:LoRA 更合适。一个 LoRA 学的可以是一件商品,也可以是一种拍摄风格(固定的布光、背景、色调),后者能跨 SKU 复用,摊薄得更快。
用 LoRA 时选 BFL 还是 fal:
- 想把充值、账单、密钥都留在 BFL 一处,并且手头有显卡,走 [klein]
-finetuned端点。它在公测期,BFL 明确说价格、参数和端点名在正式发布前都可能调整;每次请求只能用 1 个 LoRA。 - 不想自己搭训练环境,或者需要同时叠加“商品 LoRA + 风格 LoRA”,走 fal:训练和推理都是 API 调用,
loras数组最多放 3 个。
三条路线跑的是三个不同的模型,价格表比不出画质。换路线之前,用同一款商品在两边各出一小批对比,再决定。
n8n 工作流骨架:提交、等待、轮询、下载四步通用
BFL 和 fal 的图片接口都是异步的:提交请求只返回一个任务地址,图片要稍后去取。所以 n8n 里不能只放一个 HTTP Request 节点,需要下面这条链路。

| 顺序 | 节点 | 作用 | 关键设置 |
|---|---|---|---|
| 1 | 表格或触发器 | 读入商品行 | 每行至少有商品图链接、场景提示词、SKU 编号 |
| 2 | Loop Over Items | 分批处理 | Batch Size 先设 1,跑通后再加大 |
| 3 | HTTP Request(提交任务) | POST 到生成端点 | Header Auth 凭证,JSON 请求体 |
| 4 | Wait | 暂停几秒 | Resume 选 After Time Interval |
| 5 | HTTP Request(查询状态) | GET 任务地址 | 地址取自第 3 步的返回值 |
| 6 | If | 判断是否完成 | 未完成回到 Wait,失败走错误分支 |
| 7 | HTTP Request(下载图片) | GET 图片地址 | Response Format 选 File |
| 8 | 存储节点 | 写入网盘或对象存储,回填表格 | 文件名带 SKU 编号 |
凭证:BFL 用 x-key,fal 用 Authorization: Key
BFL 和 fal 都用请求头传密钥。在 HTTP Request 节点的 Authentication 里选 Generic Credential Type,再选 Header Auth,新建两个凭证:
- BFL:Name 填
x-key,Value 填 API Key。 - fal:Name 填
Authorization,Value 填Key加上你的 FAL Key(Key后面有一个空格)。
把密钥放在凭证里而不是写进请求头字段,导出或分享工作流时才不会泄露。
提交任务:POST 之后拿到的是轮询地址
以 BFL 为例,提交节点的 Method 选 POST,URL 填 https://api.bfl.ai/v1/flux-2-pro,打 开 Send Body,Body Content Type 选 JSON。成功后返回的 JSON 里有 id、polling_url,以及这次请求的 cost、input_mp、output_mp。把 cost 一并写回表格,对账时用得上(1 个 credit 等于 $0.01)。
BFL 的接入说明要求:用 api.bfl.ai、api.eu.bfl.ai 或 api.us.bfl.ai 提交时,必须用返回的 polling_url 去查状态,不要自己拼地址。
Wait、查询状态与 If:循环到 Ready 为止
Wait 节点的 Resume 选 After Time Interval。n8n 的 Wait 文档说明,等待时间少于 65 秒时执行数据留在内存里、不落库,轮询用的几秒间隔正好落在这个范围。BFL 的示例代码每 0.5 到 1 秒查一次,文档没有规定最小间隔;在 n8n 里可以先从 3 到 5 秒起步,按实际排队情况再调。
查询状态的节点用 GET,同一个 x-key 凭证,URL 用表达式引用提交节点的输出:
{{ $('提交任务').item.json.polling_url }}这里不能写成 {{ $json.polling_url }}:循环回来之后,进入这个节点的数据是上一次查询的结果,里面没有 polling_url。'提交任务' 换成你给提交节点起的名字。
If 节点判断 {{ $json.status }}:
- 等于
Ready:走下载分支,图片地址在result.sample。 - 等于
Error或Failed:走错误分支,把 SKU 编号和返回内容记到表格里,不要重新回到 Wait。 - 其他状态:连回 Wait 节点,继续等。
再加一个轮询次数上限(例如用 Edit Fields 节点累加计数,超过若干次就走错误分支),避免某个任务卡住时工作流无限循环。
下载保存:BFL 的图片地址 10 分钟后失效
result.sample 是带签名的临时地址,BFL 文档写明有效期只有 10 分钟,不开启 CORS,也不建议直接给终端用户访问。所以表格里不能只存这个链接,必须在同一次执行里把文件下载下来:
- HTTP Request 节点,GET
{{ $json.result.sample }},不需要带凭证。 - Options 里的 Response Format 选 File,Put Output in Field 保持
data。 - 后面接你的存储节点(网盘、对象存储或自建服务器),再把自己的文件地址回填到商品行。
如果 n8n 部署在有出站限制的网络里,放行 delivery.*.bfl.ai 这个通配域名,BFL 说明区域前缀会变。
批量:BFL 最多 24 个任务同时进行
BFL 账号同时进行的任务上限是 24 个,超过会返回 429,要等前面的任务结束;余额用完返回 402。Loop Over Items 的 Batch Size 不要超过 24,建议先设为 1,让每个商品完整走完“提交到保存”再处理下一个,确认循环和节点引用都正确后再提高。HTTP Request 节点的 Options → Batching 里还有 Items per Batch 和 Batch Interval(毫秒)可以控制发请求的节奏。
n8n 有公网地址时,也可以不轮询:BFL 请求体支持 webhook_url,fal 的队列接口同样支持回调,Wait 节点的 Resume 选 On Webhook Call 即可。轮询的好处是自建在内网的 n8n 也能用。
路线一:FLUX.2 [pro] 加参考图的请求体
端点 POST https://api.bfl.ai/v1/flux-2-pro。这是固定快照,适合要求结果可复现的批量流 程;/v1/flux-2-pro-preview 指向最新版本。请求体:
{
"prompt": "把图中的保温杯放在浅色木质餐桌上,早晨侧逆光,背景是虚化的厨房,杯身颜色、形状和标签保持不变",
"input_image": "{{ $json.product_image_url }}",
"width": 1024,
"height": 1024,
"output_format": "jpeg"
}input_image可以是图片 URL 或 base64;多角度或细节图依次放进input_image_2到input_image_8。BFL 的图像编辑文档写的上限是 API 8 张、Playground 10 张,输出最大 4 MP。- 计费按百万像素向上取整,参考图和输出分别计算,1 MP = 1024 × 1024。把白底商品图控制在 1024 × 1024 以内,一张参考图就只算 1 MP。
- 同一款商品要出多个场景时,只换
prompt,参考图不变;需要复现某张图时把seed固定下来。
路线二:BFL 的 [klein] -finetuned 微调端点(公测)
这条路线的 LoRA 要自己准备:按 BFL 的训练指南,用 AI-Toolkit 或 Diffusers 针对 FLUX.2 [klein] Base 模型训练,最低配置是 4B Base 12 GB 显存、32 GB 内存,9B Base 22 GB 显存、64 GB 内存。训练完成后:
- 在 BFL Dashboard 的 Customization → Finetunes 里点 Add Finetune,选择对应的基础模型,上传
.safetensors文件。 - Name 只能用小写字母、数字、连字符和下划线,这个名字就是请求里的
finetune_id;可以顺便设一个触发词。 - 在 n8n 的提交节点里把 URL 换成与基础模型对应的端点,例如
https://api.bfl.ai/v1/flux-2-klein-9b-finetuned。
{
"prompt": "ohwx 保温杯放在露营桌上,傍晚暖光,浅景深",
"finetune_id": "my-thermos-lora",
"finetune_strength": 1.0,
"width": 1024,
"height": 1024
}要注意的限制都写在 LoRA 推理文档里:
- 端点必须和 LoRA 的基础模型一致。给 9B 训练的 LoRA 调
flux-2-klein-4b-finetuned会直接失败。可选端点有flux-2-klein-4b-finetuned、flux-2-klein-9b-finetuned、flux-2-klein-9b-kv-finetuned、flux-2-klein-9b-kv-bf16-finetuned、flux-2-klein-base-4b-finetuned、flux-2-klein-base-9b-finetuned。 - 每次请求只接受一个
finetune_id,不能叠加多个 LoRA。 finetune_strength默认 1.0。如果不管提示词写什么,出图都像训练集,固定seed在 0.7 到 0.9 之间试。设了触发词就要写进prompt,光调强度不会生效。- 其他参数和基础端点相同,包括
input_image,所以 LoRA 和参考图可以一起用;[klein] 的参考图上限是 4 张。 - 公测期间按基础端点同价计费,轮询方式、10 分钟签名地址和 24 个并发任务的限制也都一样,n8n 骨架不用改。
许可要单独确认:[klein] 4B 的开放权重是 Apache 2.0,9B 是 FLUX Non-Commercial License。基于 9B 训练的 LoRA 通过 BFL API 出图后能否商用,公开文档里没有写明,商用前向 BFL 确认授权条款。
路线三:fal 托管训练,加 FLUX.2 [dev] 的 LoRA 推理
fal 把训练也做成了 API,整条路线不需要显卡。它的队列接口和 BFL 的流程是同一个形状,字段名不同:
| 步骤 | BFL | fal |
|---|---|---|
| 提交 | POST https://api.bfl.ai/v1/{端 点} | POST https://queue.fal.run/{模 型 ID} |
| 鉴权头 | x-key | Authorization: Key … |
| 提交后返回 | id、polling_url | request_id、status_url、response_url |
| 查询状态 | GET polling_url | GET status_url |
| 完成标志 | status 为 Ready | status 为 COMPLETED 且没有 error 字段 |
| 取图 | result.sample | 再 GET 一次 response_url,取 images[0].url |
fal 多一步:状态到 COMPLETED 之后,结果要再请求一次 response_url 才拿得到。另外失败的请求最终状态也是 COMPLETED,只是多了 error 字段,If 节点要同时判断这两个条件。
训练(每个 LoRA 做一次,可以单独建一个工作流):POST 到 https://queue.fal.run/fal-ai/flux-2-trainer。
{
"image_data_url": "https://your-storage.example.com/thermos-dataset.zip",
"default_caption": "a photo of ohwx thermos bottle",
"steps": 1000
}训练端点文档的要求是:image_data_url 指向一个图片压缩包,建议至少 10 张、越多越好;每张图可以配一个同名 .txt 描述,没有配的话必须给 default_caption,否则训练失败。steps 默认 1,000,可设 100 到 10,000,费用是 0.0064 × 步数,1,000 步即 $6.40。结果里的 diffusers_lora_file.url 就是 LoRA 文件地址。fal 没有给出针对商品的数据集或步数建议。
推理:POST 到 https://queue.fal.run/fal-ai/flux-2/lora。
{
"prompt": "ohwx thermos bottle on a camping table, warm evening light, shallow depth of field",
"loras": [
{ "path": "{{ $json.lora_url }}", "scale": 1 }
],
"image_size": { "width": 1024, "height": 1024 },
"num_images": 1,
"output_format": "jpeg"
}fal-ai/flux-2/lora的loras最多 3 个,scale范围 0 到 4、默认 1;image_size用预设值或 512 到 2048 像素的自定义宽高;num_images可以一次出 1 到 4 张。- 既要 LoRA 又要带商品参考图,用
fal-ai/flux-2/lora/edit,多一个image_urls字段,最多 4 张;输入图会缩到 1 MP 并按 $0.021/MP 另计。 - LoRA 文件总大小超过 2 GB 后每多 1 GB 加价 50%,上限 5 GB。
- 许可同样因平台而异:fal 的模型页给这个端点标了 Commercial use,而 BFL 对 [dev] 权重自部署的许可是非商用。在哪里跑,就看哪里的条款。
单张多少钱:1 MP 下 $0.015 到 $0.06,LoRA 的分界在 267 张
按标价算,1 MP 输出、参考图不超过 1 MP 时,三条路线的单张成本在 $0.015 到 $0.06 之间;fal 的 LoRA 要到同一个 LoRA 出图 267 张以上,才比 [pro] 加一张参考图便宜。
| 路线与配置(输出 1 MP) | 单张 | 500 张 |
|---|---|---|
| BFL [pro],纯文字 | $0.03 | $15.00 |
| BFL [pro] + 1 张参考图 | $0.03 + $0.015 = $0.045 | $22.50 |
| BFL [pro] + 2 张参考图 | $0.06 | $30.00 |
BFL [klein] 9B -finetuned,纯文字 | $0.015 | $7.50(不含自己训练的硬件和电费) |
BFL [klein] 9B -finetuned + 1 张参考图 | $0.015 + $0.002 = $0.017 | $8.50 |
| fal [dev] LoRA,纯文字 | $0.021 | $10.50,另加每个 LoRA $6.40 训练费 |
| fal [dev] LoRA + 1 张参考图 | $0.021 × 2 = $0.042 | $21.00,另加训练费 |

分界线这样算。设同一个 LoRA 一共出 n 张图:
fal LoRA 总成本 = 6.40 + 0.021 × n
[pro] + 1 张参考图 = 0.045 × n
6.40 + 0.021n < 0.045n → n > 6.40 ÷ 0.024 ≈ 266.7两侧代入核对:n = 266 时,LoRA 是 $11.986,[pro] 是 $11.97,[pro] 便宜;n = 267 时,LoRA 是 $12.007,[pro] 是 $12.015,LoRA 便宜。所以分界在每个 LoRA 267 张。
这个数只在所列前提下成立:1 MP 输出、一张不超过 1 MP 的参考图、训练 1,000 步、双方现行标价。步数加到 2,000,训练费变成 $12.80,分界升到 534 张(12.80 ÷ 0.024 ≈ 533.3);输出分辨率、参考图数量变了,也要重新代入。它也没有计入废片重跑、准备数据集的人工,以及三个模型之间的画质差异,只能用来做预算,不能当成“超过 267 张就该换路线”的结论。
跑批量之前,把计划张数乘以对应单价,再和 BFL 返回的 cost 字段核对头几条,数字对得上再放开批量。
哪些结果不能直接上架:logo、标签文字和小字要人工抽检
参考图和 LoRA 都只是让模型尽量贴近你的商品。BFL 的文档没有承诺 logo、标签文字、配料表这类小字能和原图逐字一致,生成结果在这些地方出错时,一眼扫过去往往看不出来。
在工作流里留一个人工环节,比事后撤图便宜:
- 存储节点之后,把表格里的状态写成“待审核”,而不是直接推到店铺或投放平台。
- 抽检时对着原图看四处:logo 的字形和位置、标签上的文字、颜色、商品的形状和比例(瓶盖、把手、接口这类细节)。
- 带法规信息的包装(成分、规格、认证标志)不要用生成图替代实拍,生成图只用来做场景和氛围。
- 不合格的图换
seed重跑,或者增加一张细节参考图;用 LoRA 的路线可以再把finetune_strength或scale调一档。
相邻的几个问题
FLUX.2 [pro] 不用 LoRA,怎么让商品保持一致?
用参考图。把商品的白底图放进 input_image,需要时再加不同角度或细节图,API 最多 8 张,在提示词里写明哪些特征保持不变。每多一张不超过 1 MP 的参考图,BFL 多收 $0.015。
n8n 调用 FLUX.2 需要专门的 BFL 节点吗?
不需要专用节点。三条路线都用 n8n 自带的 HTTP Request 节点加 Header Auth 凭证实现,配合 Wait、If 和 Loop Over Items 完成轮询;BFL 和 fal 的接口都是普通的 HTTPS 请求。
不想调 API,想在本地 ComfyUI 里跑 FLUX 和 LoRA,可以吗?
可以,但那是另一种部署方式:模型和 LoRA 都在自己的显卡上运行,n8n 调的是你的 ComfyUI 服务而不是 BFL 或 fal。本地环境的搭建可以参考ComfyUI FLUX 完整指南:8GB显存也能运行的AI绘画神器(2025最新),注意那篇写的是 FLUX.1 时期的模型。
产品图一定要用 FLUX.2 吗?
不一定。如果还没定模型,先按任务比较几家的编辑能力、文字渲染和价格,见2026 图片模型怎么选:GPT Image 2、Nano Banana、Midjourney、FLUX.2 与 Seedream。



