dify 调用本地的 stable diffusion api生成图片的工作流搭建

发布于:2025-08-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

Dify调用本地Stable Diffusion API的工作流搭建指南

核心架构
Dify应用
HTTP请求节点
本地SD API
图片生成
结果返回
详细步骤
  1. 准备Stable Diffusion API服务

    • 确保本地已部署SD WebUI(如Automatic1111)
    • 启动API服务:
      python launch.py --api --port 7860
      
    • 验证API可用性:
      curl -X POST http://localhost:7860/sdapi/v1/txt2img -H 'Content-Type: application/json' -d '{"prompt":"test"}'
      
  2. 在Dify中创建应用

    • 新建工作流类型应用
    • 添加「HTTP请求」节点
    • 配置节点参数:
      {
        "url": "http://localhost:7860/sdapi/v1/txt2img",
        "method": "POST",
        "headers": {"Content-Type": "application/json"},
        "body": {
          "prompt": "{{input}}",
          "steps": 20,
          "width": 512,
          "height": 512
        }
      }
      
  3. 数据处理配置

    • 添加「变量提取」节点处理API响应:
      import base64
      
      def process(data):
          image_b64 = data['images'][0]
          return {
              "image": f"data:image/png;base64,{image_b64}",
              "info": data['info']
          }
      
  4. 输出节点配置

    • 设置返回数据结构:
      {
        "image_url": "{{image}}",
        "generation_info": "{{info}}"
      }
      
完整工作流示例
# Dify工作流伪代码
def main(input_text):
    # 构造SD API请求
    payload = {
        "prompt": input_text,
        "negative_prompt": "ugly, blurry",
        "cfg_scale": 7
    }
    
    # 调用本地API
    response = requests.post(
        "http://localhost:7860/sdapi/v1/txt2img",
        json=payload
    )
    
    # 解析响应
    result = response.json()
    image_data = result['images'][0]
    
    # 返回结果
    return {
        "image": f"data:image/png;base64,{image_data}",
        "parameters": result['parameters']
    }
关键注意事项
  1. 网络配置

    • 确保Dify服务与SD API在同一网络域
    • 若跨域访问需配置CORS:
      export COMMANDLINE_ARGS="--api --cors-allow-origins=*"
      
  2. 安全加固

    • 添加请求频率限制(建议使用Dify的速率限制中间件)
    • 在SD API端设置身份验证:
      # webui.py修改
      app.add_middleware(AuthMiddleware, token="YOUR_SECRET")
      
  3. 性能优化

    • 启用SD的--xformers加速
    • 设置Dify超时参数:
      # dify配置
      request_timeout: 300  # 单位秒
      
调试技巧
  1. 使用Postman测试API端点:

    POST http://localhost:7860/sdapi/v1/options
    Body: {"sd_model_checkpoint": "v2-1_768-ema-pruned.safetensors"}
    
  2. 查看SD日志定位问题:

    tail -f ~/stable-diffusion-webui/logs/api.log
    
  3. Dify调试模式启用:

    • 工作流编辑页开启「调试输出」
    • 查看每个节点的输入/输出数据

提示:首次运行时建议使用简单提示词(如"a red apple")测试基础功能,逐步增加复杂度。当处理1024×10241024\times10241024×1024以上分辨率时,需调整显存设置:--medvram-sdxl


网站公告

今日签到

点亮在社区的每一天
去签到