FLUX.2 Klein 教程:用 Gradio 构建一个即时生成与编辑图像应用

本文将深入探讨如何利用FLUX.2 Klein 4B模型与Gradio框架,构建一个具备图像生成、编辑及历史回溯功能的交互式应用。我将分享如何结合本地推理与API调用,实现高效的图像工作流。

阅读时长: 15 分钟
共 7326字
作者: eimoon.com

在日常的图像处理工作中,我们常常需要进行反复的生成、调整和迭代,而传统的流程往往伴随着不小的延迟。FLUX.2 Klein 模型就是为了解决这样的痛点而生,它旨在提供快速、交互式的图像工作流,让创作者能够以极低的延迟进行生成和优化。

在这篇教程里,我将带领大家用 FLUX.2 Klein 4B 和 Gradio,在 Google Colab 上构建一个轻量级的“生成与编辑”应用。这个应用允许用户先输入文本提示词生成一张基础图片,再通过编辑指令和可选的参考图像来修改它。更棒的是,每次操作都会被记录在会话历史中,方便用户随时回溯到之前的版本,从那里继续他们的创意探索。

我个人认为,最终呈现的这个交互式编辑器,出色地展现了快速迭代、可靠图像编辑以及历史驱动工作流的优势。它不仅仅是一个模型调用,更像是一个产品级的体验。如果你对 FLUX.2 的基础教程或如何在本地运行它感兴趣,也推荐去看看我们之前的文章。

FLUX.2 Klein 究竟是什么?

FLUX.2 系列是一组针对不同性能权衡进行优化的图像生成模型。它包含多个变体,分别在图像质量、生成速度和灵活性之间做出了不同的取舍。其中,FLUX.2 Klein 系列特别关注“交互式视觉智能”,这意味着该模型在设计时就考虑到了响应速度、快速迭代以及在主流硬件上的高效运行能力。

FLUX.2 Klein 系列模型支持文本到图像的生成、图像编辑以及多参考图条件控制等功能。

