最近想嘗試在本地程式呼叫stablediffusion webui的api來產生圖片,但我發現文檔跟相關文章實在很少,使用自帶的doc範例也跑不動,搞了好一陣,才終於成功~

不知道是大家理解能力太好,還是我理解能力不足,真的覺得那個範例文檔超級陽春的... 這邊來分享一下我是如何使用API生圖的。(僅基本文生圖,更進階的以後有用到再說)

步驟一.開啟SD WebUI API

一定要確認 webui-user.bat 內是否有 --api 參數,要是沒有的話,只能使用基礎的查詢info之類的API,是看不到txt2img這個的

@echo off 

 set PYTHON= 

set GIT= 

set VENV_DIR= 

set COMMANDLINE_ARGS= --listen --api --enable-insecure-extension-access 

call webui.bat

使用文字編輯器打開webui-user.bat,確認 set COMMANDLINE_ARGS 內有 --api。確認無誤後,在運行SD WebUI


步驟二. 呼叫API

可以使用POSTMAN來呼叫,或用你正在編寫的程式呼叫(例如:nodejs 的 axios)

模式:[POST]

Endpoint:http://127.0.0.1:7860/sdapi/v1/txt2img (本地默認是這樣)

假如是用POSTMAN,則在Body 選 Raw模式的JSON格式  (等於是application/json)

參數的部分

{
  "prompt": "", //提示詞
  "negative_prompt": "", //反向提示詞
  "styles": [
    ""
  ],
  "seed": -1, //種子
  "subseed": -1,
  "sd_vae":"sdxl_vae.safetensors", //使用的VAE(這個參數要自己加,官方的doc範例沒寫)
  "subseed_strength": 0,
  "seed_resize_from_h": -1,
  "seed_resize_from_w": -1,
  "sampler_name": "DPM++ 2M", //使用的採樣器
  "scheduler": "Karras", //採樣類型
  "batch_size": 1, //批次
  "n_iter": 1,
  "steps": 20, //步數
  "cfg_scale": 7, //CFG Scale
  "width": 512, //寬
  "height": 512, //高
  "restore_faces": false, //沒特別需求的話,改成false (不然會生出亂圖)
  "tiling": false, //沒特別需求的話,改成false (不然會生出亂圖)
  "do_not_save_samples": false,
  "do_not_save_grid": false,
  "eta": 0,
  "denoising_strength": 0,
  "s_min_uncond": 0,
  "s_churn": 0,
  "s_tmax": 0,
  "s_tmin": 0,
  "s_noise": 0,
  "override_settings": {},
  "override_settings_restore_afterwards": true,
  "refiner_checkpoint": "XL-NEW-REAL\\juggernautXL_juggernautX.safetensors", //使用的模型(對應你要用的模型)
  "refiner_switch_at": 0,
  "disable_extra_networks": false,
  "firstpass_image": "string",
  "comments": {},
  "enable_hr": false,
  "firstphase_width": 512,
  "firstphase_height": 512,
  "hr_scale": 1,
  "hr_upscaler": "string",
  "hr_second_pass_steps": 0,
  "hr_resize_x": 0,
  "hr_resize_y": 0,
  "hr_checkpoint_name": "string",
  "hr_sampler_name": "string",
  "hr_scheduler": "string",
  "hr_prompt": "",
  "hr_negative_prompt": "",
  "force_task_id": "string",
  "sampler_index": "", //沒用到的話,改成空(官方doc範例默認帶入String,會報錯)
  "script_name": "", //沒用到的話,改成空(官方doc範例默認帶入String,會報錯)
  "script_args": [],
  "send_images": true,//會直接回傳圖片的base64
  "save_images": true, //會保存圖片SD(但不會回傳圖片的路徑,用API的話,這個似乎用處不大,除非想留個副本)
  "alwayson_scripts": {},
  "infotext": "string"
}

對照了用UI介面的產生圖片的參數,跟用API產生的參數,比對了好久,總算能基礎用API生圖了



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/stablediffusion-webui-api