Files
bridge-skills/gs2-sdxl/SKILL.md
T

4.4 KiB
Raw Blame History

name, description
name description
gs2-sdxl 调用 GS-2 (192.168.9.116) Forge SDXL base 1.0 图像生成 API — txt2img/img2img,双实例 :7861/:7862 轮询。触发:生成图片/产品图/配图/场景图,SDXL 出图,文生图,图生图。

GS-2 SDXL 图像生成 (Forge API)

用 GS-2 的 SDXL base 1.0 生成图片。本机(任意节点)直连 192.168.9.116 即可,无需代理。

服务拓扑

节点 GS-2 = 192.168.9.116 (2× RTX 3060 Laptop 12GB)
实例1 http://192.168.9.116:7861 (GPU0, systemd forge-sdxl.service)
实例2 http://192.168.9.116:7862 (GPU1, systemd forge-sdxl-2.service)
模型 sd_xl_base_1.0.safetensors完整 SDXL base,不是 turbo! + sdxl_vae.safetensors
API 标准 A1111/Forge: /sdapi/v1/txt2img, /sdapi/v1/img2img, /sdapi/v1/sd-models

双实例轮询:优先 7861,失败/繁忙换 7862。

推荐参数 (SDXL base 完整版,2026-08-27 实测)

⚠️ 模型是完整 base(非 turbo),steps 需要 24-30,2 步会出糊图。

参数
steps 24-30 (出图约 10-25s@1024²)
cfg_scale 6-7.5
width/height 768~1024 (SDXL 原生尺寸),默认 1024×1024 或 832×1216
sampler_name euler_adpmpp_2m_karras
negative_prompt lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, cropped, worst quality, low quality, jpeg artifacts, signature, watermark, username, blurry
并发 单实例同时只处理 1 个请求 (12GB VRAM),批量任务轮询双实例

调用方式 (已验证)

curl txt2img

curl -s -X POST http://192.168.9.116:7861/sdapi/v1/txt2img \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"a cute corgi wearing sunglasses, studio photo","negative_prompt":"lowres, blurry, watermark","steps":24,"cfg_scale":7,"width":1024,"height":1024,"sampler_name":"euler_a","seed":-1}'

Python (urllib,无 curl 依赖)

import json, base64, urllib.request

def sdxl_txt2img(prompt, negative_prompt="", steps=24, cfg=7.0,
                 w=1024, h=1024, sampler="euler_a", seed=-1, port=7861):
    req = urllib.request.Request(
        f"http://192.168.9.116:{port}/sdapi/v1/txt2img",
        data=json.dumps({"prompt": prompt, "negative_prompt": negative_prompt,
                         "steps": steps, "cfg_scale": cfg, "width": w, "height": h,
                         "sampler_name": sampler, "seed": seed}).encode(),
        headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=180) as r:
        data = json.loads(r.read())
    return base64.b64decode(data["images"][0])  # PNG bytes

# 保存
png = sdxl_txt2img("a red apple on a wooden table, product photo", port=7861)
open("/tmp/apple.png", "wb").write(png)

img2img (重绘/换风格/局部重绘)

curl -s -X POST http://192.168.9.116:7862/sdapi/v1/img2img \
  -H 'Content-Type: application/json' \
  -d '{"init_images":["<base64 PNG>"],"prompt":"same product, luxury studio background","denoising_strength":0.6,"steps":24,"cfg_scale":7,"width":1024,"height":1024,"sampler_name":"euler_a"}'

要点:

  • init_imagesbase64 编码的 PNG 字符串(无 data: 前缀)
  • denoising_strength 0.5-0.7 重绘风格,0.3 以下基本保留原图,0.8+ 大改

健康检查

# 模型列表 (返回 JSON 即服务正常)
curl -s http://192.168.9.116:7861/sdapi/v1/sd-models
# 实例间轮询: 7861 → 7862

服务端排障 (需要时)

sshpass -p 'Tt123456!' ssh admin9webs@192.168.9.116 \
  'export XDG_RUNTIME_DIR=/run/user/$(id -u); systemctl --user status forge-sdxl forge-sdxl-2 --no-pager | head -30'
# 重启: systemctl --user restart forge-sdxl forge-sdxl-2

陷阱

  1. 是 base 模型不是 turbo:steps 必须 24+,2-4 步出糊图/灰图。
  2. 双实例各绑一张卡:单实例并发第 2 个请求会排队或 OOM,批量任务轮询两个端口。
  3. 12GB VRAM 上限:1024×1024 稳定;超 1024 或加 ControlNet 可能 OOM,降 768。
  4. seed=-1 随机,固定 seed 可复现。
  5. 服务端 outputs 目录在 GS-2 (~/stable-diffusion-webui-forge/outputs/),但推荐客户端解析 base64 直接存本地,不依赖服务端目录。

相关

  • 部署/版本排障细节见本地 gpustack-cluster 技能 (GS-2 Forge 双实例 systemd 章节)
  • FlairGS (AppServer-105 :7870) 也调这两个实例:FORGE_STEPS=24, CFG=7.5, denoise=0.70 (产品图场景生成)