forked from TemporAlyx/StreamStableDiffusion
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webui_interface.py
97 lines (85 loc) · 3.07 KB
/
webui_interface.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import io
import os
import base64
from PIL import Image
from requests_futures.sessions import FuturesSession
class API_Interface:
def __init__(self, url):
self.url = url
self.api_version = "/sdapi/v1/"
self.session = FuturesSession(max_workers=1)
self.default_request_data = {
"enable_hr": False,
"denoising_strength": 0,
"firstphase_width": 0,
"firstphase_height": 0,
"hr_scale": 2,
"hr_upscaler": "string",
"hr_second_pass_steps": 0,
"hr_resize_x": 0,
"hr_resize_y": 0,
"prompt": "",
"styles": [
"string"
],
"seed": -1,
"subseed": -1,
"subseed_strength": 0,
"seed_resize_from_h": -1,
"seed_resize_from_w": -1,
"sampler_name": "string",
"batch_size": 1,
"n_iter": 1,
"steps": 5,
"cfg_scale": 3,
"width": 1024,
"height": 1024,
"restore_faces": False,
"tiling": False,
"negative_prompt": "string",
"eta": 0,
"s_churn": 0,
"s_tmax": 0,
"s_tmin": 0,
"s_noise": 1,
"override_settings": {},
"override_settings_restore_afterwards": True,
"script_args": [],
"sampler_index": "DPM++ SDE Karras",
"script_name": "string"
}
self.current_request = None
self.current_params = {}
def send_txt2img(self, prompt, args=None):
self.current_params = self.default_request_data
# separate potential negative prompt
if "###" in prompt:
prompt, negative_prompt = prompt.split("###")
self.current_params["negative_prompt"] = negative_prompt.strip()
self.current_params["prompt"] = prompt.strip()
self.current_params["script_name"] = "txt2img" # unsure if this is necessary
if args is not None:
# args is a dictionary of arguments to override in the default request data
for key, value in args.items():
self.current_params[key] = value
iti_url = os.path.join(self.url, self.api_version, "txt2img")
self.current_request = self.session.post(iti_url, json=self.current_params, timeout=10)
def get_result(self):
if self.current_request is None:
return None
if self.current_request.done():
result = self.current_request.result()
self.current_request = None
return result
return None
# assume the result is an image
def get_result_image(self):
if self.current_request is None:
return None
if self.current_request.done():
result = self.current_request.result()
self.current_request = None
result = result.json()['images']
result = [Image.open(io.BytesIO(base64.b64decode(img))) for img in result]
return result
return None