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