QuintW's picture
added controlnet in build in extensions
78db0f1
raw
history blame
2.47 kB
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": 1,
"lowvram": False,
"processor_res": 64,
"threshold_a": 64,
"threshold_b": 64,
"guidance_start": 0.0,
"guidance_end": 1.0,
"control_mode": 0,
"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.split(",", 1)[0])))
image.show()