Spaces:
Running
on
Zero
Running
on
Zero
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
""" | |
Event handlers for IC-Custom application. | |
""" | |
import gradio as gr | |
def setup_event_handlers( | |
# UI components | |
input_mask_mode, image_target_1, image_target_2, undo_target_seg_button, | |
custmization_mode, dilate_button, erode_button, bounding_box_button, | |
mask_gallery, md_input_mask_mode, md_target_image, md_mask_operation, | |
md_prompt, md_submit, result_gallery, image_target_state, mask_target_state, | |
seg_ref_mode, image_reference_ori_state, move_to_center, | |
image_reference, image_reference_rmbg_state, | |
# Functions | |
change_input_mask_mode, change_custmization_mode, change_seg_ref_mode, | |
init_image_target_1, init_image_target_2, init_image_reference, | |
get_point, undo_seg_points, get_brush, | |
# VLM buttons (UI components) | |
vlm_generate_btn, vlm_polish_btn, | |
# VLM functions | |
vlm_auto_generate, vlm_auto_polish, | |
dilate_mask, erode_mask, bounding_box, | |
run_model, | |
# Other components | |
selected_points, prompt, | |
use_background_preservation, background_blend_threshold, seed, | |
num_images_per_prompt, guidance, true_gs, num_steps, aspect_ratio, | |
submit_button, | |
# extra state | |
eg_idx, | |
): | |
"""Setup all event handlers for the application.""" | |
# Change input mask mode: precise mask or user-drawn mask | |
input_mask_mode.change( | |
change_input_mask_mode, | |
[input_mask_mode, custmization_mode], | |
[image_target_1, image_target_2, undo_target_seg_button] | |
) | |
# Change customization mode: pos-aware or pos-free | |
custmization_mode.change( | |
change_custmization_mode, | |
[custmization_mode, input_mask_mode], | |
[image_target_1, image_target_2, undo_target_seg_button, dilate_button, | |
erode_button, bounding_box_button, md_input_mask_mode, | |
md_target_image, md_mask_operation, md_prompt, md_submit, input_mask_mode, mask_gallery] | |
) | |
# Remove background for reference image | |
seg_ref_mode.change( | |
change_seg_ref_mode, | |
[seg_ref_mode, image_reference_ori_state, move_to_center], | |
[image_reference, image_reference_rmbg_state] | |
) | |
# Initialize components only on user upload (not programmatic updates) | |
image_target_1.upload( | |
init_image_target_1, | |
[image_target_1], | |
[image_target_state, selected_points, prompt, mask_target_state, mask_gallery, | |
result_gallery, use_background_preservation, background_blend_threshold, seed, | |
num_images_per_prompt, guidance, true_gs, num_steps, aspect_ratio] | |
) | |
image_target_2.upload( | |
init_image_target_2, | |
[image_target_2], | |
[image_target_state, selected_points, prompt, mask_target_state, mask_gallery, | |
result_gallery, use_background_preservation, background_blend_threshold, seed, | |
num_images_per_prompt, guidance, true_gs, num_steps, aspect_ratio] | |
) | |
image_reference.upload( | |
init_image_reference, | |
[image_reference], | |
[image_reference_ori_state, image_reference_rmbg_state, image_target_state, | |
mask_target_state, prompt, mask_gallery, result_gallery, image_target_1, | |
image_target_2, selected_points, input_mask_mode, seg_ref_mode, move_to_center, | |
use_background_preservation, background_blend_threshold, seed, | |
num_images_per_prompt, guidance, true_gs, num_steps, aspect_ratio] | |
) | |
# SAM for image_target_1 | |
image_target_1.select( | |
get_point, | |
[image_target_state, selected_points], | |
[image_target_1, mask_target_state, mask_gallery], | |
) | |
undo_target_seg_button.click( | |
undo_seg_points, | |
[image_target_state, selected_points], | |
[image_target_1, mask_target_state, mask_gallery] | |
) | |
# Brush for image_target_2 | |
image_target_2.change( | |
get_brush, | |
[image_target_2], | |
[mask_target_state, mask_gallery], | |
) | |
# VLM auto generate | |
vlm_generate_btn.click( | |
vlm_auto_generate, | |
[image_target_state, image_reference_ori_state, mask_target_state, custmization_mode], | |
[prompt] | |
) | |
# VLM auto polish | |
vlm_polish_btn.click( | |
vlm_auto_polish, | |
[prompt, custmization_mode], | |
[prompt] | |
) | |
# Mask operations | |
dilate_button.click( | |
dilate_mask, | |
[mask_target_state, image_target_state], | |
[mask_target_state, mask_gallery] | |
) | |
erode_button.click( | |
erode_mask, | |
[mask_target_state, image_target_state], | |
[mask_target_state, mask_gallery] | |
) | |
bounding_box_button.click( | |
bounding_box, | |
[mask_target_state, image_target_state], | |
[mask_target_state, mask_gallery] | |
) | |
# Run function | |
ips = [ | |
image_target_state, mask_target_state, image_reference_ori_state, | |
image_reference_rmbg_state, prompt, seed, guidance, true_gs, num_steps, | |
num_images_per_prompt, use_background_preservation, background_blend_threshold, | |
aspect_ratio, custmization_mode, seg_ref_mode, input_mask_mode, | |
] | |
submit_button.click( | |
fn=run_model, | |
inputs=ips, | |
outputs=[result_gallery, seed, prompt], | |
show_progress=True, | |
) | |