← 返回 2026-09-21 简报

用 Gradio Workflow 重构 AUTOMATIC1111

语音播报
摘要
事件:Hugging Face 发布 Workflow1111。 要点:由十一条媒体管道和七十三节点构成,涵盖文生图、高清修复及 ControlNet 等模块; 影响:开发者可零代码复用 SOTA 模型能力,通过可视化连线快速构建定制化 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 字段。提示首先通过一个 prompt-builder fn 节点,该节点附加所选的风格预设并清理文本,然后进入一个 model 节点,该节点通过 Inference Providers 调用检查点。一个 post-process fn 节点在输出时将生成参数写入 PNG 的元数据中,这就是后续 PNG Info 管道读取回去的内容。

高分辨率修复

在 Automatic1111 中,高分辨率修复首先对 txt2img 的输出进行上采样,然后运行第二次去噪过程。在这里,它是一个两节点的迂回路径。文本到图像的结果进入一个 FLUX.1-Kontext 模型节点,附带细化指令(“增强细节和微纹理,保持构图相同”),并以更清晰、更大的尺寸返回。

图像到图像

同一个 Kontext 节点也充当图像到图像选项卡。上传一张图片,描述您想要的更改,它返回编辑后的图像。

让 LLM 编写提示

从一个粗略的提示开始,例如“风暴中的灯塔”。此管道将其发送到 Qwen3-4B 模型节点,一个小 fn 节点将回复转换为干净的标签列表,限制为四十个:“stormy sea, wet rocks, dramatic composition, low angle shot, volumetric lighting, ominous tone。”您可以将此输出连接到任何扩散模型节点以渲染图像。

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

将图像读回提示

这类似于 AUTOMATIC1111 的 Interrogate 按钮,只是由 VLM 进行询问而不是 CLIP。Qwen2.5-VL 查看一张夜市照片并编写一个可能产生该照片的提示。一个 ViT 分类器节点读取同一张图像并返回标签:餐厅 51.9%,烟草店 15.6%,玩具店 9.1%。

两个节点使用相同的图像输入,因此 gr.Workflow 并行运行它们,您获得两个答案所需的时间大致等于运行其中一个的时间。

检测转修复蒙版

AUTOMATIC1111 要求您手动绘制修复蒙版。此管道则从检测器生成蒙版。DETR 在街景照片中找到了六个对象(三个人、一只狗、一辆自行车和一辆车),从此工作流分为两个分支:一个在原始图像上绘制检测到的框,另一个将它们转换为您可以馈送到下游修复管道的蒙版。

绘图和蒙版创建均在本地通过 Pillow 和 NumPy 完成。唯一离开本机的是检测调用。

提示词矩阵

这类似于 AUTOMATIC1111 的提示词矩阵。基础提示词“一棵孤立的橡树”通过一个 fn 节点与四个后缀(日出时、在雷暴中、在银河下、在秋雾中)组合,每个变体都进入其各自的文生图节点。最后一个节点将这四个结果拼接成一张联系表。

gr.Workflow 没有循环运算符,因此这四个文生图节点并排位于画布上。由于它们处于相同的依赖深度,它们并行运行,四张图片同时开始生成。

放大与背景移除

这类似于 Automatic1111 中的 Extras(额外功能)选项卡。这里有两个放大节点,它们走不同的路径。第一个是 fn 节点中的本地 Lanczos 重采样,它不需要网络调用,完成速度仅受限于 Pillow 的缩放能力。第二个是 AuraSR ×4,它是画布上的第一个 Space 节点:它调用 Hub 上的一个 Space,并将结果视为任何其他节点输出。

背景移除的工作原理相同。BRIA RMBG-2.0 是另一个 Space 节点,因此整个模型都驻留在其自己的 Space 中,而这个画布只是将其调用进来。

标注器

Canny、线稿、素描、亮度深度和海报化是你通常在 Automatic1111 的 ControlNet 扩展中获得的预处理器。在这里,每一个都是用纯 NumPy 编写的 fn 节点,背后没有模型。在一张预加载的建筑立面示例照片上,每个标注器在 CPU 上大约需要半秒钟。

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

PNG 信息

AUTOMATIC1111 将生成详情存储在 PNG 的参数文本块中,PNG Info 选项卡则将其读取回来。Workflow1111 也是如此。文生图管线上的后处理节点写入元数据,而该管线将其读取回来,包括提示词、负向提示词、步数、CFG、种子、图像尺寸和模型。

图生视频

PNG Info 从中读取的图像节点还馈送给一个 Wan 2.2 I2V A14B 节点,使其动画化;在演示示例中,一只睡觉的狐狸醒来并开始移动。没有第二个上传框,因为一个参考节点可以馈送任意数量的下游管线,因此单次上传即可在同一画布上读取其元数据并生成动画。

在自己的 GPU 上运行模型

到目前为止,所有的模型调用都通过推理提供商或 Space 发送给别人的硬件。这就是为什么你可以构建和运行像 Workflow1111 这样的应用而无需自己的 GPU。

不过,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" ,
"" ,
"Cinematic" ,
"enhance fine detail" ,
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 。我们很乐意放大你的工作流。

原文链接:https://huggingface.co/blog/gradio-workflow-1111
来源:Hugging Face
以上内容由 AI 自动翻译,仅供参考。
← 返回简报