-
Notifications
You must be signed in to change notification settings - Fork 2k
/
Copy pathapi_txt2img.py
77 lines (66 loc) · 2.42 KB
/
api_txt2img.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
import io
import cv2
import base64
import requests
from PIL import Image
"""
To use this example make sure you've done the following steps before executing:
1. Ensure automatic1111 is running in api mode with the controlnet extension.
Use the following command in your terminal to activate:
./webui.sh --no-half --api
2. Validate python environment meet package dependencies.
If running in a local repo you'll likely need to pip install cv2, requests and PIL
"""
class ControlnetRequest:
def __init__(self, prompt, path):
self.url = "http://localhost:7860/sdapi/v1/txt2img"
self.prompt = prompt
self.img_path = path
self.body = None
def build_body(self):
self.body = {
"prompt": self.prompt,
"negative_prompt": "",
"batch_size": 1,
"steps": 20,
"cfg_scale": 7,
"alwayson_scripts": {
"controlnet": {
"args": [
{
"enabled": True,
"module": "none",
"model": "canny",
"weight": 1.0,
"image": self.read_image(),
"resize_mode": "Crop and Resize",
"lowvram": False,
"processor_res": 64,
"threshold_a": 64,
"threshold_b": 64,
"guidance_start": 0.0,
"guidance_end": 1.0,
"control_mode": "Balanced",
"pixel_perfect": False
}
]
}
}
}
def send_request(self):
response = requests.post(url=self.url, json=self.body)
return response.json()
def read_image(self):
img = cv2.imread(self.img_path)
retval, bytes = cv2.imencode('.png', img)
encoded_image = base64.b64encode(bytes).decode('utf-8')
return encoded_image
if __name__ == '__main__':
path = 'stock_mountain.png'
prompt = 'a large avalanche'
control_net = ControlnetRequest(prompt, path)
control_net.build_body()
output = control_net.send_request()
result = output['images'][0]
image = Image.open(io.BytesIO(base64.b64decode(result)))
image.show()