上图展示了 FLUX.2 Klein 在不同任务(文本到图像、单参考图图像到图像、多参考图)中,Elo 分数与延迟(上图)以及显存占用(下图)之间的关系。(图片来源:Flux 2 官方博客

Klein 4B 变体是 Klein 系列中最受开发者青睐的选择,因为它在 Apache 2.0 许可证下完全开源,并且可以在拥有大约 13GB 显存的消费级 GPU 上流畅运行。

FLUX.2 Klein 的核心能力

  • 实时迭代:Klein 的设計理念就是为了支持快速生成和精修的工作流。这使其非常适合需要交互式预览循环和 UI 驱动编辑体验的场景。
  • 统一生成与编辑:FLUX.2 Klein 模型家族将图像生成和编辑视为其核心能力,而非相互独立的功用。这种统一性,大大简化了开发者的工作。
  • 多参考图支持:Klein 支持多参考图的生成与编辑。这一点在需要通过调色板图像、风格参考图或物体参考图来精准控制编辑方向时,显得尤为有用。在官方 API 中,Klein 端点最多支持四张图片用于编辑——一张基础图像,外加三张参考图,这样的配置足以应对许多实际工作流的需求。

通常,Klein 模型分为两大类:一类是为速度优化的“蒸馏模型”(distilled models),另一类是为灵活性优化的“基础模型”(foundation models)。Klein 4B 蒸馏模型是构建交互式应用的实用之选,而基础变体则更适用于追求最大微调灵活性和控制力,即使以牺牲部分延迟为代价的场景。

FLUX.2 Klein 教程:构建图像生成与编辑应用

在本节中,我将使用 FLUX.2 Klein 来实现一个两阶段的图像工作流,并将其封装在一个 Gradio 应用中。从宏观上看,这个应用要完成三个核心任务:

  • 根据文本提示词生成一张基础图像。
  • 利用第二个编辑指令提示词,并辅以可选的参考图,对生成的图像进行编辑。
  • 维护一个会话历史记录,方便用户轻松探索。用户可以从历史下拉菜单中加载任何先前的输出,并从那个时间点继续尝试。

在幕后,这个工作流由两个互补的函数驱动:

  • local_generate() 函数:利用 Diffusers 库在本地运行 FLUX.2 Klein 4B,实现快速的文本到图像生成。
  • bfl_edit(edit_prompt, base_img, ref_imgs) 函数:向 Black Forest Labs 托管的 FLUX.2 Klein 编辑 API 发送图像编辑请求,然后反复查询返回的 polling_url,直到编辑后的图像准备就绪。

历史记录机制将生成的图像存储为一个字典列表,每个字典包含图像本身(PIL.Image 对象)和一个简短的标签(字符串),格式如 {"img": PIL.Image, "label": str}

以下视频展示了该工作流的精简版(为演示目的已加速): [视频待插入]

第一步:环境准备

在我们构建图像生成和编辑应用之前,需要准备一个干净的环境,并安装最新版本的 Diffusers 库。本教程中,我选择在 Google Colab 上使用 A100 GPU 来加速图像生成,但同样的设置在 T4 等更入门级的 GPU 上也能运行,只是速度会稍慢一些。

首先,我们卸载可能存在的旧版 Diffusers,以避免版本冲突,然后直接从 GitHub 安装最新的开发版本。同时,我们还会安装模型加载、检查点处理和加速所需的辅助库。

!pip -q uninstall -y diffusers
!pip -q install -U git+https://github.com/huggingface/diffusers.git
!pip -q install -U accelerate safetensors transformers huggingface_hub

安装完成后,我们检查安装的 Diffusers 版本,并确认 Flux2KleinPipeline 类可以成功导入。

import diffusers
print("diffusers:", diffusers.__version__)
from diffusers import Flux2KleinPipeline
print("Flux2KleinPipeline import OK")

这确认了我们的环境已正确配置。下一步,我们将把 FLUX.2 Klein 模型加载到 GPU 上,为本地图像生成和基于 API 的编辑工作流做好准备。

第二步:加载 FLUX.2 Klein 4B 模型

在加载模型之前,你需要一个 Black Forest Labs 的 API 密钥。要获取密钥,请登录到你的 Black Forest Labs 账户,并在“Credits”选项卡下充值。最低充值金额大约是十美元,可以获得约一千个积分。充值后,点击“Create Key”,为其命名,并妥善保管。

拿到 API 密钥后,下一步是加载 FLUX.2 Klein 4B 模型,并为两种不同的使用模式做准备:本地图像生成和基于 API 的图像编辑。

import os, time, base64, io, requests
import gradio as gr
import torch
import nest_asyncio
from PIL import Image
from diffusers import Flux2KleinPipeline
from google.colab import userdata
nest_asyncio.apply()
# =============================
# LOAD via API
# =============================
MODEL_ID = "black-forest-labs/FLUX.2-klein-4B"
BFL_API_KEY = userdata.get("BFL_API_KEY")
BFL_CREATE_URL = "https://api.bfl.ai/v1/flux-2-klein-4b"
print(f"Loading model to GPU: {torch.cuda.get_device_name(0)}")
# =============================
# LOAD via LOCAL HF PIPELINE
# =============================
dtype = torch.float16 
pipe = Flux2KleinPipeline.from_pretrained(MODEL_ID, torch_dtype=dtype).to("cuda")

我们首先将 API 密钥设置为 Colab 的秘密变量,这样它就不会直接显示在笔记本代码中。同时,我们定义了模型 ID 和稍后将调用的 Klein 编辑端点。

接着,在启动 Gradio UI 之前,我们应用 nest_asyncio 来避免事件循环冲突。

最后,加载用于基础图像生成的本地 FLUX.2 Klein 流水线。我们使用 Flux2KleinPipelinefloat16 数据类型以确保广泛的 GPU 兼容性(A100 和 T4 都能很好地工作),然后将流水线移至 CUDA 以实现快速推理。请注意,这个本地流水线仅用于生成初始图像,而编辑操作将通过 API 处理。

注意:你可能会好奇,为什么我们既要本地加载模型,又要配置 API 访问。这是因为能力上的分离:

  • 本地 Hugging Face 流水线非常适合迭代式的文本到图像生成,并且可以完全控制推理设置。
  • Black Forest Labs API 则提供了 FLUX.2 Klein 更高级的图像编辑功能,这些功能目前在开源实现中尚未提供,例如支持多参考图的基于提示词的图像编辑。

通过结合这两种方法,我们能获得两全其美的优势:本地生成的快速体验和通过 API 实现的强大编辑支持。

第三步:辅助函数

在我们将所有功能整合到 Gradio 界面之前,需要一些辅助函数。由于我们的应用在本地生成图像,但通过 API 进行编辑,因此我们需要一种方法将图像编码为 base64 格式用于 API 请求,一种方法下载通过 URL 返回的编辑后图像,以及一个用于生成初始基础图像的本地生成函数。

def pil_to_b64_png(img: Image.Image) -> str:
    buf = io.BytesIO()
    img.convert("RGB").save(buf, format="PNG")
    return base64.b64encode(buf.getvalue()).decode()

def url_to_pil(url: str) -> Image.Image:
    r = requests.get(url, timeout=60)
    r.raise_for_status()
    return Image.open(io.BytesIO(r.content)).convert("RGB")

def local_generate(prompt: str):
    if not prompt.strip():
        raise gr.Error("Prompt is empty.")
    out = pipe(
        prompt=prompt.strip(),
        width=1024,
        height=1024,
        num_inference_steps=4,
        guidance_scale=1.0,
        output_type="pil",
    )
    return out.images[0].convert("RGB")

上述代码定义了三个关键辅助函数:

  • pil_to_b64_png() 函数:将 PIL 图像转换为 base64 编码的 PNG 字符串。这是必需的,因为 FLUX.2 编辑 API 接受基础图像和参考图像为 URL 或 base64 字符串。
  • url_to_pil() 函数:处理相反的方向。编辑 API 返回一个带有签名 URL 的生成输出,因此我们使用 requests 获取该 URL,验证响应,并将下载的字节转换回 PIL 图像。这使得编辑结果可以直接在我们的 Gradio 界面中显示并保存到历史记录中。
  • local_generate() 函数:是我们本地文本到图像的入口点。它验证提示词不为空,然后调用本地的 Flux2KleinPipeline,使用固定的设置,例如分辨率、步数和引导比例。输出会作为一张清晰的 RGB PIL 图像返回,并成为后续编辑的基础图像。

大家可以随意调整 FLUX 流水线的一些设置,比如图像分辨率、扩散步数和引导比例,探索不同的质量与速度权衡,并更深入地理解每个参数是如何影响最终图像的。FLUX 2 图像编辑的文档是一个非常好的学习资源。

下一步,我们就要用这些工具来实现基于 API 的 FLUX.2 Klein 图像编辑功能。

第四步:通过 BFL API 进行编辑

这一步是纯粹的 Hugging Face 工作流与本教程中采用的混合方法的根本区别。我们不尝试在本地运行图像编辑,而是将编辑任务委派给 API,它能可靠地处理基于提示词的编辑和可选的多参考条件控制。

从高层次来看,FLUX.2 Klein 编辑 API 需要一个描述编辑的文本提示词、一张要修改的基础图像,以及作为额外输入提供的可选参考图像。该 API 采用异步运行方式,这意味着我们提交请求后,需要反复查询返回的 URL,直到编辑后的图像准备就绪。

POLL_INTERVAL_S = 1.0
POLL_TIMEOUT_S = 120
def bfl_edit(edit_prompt, base_img, ref_imgs=None):
    if not BFL_API_KEY:
        raise gr.Error("Missing BFL_API_KEY in Colab Secrets.") 
    payload = {
        "prompt": edit_prompt.strip(),
        "input_image": pil_to_b64_png(base_img),
        "output_format": "png",
    }
    if ref_imgs:
        for i, ref in enumerate(ref_imgs[:3], start=2):
            payload[f"input_image_{i}"] = pil_to_b64_png(ref)
    create = requests.post(
        BFL_CREATE_URL,
        headers={"x-key": BFL_API_KEY, "accept": "application/json"},
        json=payload,
        timeout=60,
    )
    create.raise_for_status()
    job = create.json()
    polling_url = job.get("polling_url")
    if not polling_url:
        raise gr.Error(f"API Error: {job}")
    t0 = time.time()
    while True:
        if time.time() - t0 > POLL_TIMEOUT_S:
            raise gr.Error("BFL API polling timed out.")  
        time.sleep(POLL_INTERVAL_S)
        res = requests.get(polling_url, headers={"x-key": BFL_API_KEY})
        res.raise_for_status()
        j = res.json()
        if j["status"] == "Ready":
            return url_to_pil(j["result"]["sample"])
        if j["status"] in ("Error", "Failed"):
            raise gr.Error(f"Generation Failed: {j}")

bfl_edit() 函数完成了三个重要任务:

  • 它接收三个输入,包括编辑提示词、我们想要修改的基础图像以及一个可选的参考图像列表。
  • 我们构建了一个 JSON 负载,其中包含编辑提示词和编码为 base64 PNG 格式的基础图像。如果提供了参考图像,我们会使用 API 的索引格式将其附加。这允许我们除了基础图像外,再提供最多三张参考图像,这对于许多实际工作流(例如调色板颜色转移、风格锚定或物体定位)来说是足够的。
  • 接下来,我们将请求提交到 API 端点并解析响应。API 返回一个 polling_url,我们必须重复查询该 URL,直到任务完成。我们通过一个简单的轮询循环来实现这一点,并设置了两个保护机制:一个轮询间隔以避免过度请求,以及一个超时时间以防止笔记本无限期等待。

一旦状态变为 Ready,API 响应中会包含一个指向输出图像的签名 URL。我们使用之前定义的 url_to_pil() 辅助函数下载该图像,并将其作为 PIL 图像返回。

下一步,我们将实现会话历史功能,以便用户可以重新访问任何生成或编辑的输出。

第五步:添加历史记录功能

此时,在构建 UI 之前,我们需要的最后一块拼图是一个轻量级的会话记忆层,让用户能够重新访问之前的输出。我们使用两个 Gradio 状态对象来实现历史记录功能:

  • base_img_state 存储当前正在工作的图像(后续编辑将应用于该图像)。
  • history_state 存储每次生成或编辑的版本,其形式为一个字典列表,每个字典包含图像和简短标签。
def update_history(history):
    choices = [f"{i}: {h['label']}" for i, h in enumerate(history or [])]
    return gr.update(choices=choices, value=choices[-1] if choices else None)

def on_generate(prompt, history):
    img = local_generate(prompt)
    new_history = list(history or [])
    new_history.append({"img": img, "label": "Generated Base"})
    return img, img, new_history, update_history(new_history), "Base image generated."

def on_edit(edit_prompt, ref2, ref3, ref4, base_img, history):
    if base_img is None:
        raise gr.Error("Please generate a base image first.")
    refs = [r.convert("RGB") for r in (ref2, ref3, ref4) if r is not None]
    out = bfl_edit(edit_prompt, base_img, refs)
    new_history = list(history or [])
    new_history.append({"img": out, "label": f"Edit: {edit_prompt[:20]}..."})
    return out, out, new_history, update_history(new_history), "Edit successful."

def on_load(choice, history):
    if not history or not choice:
        return None, None, "No history to load."
    idx = int(choice.split(":")[0])
    img = history[idx]["img"]
    return img, img, f"Loaded entry #{idx}."

def on_clear():
    return None, None, [], gr.update(choices=[], value=None), "Cleared everything."

上述函数构成了我们演示中维护图像历史的核心逻辑:

  • update_history() 函数:将会话历史格式化为下拉菜单。每个条目都标有其索引和简短描述,下拉菜单默认自动选择最新的项。这使得 UI 保持同步,无需手动刷新逻辑。
  • on_generate() 回调函数:运行 local_generate() 创建初始基础图像。然后将其结果追加到历史记录中,格式为 {"img": img, "label": "Generated Base"}。该函数返回图像和更新后的历史状态,以及一个下拉菜单更新,以便新条目立即可见。
  • on_edit() 回调函数:类似,但它调用 bfl_edit()。它接收当前工作图像和一些可选的参考图像,通过 API 应用编辑,并将输出追加到历史记录中。它还将编辑后的输出作为新的 base_img_state 返回,这意味着除非用户明确加载旧版本,否则未来的编辑将应用于最新的图像。
  • on_load() 回调函数:解析选定的下拉菜单条目,从 history_state 中检索相应的图像,并再次将该图像设为当前活动工作图像。这允许用户从任何以前的检查点分支他们的编辑。
  • 最后,on_clear() 函数重置所有内容。它清除输出、清除基础图像状态、重置历史列表并清空下拉菜单选项。

现在,让我们把这些函数连接到 Gradio 界面中,包括两个文本框、可选的参考图像上传功能,以及一个历史记录工作流。

第六步:Gradio 用户界面

这一步会将我们的生成、编辑和历史记录逻辑连接到一个简单的 Gradio 界面。界面是使用 gr.Blocks 构建的,它提供了对布局的精细控制。

with gr.Blocks() as demo:
    gr.Markdown("## FLUX.2 Klein: 生成与编辑图像")
    with gr.Row():
        with gr.Column(scale=1):
            gen_prompt = gr.Textbox(label="1. 生成基础图像", placeholder="A young boy riding a scooter...")
            gen_btn = gr.Button("生成基础图像", variant="primary")
            edit_prompt = gr.Textbox(label="2. 描述编辑内容", placeholder="Add the red hat and yellow glasses from the references...")
            with gr.Accordion("参考图像 (可选)", open=False):
                r2 = gr.Image(label="参考图 1", type="pil")
                r3 = gr.Image(label="参考图 2", type="pil")
                r4 = gr.Image(label="参考图 3", type="pil")
            edit_btn = gr.Button("应用编辑", variant="secondary") 
            history_dd = gr.Dropdown(label="会话历史", choices=[])
            with gr.Row():
                load_btn = gr.Button("加载所选")
                clear_btn = gr.Button("清除所有")
            status = gr.Textbox(label="状态", interactive=False)
        with gr.Column(scale=1):
            output_view = gr.Image(label="当前图像", type="pil")
    base_img_state = gr.State(None)
    history_state = gr.State([])
    gen_btn.click(
        on_generate, 
        [gen_prompt, history_state], 
        [output_view, base_img_state, history_state, history_dd, status]
    ) 
    edit_btn.click(
        on_edit, 
        [edit_prompt, r2, r3, r4, base_img_state, history_state], 
        [output_view, base_img_state, history_state, history_dd, status]
    ) 
    load_btn.click(
        on_load, 
        [history_dd, history_state], 
        [output_view, base_img_state, status]
    )
    clear_btn.click(
        on_clear, 
        None, 
        [output_view, base_img_state, history_state, history_dd, status]
    )
demo.launch(share=True, inline=True, debug = True)

我们将 UI 组织成两列,左侧包含输入和操作,右侧显示当前图像。以下是我们构建 Gradio 应用的方式:

  • 第一个文本框用于收集生成提示词,而“生成基础图像”按钮会触发 on_generate() 函数。此回调函数执行本地生成,将输出保存到历史记录中,并更新显示的图像和存储在 base_img_state 中的当前工作图像。
  • 第二个文本框用于收集编辑指令提示词。当用户点击“应用编辑”时,我们调用 on_edit() 函数,该函数将当前工作图像作为基础图像,并返回编辑后的输出。编辑后的输出也会追加到历史记录中,并成为下一次编辑的新工作图像。
  • 为了让工作流感知会话,我们还包含了一个“会话历史”下拉菜单,其中每个条目对应于图像的一个保存版本。“加载所选”按钮触发 on_load(),它会恢复选定的历史图像并将其再次设置为当前工作图像。
  • 最后,“清除所有”按钮通过 on_clear() 函数重置所有内容,包括输出显示、基础图像状态和存储的历史记录。

以下两个 Gradio 状态对象保持了一致性:

  • base_img_state 确保每次编辑都应用于正确的图像。
  • history_state 存储完整的输出时间线,以便回放和分支。

最后,demo.launch() 在 Colab 中启动应用程序,提供可共享的链接,将其内联渲染,并启用调试日志以帮助在开发过程中诊断问题。

FLUX.2 Klein 实际案例与观察

为了更好地理解 FLUX.2 Klein 在实践中的表现,我使用最终的“生成与编辑”应用进行了一系列的小实验。我测试了三种主要的交互模式:基础图像生成、仅通过提示词编辑以及使用一张或多张参考图像进行引导式编辑。我还验证了会话历史工作流,确认我可以恢复任何先前的输出并从该点继续编辑。

图像生成

我从一个简单的生成提示词开始,以创建一张干净的基础图像。模型生成了一个连贯的主体,光照一致,面部细节清晰,场景布局稳定。输出的基础图像看起来质量很高,很适合后续的修改,而非简单的重新生成。

单参考图编辑

接下来,我测试了使用一张参考图像作为颜色源,并给出了一个编辑指令,比如“将裙子的颜色改为参考图像的颜色。”编辑成功地转移了预期的颜色,同时保留了大部分原始场景结构。

从我的实踐重,单参考图编辑在提示词狭窄且受约束时效果最好。颜色转移和服装重着色尤其可靠,因为它们不需要主要的几何形状改变。当编辑指令专注于一个属性时,主体身份和背景细节保持稳定。

纯文本提示词编辑

接着,我尝试了仅通过提示词进行语义改变的编辑,例如“将背景替换为海滩。”模型干净利落地处理了背景替换,同时大致保持了主体的一致性。

当背景改变时,模型通常会调整色温和阴影强度,以保持结果的照片级真实感。这通常是一个特性,但这也意味着编辑后的图像可能看起来像一次不同的拍摄,而不仅仅是简单的剪切和粘贴。

姿态引导编辑

我测试了一个基于姿态的编辑,使用一张暗示身体姿势的参考图像,并结合提示词“匹配参考图像中的姿势。”结果图像改变了主体的姿势,同时仍保持了相似的身份和风格。

以下是我用于姿态引导的参考图像:

姿态编辑是可行的,但它们比颜色编辑更敏感。任何姿态改变都可能触发次要改变,例如布料垂坠、肢体位置和相机构图。我花了几个实验才把这个姿势弄对,而且它在腿部放置方面仍然有些挣扎。

多参考图编辑

最后,我测试了多参考图编辑,使用了多个输入,例如一个调色板参考图像和一个明确指出“只使用参考图像中的调色板更改背景颜色。不要用参考图像替换背景”的编辑提示词。

令我惊讶的的强大能力是,多参考图编辑在每个参考图像具有清晰作用时,效果最为显著。

当提示词明确指出仅使用调色板,并避免指示模型使用参考内容进行替换时,调色板参考图像效果很好。

当参考图像模糊不清时,模型可能会借用纹理或布局线索,而不仅仅是颜色。在我的运行中,我注意到了一些细微的伪影,其中类似于参考图像的元素微妙地渗入了场景,但整体结果仍然很棒,并且在视觉上保持了一致。

这个演示的一个实用好处是,每个生成和编辑的图像都存储在会话历史记录中。你可以加载任何先前的条目,并从该精确检查点继续编辑。这使得实验速度大大加快。你可以从早期版本分支编辑,比较多种编辑方向,并避免丢失一个好的中间结果。

总结

在本教程中,我们利用 FLUX.2 Klein 4B 构建了一个完整的图像生成和编辑工作流。通过结合 Diffusers 库提供的本地文本到图像生成能力,以及 Black Forest Labs 托管的编辑 API,我们成功创建了一个交互式的图像编辑器。

FLUX.2 Klein 的低延迟、统一的生成与编辑功能以及多参考图支持,使其特别适用于这种交互式的工作流。在此基础上,你可以进一步扩展这个应用,例如增加批量编辑、参数控制、会话间的持久化,甚至可以集成一个由 LLM 驱动的智能代理,让它自动提出编辑建议。

FLUX.2 Klein 常见问题 (FAQs)

我可以移除 API 并完全使用 Hugging Face 进行所有操作吗?

可以,但图像编辑对库版本和后期处理路径可能更敏感。如果你的目标是可靠的编辑工作流,那么 API 是更稳妥的选择。

我可以让编辑应用于加载的历史图像吗?

是的。在当前的设计中,加载历史记录会设置基础图像状态。任何后续编辑都将应用于该基础图像。

我可以将历史记录扩展为显示缩略图吗?

是的,你可以将下拉菜单形式的历史记录替换为画廊(Gallery)模式。状态结构保持不变。

在本地运行 FLUX.2 Klein 4B 有什么系统要求?

要高效运行该模型,你需要一块大约 13GB 显存的消费级 GPU。虽然它在 A100 等高端硬件上性能最佳,但它也专门针对更平价的 GPU(如 NVIDIA T4)进行了优化,即便延迟会稍高一些。这使得它比完整的 FLUX 基础模型要轻量得多。

我可以将 FLUX.2 Klein 用于商业应用吗?

是的。FLUX.2 Klein 4B 变体在 Apache 2.0 许可证下发布。这是一个宽松的开源许可证,允许开发者在个人和商业软件中自由使用、修改和分发该模型,而无需遵守其他模型许可证中常见的限制性条件。

“Klein”与其他 FLUX.2 变体有何不同?

Klein 是一个 蒸馏模型(40 亿参数),优先考虑速度和交互性,而非原始的灵活性。虽然 FLUX.2 更大的“基础”变体更适合深度微调,但 Klein 专为“交互式视觉智能”而设计,这意味着它提供更快的推理时间,支持实时迭代,使其成为构建响应式用户界面和编辑工具的更优选择。


关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计