Spaces:
Running on Zero
Running on Zero
File size: 15,397 Bytes
54e3410 dc0cea5 fbc9e7b 54e3410 dc0cea5 fbc9e7b 54e3410 dc0cea5 fbc9e7b 54e3410 dc0cea5 fbc9e7b 54e3410 dc0cea5 fbc9e7b 54e3410 dc0cea5 | 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | import gradio as gr
from .chain_handlers import (
create_lora_event_handlers,
create_controlnet_event_handlers,
create_anima_controlnet_lllite_event_handlers,
create_diffsynth_controlnet_event_handlers,
create_ipadapter_event_handlers,
create_embedding_event_handlers,
create_conditioning_event_handlers,
create_flux1_ipadapter_event_handlers,
create_sd3_ipadapter_event_handlers,
create_style_event_handlers,
create_reference_latent_event_handlers,
create_hidream_o1_reference_event_handlers
)
from .change_handlers import (
make_update_fn,
make_model_change_fn,
run_on_load,
on_aspect_ratio_change
)
from .run_handlers import create_run_event
def attach_event_handlers(ui_components, demo):
for prefix, task_type in [
("txt2img", "txt2img"), ("img2img", "img2img"), ("inpaint", "inpaint"),
("outpaint", "outpaint"), ("hires_fix", "hires_fix"),
]:
arch_comp = ui_components.get(f'model_arch_{prefix}')
cat_comp = ui_components.get(f'model_cat_{prefix}')
model_comp = ui_components.get(f'base_model_{prefix}')
clip_skip_comp = ui_components.get(f'clip_skip_{prefix}') or ui_components.get(f'{prefix}_clip_skip')
guidance_comp = ui_components.get(f'guidance_{prefix}') or ui_components.get(f'{prefix}_guidance')
aspect_ratio_comp = ui_components.get(f'aspect_ratio_{prefix}') or ui_components.get(f'{prefix}_aspect_ratio_dropdown')
width_comp = ui_components.get(f'width_{prefix}') or ui_components.get(f'{prefix}_width')
height_comp = ui_components.get(f'height_{prefix}') or ui_components.get(f'{prefix}_height')
cn_types_list = ui_components.get(f'controlnet_types_{prefix}', [])
cn_series_list = ui_components.get(f'controlnet_series_{prefix}', [])
cn_filepaths_list = ui_components.get(f'controlnet_filepaths_{prefix}', [])
anima_cn_types_list = ui_components.get(f'anima_controlnet_lllite_types_{prefix}', [])
anima_cn_series_list = ui_components.get(f'anima_controlnet_lllite_series_{prefix}', [])
anima_cn_filepaths_list = ui_components.get(f'anima_controlnet_lllite_filepaths_{prefix}', [])
diffsynth_cn_types_list = ui_components.get(f'diffsynth_controlnet_types_{prefix}', [])
diffsynth_cn_series_list = ui_components.get(f'diffsynth_controlnet_series_{prefix}', [])
diffsynth_cn_filepaths_list = ui_components.get(f'diffsynth_controlnet_filepaths_{prefix}', [])
lora_accordion = ui_components.get(f'lora_accordion_{prefix}')
cn_accordion = ui_components.get(f'controlnet_accordion_{prefix}')
anima_cn_accordion = ui_components.get(f'anima_controlnet_lllite_accordion_{prefix}')
diffsynth_cn_accordion = ui_components.get(f'diffsynth_controlnet_accordion_{prefix}')
ipa_accordion = ui_components.get(f'ipadapter_accordion_{prefix}')
sd3_ipa_accordion = ui_components.get(f'sd3_ipadapter_accordion_{prefix}')
flux1_ipa_accordion = ui_components.get(f'flux1_ipadapter_accordion_{prefix}')
style_accordion = ui_components.get(f'style_accordion_{prefix}')
embedding_accordion = ui_components.get(f'embedding_accordion_{prefix}')
conditioning_accordion = ui_components.get(f'conditioning_accordion_{prefix}')
ref_latent_accordion = ui_components.get(f'reference_latent_accordion_{prefix}')
hidream_o1_ref_accordion = ui_components.get(f'hidream_o1_reference_accordion_{prefix}')
pid_accordion = ui_components.get(f'pid_accordion_{prefix}')
vae_accordion = ui_components.get(f'vae_accordion_{prefix}')
ipa_preset_list = ui_components.get(f'ipadapter_final_preset_{prefix}')
prompt_comp = ui_components.get(f'prompt_{prefix}') or ui_components.get(f'{prefix}_positive_prompt')
neg_prompt_comp = ui_components.get(f'neg_prompt_{prefix}') or ui_components.get(f'{prefix}_negative_prompt')
steps_comp = ui_components.get(f'steps_{prefix}') or ui_components.get(f'{prefix}_steps')
cfg_comp = ui_components.get(f'cfg_{prefix}') or ui_components.get(f'{prefix}_cfg')
sampler_comp = ui_components.get(f'sampler_{prefix}') or ui_components.get(f'{prefix}_sampler_name')
scheduler_comp = ui_components.get(f'scheduler_{prefix}') or ui_components.get(f'{prefix}_scheduler')
extra_comps = [prompt_comp, neg_prompt_comp, steps_comp, cfg_comp, sampler_comp, scheduler_comp, width_comp, height_comp]
valid_extra_comps = [c for c in extra_comps if c is not None]
if arch_comp and cat_comp and model_comp:
outputs = [model_comp, cat_comp]
if clip_skip_comp: outputs.append(clip_skip_comp)
if guidance_comp: outputs.append(guidance_comp)
if aspect_ratio_comp: outputs.append(aspect_ratio_comp)
outputs.extend(cn_types_list + cn_series_list + cn_filepaths_list)
outputs.extend(anima_cn_types_list + anima_cn_series_list + anima_cn_filepaths_list)
outputs.extend(diffsynth_cn_types_list + diffsynth_cn_series_list + diffsynth_cn_filepaths_list)
if lora_accordion: outputs.append(lora_accordion)
if cn_accordion: outputs.append(cn_accordion)
if anima_cn_accordion: outputs.append(anima_cn_accordion)
if diffsynth_cn_accordion: outputs.append(diffsynth_cn_accordion)
if ipa_accordion: outputs.append(ipa_accordion)
if sd3_ipa_accordion: outputs.append(sd3_ipa_accordion)
if flux1_ipa_accordion: outputs.append(flux1_ipa_accordion)
if style_accordion: outputs.append(style_accordion)
if embedding_accordion: outputs.append(embedding_accordion)
if conditioning_accordion: outputs.append(conditioning_accordion)
if ref_latent_accordion: outputs.append(ref_latent_accordion)
if hidream_o1_ref_accordion: outputs.append(hidream_o1_ref_accordion)
if pid_accordion: outputs.append(pid_accordion)
if vae_accordion: outputs.append(vae_accordion)
if ipa_preset_list: outputs.append(ipa_preset_list)
outputs.extend(valid_extra_comps)
update_fn = make_update_fn(
model_comp, cat_comp, clip_skip_comp, aspect_ratio_comp, width_comp, height_comp,
cn_types_list, cn_series_list, cn_filepaths_list,
anima_cn_types_list, anima_cn_series_list, anima_cn_filepaths_list,
diffsynth_cn_types_list, diffsynth_cn_series_list, diffsynth_cn_filepaths_list,
ipa_preset_list, lora_accordion, cn_accordion, anima_cn_accordion, diffsynth_cn_accordion, ipa_accordion, sd3_ipa_accordion, flux1_ipa_accordion, style_accordion, embedding_accordion, conditioning_accordion,
ref_latent_accordion, hidream_o1_ref_accordion, guidance_comp, prompt_comp, neg_prompt_comp, steps_comp, cfg_comp, sampler_comp, scheduler_comp,
pid_acc=pid_accordion, vae_acc=vae_accordion
)
inputs = [arch_comp, cat_comp]
if aspect_ratio_comp:
inputs.append(aspect_ratio_comp)
arch_comp.change(fn=update_fn, inputs=inputs, outputs=outputs)
cat_comp.change(fn=update_fn, inputs=inputs, outputs=outputs)
if model_comp:
outputs2 = []
if arch_comp: outputs2.append(arch_comp)
if cat_comp: outputs2.append(cat_comp)
if clip_skip_comp: outputs2.append(clip_skip_comp)
if guidance_comp: outputs2.append(guidance_comp)
if aspect_ratio_comp: outputs2.append(aspect_ratio_comp)
outputs2.extend(cn_types_list + cn_series_list + cn_filepaths_list)
outputs2.extend(anima_cn_types_list + anima_cn_series_list + anima_cn_filepaths_list)
outputs2.extend(diffsynth_cn_types_list + diffsynth_cn_series_list + diffsynth_cn_filepaths_list)
if lora_accordion: outputs2.append(lora_accordion)
if cn_accordion: outputs2.append(cn_accordion)
if anima_cn_accordion: outputs2.append(anima_cn_accordion)
if diffsynth_cn_accordion: outputs2.append(diffsynth_cn_accordion)
if ipa_accordion: outputs2.append(ipa_accordion)
if sd3_ipa_accordion: outputs2.append(sd3_ipa_accordion)
if flux1_ipa_accordion: outputs2.append(flux1_ipa_accordion)
if style_accordion: outputs2.append(style_accordion)
if embedding_accordion: outputs2.append(embedding_accordion)
if conditioning_accordion: outputs2.append(conditioning_accordion)
if ref_latent_accordion: outputs2.append(ref_latent_accordion)
if hidream_o1_ref_accordion: outputs2.append(hidream_o1_ref_accordion)
if pid_accordion: outputs2.append(pid_accordion)
if vae_accordion: outputs2.append(vae_accordion)
if ipa_preset_list: outputs2.append(ipa_preset_list)
outputs2.extend(valid_extra_comps)
if outputs2:
inputs2 = [model_comp]
if arch_comp: inputs2.append(arch_comp)
if cat_comp: inputs2.append(cat_comp)
if aspect_ratio_comp: inputs2.append(aspect_ratio_comp)
change_fn = make_model_change_fn(
cat_comp, clip_skip_comp, aspect_ratio_comp, width_comp, height_comp,
cn_types_list, cn_series_list, cn_filepaths_list,
anima_cn_types_list, anima_cn_series_list, anima_cn_filepaths_list,
diffsynth_cn_types_list, diffsynth_cn_series_list, diffsynth_cn_filepaths_list,
arch_comp, ipa_preset_list, lora_accordion, cn_accordion, anima_cn_accordion, diffsynth_cn_accordion, ipa_accordion, sd3_ipa_accordion, flux1_ipa_accordion, style_accordion, embedding_accordion, conditioning_accordion,
ref_latent_accordion, hidream_o1_ref_accordion, guidance_comp, prompt_comp, neg_prompt_comp, steps_comp, cfg_comp, sampler_comp, scheduler_comp,
pid_acc=pid_accordion, vae_acc=vae_accordion
)
model_comp.change(fn=change_fn, inputs=inputs2, outputs=outputs2)
create_lora_event_handlers(prefix, ui_components)
create_controlnet_event_handlers(prefix, ui_components)
create_anima_controlnet_lllite_event_handlers(prefix, ui_components)
create_diffsynth_controlnet_event_handlers(prefix, ui_components)
create_ipadapter_event_handlers(prefix, ui_components)
create_embedding_event_handlers(prefix, ui_components)
create_conditioning_event_handlers(prefix, ui_components)
create_flux1_ipadapter_event_handlers(prefix, ui_components)
create_sd3_ipadapter_event_handlers(prefix, ui_components)
create_style_event_handlers(prefix, ui_components)
create_reference_latent_event_handlers(prefix, ui_components)
create_hidream_o1_reference_event_handlers(prefix, ui_components)
create_run_event(prefix, task_type, ui_components)
if 'view_mode_inpaint' in ui_components:
def toggle_inpaint_fullscreen_view(view_mode):
is_fullscreen = (view_mode == "Fullscreen View")
other_elements_visible = not is_fullscreen
editor_height = 800 if is_fullscreen else 272
updates = {
ui_components['prompts_column_inpaint']: gr.update(visible=other_elements_visible),
ui_components['params_and_gallery_row_inpaint']: gr.update(visible=other_elements_visible),
ui_components['accordion_wrapper_inpaint']: gr.update(visible=other_elements_visible),
ui_components['input_image_dict_inpaint']: gr.update(height=editor_height),
}
model_and_run_rows = ui_components.get('model_and_run_row_inpaint', [])
for row in model_and_run_rows:
updates[row] = gr.update(visible=other_elements_visible)
return updates
output_components = []
model_and_run_rows = ui_components.get('model_and_run_row_inpaint', [])
if isinstance(model_and_run_rows, list):
output_components.extend(model_and_run_rows)
else:
output_components.append(model_and_run_rows)
output_components.extend([
ui_components['prompts_column_inpaint'],
ui_components['params_and_gallery_row_inpaint'],
ui_components['accordion_wrapper_inpaint'],
ui_components['input_image_dict_inpaint']
])
ui_components['view_mode_inpaint'].change(
fn=toggle_inpaint_fullscreen_view,
inputs=[ui_components['view_mode_inpaint']],
outputs=output_components,
show_progress=False
)
all_load_outputs = []
for prefix in ["txt2img", "img2img", "inpaint", "outpaint", "hires_fix"]:
if f'controlnet_types_{prefix}' in ui_components:
all_load_outputs.extend(ui_components[f'controlnet_types_{prefix}'])
all_load_outputs.extend(ui_components[f'controlnet_series_{prefix}'])
all_load_outputs.extend(ui_components[f'controlnet_filepaths_{prefix}'])
if f'anima_controlnet_lllite_types_{prefix}' in ui_components:
all_load_outputs.extend(ui_components[f'anima_controlnet_lllite_types_{prefix}'])
all_load_outputs.extend(ui_components[f'anima_controlnet_lllite_series_{prefix}'])
all_load_outputs.extend(ui_components[f'anima_controlnet_lllite_filepaths_{prefix}'])
if f'diffsynth_controlnet_types_{prefix}' in ui_components:
all_load_outputs.extend(ui_components[f'diffsynth_controlnet_types_{prefix}'])
all_load_outputs.extend(ui_components[f'diffsynth_controlnet_series_{prefix}'])
all_load_outputs.extend(ui_components[f'diffsynth_controlnet_filepaths_{prefix}'])
if f'ipadapter_final_preset_{prefix}' in ui_components:
all_load_outputs.extend(ui_components[f'ipadapter_lora_strengths_{prefix}'])
all_load_outputs.append(ui_components[f'ipadapter_final_preset_{prefix}'])
all_load_outputs.append(ui_components[f'ipadapter_final_lora_strength_{prefix}'])
if all_load_outputs:
demo.load(
fn=lambda: run_on_load(ui_components),
outputs=all_load_outputs
)
for prefix in ["txt2img", "img2img", "inpaint", "outpaint", "hires_fix"]:
aspect_ratio_dropdown = ui_components.get(f'aspect_ratio_{prefix}') or ui_components.get(f'{prefix}_aspect_ratio_dropdown')
width_component = ui_components.get(f'width_{prefix}') or ui_components.get(f'{prefix}_width')
height_component = ui_components.get(f'height_{prefix}') or ui_components.get(f'{prefix}_height')
model_dropdown = ui_components.get(f'base_model_{prefix}')
if aspect_ratio_dropdown and width_component and height_component and model_dropdown:
aspect_ratio_dropdown.change(fn=on_aspect_ratio_change, inputs=[aspect_ratio_dropdown, model_dropdown], outputs=[width_component, height_component], show_progress=False) |