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 """ def generate(url: str, payload: dict, file_suffix: str = ""): response = requests.post(url=url, json=payload).json() if "images" not in response: print(response) else: for i, base64image in enumerate(response["images"]): Image.open(io.BytesIO(base64.b64decode(base64image.split(",", 1)[0]))).save( f"{url.split('/')[-1]}-{i}{file_suffix}.png" ) def read_image(img_path: str) -> str: img = cv2.imread(img_path) _, bytes = cv2.imencode(".png", img) encoded_image = base64.b64encode(bytes).decode("utf-8") return encoded_image input_image = read_image("stock_mountain.png") txt2img_payload = { "alwayson_scripts": { "ControlNet": { "args": [ { "batch_images": "", "control_mode": "Balanced", "enabled": True, "guidance_end": 1, "guidance_start": 0, "image": input_image, "low_vram": False, "model": "control_v11p_sd15_canny [d14c016b]", "module": "canny", "pixel_perfect": False, "processor_res": -1, "resize_mode": "Crop and Resize", "save_detected_map": True, "threshold_a": -1, "threshold_b": -1, "weight": 1, } ] } }, "batch_size": 1, "cfg_scale": 7, "comments": {}, "disable_extra_networks": False, "do_not_save_grid": False, "do_not_save_samples": False, "enable_hr": False, "height": 512, "width": 768, "hr_negative_prompt": "", "hr_prompt": "", "hr_resize_x": 0, "hr_resize_y": 0, "hr_scale": 2, "hr_second_pass_steps": 0, "hr_upscaler": "Latent", "n_iter": 1, "negative_prompt": "", "override_settings": {}, "override_settings_restore_afterwards": True, "prompt": "(masterpiece: 1.3), (highres: 1.3), best quality, a large avalanche", "restore_faces": False, "s_churn": 0.0, "s_min_uncond": 0, "s_noise": 1.0, "s_tmax": None, "s_tmin": 0.0, "sampler_name": "DPM++ 2M Karras", "script_args": [], "script_name": None, "seed": 42, "seed_enable_extras": True, "seed_resize_from_h": -1, "seed_resize_from_w": -1, "steps": 30, "styles": [], "subseed": -1, "subseed_strength": 0, "tiling": False, } if __name__ == "__main__": url = "http://localhost:7860/sdapi/v1/" for weight_factor in (0.3, 0.5, 0.8): advanced_weighting = [weight_factor ** float(12 - i) for i in range(13)] txt2img_payload["alwayson_scripts"]["ControlNet"]["args"][0][ "advanced_weighting" ] = advanced_weighting generate(url + "txt2img", txt2img_payload, file_suffix=f"fac{weight_factor}") for linear_start in (0.3, 0.5, 0.8): step = (1.0 - linear_start) / 12 advanced_weighting = [linear_start + i * step for i in range(13)] txt2img_payload["alwayson_scripts"]["ControlNet"]["args"][0][ "advanced_weighting" ] = advanced_weighting generate(url + "txt2img", txt2img_payload, file_suffix=f"linear{linear_start}")