| import logging |
| from PIL import Image |
| from diffusers import ControlNetModel |
| from backend.models.lcmdiffusion_setting import ( |
| DiffusionTask, |
| ControlNetSetting, |
| ) |
|
|
|
|
| |
| |
| |
| |
| |
| def load_controlnet_adapters(lcm_diffusion_setting) -> dict: |
| controlnet_args = {} |
| if ( |
| lcm_diffusion_setting.controlnet is None |
| or not lcm_diffusion_setting.controlnet.enabled |
| ): |
| return controlnet_args |
|
|
| logging.info("Loading ControlNet adapter") |
| controlnet_adapter = ControlNetModel.from_single_file( |
| lcm_diffusion_setting.controlnet.adapter_path, |
| |
| use_safetensors=True, |
| ) |
| controlnet_args["controlnet"] = controlnet_adapter |
| return controlnet_args |
|
|
|
|
| |
| |
| |
| |
| |
| |
| def update_controlnet_arguments(lcm_diffusion_setting) -> dict: |
| controlnet_args = {} |
| if ( |
| lcm_diffusion_setting.controlnet is None |
| or not lcm_diffusion_setting.controlnet.enabled |
| ): |
| return controlnet_args |
|
|
| controlnet_args["controlnet_conditioning_scale"] = ( |
| lcm_diffusion_setting.controlnet.conditioning_scale |
| ) |
| if lcm_diffusion_setting.diffusion_task == DiffusionTask.text_to_image.value: |
| controlnet_args["image"] = lcm_diffusion_setting.controlnet._control_image |
| elif lcm_diffusion_setting.diffusion_task == DiffusionTask.image_to_image.value: |
| controlnet_args["control_image"] = ( |
| lcm_diffusion_setting.controlnet._control_image |
| ) |
| return controlnet_args |
|
|
|
|
| |
| def controlnet_settings_from_dict( |
| lcm_diffusion_setting, |
| dictionary, |
| ) -> None: |
| if lcm_diffusion_setting is None or dictionary is None: |
| logging.error("Invalid arguments!") |
| return |
| if ( |
| "controlnet" not in dictionary |
| or dictionary["controlnet"] is None |
| or len(dictionary["controlnet"]) == 0 |
| ): |
| logging.warning("ControlNet settings not found, ControlNet will be disabled") |
| lcm_diffusion_setting.controlnet = None |
| return |
|
|
| controlnet = ControlNetSetting() |
| controlnet.enabled = dictionary["controlnet"][0]["enabled"] |
| controlnet.conditioning_scale = dictionary["controlnet"][0]["conditioning_scale"] |
| controlnet.adapter_path = dictionary["controlnet"][0]["adapter_path"] |
| controlnet._control_image = None |
| image_path = dictionary["controlnet"][0]["control_image"] |
| if controlnet.enabled: |
| try: |
| controlnet._control_image = Image.open(image_path) |
| except (AttributeError, FileNotFoundError) as err: |
| print(err) |
| if controlnet._control_image is None: |
| logging.error("Wrong ControlNet control image! Disabling ControlNet") |
| controlnet.enabled = False |
| lcm_diffusion_setting.controlnet = controlnet |
|
|