-
-
Save w-e-w/0f37c04c18e14e4ee1482df5c4eb9f53 to your computer and use it in GitHub Desktop.
from datetime import datetime | |
import urllib.request | |
import base64 | |
import json | |
import time | |
import os | |
webui_server_url = 'http://127.0.0.1:7860' | |
out_dir = 'api_out' | |
out_dir_t2i = os.path.join(out_dir, 'txt2img') | |
out_dir_i2i = os.path.join(out_dir, 'img2img') | |
os.makedirs(out_dir_t2i, exist_ok=True) | |
os.makedirs(out_dir_i2i, exist_ok=True) | |
def timestamp(): | |
return datetime.fromtimestamp(time.time()).strftime("%Y%m%d-%H%M%S") | |
def encode_file_to_base64(path): | |
with open(path, 'rb') as file: | |
return base64.b64encode(file.read()).decode('utf-8') | |
def decode_and_save_base64(base64_str, save_path): | |
with open(save_path, "wb") as file: | |
file.write(base64.b64decode(base64_str)) | |
def call_api(api_endpoint, **payload): | |
data = json.dumps(payload).encode('utf-8') | |
request = urllib.request.Request( | |
f'{webui_server_url}/{api_endpoint}', | |
headers={'Content-Type': 'application/json'}, | |
data=data, | |
) | |
response = urllib.request.urlopen(request) | |
return json.loads(response.read().decode('utf-8')) | |
def call_txt2img_api(**payload): | |
response = call_api('sdapi/v1/txt2img', **payload) | |
for index, image in enumerate(response.get('images')): | |
save_path = os.path.join(out_dir_t2i, f'txt2img-{timestamp()}-{index}.png') | |
decode_and_save_base64(image, save_path) | |
def call_img2img_api(**payload): | |
response = call_api('sdapi/v1/img2img', **payload) | |
for index, image in enumerate(response.get('images')): | |
save_path = os.path.join(out_dir_i2i, f'img2img-{timestamp()}-{index}.png') | |
decode_and_save_base64(image, save_path) | |
if __name__ == '__main__': | |
payload = { | |
"prompt": "masterpiece, (best quality:1.1), 1girl <lora:lora_model:1>", # extra networks also in prompts | |
"negative_prompt": "", | |
"seed": 1, | |
"steps": 20, | |
"width": 512, | |
"height": 512, | |
"cfg_scale": 7, | |
"sampler_name": "DPM++ 2M", | |
"n_iter": 1, | |
"batch_size": 1, | |
# example args for x/y/z plot | |
# "script_name": "x/y/z plot", | |
# "script_args": [ | |
# 1, | |
# "10,20", | |
# [], | |
# 0, | |
# "", | |
# [], | |
# 0, | |
# "", | |
# [], | |
# True, | |
# True, | |
# False, | |
# False, | |
# 0, | |
# False | |
# ], | |
# example args for Refiner and ControlNet | |
# "alwayson_scripts": { | |
# "ControlNet": { | |
# "args": [ | |
# { | |
# "batch_images": "", | |
# "control_mode": "Balanced", | |
# "enabled": True, | |
# "guidance_end": 1, | |
# "guidance_start": 0, | |
# "image": { | |
# "image": encode_file_to_base64(r"B:\path\to\control\img.png"), | |
# "mask": None # base64, None when not need | |
# }, | |
# "input_mode": "simple", | |
# "is_ui": True, | |
# "loopback": False, | |
# "low_vram": False, | |
# "model": "control_v11p_sd15_canny [d14c016b]", | |
# "module": "canny", | |
# "output_dir": "", | |
# "pixel_perfect": False, | |
# "processor_res": 512, | |
# "resize_mode": "Crop and Resize", | |
# "threshold_a": 100, | |
# "threshold_b": 200, | |
# "weight": 1 | |
# } | |
# ] | |
# }, | |
# "Refiner": { | |
# "args": [ | |
# True, | |
# "sd_xl_refiner_1.0", | |
# 0.5 | |
# ] | |
# } | |
# }, | |
# "enable_hr": True, | |
# "hr_upscaler": "R-ESRGAN 4x+ Anime6B", | |
# "hr_scale": 2, | |
# "denoising_strength": 0.5, | |
# "styles": ['style 1', 'style 2'], | |
# "override_settings": { | |
# 'sd_model_checkpoint': "sd_xl_base_1.0", # this can use to switch sd model | |
# }, | |
} | |
call_txt2img_api(**payload) | |
init_images = [ | |
encode_file_to_base64(r"B:\path\to\img_1.png"), | |
# encode_file_to_base64(r"B:\path\to\img_2.png"), | |
# "https://image.can/also/be/a/http/url.png", | |
] | |
batch_size = 2 | |
payload = { | |
"prompt": "1girl, blue hair", | |
"seed": 1, | |
"steps": 20, | |
"width": 512, | |
"height": 512, | |
"denoising_strength": 0.5, | |
"n_iter": 1, | |
"init_images": init_images, | |
"batch_size": batch_size if len(init_images) == 1 else len(init_images), | |
# "mask": encode_file_to_base64(r"B:\path\to\mask.png") | |
} | |
# if len(init_images) > 1 then batch_size should be == len(init_images) | |
# else if len(init_images) == 1 then batch_size can be any value int >= 1 | |
call_img2img_api(**payload) | |
# there exist a useful extension that allows converting of webui calls to api payload | |
# particularly useful when you wish setup arguments of extensions and scripts | |
# https://github.com/huchenlei/sd-webui-api-payload-display |
When I make request at http://127.0.0.1:7860/sdapi/v1/txt2img directly using postman or using the above script (with or without requests module) I am getting 404 error. Anyone know how to fix this?
Did they remove the txt2img & img2img APIs? Please anyone gives us confirmation, thanks.
Did they remove the txt2img & img2img APIs? Please anyone gives us confirmation, thanks.
api works
... HTTP Error 404: Not Found ...
the API error message is not that descripted, we use 404 for lots of things "not found"
txt2img and img2img
- Sampler not found
img2img - Init image not found
interrogate - Image not found
- Model not found
in particular there was some change to the sampler scheduler in 1.9
we did not have the foresight to implement backwards compatibility and result in a 404 if you try to generate an image with a non-existent sampler scheduler
@w-e-w
I created a request using Postman and it says "Not found". Can you tell me what is wrong here?
Moreover, at "http://127.0.0.1:7860/docs#/" I cannot see the description for that above 2 APIs. I installed Automatic1111 v1.9.3
Moreover, at "http://127.0.0.1:7860/docs#/" I cannot see the description for that above 2 APIs. I installed Automatic1111 v1.9.3
that's odd, it's showing on mine
but since you give me practically zero information I can't really help
if I think your experiencing an issue don't ask here make an issue post
Got the same issue: "... HTTP Error 404: Not Found ..."
I searched the http://127.0.0.1:7860/docs#/, no /sdapi/v1/txt2img was found.
restart for several times, still not working.
So I search all the webui process use the following cmd:
ps -ef | grep webui.sh | grep -v grep | gawk '{ print $2 }' and kill all the pids
then I search the 7860 port use the following cmd:
netstat -antlp | grep LISTEN | grep 7860 and kill the pid again.
then I start webui again, and finally the /sdapi/v1/txt2img was shown and the api test code worked.
I don't know why.
if you guys have the same issue, try to clean all the process and restart with --api.
To whom they couldn't find /sdapi/v1/txt2img
and /sdapi/v1/img2img
endpoint in http://127.0.0.1:7860/docs:
I solved the problem by adding --api
to COMMANDLINE_ARGS
in webui-user.bat file.
To whom they couldn't find
/sdapi/v1/txt2img
and/sdapi/v1/img2img
endpoint in http://127.0.0.1:7860/docs: I solved the problem by adding--api
toCOMMANDLINE_ARGS
in webui-user.bat file.
i want to kiss u
Hi, this script is not working anymore. Possible updates?