跳到正文
原文
Hugging Face Blog·· 2026-09-10精选AI 评分62

用 Gradio Workflow 重建 AUTOMATIC1111:Workflow1111 的 73 节点画布

Rebuilding AUTOMATIC1111 with Gradio Workflow

AI 摘要

Hugging Face 发布 Workflow1111,用 Gradio Workflow 把 AUTOMATIC1111 的大部分功能重建为一张画布,由 11 条媒体流水线和 73 个节点组成,覆盖文生图、高清修复、图生图、提示词矩阵、VLM 反推、检测生成 inpaint 掩码、ControlNet 风格标注器、背景移除、PNG Info 存储和图生视频。

正文 · AI 翻译

在上一篇文章中,我们构建了五个小型gr.Workflow图,并暗示了构建像 AUTOMATIC1111 的 stable-diffusion-webui 那样复杂的东西需要什么。在这篇文章中,我们将带你了解 Workflow1111,在这里我们将 AUTOMATIC1111 的大部分功能集重建为一个单一的工作流画布。

Workflow1111 是一个由十一个媒体管道组成的图,使用七十三个节点构建。它汇集了用于文本到图像、高分辨率修复、图像到图像、提示矩阵网格、VLM 询问、检测到修复蒙版、ControlNet 风格标注器、背景移除、PNG 信息存储和图像到视频的 SOTA 模型。

你可以通过使用 Hugging Face 账户登录或提供访问令牌来运行这些管道中的任何一个。登录后,模型调用将使用你自己的配额。

👉 试试 Workflow1111,或者复制这个 Space 并开始为你的用例重新连接它。

让我们浏览一下画布。

画布上有什么

所有媒体管道都是由上一篇文章和官方指南中介绍的相同四种操作符类型构建的。画布上的每个节点封装一个操作符,操作符的输入和输出成为你连接边的端口。作为我们四种操作符类型的快速参考:fn 是一个 Python 函数,model 是通过 InferenceClient 调用的模型,space 是另一个 Gradio Space,dataset 是 Hub 数据集中的一行。

让我们逐一介绍这些管道。

文本到图像

这是核心管道。它拥有你期望从 A1111 的 txt2img 标签页中获得的控件:负面提示、步数、CFG、种子、宽度和高度,以及用于选择检查点的 model_id 字段。提示首先经过一个提示构建器 fn 节点,该节点会附加选定的样式预设并清理文本,然后进入一个 model 节点,该节点通过 Inference Providers 调用检查点。一个后处理 fn 节点在输出时将生成参数写入 PNG 的元数据中,这就是 PNG 信息管道稍后读取的内容。

高分辨率修复

在 Automatic1111 中,高分辨率修复首先放大 txt2img 输出,然后运行第二次去噪。在这里,它变成了一个两节点的绕行。文本到图像的结果进入一个带有细化指令(“增强细节和微纹理,保持构图不变”)的 FLUX.1-Kontext model 节点,然后返回更清晰、更大的图像。

图像到图像

同一个 Kontext 节点兼作图像到图像标签页。上传一张图像,描述你想要的更改,它就会返回编辑后的图像。

让 LLM 编写提示

从一个粗略的提示开始,比如“暴风雨中的灯塔”。这个管道将其发送到一个 Qwen3-4B model 节点,一个小型 fn 节点将回复转换为一个干净的标签列表,最多四十个:“暴风雨的海,湿岩石,戏剧性构图,低角度拍摄,体积光,不祥的基调。”你可以将任何扩散模型节点连接到此输出以渲染图像。

与 ComfyUI 不同,这里不涉及自定义节点。在 Gradio 工作流中,LLM 和扩散模型都是同一画布上的普通 model 操作符。

将图像读回提示

这就像 AUTOMATIC1111 的 Interrogate 按钮,只不过是由 VLM 而不是 CLIP 来执行 interrogate。Qwen2.5-VL 看着一张夜市照片,写出一段可能生成它的提示词。一个 ViT 分类器节点读取同一张图像并返回标签:restaurant 51.9%、tobacco shop 15.6%、toyshop 9.1%。

