Gradio 团队此前曾用五个小型 gr.Workflow 图演示工作流的基本用法,本文则更进一步:作者 yuvraj sharma 与 Abubakar Abid 发布了名为 Workflow1111 的演示项目,将 AUTOMATIC1111 stable-diffusion-webui 的大部分功能以单一工作流画布的形式重建。
该项目由 73 个节点、11 条媒体管线组成,集成了文生图、高分辨率修复、图生图、提示词矩阵、VLM 反推、检测生成修复蒙版、ControlNet 风格标注器、背景移除、PNG Info 以及图生视频等功能,所用模型均为当前 SOTA 级别。用户可通过 Hugging Face 账户登录或使用访问令牌运行管线,登录后模型调用计入各自配额。该应用以 Space 形式发布,可直接运行,也可复制后按自身场景重新配置。

节点模型:四种运算符
画布上的所有管线都由四种运算符类型构成,运算符的输入和输出即构成连线的端口:
- fn:一个 Python 函数;
- model:通过 InferenceClient 调用的模型;
- space:另一个 Gradio Space;
- dataset:Hub 数据集中的一行。
值得注意的是,LLM 与扩散模型在 Gradio 工作流中是画布上同类的普通 model 运算符,这一点与 ComfyUI 的自定义节点机制不同。
各条管线
文生图
核心管线包含 A1111 的 txt2img 标签页中的常用控件:负面提示词、步数、CFG、种子、宽高,以及用于选择 checkpoint 的 model_id 字段。提示词先进入 prompt-builder fn 节点,该节点追加所选样式预设并清理文本,随后由 model 节点通过 Inference Providers 调用 checkpoint。post-process fn 节点在输出时将生成参数写入 PNG 元数据,PNG Info 管线读取的正是这部分内容。
高分辨率修复
Automatic1111 的高清修复会放大 txt2img 输出后再进行一轮去噪。Workflow1111 改用了两个节点的路径:文生图结果进入 FLUX.1-Kontext 模型节点,附带精修指令("增强细节和微纹理,保持构图完全一致"),输出更清晰、尺寸更大的图像。
图生图
同一个 Kontext 节点承担图生图功能:描述所需的修改,节点返回编辑后的图像。
LLM 生成提示词
以"风暴中的灯塔"这类粗略提示为起点,管线将其发送到 Qwen3-4B 模型节点,再由一个小的 fn 节点把回复整理为最多 40 个标签的清洁列表,例如"风暴海,潮湿的岩石,戏剧性的构图,低角度拍摄,体积照明,不祥的色调"。该输出可连接到任意扩散模型节点生成图像。
VLM 反推提示词
相当于 AUTOMATIC1111 的 Interrogate 按钮,但使用 VLM 而非 CLIP。Qwen2.5-VL 读取一张夜市照片并写出可能生成该照片的提示词;同时一个 ViT 分类器节点读取同一图像并返回标签:餐厅 51.9%、烟草店 15.6%、玩具店 9.1%。两个节点使用相同的图像输入,gr.Workflow 将它们并行运行。
检测生成修复蒙版
AUTOMATIC1111 中 inpaint 蒙版需要手动绘制,该管线改用检测器自动生成。DETR 在一张街景照片中检测到 6 个对象(3 个人、一只狗、一辆自行车和一辆汽车),随后工作流分为两个分支:一个将检测框绘制在原图上,另一个将其转换为可供下游 inpaint 流程使用的蒙版。绘图与蒙版创建通过 Pillow 和 NumPy 在本地完成,仅检测调用离开本机。
提示词矩阵
对应 AUTOMATIC1111 的提示词矩阵功能。基础提示词"一棵孤立的橡树"由一个 fn 节点与四个后缀(日出时分、雷雨中、银河下、秋日薄雾中)组合,每个变体分别进入各自的文生图节点,最后一个节点将四张结果拼成一张样张。gr.Workflow 没有循环运算符,因此四个文生图节点并排置于画布上;由于依赖深度相同,它们同时运行、同时出图。
放大与背景移除
对应 Automatic1111 的 Extras 标签页,其中有两个放大节点走不同路径。第一个是 fn 节点在本地执行的 Lanczos 重采样,无网络调用,速度与 Pillow 缩放相当。第二个是 AuraSR ×4,也是画布上首个 space 节点:它调用 Hub 上的另一个 Space,返回值像其他节点输出一样被处理。背景移除同理:BRIA RMBG-2.0 是另一个 space 节点,整个模型运行在其自有 Space 中。
ControlNet 标注器
Canny、line art、sketch、luma-depth 和 posterize 是 ControlNet 扩展通常提供的预处理器,在这里每个都是用纯 NumPy 编写的 fn 节点,背后没有模型。在一张预加载的建筑立面示例照片上,每个标注器在 CPU 上约耗时半秒。
整个应用共有 36 个运算符节点,其中 32 个是 fn 节点,22 个完全在无网络调用的情况下运行。断网状态下画布约三分之二的功能仍可正常工作。由于这些是普通 Python 函数,也可以直接对它们做单元测试。
PNG Info
AUTOMATIC1111 将生成详情存入 PNG 的 parameters 文本块,PNG Info 标签页负责读取。Workflow1111 采用相同方案:文生图流程中的后处理节点写入元数据,该流程再将其读出,内容包括提示词、负面提示词、步数、CFG、种子、图像尺寸和模型。
图生视频
PNG Info 读取的那个图像节点同时提供给 Wan 2.2 I2V A14B 节点。演示示例中,一只睡着的狐狸醒来并开始活动。无需第二个上传框,因为一个引用节点可以供任意多条下游管线使用。
在本地 GPU 上运行模型
至此,所有模型调用都通过 Inference Providers 或其他 Space 在他人的硬件上运行,这也是 Workflow1111 无需自备 GPU 即可构建运行的原因。反过来,fn 节点只是 Python,因此也可以在本地加载模型、跑在自己的 GPU 上。
FastVideo 团队发布的 fastvideo-fast-h3-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= 指向加载本地 checkpoint 的函数,在自己的机器上运行 .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 助手可调用的工具。将服务器 URL 指向 Claude Code、Claude 或任意 MCP 客户端:
{
"mcpServers": {
"workflow1111": {
"url": "https://ysharma-workflow1111.hf.space/gradio_api/mcp/",
"headers": { "X-HF-Token": "hf_..." }
}
}
}
由此,一个 Agent 可以生成图像、反推提示词,或在更大的任务流中把检测作为一步执行,全程无需胶水代码。每位调用者在 X-HF-Token 头部携带自己的令牌,因此 Space 本身不持有任何凭证。
与 ComfyUI 的定位关系
Gradio Workflow 真正可类比的对象是 ComfyUI,因为两者都是节点图。对于大多数想要构建并交付的应用,gr.Workflow 覆盖了相同的能力范围:
- 节点可以运行在你不拥有的硬件上:通过 Inference Providers 调用模型、调用 Hub 上的任意 Space 或任意 API、从数据集拉取数据,这正是 Workflow1111 无需自带 GPU 的原因;
- 每个输出节点都会成为一个 REST 端点,路由由图自动生成;
- 访问者以自己的身份运行工作流:任何人登录后即可使用应用,无需安装任何东西;
- 在同一画布上混合模型与模态:扩散模型、LLM、VLM、检测器和视频模型都能成为同一工作流的一部分;
- 需要定制能力时直接写函数:自定义节点就是一个 Python 函数,可以做 Python 能做的任何事。
最终效果是:用户可以在浏览器中打开应用、登录并立即使用,开发者也可以直接从代码中调用。
上手方式
Workflow1111 有 73 个节点,但最小起点只有几行:
import gradio as gr
def your_function(text: str) -> str:
pass
gr.Workflow(bind=[your_function]).launch()
.launch() 会在浏览器中打开画布,可继续在其中编辑;完成后通过广播部署将整个应用发布为一个 Space。官方 gr.Workflow 指南提供了完整细节,包括 JSON 模式和每种运算符类型的说明。若希望从可运行的成品出发,可以复制 Workflow1111,从 11 条管线中任选一条改造:删除节点、更换模型、重新连线;若想从小规模开始,上一篇文章中的五个工作流每个约一分钟即可运行。





