要在dify中让stable diffusion稳定出图,需构建完整链路:启用sd webui api、配置http请求节点调用txt2img接口、接入llm节点实现中文到专业prompt转换、用code节点容错处理json输出、最后发布并测试端到端流程。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中让Stable Diffusion真正“听懂人话”并稳定出图,不能只把API丢进去就完事——必须设计一条从用户输入、语义优化、参数构造到图像返回的完整链路,中间任何一环断裂都会导致白屏、报错或生成无关图片。
确认Stable Diffusion API服务已就绪
打开浏览器访问你的Stable Diffusion WebUI地址(如 http://localhost:7860),点击右上角「Settings」→「API」→勾选「Enable API」并保存重启。这一步不做,后续所有节点调用都会返回 404 或 Connection refused。
在终端执行 curl -X POST "http://localhost:7860/sdapi/v1/txt2img" -H "Content-Type: application/json" -d '{"prompt":"a cat"}',若返回含 base64 字段的 JSON,则API可用;若提示 "Method Not Allowed",说明你没开启 txt2img 的 API 接口(需在 WebUI 启动参数中加 --enable-insecure-extension-access)。
【必须确保SD服务监听的是HTTP而非HTTPS,且未启用鉴权;Dify当前不支持带Basic Auth的API】
在Dify中创建新工作流并接入SD模型
登录Dify控制台 → 点击左侧「Workflows」→「+ Create Workflow」→ 选择「Empty Workflow」。
拖入一个「HTTP Request」节点,命名为「Call SD API」;在URL字段填入 http://localhost:7860/sdapi/v1/txt2img(若部署在远程服务器,请替换为对应IP+端口);请求方法选 POST;Headers 添加 Content-Type: application/json。
Body 使用 JSON 模板:{"prompt": "{{#sys.prompt#}}", "negative_prompt": "{{#sys.negative_prompt#}}", "steps": 20, "cfg_scale": 7, "width": 512, "height": 512, "sampler_name": "Euler a"}。其中 {{#sys.prompt#}} 是后续LLM节点将注入的优化后提示词,不可手写死值。
添加LLM节点实现中文→专业Prompt自动转换
在「Call SD API」节点上游,拖入一个「LLM」节点,选择你已配置好的大模型(如 Llama3-8B 或 GPT-4-turbo)。
设置系统提示词(System Prompt)为:
你是一个专为Stable Diffusion v1.5优化的提示词工程师。请严格按以下规则处理用户输入:① 将中文自然语言描述转为高质量英文Prompt,主体前置、细节后置;② 自动补全材质、光照、构图、画质关键词(如masterpiece, best quality, 8k, ultra-detailed);③ 生成配套负面提示词,排除模糊、畸变、多余肢体等常见缺陷;④ 输出格式必须为纯JSON,字段为"prompt"和"negative_prompt",不加任何解释文字。
用户输入(User Prompt)设为:{{#context.input#}} —— 这个变量会自动接收用户在前端表单中填写的原始描述,比如“一只穿宇航服的柴犬在火星上看地球升起”。
配置变量映射与错误兜底机制
方法一:直接连接变量
将LLM节点的输出字段 prompt 和 negative_prompt,分别映射到HTTP节点中的 {{#sys.prompt#}} 和 {{#sys.negative_prompt#}}。Dify会自动提取JSON响应中的对应键值。
方法二:使用「Code」节点做容错清洗(推荐)
在LLM与HTTP节点之间插入一个「Code」节点,语言选 Python,代码如下:
import json
try:
data = json.loads($input)
prompt = data.get("prompt", "a cat")
negative = data.get("negative_prompt", "low quality, blurry")
return {"prompt": prompt, "negative_prompt": negative}
except:
return {"prompt": "a cat", "negative_prompt": "low quality, blurry"}
这一步能防止LLM偶尔输出非JSON格式导致整个工作流中断;【若跳过此步,LLM偶发输出乱码将直接使SD调用失败且无日志提示】
发布工作流并测试端到端效果
点击右上角「Publish」→ 勾选「Enable this workflow」→ 设置触发方式为「Chat」或「API」→ 保存。
进入「Try it out」面板,在输入框中键入:“水墨风格的熊猫在竹林里打太极”,点击发送。
观察日志流:先显示LLM输出结构化JSON,再显示HTTP节点返回base64图像数据,最后前端渲染出图——全部绿色状态条即表示链路贯通。











