用 Gradio Workflow 重写 AUTOMATIC1111:一个包含 73 个节点的生成式 AI 工作流

0 阅读

用 Gradio Workflow 重写 AUTOMATIC1111

Hugging Face 最近发布了一个名为 Workflow1111 的项目,目标很直接:用 Gradio 新推出的 gr.Workflow 功能,把 AUTOMATIC1111(也就是大家熟悉的 stable-diffusion-webui)的核心能力重新实现一遍。这不是简单复制界面,而是把整个生成式 AI 工作流拆解成一张由节点和连线组成的“电路图”。

最终成果是一张包含 73 个节点 的画布,串联起 11 条独立但可互操作的媒体处理管线。这些管线覆盖了从基础文生图到图生视频的完整链路,而且大部分功能无需本地 GPU 就能跑起来。

画布上有什么

整个 Workflow1111 基于四种基础算子构建:fn(普通 Python 函数)、model(通过 InferenceClient 调用的模型)、space(调用 Hugging Face Hub 上的其他 Gradio Space)和 dataset(读取数据集中的某一行)。每个节点就是对其中一种算子的封装,输入输出端口用于连接。

文生图(Text-to-image)

这是最核心的管线。它复刻了 A1111 txt2img 标签页的主要控件:正向/负向提示词、采样步数、CFG、随机种子、宽高,外加一个用于切换模型的 model_id 字段。用户输入的提示词会先经过一个 fn 节点进行预处理——比如拼接选中的风格预设、清理多余空格——然后送入一个 model 节点,通过 Hugging Face 的推理服务调用指定的 Stable Diffusion 模型。最后,另一个 fn 节点会把所有生成参数(提示词、模型、种子等)写入输出 PNG 文件的元数据中,供后续的 PNG Info 管线读取。

高清修复(Hi-resolution fix)

A1111 的高清修复通常是先低分辨率生成,再放大并二次去噪。Workflow1111 把这个过程简化为一个两节点的旁路。文生图的输出被送入一个名为 FLUX.1-Kontextmodel 节点,并附带一条明确的指令:“增强细节和微纹理,保持构图不变”。这个模型会直接返回一张更大、更清晰的图像。

图生图(Image-to-image)

有趣的是,上面提到的 FLUX.1-Kontext 节点同时承担了图生图的功能。用户上传一张图片,再描述希望如何修改(比如“把白天改成夜晚”),这个节点就能返回编辑后的结果。这种复用让画布结构更简洁。

让大语言模型写提示词

用户只需输入一个粗糙的想法,比如“A lighthouse in a storm”(风暴中的灯塔)。这个请求会被发送给一个 Qwen3-4Bmodel 节点。该模型会生成一段详细的描述,随后一个简单的 fn 节点将其格式化为一个干净的标签列表,例如:“stormy sea, wet rocks, dramatic composition...”。这个列表可以直接作为任何文生图节点的输入。整个过程没有使用任何特殊定制节点,LLM 和扩散模型在画布上只是两个普通的 model 算子。

从图像反推提示词

这相当于 A1111 的“Interrogate”按钮,但用的是视觉语言模型(VLM)而非 CLIP。一个 Qwen2.5-VLmodel 节点会分析一张夜市照片,并尝试写出能生成这张照片的提示词。与此同时,一个基于 ViT 的图像分类器 model 节点也会对同一张图片进行分析,返回如“餐厅 (51.9%)”、“烟草店 (15.6%)”这样的分类标签。由于两个节点共享同一个输入,gr.Workflow 会让它们并行执行,用户几乎不用额外等待时间就能拿到两份结果。

从检测生成修复蒙版

在 A1111 中,局部重绘(inpaint)需要用户手动绘制蒙版。Workflow1111 则提供了一条自动化路径。首先,一个 DETR 目标检测 model 节点会在街景照片中识别出人、狗、自行车等物体。接着,工作流分叉为两条支线:一条用 Pillow 在原图上画出检测框用于预览;另一条则利用 NumPy 将这些检测框转换成一个黑白蒙版。这个蒙版可以直接喂给下游的 inpaint 管线。值得注意的是,只有最初的检测步骤需要联网调用模型,后续的绘图和蒙版生成都在本地完成。

提示词矩阵(Prompt matrix)

这个功能模仿了 A1111 的提示矩阵。用户输入一个基础提示词,如“a lone oak tree”(一棵孤独的橡树),再提供几个后缀(“at sunrise”, “in a thunderstorm”等)。一个 fn 节点会将它们组合成多个变体,每个变体都连接到一个独立的文生图 model 节点。最后,一个 fn 节点将四个生成结果拼接成一张联系表(contact sheet)。由于 gr.Workflow 目前没有循环算子,这四个文生图节点是并排放在画布上的。得益于相同的依赖深度,它们会同时开始生成,充分利用了并行计算能力。

放大与背景移除

这部分对应 A1111 的“Extras”标签页。Workflow1111 提供了两种放大方案。第一种是纯本地的 Lanczos 重采样,由一个 fn 节点实现,速度极快,因为它完全不依赖网络。第二种是调用 AuraSR ×4 模型,这是一个 space 节点,意味着它实际上是向 Hugging Face Hub 上另一个名为 gokaygokay/AuraSR-v2 的 Space 发起 API 请求。背景移除功能也采用了同样的模式,通过 space 节点调用 BRIA RMBG-2.0 这个专门的抠图 Space。

