sd-webui-deforum/scripts/deforum_helpers/ui_right.py

141 lines
6.9 KiB
Python

import os, sys
from .args import d, da, dp, dv, dr, dloopArgs, i1_store, i1_store_backup, get_component_names, get_settings_component_names, video_args_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 .ui_left import setup_deforum_setting_dictionary
import gradio as gr
def on_ui_tabs():
deforum_folder_name = os.path.sep.join(os.path.abspath(__file__).split(os.path.sep)[:-3])
basedirs = [os.getcwd()]
if 'google.colab' in sys.modules:
basedirs.append('/content/gdrive/MyDrive/sd/stable-diffusion-webui') #for TheLastBen's colab
for basedir in basedirs:
sys.path.extend([os.path.join(deforum_folder_name, 'scripts', 'deforum_helpers', 'src')])
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_setting_dictionary(True, d, da,dp,dv,dr,dloopArgs)
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
# Show video
def show_vid():
return {
i1: gr.update(value=i1_store, visible=True),
close_btn: gr.update(visible=True),
btn: gr.update(value="Update the video", visible=True),
}
btn.click(
show_vid,
[],
[i1, close_btn, btn],
)
# Close video
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(
close_vid,
[],
[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, html_log = 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")
#reuse_latest_settings_btn = gr.Button('Reuse Latest', elem_id='deforum_reuse_latest_settings_btn')#TODO
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, extra_outputs=[None, '', '']),
_js="submit_deforum",
inputs=[dummy_component, dummy_component] + component_list,
outputs=[
deforum_gallery,
components["resume_timestring"],
generation_info,
html_info,
html_log,
],
)
settings_component_list = [components[name] for name in get_settings_component_names()]
video_settings_component_list = [components[name] for name in video_args_names]
stuff = gr.HTML("") # wrap gradio call garbage
stuff.visible = False
save_settings_btn.click(
fn=wrap_gradio_call(save_settings),
inputs=[settings_path] + settings_component_list + video_settings_component_list,
outputs=[stuff],
)
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 + [stuff],
)
load_video_settings_btn.click(
fn=wrap_gradio_call(load_video_settings),
inputs=[settings_path] + video_settings_component_list,
outputs=video_settings_component_list + [stuff],
)
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 + [stuff]
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")]