File size: 3,237 Bytes
7139ce5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79e946f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7139ce5
79e946f
 
 
 
 
 
 
7139ce5
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import os
import gradio as gr

MAX_DYNAMIC_CONTROLS = 10

def get_preprocessor_choices():
    from nodes import NODE_DISPLAY_NAME_MAPPINGS
    
    preprocessor_names = [
        display_name for class_name, display_name in NODE_DISPLAY_NAME_MAPPINGS.items()
        if "Preprocessor" in class_name or "Segmentor" in class_name or 
           "Estimator" in class_name or "Detector" in class_name
    ]
    return sorted(list(set(preprocessor_names)))

def build_ui(event_handler_function):
    ui_components = {}

    with gr.Blocks() as demo:
        gr.Markdown("# ControlNet Preprocessors")
        gr.Markdown("Powered by [Fannovel16/comfyui_controlnet_aux](https://github.com/Fannovel16/comfyui_controlnet_aux).")
        gr.Markdown("Upload an image or video to process it with a ControlNet preprocessor.")
        
        with gr.Row():
            with gr.Column(scale=1):
                cn_input_type = gr.Radio(["Image", "Video"], label="Input Type", value="Image")
                cn_image_input = gr.Image(type="pil", label="Input Image", visible=True, height=384)
                cn_video_input = gr.Video(label="Input Video", visible=False)
                preprocessor_cn = gr.Dropdown(label="Preprocessor", choices=get_preprocessor_choices(), value="Canny Edge")
                preprocessor_model_cn = gr.Dropdown(label="Preprocessor Model", choices=[], value=None, visible=False)
                with gr.Column() as preprocessor_settings_ui:
                    cn_sliders, cn_dropdowns, cn_checkboxes = [], [], []
                    for i in range(MAX_DYNAMIC_CONTROLS):
                        cn_sliders.append(gr.Slider(visible=False, label=f"dyn_slider_{i}"))
                        cn_dropdowns.append(gr.Dropdown(visible=False, label=f"dyn_dropdown_{i}"))
                        cn_checkboxes.append(gr.Checkbox(visible=False, label=f"dyn_checkbox_{i}"))
                run_cn = gr.Button("Run Preprocessor", variant="primary")
            with gr.Column(scale=1):
                output_gallery_cn = gr.Gallery(label="Output", show_label=False, object_fit="contain", height=512)
                zero_gpu_cn = gr.Number(label="ZeroGPU Duration (s)", value=None, placeholder="Default: 60s, Max: 120s", info="Optional")
        
        ui_components.update({
            "cn_input_type": cn_input_type, "cn_image_input": cn_image_input, "cn_video_input": cn_video_input,
            "preprocessor_cn": preprocessor_cn, "preprocessor_model_cn": preprocessor_model_cn, "run_cn": run_cn,
            "zero_gpu_cn": zero_gpu_cn, "output_gallery_cn": output_gallery_cn,
            "preprocessor_settings_ui": preprocessor_settings_ui, "cn_sliders": cn_sliders,
            "cn_dropdowns": cn_dropdowns, "cn_checkboxes": cn_checkboxes
        })

        gr.Markdown("<div style='text-align: center; margin-top: 20px;'>Made by RioShiina with ❤️<br><a href='https://github.com/RioShiina47' target='_blank'>GitHub</a> | <a href='https://huggingface.co/RioShiina' target='_blank'>Hugging Face</a> | <a href='https://civitai.com/user/RioShiina' target='_blank'>Civitai</a></div>")
        
        event_handler_function(ui_components, demo)

    return demo