| 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
|
|
|