如何使用Stable Diffusion WebUI API实现Inpaint功能?
使用Stable Diffusion WebUI API实现Inpaint的Python代码
前提准备
首先确保你的Stable Diffusion WebUI启动时开启了API支持,启动命令加上--api参数:
# Linux/macOS ./webui.sh --api # Windows webui.bat --api
完整Python实现代码
下面的代码会读取原图和蒙版图,通过API调用完成蒙版区域的填充:
import requests import base64 from PIL import Image from io import BytesIO # 1. 配置文件路径和API地址 ORIGINAL_IMAGE_PATH = "path/to/your/original_image.png" MASK_IMAGE_PATH = "path/to/your/mask_image.png" API_URL = "http://localhost:7860/sdapi/v1/img2img" # 2. 将图片转换为base64编码 def image_to_base64(image_path): with Image.open(image_path) as img: buffer = BytesIO() img.save(buffer, format="PNG") return base64.b64encode(buffer.getvalue()).decode("utf-8") original_img_b64 = image_to_base64(ORIGINAL_IMAGE_PATH) mask_img_b64 = image_to_base64(MASK_IMAGE_PATH) # 3. 构造API请求参数 payload = { "prompt": "一只可爱的橘猫,毛发柔软,高清细节", # 替换成你的提示词 "negative_prompt": "模糊,低分辨率,畸形", # 可选:负面提示词 "init_images": [original_img_b64], "mask_image": mask_img_b64, "inpainting_fill": 0, # 0=填充蒙版区域,1=原图保留,2=局部重绘 "mask_blur": 4, # 蒙版边缘模糊度,避免生硬边界 "steps": 20, # 生成步数 "cfg_scale": 7, # 提示词相关性 "width": 512, # 图片宽度(需和原图一致) "height": 512, # 图片高度(需和原图一致) "sampler_name": "Euler a", # 采样器 "override_settings": { "sd_model_checkpoint": "your_model_name.safetensors" # 可选:指定模型 } } # 4. 发送请求并处理结果 response = requests.post(url=API_URL, json=payload) response_data = response.json() # 保存生成的图片 if "images" in response_data: generated_image_b64 = response_data["images"][0] image_data = base64.b64decode(generated_image_b64) with open("inpaint_result.png", "wb") as f: f.write(image_data) print("Inpaint完成,结果已保存为inpaint_result.png") else: print(f"请求失败:{response_data.get('error', '未知错误')}")
关键参数说明
inpainting_fill: 控制填充逻辑,0是直接用提示词填充蒙版区域;1是保留原图内容,只对蒙版外区域做风格化;2是局部重绘(类似WebUI的"局部重绘"模式)mask_blur: 给蒙版边缘加模糊,让生成内容和原图过渡更自然,数值建议2-8width/height: 必须和原图尺寸一致,否则API会返回错误sampler_name: 可选的采样器,比如Euler a、DDIM、DPM++ 2M Karras等,根据需求选择
注意事项
- 原图和蒙版图的尺寸必须完全相同
- 蒙版图建议用黑白图:白色区域是要填充的部分,黑色区域是保留的原图部分
- 如果WebUI不在本地运行,把
API_URL改成对应服务器的地址和端口
内容的提问来源于stack exchange,提问作者user38928392
相关产品推荐
相关产品推荐

