|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from .args import DeforumOutputArgs, get_component_names, get_settings_component_names |
|
from modules.shared import opts, state |
|
from modules.ui import create_output_panel, wrap_gradio_call |
|
from webui import wrap_gradio_gpu_call |
|
from .run_deforum import run_deforum |
|
from .settings import save_settings, load_all_settings, load_video_settings |
|
from .general_utils import get_deforum_version |
|
from .ui_left import setup_deforum_left_side_ui |
|
from scripts.deforum_extend_paths import deforum_sys_extend |
|
import gradio as gr |
|
|
|
def on_ui_tabs(): |
|
|
|
deforum_sys_extend() |
|
|
|
i1_store_backup = f"<p style=\"text-align:center;font-weight:bold;margin-bottom:0em\">Deforum extension for auto1111 — version 3.0 | Git commit: {get_deforum_version()}</p>" |
|
i1_store = i1_store_backup |
|
|
|
with gr.Blocks(analytics_enabled=False) as deforum_interface: |
|
components = {} |
|
dummy_component = gr.Label(visible=False) |
|
with gr.Row(elem_id='deforum_progress_row').style(equal_height=False, variant='compact'): |
|
with gr.Column(scale=1, variant='panel'): |
|
|
|
components = setup_deforum_left_side_ui() |
|
with gr.Column(scale=1, variant='compact'): |
|
with gr.Row(variant='compact'): |
|
btn = gr.Button("Click here after the generation to show the video") |
|
components['btn'] = btn |
|
close_btn = gr.Button("Close the video", visible=False) |
|
with gr.Row(variant='compact'): |
|
i1 = gr.HTML(i1_store, elem_id='deforum_header') |
|
components['i1'] = i1 |
|
def show_vid(): |
|
from .run_deforum import last_vid_data |
|
return { |
|
i1: gr.update(value=last_vid_data, visible=True), |
|
close_btn: gr.update(visible=True), |
|
btn: gr.update(value="Update the video", visible=True), |
|
} |
|
btn.click( |
|
fn=show_vid, |
|
inputs=[], |
|
outputs=[i1, close_btn, btn], |
|
) |
|
def close_vid(): |
|
return { |
|
i1: gr.update(value=i1_store_backup, visible=True), |
|
close_btn: gr.update(visible=False), |
|
btn: gr.update(value="Click here after the generation to show the video", visible=True), |
|
} |
|
|
|
close_btn.click( |
|
fn=close_vid, |
|
inputs=[], |
|
outputs=[i1, close_btn, btn], |
|
) |
|
id_part = 'deforum' |
|
with gr.Row(elem_id=f"{id_part}_generate_box", variant='compact'): |
|
skip = gr.Button('Pause/Resume', elem_id=f"{id_part}_skip", visible=False) |
|
interrupt = gr.Button('Interrupt', elem_id=f"{id_part}_interrupt", visible=True) |
|
submit = gr.Button('Generate', elem_id=f"{id_part}_generate", variant='primary') |
|
|
|
skip.click( |
|
fn=lambda: state.skip(), |
|
inputs=[], |
|
outputs=[], |
|
) |
|
|
|
interrupt.click( |
|
fn=lambda: state.interrupt(), |
|
inputs=[], |
|
outputs=[], |
|
) |
|
|
|
deforum_gallery, generation_info, html_info, _ = create_output_panel("deforum", opts.outdir_img2img_samples) |
|
|
|
with gr.Row(variant='compact'): |
|
settings_path = gr.Textbox("deforum_settings.txt", elem_id='deforum_settings_path', label="Settings File", info="settings file path can be relative to webui folder OR full - absolute") |
|
with gr.Row(variant='compact'): |
|
save_settings_btn = gr.Button('Save Settings', elem_id='deforum_save_settings_btn') |
|
load_settings_btn = gr.Button('Load All Settings', elem_id='deforum_load_settings_btn') |
|
load_video_settings_btn = gr.Button('Load Video Settings', elem_id='deforum_load_video_settings_btn') |
|
|
|
component_list = [components[name] for name in get_component_names()] |
|
|
|
submit.click( |
|
fn=wrap_gradio_gpu_call(run_deforum), |
|
_js="submit_deforum", |
|
inputs=[dummy_component, dummy_component] + component_list, |
|
outputs=[ |
|
deforum_gallery, |
|
components["resume_timestring"], |
|
generation_info, |
|
html_info |
|
], |
|
) |
|
|
|
settings_component_list = [components[name] for name in get_settings_component_names()] |
|
video_settings_component_list = [components[name] for name in list(DeforumOutputArgs().keys())] |
|
|
|
save_settings_btn.click( |
|
fn=wrap_gradio_call(save_settings), |
|
inputs=[settings_path] + settings_component_list + video_settings_component_list, |
|
outputs=[], |
|
) |
|
|
|
load_settings_btn.click( |
|
fn=wrap_gradio_call(lambda *args, **kwargs: load_all_settings(*args, ui_launch=False, **kwargs)), |
|
inputs=[settings_path] + settings_component_list, |
|
outputs=settings_component_list, |
|
) |
|
|
|
load_video_settings_btn.click( |
|
fn=wrap_gradio_call(load_video_settings), |
|
inputs=[settings_path] + video_settings_component_list, |
|
outputs=video_settings_component_list, |
|
) |
|
|
|
|
|
def trigger_load_general_settings(): |
|
print("Loading general settings...") |
|
wrapped_fn = wrap_gradio_call(lambda *args, **kwargs: load_all_settings(*args, ui_launch=True, **kwargs)) |
|
inputs = [settings_path.value] + [component.value for component in settings_component_list] |
|
outputs = settings_component_list |
|
updated_values = wrapped_fn(*inputs, *outputs)[0] |
|
settings_component_name_to_obj = {name: component for name, component in zip(get_settings_component_names(), settings_component_list)} |
|
for key, value in updated_values.items(): |
|
settings_component_name_to_obj[key].value = value['value'] |
|
|
|
if opts.data.get("deforum_enable_persistent_settings", False): |
|
trigger_load_general_settings() |
|
|
|
return [(deforum_interface, "Deforum", "deforum_interface")] |