Install
openclaw skills install axelhu-local-sdxl基于本地 ComfyUI 与 SDXL,实现高质量私密图像生成,支持详细构图、风格及尺寸自定义,适合无在线API场景。
openclaw skills install axelhu-local-sdxl基于 ComfyUI + SDXL 的本地图片生成技能。适用于需要高质量配图、素材生成、本地私密生图、或对在线生成有频率限制的场景。
在以下场景时使用:
不要用于:
直接描述想要的图片内容,例如:
Agent 收到后执行生图脚本,发送结果给用户。
| 项目 | 参数 |
|---|---|
| 模型 | Stable Diffusion XL 1.0 (fp16) |
| 显卡 | NVIDIA RTX 3080 (10GB VRAM) |
| 出图尺寸 | 默认 1024×768,可调整 |
| 生图速度 | ~18秒/张(euler 采样,20步) |
| 可用采样器 | euler, dpmpp_2m, lcm, ddim 等 |
| API 端口 | localhost:8188 |
import subprocess
result = subprocess.run(
["python3", "/path/to/scripts/sdxl_generate.py",
"--prompt", "一只狐狸在森林里",
"--negative", "模糊, 低质量",
"--steps", "20",
"--seed", "42",
"--output", "/tmp/output.png"],
capture_output=True, text=True
)
print(result.stdout)
import requests, time, json
COMFYUI = "http://localhost:8188"
def generate(prompt, negative="", steps=20, seed=42, width=1024, height=768):
workflow = {
"loader": {"class_type": "CheckpointLoaderSimple",
"inputs": {"ckpt_name": "sdxl-base-1.0.safetensors"}},
"positive": {"class_type": "CLIPTextEncode",
"inputs": {"text": prompt, "clip": ["loader", 1]}},
"negative": {"class_type": "CLIPTextEncode",
"inputs": {"text": negative, "clip": ["loader", 1]}},
"latent": {"class_type": "EmptyLatentImage",
"inputs": {"width": width, "height": height, "batch_size": 1}},
"sampler": {"class_type": "KSampler",
"inputs": {"seed": seed, "steps": steps, "cfg": 7.0,
"sampler_name": "euler", "scheduler": "normal",
"denoise": 1.0,
"positive": ["positive", 0], "negative": ["negative", 0],
"model": ["loader", 0], "latent_image": ["latent", 0]}},
"decode": {"class_type": "VAEDecode",
"inputs": {"samples": ["sampler", 0], "vae": ["loader", 2]}},
"save": {"class_type": "SaveImage",
"inputs": {"images": ["decode", 0], "filename_prefix": "sdxl_gen"}}
}
r = requests.post(f"{COMFYUI}/prompt", json={"prompt": workflow})
pid = r.json()["prompt_id"]
# 等待完成(轮询)
for _ in range(30):
time.sleep(2)
hist = requests.get(f"{COMFYUI}/history/{pid}").json()
if pid in hist:
return f"{COMFYUI}/view?filename=sdxl_gen_00001_.png"
return None
| 参数 | 默认值 | 说明 |
|---|---|---|
--prompt | (必填) | 图片描述,越详细越好 |
--negative | "blurry, low quality, distorted" | 反向提示词 |
--steps | 20 | 采样步数,越高质量越好越慢 |
--seed | 随机 | 种子,决定具体画面 |
--width | 1024 | 宽度(8的倍数) |
--height | 768 | 高度(8的倍数) |
--sampler | euler | 采样器(euler/dpmpp_2m/lcm/ddim) |
--cfg | 7.0 | CFG 强度(1-20) |
--output | 自动 | 输出路径 |
| 场景 | 推荐参数 |
|---|---|
| 写实风景/人物 | --steps 25 --cfg 7 --sampler euler |
| 动漫/插画风格 | --steps 20 --cfg 8 --negative "写实, 照片" |
| 快速草图/验证 | --steps 4 --sampler lcm --cfg 1.0(需要 LCM 模型) |
| 16:9 横幅图 | --width 1280 --height 720 |
生图完成后,脚本自动将图片保存到指定路径或 /tmp/ 目录,并通过飞书发送图片消息给用户。
python3 main.py --port 8188)