两个节点使用相同的图像输入,所以 gr.Workflow 并行运行它们,你大约只需运行一个的时间就能得到两个答案。

检测到 inpaint 蒙版

AUTOMATIC1111 需要你手动绘制 inpaint 蒙版。这条流水线则改为从检测器生成一个。DETR 在一张街景照片中找到六个对象(三个人、一只狗、一辆自行车和一辆汽车),从这里工作流分成两个分支:一个把检测到的框画在原图上,另一个把它们转成可以送入下游 inpaint 流水线的蒙版。

绘制和蒙版创建都在本地用 Pillow 和 NumPy 完成。只有检测调用会离开本机。

提示词矩阵

这就像 AUTOMATIC1111 的提示词矩阵。一个基础提示词“a lone oak tree”被一个 fn 节点与四个后缀(at sunrise、in a thunderstorm、under the Milky Way、in autumn fog)组合,每个变体都送到各自的 text-to-image 节点。最后一个节点把四张结果拼成一张联系表。

gr.Workflow 没有循环运算符,所以四个 text-to-image 节点并排放在画布上。由于它们处于相同的依赖深度,它们会并行运行,四张图像同时开始生成。

放大和背景移除

这就像 Automatic1111 中的 Extras 标签页。有两个放大节点,它们走不同的路线。第一个是在 fn 节点中进行的本地 Lanczos 重采样,不需要网络调用,完成速度与 Pillow 缩放一样快。第二个是 AuraSR ×4,它是画布上第一个 space 节点:它调用 Hub 上的一个 Space,并把结果当作任何其他节点输出一样处理。

背景移除的工作方式相同。BRIA RMBG-2.0 是另一个 space 节点,所以整个模型都存在于它自己的 Space 中,而这个画布只是调用它。

标注器

Canny、line art、sketch、luma-depth 和 posterize 是你在 Automatic1111 中通常从 ControlNet 扩展获得的预处理器。在这里,每一个都是用纯 NumPy 编写的 fn 节点,背后没有模型。在一张预加载的建筑立面示例照片上,每个标注器在 CPU 上大约需要半秒。

应用中有 36 个运算符节点,其中 32 个是 fn 节点,而其中 22 个完全在进程内运行,无需网络调用。如果你断网,大约三分之二的画布仍能继续工作。由于这些是普通的 Python 函数,你也可以直接测试它们,无需画布、服务器或 GPU。

PNG 信息

AUTOMATIC1111 把生成详情存储在 PNG 的 parameters 文本块中,PNG Info 标签页会把它们读回来。Workflow1111 也是如此。text-to-image 流水线上的后处理节点写入元数据,而这条流水线把它读出来,包括提示词、负面提示词、步数、CFG、种子、图像尺寸和模型。

图像到视频

PNG Info 读取的图像节点也会馈送给一个 Wan 2.2 I2V A14B 节点,由该节点将其动画化;在演示示例中,一只沉睡的狐狸醒来并开始活动。这里没有第二个上传框,因为一个参考节点可以馈送你所需的任意多个下游流水线,所以一次上传就能在同一画布上完成元数据读取和动画化。

在自己的 GPU 上运行模型

到目前为止,每次模型调用都发生在别人的硬件上,通过 Inference Providers 或某个 Space。这就是为什么你无需自己的 GPU 就能构建并运行像 Workflow1111 这样的东西。

不过,一个 fn 节点本质上就是 Python,因此它同样可以在本地加载模型并在你自己的 GPU 上运行。FastVideo/fastvideo-fasth3-preview 就是一个 gr.Workflow 应用,正是这么做的。它运行 FastH3——MiniMax-H3 的四步蒸馏版本,并在 ZeroGPU 上生成带配乐的视频。

整个应用归结为一个绑定函数:

