Spaces:
Paused
Paused
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() | |