在 HAI 上部署 Stable Diffusion WebUI 后,怎么通过 API 接口在自己的网站或小程序里调用

限时 腾讯云新春特惠 — 轻量2核2G4M 576元99元/年 立即领取 →

很多朋友在腾讯云 HAI 上一键部署好 Stable Diffusion WebUI 后,都会遇到同一个问题:怎么把 WebUI 的 AI 绘图能力,通过 API 接口接到自己的网站或小程序里?

这篇文章就按“从 0 到能调通接口”的思路,一步步讲清楚:

  • 怎么确认 HAI 上的 WebUI 已经开启了 API;
  • API 的地址和鉴权怎么看;
  • 用一段简单的 Python 代码,实现“网站后台调用 AI 出图”;
  • 小程序或前端页面怎么对接;
  • 常见坑怎么提前规避。

如果你还没在 HAI 上部署好 Stable Diffusion WebUI,可以先参考官方文档或社区教程,把 WebUI 正常运行起来,再来看这篇会更顺畅。

爆款 腾讯云服务器 · 热销配置
限时优惠 | 个人专享
1.7折
轻量 2核2G4M
50GB SSD | 300GB流量
576元/年
99元/年
2.2折
轻量 2核4G6M
70GB SSD | 600GB流量
900元/年
199元/年
2.5折
轻量 4核8G10M
120GB SSD | 1500GB流量
2520元/年
630元/年
海外
海外 2核2G30M
东京/新加坡 | 1TB流量
576元/年
99元/年
查看全部优惠配置 →

1. 前提:确认 HAI 上的 WebUI 已开启 API

Stable Diffusion WebUI 本身支持 API 模式,只要在启动命令里加上 --api 参数即可。HAI 这类高性能应用服务,一般会在控制台提供“打开 WebUI”的入口,但默认不一定开启 API,需要自己确认或配置一下。

你可以按下面步骤检查:

  1. 登录腾讯云控制台,进入高性能应用服务 HAI。
  2. 找到你创建的 Stable Diffusion WebUI 实例,点击“算力连接”或“打开 WebUI”。
  3. 在弹出的 WebUI 页面里,看顶部或设置里有没有“API”相关的开关或说明。
  4. 如果没有,可以进入实例的“终端”或“SSH 登录”,找到 WebUI 的启动命令,确认是否包含 --api 参数。

如果启动命令里没有 --api,可以修改启动配置,加上类似下面的参数:

买1年送3个月 腾讯云服务器 · 超值年付
限时活动 | 数量有限
轻量 2核2G4M
个人专享 | 免费续3个月
576元/年
99元/年
轻量 2核4G5M
个人专享 | 免费续3个月
780元/年
188元/年
轻量 4核8G12M
个人专享 | 免费续3个月
2760元/年
880元/年
CVM 2核2G S5
个企同享 | 免费续3个月
846元/年
245元/年
CVM 2核4G S5
个企同享 | 免费续3个月
2196元/年
637元/年
CVM 4核8G S5
个企同享 | 免费续3个月
4776元/年
1256元/年
立即领取买1年送3个月优惠 →

bash webui.sh --listen --port 7860 --api --enable-insecure-extension-access

参数说明:

  • --listen:允许外部访问 WebUI 和 API。
  • --port 7860:指定端口,默认是 7860。
  • --api:开启 API 接口。
  • --enable-insecure-extension-access:允许加载部分扩展,按需选择。

修改后重启 WebUI,再访问 http://你的HAI公网IP:7860/sdapi/v1/txt2img,如果返回 JSON 格式的信息,就说明 API 已经正常启动了。

2. 找到你的 API 地址和鉴权方式

API 地址一般由“协议 + IP/域名 + 端口 + 路径”组成。在 HAI 场景下,常见形式有:

长期特惠 腾讯云服务器 · 3年/5年机特惠
低至2折 | 省钱首选
2折
轻量 2核2G4M
个人专享 | 约9.8元/月
1728元/3年
353元/3年
2折
轻量 2核4G6M
个人专享 | 约14.7元/月
2700元/3年
528元/3年
5年
CVM SA2 AMD
高性价比 | 约17.4元/月
3400元/5年
1044元/5年
5年
CVM S5 Intel
稳定计算 | 约21.2元/月
4230元/5年
1269元/5年
查看长期特惠详情 →

  • 公网访问http://<HAI实例公网IP>:7860
  • 内网访问:如果你的网站或小程序和 HAI 在同一个 VPC 内,可以用内网地址,延迟更低,比如 http://<HAI实例内网IP>:7860

鉴权方面,Stable Diffusion WebUI 默认不开启鉴权,但为了安全,建议加上。可以在启动命令里通过 --api-auth username:password 设置用户名和密码,比如:

bash webui.sh --listen --port 7860 --api --api-auth admin:123456

这样,调用 API 时需要在请求头里加上 Basic Auth:

Authorization: Basic YWRtaW46MTIzNDU2

其中 YWRtaW46MTIzNDU2username:password 经过 Base64 编码后的结果。

GPU 腾讯云 · GPU服务器 & 爆品专区
AI算力 | 限量抢购
GPU GN6S
NVIDIA P4 | 4核20G
501元/7天
175元/7天
GPU GN7
NVIDIA T4 | 8核32G
557元/7天
239元/7天
GPU GN8
NVIDIA P40 | 6核56G
1062元/7天
456元/7天
香港 2核 Linux
独立IP | 跨境电商
38元/月
32.3元/月
查看GPU服务器详情 →

