| | import gradio as gr
|
| | from PIL import Image
|
| | from backend.lora import get_lora_models
|
| | from state import get_settings
|
| | from backend.models.lcmdiffusion_setting import ControlNetSetting
|
| | from backend.annotators.image_control_factory import ImageControlFactory
|
| |
|
| | _controlnet_models_map = None
|
| | _controlnet_enabled = False
|
| | _adapter_path = None
|
| |
|
| | app_settings = get_settings()
|
| |
|
| |
|
| | def on_user_input(
|
| | enable: bool,
|
| | adapter_name: str,
|
| | conditioning_scale: float,
|
| | control_image: Image,
|
| | preprocessor: str,
|
| | ):
|
| | if not isinstance(adapter_name, str):
|
| | gr.Warning("Please select a valid ControlNet model")
|
| | return gr.Checkbox(value=False)
|
| |
|
| | settings = app_settings.settings.lcm_diffusion_setting
|
| | if settings.controlnet is None:
|
| | settings.controlnet = ControlNetSetting()
|
| |
|
| | if enable and (adapter_name is None or adapter_name == ""):
|
| | gr.Warning("Please select a valid ControlNet adapter")
|
| | return gr.Checkbox(value=False)
|
| | elif enable and not control_image:
|
| | gr.Warning("Please provide a ControlNet control image")
|
| | return gr.Checkbox(value=False)
|
| |
|
| | if control_image is None:
|
| | return gr.Checkbox(value=enable)
|
| |
|
| | if preprocessor == "None":
|
| | processed_control_image = control_image
|
| | else:
|
| | image_control_factory = ImageControlFactory()
|
| | control = image_control_factory.create_control(preprocessor)
|
| | processed_control_image = control.get_control_image(control_image)
|
| |
|
| | if not enable:
|
| | settings.controlnet.enabled = False
|
| | else:
|
| | settings.controlnet.enabled = True
|
| | settings.controlnet.adapter_path = _controlnet_models_map[adapter_name]
|
| | settings.controlnet.conditioning_scale = float(conditioning_scale)
|
| | settings.controlnet._control_image = processed_control_image
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | global _controlnet_enabled
|
| | global _adapter_path
|
| | if settings.controlnet.enabled != _controlnet_enabled or (
|
| | settings.controlnet.enabled
|
| | and settings.controlnet.adapter_path != _adapter_path
|
| | ):
|
| | settings.rebuild_pipeline = True
|
| | _controlnet_enabled = settings.controlnet.enabled
|
| | _adapter_path = settings.controlnet.adapter_path
|
| | return gr.Checkbox(value=enable)
|
| |
|
| |
|
| | def on_change_conditioning_scale(cond_scale):
|
| | print(cond_scale)
|
| | app_settings.settings.lcm_diffusion_setting.controlnet.conditioning_scale = (
|
| | cond_scale
|
| | )
|
| |
|
| |
|
| | def get_controlnet_ui() -> None:
|
| | with gr.Blocks() as ui:
|
| | gr.HTML(
|
| | 'Download ControlNet v1.1 model from <a href="https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/tree/main">ControlNet v1.1 </a> (723 MB files) and place it in <b>controlnet_models</b> folder,restart the app'
|
| | )
|
| | with gr.Row():
|
| | with gr.Column():
|
| | with gr.Row():
|
| | global _controlnet_models_map
|
| | _controlnet_models_map = get_lora_models(
|
| | app_settings.settings.lcm_diffusion_setting.dirs["controlnet"]
|
| | )
|
| | controlnet_models = list(_controlnet_models_map.keys())
|
| | default_model = (
|
| | controlnet_models[0] if len(controlnet_models) else None
|
| | )
|
| |
|
| | enabled_checkbox = gr.Checkbox(
|
| | label="Enable ControlNet",
|
| | info="Enable ControlNet",
|
| | show_label=True,
|
| | )
|
| | model_dropdown = gr.Dropdown(
|
| | _controlnet_models_map.keys(),
|
| | label="ControlNet model",
|
| | info="ControlNet model to load (.safetensors format)",
|
| | value=default_model,
|
| | interactive=True,
|
| | )
|
| | conditioning_scale_slider = gr.Slider(
|
| | 0.0,
|
| | 1.0,
|
| | value=0.5,
|
| | step=0.05,
|
| | label="ControlNet conditioning scale",
|
| | interactive=True,
|
| | )
|
| | control_image = gr.Image(
|
| | label="Control image",
|
| | type="pil",
|
| | )
|
| | preprocessor_radio = gr.Radio(
|
| | [
|
| | "Canny",
|
| | "Depth",
|
| | "LineArt",
|
| | "MLSD",
|
| | "NormalBAE",
|
| | "Pose",
|
| | "SoftEdge",
|
| | "Shuffle",
|
| | "None",
|
| | ],
|
| | label="Preprocessor",
|
| | info="Select the preprocessor for the control image",
|
| | value="Canny",
|
| | interactive=True,
|
| | )
|
| |
|
| | enabled_checkbox.input(
|
| | fn=on_user_input,
|
| | inputs=[
|
| | enabled_checkbox,
|
| | model_dropdown,
|
| | conditioning_scale_slider,
|
| | control_image,
|
| | preprocessor_radio,
|
| | ],
|
| | outputs=[enabled_checkbox],
|
| | )
|
| | model_dropdown.input(
|
| | fn=on_user_input,
|
| | inputs=[
|
| | enabled_checkbox,
|
| | model_dropdown,
|
| | conditioning_scale_slider,
|
| | control_image,
|
| | preprocessor_radio,
|
| | ],
|
| | outputs=[enabled_checkbox],
|
| | )
|
| | conditioning_scale_slider.input(
|
| | fn=on_user_input,
|
| | inputs=[
|
| | enabled_checkbox,
|
| | model_dropdown,
|
| | conditioning_scale_slider,
|
| | control_image,
|
| | preprocessor_radio,
|
| | ],
|
| | outputs=[enabled_checkbox],
|
| | )
|
| | control_image.change(
|
| | fn=on_user_input,
|
| | inputs=[
|
| | enabled_checkbox,
|
| | model_dropdown,
|
| | conditioning_scale_slider,
|
| | control_image,
|
| | preprocessor_radio,
|
| | ],
|
| | outputs=[enabled_checkbox],
|
| | )
|
| | preprocessor_radio.change(
|
| | fn=on_user_input,
|
| | inputs=[
|
| | enabled_checkbox,
|
| | model_dropdown,
|
| | conditioning_scale_slider,
|
| | control_image,
|
| | preprocessor_radio,
|
| | ],
|
| | outputs=[enabled_checkbox],
|
| | )
|
| | conditioning_scale_slider.change(
|
| | on_change_conditioning_scale, conditioning_scale_slider
|
| | )
|
| |
|