预处理器(Annotators)

Canny 边缘检测、线稿、素描、亮度深度图、海报化等效果,在 A1111 中通常由 ControlNet 插件提供。在 Workflow1111 中,它们都被实现为纯粹的 fn 节点,内部只用 NumPy 和 OpenCV 等库进行图像处理,背后没有任何深度学习模型。在一个建筑立面的示例图上,每个预处理器在 CPU 上大约只需半秒。整个应用有 36 个算子节点,其中 32 个是 fn 节点,而 22 个 fn 节点完全在本地进程中运行。这意味着即使断网,画布上约三分之二的功能依然可用。更重要的是,这些函数可以脱离 Gradio 单独测试,开发调试非常方便。

PNG 信息(PNG Info)

A1111 会将生成参数存储在 PNG 文件的一个名为 parameters 的文本块中。Workflow1111 完全沿用了这一机制。文生图管线末尾的 fn 节点负责写入元数据,而 PNG Info 管线则专门负责读取这些信息,包括完整的提示词、负向提示词、步数、CFG、种子、尺寸和模型名称。

图生视频(Image-to-video)

Workflow1111 的最后一个亮点是图生视频。PNG Info 管线读取的那张图片,同时也被送入一个 Wan 2.2 I2V A14Bmodel 节点。在演示中,一张沉睡狐狸的静态图被成功转化为一段它苏醒并开始活动的短视频。这里巧妙地利用了 Gradio 的“引用节点”特性:一个上传的图片可以同时作为多个下游管线的输入,无需重复上传。

在自己的 GPU 上运行模型

到目前为止,所有模型调用都是通过 Hugging Face 的推理服务或外部 Space 完成的,所以用户不需要自己的 GPU。但这并不意味着 Workflow1111 只能依赖云端。

fn 节点的本质是 Python 函数,因此它可以加载本地模型并在自己的 GPU 上运行。官方给出了一个例子:FastVideo/fastvideo-fasth3-preview 这个 Space 就是一个 gr.Workflow 应用,它在 Hugging Face 的 ZeroGPU 服务上运行一个名为 FastH3 的四步蒸馏视频生成模型。开发者只需用一个装饰器 @spaces.GPU 标记函数,ZeroGPU 就会在需要时分配 GPU 资源,并在任务结束后自动释放。gr.Workflow 本身对此一无所知,它只是像调用普通函数一样调用这个 fn 节点。同样,你也可以在自己的机器上启动一个 Workflow1111,将 bind= 参数指向一个加载了本地 checkpoint 的函数,这样整个画布就能驱动你的本地硬件了。

每个输出都是一个 API

这是 gr.Workflow 的一个强大特性:画布上的每一个输出节点都会自动变成一个 RESTful API 端点,无需手动编写路由代码。Workflow1111 公开了九个这样的端点,例如 /image/generated_prompt/detected_objects 等。

通过 gradio_client 库,你可以像调用普通函数一样使用这些 API。更进一步,这些端点还兼容 MCP(Model Context Protocol)。只要在启动时加上 mcp_server=True,每个输出节点就会变成一个 AI 助手可以调用的工具。这意味着,像 Claude 或 Cursor 这样的智能体,可以直接在复杂任务中调用 Workflow1111 的功能,比如先生成一张图,再从中读取提示词,或者运行目标检测,整个过程无需任何胶水代码。

与 ComfyUI 的定位差异

虽然 Workflow1111 的功能对标 A1111,但它真正的比较对象其实是 ComfyUI,因为两者都是基于节点的工作流系统。不过,gr.Workflow 有自己鲜明的特点:

  • 节点可以是外部资源:它可以无缝集成推理服务、Hub 上的任意 Space 或 API,这让构建复杂应用变得异常简单,尤其适合快速原型和分享。
  • 开箱即用的 API 和身份验证:每个输出自动生成 API,配合 OAuth,用户只需登录 Hugging Face 账号就能用自己的配额运行模型,极大降低了使用门槛。
  • 多模态混合:在同一张画布上,扩散模型、大语言模型、视觉语言模型、检测器和视频模型可以自由组合。
  • 自定义即函数:要创建新节点?写个 Python 函数就行,没有复杂的插件开发流程。

总的来说,gr.Workflow 更像是一个面向分享、协作和快速部署的“云原生”工作流平台,而 ComfyUI 则更偏向于本地、高性能、深度定制的专业工具。

如何开始构建自己的工作流

Workflow1111 虽然庞大,但它的起点极其简单:

import gradio as gr

def your_function(text: str) -> str:
    pass

gr.Workflow(bind=[your_function]).launch()

通过 bind= 参数注册函数,用 edges= 连接它们,然后 .launch() 就能在浏览器里看到并编辑画布。准备好后,一条 gradio deploy 命令就能把它部署到 Hugging Face Space 上。如果你不想从零开始,可以直接复制 Workflow1111 的 Space,删掉不需要的节点,替换模型,重新连线,快速构建属于你自己的生成式 AI 应用。