3. 用 Python 写一个“网站后台调用 AI 出图”的示例

假设你已经有一个网站后台(比如用 Flask、Django 或 Node.js 写的),现在想加一个接口,调用 HAI 上的 Stable Diffusion WebUI 生成图片。下面是一个用 Python + requests 写的简单示例:

import json
import requests
import base64
from io import BytesIO
from PIL import Image

 HAI 上 WebUI 的 API 地址
url = "http://你的HAI公网IP:7860/sdapi/v1/txt2img"

 如果设置了 API 鉴权
auth = ("admin", "123456")

 请求参数
payload = {
    "prompt": "a beautiful girl with blue eyes, wearing a red dress, in a garden, spring, high quality, detailed",
    "negative_prompt": "ugly, deformed, low quality, blurry",
    "sampler_name": "Euler a",
    "batch_size": 1,
    "n_iter": 1,
    "steps": 30,
    "cfg_scale": 7.5,
    "width": 512,
    "height": 768,
    "seed": 12345,
    "send_images": True,
    "save_images": False
}

 发送 POST 请求
response = requests.post(url, json=payload, auth=auth)
data = response.json()

 处理返回的图片
if "images" in data and len(data["images"]) > 0:
     解码 Base64 图片数据
    image = Image.open(BytesIO(base64.b64decode(data["images"][0])))
     保存为本地文件
    image.save("output.png")
    print("图片已保存为 output.png")
else:
    print("生成图片失败:", data)

这段代码的逻辑很简单:

  1. 构造请求参数,包括正向提示词、负向提示词、采样器、步数、分辨率等。
  2. 发送 POST 请求到 /sdapi/v1/txt2img 接口。
  3. 解析返回的 JSON 数据,提取 Base64 编码的图片。
  4. 解码并保存为本地图片。

你可以根据自己的需求,调整 payload 里的参数,比如修改 prompt 生成不同风格的图片,或者调整 stepscfg_scale 控制出图质量和速度。

4. 小程序或前端页面怎么对接

如果你的小程序或前端页面想直接调用 HAI 上的 API,需要注意以下几点:

  • 跨域问题:浏览器出于安全考虑,会限制跨域请求。你可以在 HAI 的 WebUI 启动命令里加上 --cors-allow-origins "" 参数,允许所有域名访问,或者指定具体的域名,比如 --cors-allow-origins "https://你的小程序域名.com"
  • HTTPS 问题:小程序要求所有网络请求必须使用 HTTPS,而 HAI 的 WebUI 默认是 HTTP。你可以通过腾讯云的 CDN 或负载均衡,将 HTTP 请求转发到 HAI 的 API 地址,并配置 HTTPS。
  • 鉴权问题:如果设置了 API 鉴权,需要在小程序或前端页面的请求头里加上 Authorization 字段,值为 Basic <Base64编码后的用户名:密码>

下面是一个用 JavaScript 写的简单示例,展示如何在小程序里调用 HAI 上的 API:

wx.request({
  url: 'https://你的CDN或负载均衡域名/sdapi/v1/txt2img',
  method: 'POST',
  header: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic YWRtaW46MTIzNDU2' // admin:123456 的 Base64 编码
  },
  data: {
    "prompt": "a cute cat, sitting on a sofa, cartoon style",
    "negative_prompt": "ugly, deformed, low quality",
    "sampler_name": "Euler a",
    "steps": 20,
    "cfg_scale": 7,
    "width": 512,
    "height": 512
  },
  success(res) {
    if (res.data.images && res.data.images.length > 0) {
      const imageBase64 = res.data.images[0];
      const imageUrl = 'data:image/png;base64,' + imageBase64;
      // 显示图片
      this.setData({
        imageUrl: imageUrl
      });
    } else {
      console.log('生成图片失败:', res.data);
    }
  },
  fail(err) {
    console.log('请求失败:', err);
  }
});

这段代码的逻辑和 Python 示例类似,只是用了小程序的 wx.request API 发送请求,并在成功回调里处理返回的图片数据。

5. 常见坑怎么提前规避

  • 端口未开放:检查 HAI 实例的安全组规则,确保 7860 端口(或你自定义的端口)已经放行。
  • API 未开启:确认启动命令里包含 --api 参数。
  • 鉴权问题:如果设置了 API 鉴权,记得在请求头里加上 Authorization 字段。
  • 跨域问题:如果前端页面和 HAI 不在同一个域名下,记得配置 CORS。
  • HTTPS 问题:小程序要求所有网络请求必须使用 HTTPS,记得配置 CDN 或负载均衡。

如果你在部署或调用过程中遇到其他问题,可以在腾讯云社区或 HAI 的官方文档里搜索解决方案,或者在相关技术论坛提问。

推荐 腾讯云服务器 · 更多优惠配置
点击查看详情
轻量 2核2G4M
50GB SSD | 300GB流量
99元/年
轻量 2核4G6M
70GB SSD | 600GB流量
199元/年
海外 Linux 2核2G30M
东京/新加坡 | 1TB流量
99元/年
海外 Win 2核2G30M
东京/新加坡 | 1TB流量
99元/年
上云大礼包 1670元
代金券礼包
轻量服务器特惠
跨境电商服务器
查看全部优惠 | 领取专属礼包 →