@spaces.GPU(duration=get_duration, size=GPU_SIZE)
def _generate(prompt_embeds, text_token_tags, height, width, num_frames, seed):
    ...

gr.Workflow(bind={"generate": generate, "status": status}).launch()

ZeroGPU 在函数需要时为其分配一块 GPU,调用结束后再释放。gr.Workflow 无需了解这些。它只需调用 fn 节点。

这也不仅限于 Spaces。把 bind= 指向一个加载本地检查点的函数,在你自己的机器上运行 .launch(),Workflow1111 画布就能驱动你自己的 GPU。

每个输出都是一个 API

画布上的每个输出节点都会变成一个 REST 端点,无需手写任何路由。Workflow1111 暴露了九个:/image、/edited_image、/generated_prompt、/recovered_prompt、/detected_objects、/x_y_grid、/upscaled_local、/annotator_map 和 /png_info。

from gradio_client import Client

client = Client("ysharma/Workflow1111", oauth_token="hf_...")

image, params, hires = client.predict(
    "a red fox in a snowy pine forest",  # Prompt
    "",                                  # Negative prompt
    "Cinematic",                         # Style preset
    "enhance fine detail",               # Hires refine instruction
    api_name="/image",
)

这些端点同时也是 MCP 工具。用 mcp_server=True(指南)启动后,每个输出节点都会作为一个 AI 助手可调用的工具出现。把 Claude Code、Cursor 或任何 MCP 客户端指向服务器 URL:

{
  "mcpServers": {
    "workflow1111": {
      "url": "https://ysharma-workflow1111.hf.space/gradio_api/mcp/",
      "headers": { "X-HF-Token": "hf_..." }
    }
  }
}

现在,智能体可以在更大任务中把生成图像、读回提示词或运行检测作为步骤来执行,无需任何胶水代码。每个调用方在 X-HF-Token 请求头中发送自己的令牌,因此该 Space 自身不持有任何令牌。

与 ComfyUI 相比处于什么位置

AUTOMATIC1111 给了我们功能清单,但 Gradio Workflow 真正被拿来比较的工具是 ComfyUI,因为两者都是节点图。对于人们想要构建和发布的许多东西,gr.Workflow 覆盖了相同的领域。

  • 节点可以是你并不拥有的硬件。它可以通过 Inference Providers 运行、调用 Hub 上的任何 Space 或任何 API,或从数据集拉取。这就是 Workflow1111 无需自己的 GPU 也能运行的原因。
  • 每个输出都变成一个带类型的 REST 端点。这些端点由计算图生成。
  • 访客可以以自己的身份运行工作流。开启 OAuth,分享公开 URL,任何人都可以登录并使用该应用,无需安装任何东西。
  • 在同一画布上混合模型和模态。扩散模型、LLM、VLM、检测器和视频模型都可以成为同一工作流的一部分。
  • 需要自定义?写个函数。自定义节点就是一个 Python 函数,因此它能做 Python 能做的任何事。

结果就是一个多模型流水线,人们可以在浏览器中打开、登录、立即使用,并从代码中调用。

构建你自己的

Workflow1111 有 73 个节点,但它最初只有这些:

import gradio as gr

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

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

bind= 将你的函数转换为节点,edges= 将它们连接起来,.launch() 在浏览器中打开画布,让你可以在那里继续编辑。准备好后,gradio deploy 会把整个东西放到一个 Space 上。gr.Workflow 指南 有完整的细节,包括 JSON schema 和每一种算子类型。

如果你更想从已经能用的东西开始,打开 Workflow1111,点击 Duplicate,然后从十一条流水线中选一条来修改:删除节点、替换模型、重新连接流程。如果你更想从小处着手,上一篇文章 有五个工作流,每个大约一分钟就能跑起来。

无论你构建了什么,都发到 X 上并 @@gradio。我们很乐意帮你推广你的工作流。

来源:Hugging Face Blog · huggingface.co

00