🤖
stable diffusion AUTOMATIC1111+controlnetをAPIで叩く
最初に
以下のコードは古くなっている可能性があるので、最新の情報はAUTOMATIC1111環境/docsにあるAPIのドキュメントや、https://github.com/Mikubill/sd-webui-controlnet/wiki/API を参照することをおすすめします。
とりあえずサンプルコード
メインコード
# 必要なライブラリをインポートする
import requests
import io
import base64
from PIL import Image
# 画像を読み込む
image = Image.open("sample.png")
# 画像をbase64に変換する
buffered = io.BytesIO()
image.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
# URLは環境に合わせて変更する
url = "http://127.0.0.1:7860/sdapi/v1/txt2img"
# payloadはsdapi/v1/txt2imgと同じ
payload = {
"prompt": "1girl",
"negative_prompt": "(worst quality, low quality):1.4",
"width": 512,
"height": 512,
"alwayson_scripts": {
"controlnet": {
"args": [{
"input_image": img_str,
"module": "openpose",# ここを変えることで下処理のmoduleを変えられる
"model": "control_openpose-fp16 [here is model hash]",# ここを変えることで下処理のmodelを変えられる
}]
}
}
}
# 送信して結果を取得する
response = requests.post(url=url, json=payload)
response = response.json()
result_str = response["images"]
result_images = [Image.open(io.BytesIO(base64.b64decode(i))) for i in result_str]
# result_imagesには生成された画像がリストで入っている
moduleとmodel一覧を取得する
import requests
url = "http://127.0.0.1:7860"
# controlnet/module_listとcontrolnet/model_listをget
module_list = requests.get(url + "/controlnet/module_list").json()
model_list = requests.get(url + "/controlnet/model_list").json()
print(module_list["module_list"]) # module_list["module_list"]の中にmoduleのリストが入っている
print(model_list["model_list"]) # model_list["model_list"]の中にmodelのリストが入っている
注意点
- automaticの起動時に--apiをつけておく必要がある。
- modelやmoduleがない時でも、生成が完了するので、注意がいる
参考資料
自身のAUTOMATIC1111/docsにAPIのドキュメントがあるので、そちらも参考にしてください。
Discussion