movements
parent
5a0f594a2b
commit
e5558ce13f
|
|
@ -41,29 +41,30 @@ def enable_sampler_dropdown(model_type):
|
|||
return gr.update(visible=is_visible)
|
||||
|
||||
def setup_top_parts(mode, d):
|
||||
with gr.Column(scale=3, variant='compact'):
|
||||
with gr.Row(elem_id=f'{mode}_prompt_toprow'):
|
||||
prompt = gr.Textbox(label='Prompt', lines=3, interactive=True, elem_id=f"{mode}_prompt", placeholder="Enter your prompt here...")
|
||||
with gr.Row(elem_id=f'{mode}_n_prompt_toprow'):
|
||||
n_prompt = gr.Textbox(label='Negative prompt', lines=2, interactive=True, elem_id=f"{mode}_n_prompt", value=d.n_prompt)
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
with gr.Row(elem_id=f"{mode}_generate_box", variant='compact', elem_classes="generate-box"):
|
||||
interrupt = gr.Button('Interrupt', elem_id=f"{mode}_interrupt", elem_classes="generate-box-interrupt")
|
||||
skip = gr.Button('Skip', elem_id=f"{mode}_skip", elem_classes="generate-box-skip")
|
||||
run_button = gr.Button('Generate', elem_id=f"{mode}_generate", variant='primary')
|
||||
with gr.Row(equal_height=False, variant='compact'):
|
||||
with gr.Column(scale=4, variant='compact'):
|
||||
with gr.Row(elem_id=f'{mode}_prompt_toprow'):
|
||||
prompt = gr.Textbox(label='Prompt', show_label=False, lines=3, interactive=True, elem_id=f"{mode}_prompt", placeholder="Prompt (press Ctrl+Enter or Alt+Enter to generate)")
|
||||
with gr.Row(elem_id=f'{mode}_n_prompt_toprow'):
|
||||
n_prompt = gr.Textbox(label='Negative prompt', show_label=False, lines=2, interactive=True, elem_id=f"{mode}_n_prompt", value=d.n_prompt, placeholder="Negative prompt (press Ctrl+Enter or Alt+Enter to generate)")
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
with gr.Row(elem_id=f"{mode}_generate_box", variant='compact', elem_classes="generate-box"):
|
||||
interrupt = gr.Button('Interrupt', elem_id=f"{mode}_interrupt", elem_classes="generate-box-interrupt")
|
||||
skip = gr.Button('Skip', elem_id=f"{mode}_skip", elem_classes="generate-box-skip")
|
||||
run_button = gr.Button('Generate', elem_id=f"{mode}_generate", variant='primary')
|
||||
|
||||
skip.click(
|
||||
fn=lambda: shared.state.skip(),
|
||||
inputs=[],
|
||||
outputs=[],
|
||||
)
|
||||
skip.click(
|
||||
fn=lambda: shared.state.skip(),
|
||||
inputs=[],
|
||||
outputs=[],
|
||||
)
|
||||
|
||||
interrupt.click(
|
||||
fn=lambda: shared.state.interrupt(),
|
||||
inputs=[],
|
||||
outputs=[],
|
||||
)
|
||||
|
||||
interrupt.click(
|
||||
fn=lambda: shared.state.interrupt(),
|
||||
inputs=[],
|
||||
outputs=[],
|
||||
)
|
||||
|
||||
return prompt, n_prompt, run_button
|
||||
|
||||
def setup_common_values(mode, d):
|
||||
|
|
@ -132,47 +133,48 @@ def setup_model_switcher():
|
|||
|
||||
def setup_tab(mode, d, model, model_type, process):
|
||||
prompt, n_prompt, run_button = setup_top_parts('txt2vid', d)
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
if mode == 'vid2vid':
|
||||
with gr.Row():
|
||||
gr.HTML('Put your video here')
|
||||
gr.HTML('<strong>Vid2vid for VideoCrafter is to be done!</strong>')
|
||||
|
||||
vid2vid_frames = gr.File(label="Input video", interactive=True, file_count="single", file_types=["video"], elem_id="vid_to_vid_chosen_file")
|
||||
with gr.Row():
|
||||
gr.HTML('Alternative: enter the relative (to the webui) path to the file')
|
||||
with gr.Row():
|
||||
vid2vid_frames_path = gr.Textbox(label="Input video path", interactive=True, elem_id="vid_to_vid_chosen_path", placeholder='Enter your video path here, or upload in the box above ^')
|
||||
|
||||
sampler, steps, seed, cfg_scale, width, height, eta, frames, batch_count = setup_common_values(mode, d)
|
||||
if mode == 'vid2vid':
|
||||
with gr.Row():
|
||||
strength = gr.Slider(label="denoising strength", value=d.strength, minimum=0, maximum=1, step=0.05, interactive=True)
|
||||
vid2vid_startFrame=gr.Number(label='vid2vid start frame',value=d.vid2vid_startFrame)
|
||||
model_type.change(fn=enable_sampler_dropdown, inputs=[model_type], outputs=[sampler])
|
||||
if mode == 'txt2vid':
|
||||
with gr.Accordion('img2vid', open=False):
|
||||
inpainting_image = gr.File(label="Inpainting image", interactive=True, file_count="single", file_types=["image"], elem_id="inpainting_chosen_file")
|
||||
# TODO: should be tied to the total frame count dynamically
|
||||
inpainting_frames=gr.Slider(label='inpainting frames',value=d.inpainting_frames,minimum=0, maximum=250, step=1)
|
||||
with gr.Row(equal_height=False, variant='compact'):
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
if mode == 'vid2vid':
|
||||
with gr.Row():
|
||||
gr.Markdown('''`inpainting frames` is the number of frames inpainting is applied to (counting from the beginning)
|
||||
|
||||
The following parameters are exposed in this keyframe: max frames as `max_f`, inpainting frames as `max_i_f`, current frame number as `t`, seed as `s`
|
||||
|
||||
The weigths of `0:(t/max_i_f), "max_i_f":(1)` will *continue* the initial pic
|
||||
|
||||
To *loop it back*, set the weight to 0 for the first and for the last frame
|
||||
|
||||
Example: `0:(0), "max_i_f/4":(1), "3*max_i_f/4":(1), "max_i_f-1":(0)` ''')
|
||||
gr.HTML('Put your video here')
|
||||
gr.HTML('<strong>Vid2vid for VideoCrafter is to be done!</strong>')
|
||||
|
||||
vid2vid_frames = gr.File(label="Input video", interactive=True, file_count="single", file_types=["video"], elem_id="vid_to_vid_chosen_file")
|
||||
with gr.Row():
|
||||
inpainting_weights = gr.Textbox(label="Inpainting weights", value=d.inpainting_weights, interactive=True)
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
output = gr.HTML(i1_store_t2v, elem_id='deforum_header')
|
||||
|
||||
dummy_component1 = gr.Label("", visible=False)
|
||||
dummy_component2 = gr.Label("", visible=False)
|
||||
do_vid2vid = gr.State(value=1 if mode == 'vid2vid' else 0)
|
||||
gr.HTML('Alternative: enter the relative (to the webui) path to the file')
|
||||
with gr.Row():
|
||||
vid2vid_frames_path = gr.Textbox(label="Input video path", interactive=True, elem_id="vid_to_vid_chosen_path", placeholder='Enter your video path here, or upload in the box above ^')
|
||||
|
||||
sampler, steps, seed, cfg_scale, width, height, eta, frames, batch_count = setup_common_values(mode, d)
|
||||
if mode == 'vid2vid':
|
||||
with gr.Row():
|
||||
strength = gr.Slider(label="denoising strength", value=d.strength, minimum=0, maximum=1, step=0.05, interactive=True)
|
||||
vid2vid_startFrame=gr.Number(label='vid2vid start frame',value=d.vid2vid_startFrame)
|
||||
model_type.change(fn=enable_sampler_dropdown, inputs=[model_type], outputs=[sampler])
|
||||
if mode == 'txt2vid':
|
||||
with gr.Accordion('img2vid', open=False):
|
||||
inpainting_image = gr.File(label="Inpainting image", interactive=True, file_count="single", file_types=["image"], elem_id="inpainting_chosen_file")
|
||||
# TODO: should be tied to the total frame count dynamically
|
||||
inpainting_frames=gr.Slider(label='inpainting frames',value=d.inpainting_frames,minimum=0, maximum=250, step=1)
|
||||
with gr.Row():
|
||||
gr.Markdown('''`inpainting frames` is the number of frames inpainting is applied to (counting from the beginning)
|
||||
|
||||
The following parameters are exposed in this keyframe: max frames as `max_f`, inpainting frames as `max_i_f`, current frame number as `t`, seed as `s`
|
||||
|
||||
The weigths of `0:(t/max_i_f), "max_i_f":(1)` will *continue* the initial pic
|
||||
|
||||
To *loop it back*, set the weight to 0 for the first and for the last frame
|
||||
|
||||
Example: `0:(0), "max_i_f/4":(1), "3*max_i_f/4":(1), "max_i_f-1":(0)` ''')
|
||||
with gr.Row():
|
||||
inpainting_weights = gr.Textbox(label="Inpainting weights", value=d.inpainting_weights, interactive=True)
|
||||
with gr.Column(scale=1, variant='compact'):
|
||||
output = gr.HTML(i1_store_t2v, elem_id='deforum_header')
|
||||
|
||||
dummy_component1 = gr.Label("", visible=False)
|
||||
dummy_component2 = gr.Label("", visible=False)
|
||||
do_vid2vid = gr.State(value=1 if mode == 'vid2vid' else 0)
|
||||
|
||||
components = locals()
|
||||
|
||||
|
|
@ -191,33 +193,35 @@ def setup_text2video_settings_dictionary(model, model_type, process):
|
|||
components_v2v = setup_tab(mode, d, model, model_type, process)
|
||||
|
||||
with gr.Tab('Output settings'):
|
||||
with gr.Row(variant='compact') as fps_out_format_row:
|
||||
fps = gr.Slider(label="FPS", value=dv.fps, minimum=1, maximum=240, step=1)
|
||||
with gr.Row(variant='compact') as soundtrack_row:
|
||||
add_soundtrack = gr.Radio(['None', 'File', 'Init Video'], label="Add soundtrack", value=dv.add_soundtrack)
|
||||
soundtrack_path = gr.Textbox(label="Soundtrack path", lines=1, interactive=True, value=dv.soundtrack_path)
|
||||
with gr.Row(equal_height=False, variant='compact'):
|
||||
with gr.Column(scale=1, variant='default'):
|
||||
with gr.Row(variant='compact') as fps_out_format_row:
|
||||
fps = gr.Slider(label="FPS", value=dv.fps, minimum=1, maximum=240, step=1)
|
||||
with gr.Row(variant='compact') as soundtrack_row:
|
||||
add_soundtrack = gr.Radio(['None', 'File', 'Init Video'], label="Add soundtrack", value=dv.add_soundtrack)
|
||||
soundtrack_path = gr.Textbox(label="Soundtrack path", lines=1, interactive=True, value=dv.soundtrack_path)
|
||||
|
||||
with gr.Row(variant='compact'):
|
||||
skip_video_creation = gr.Checkbox(label="Skip video creation", value=dv.skip_video_creation, interactive=True)
|
||||
with gr.Row(equal_height=True, variant='compact', visible=True) as ffmpeg_set_row:
|
||||
ffmpeg_crf = gr.Slider(minimum=0, maximum=51, step=1, label="CRF", value=dv.ffmpeg_crf, interactive=True)
|
||||
ffmpeg_preset = gr.Dropdown(label="Preset", choices=['veryslow', 'slower', 'slow', 'medium', 'fast', 'faster', 'veryfast', 'superfast', 'ultrafast'], interactive=True, value=dv.ffmpeg_preset, type="value")
|
||||
with gr.Row(equal_height=True, variant='compact', visible=True) as ffmpeg_location_row:
|
||||
ffmpeg_location = gr.Textbox(label="Location", lines=1, interactive=True, value=dv.ffmpeg_location)
|
||||
with gr.Accordion(label='Metadata viewer', open=False, visible=True):
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_file = gr.File(label="Video", interactive=True, file_count="single", file_types=["video"], elem_id="metadata_chosen_file")
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_btn = gr.Button(value='Get metadata')
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_box = gr.HTML()
|
||||
|
||||
def get_metadata(file):
|
||||
print('Reading metadata')
|
||||
video = MP4(file.name)
|
||||
return video["\xa9cmt"]
|
||||
with gr.Row(variant='compact'):
|
||||
skip_video_creation = gr.Checkbox(label="Skip video creation", value=dv.skip_video_creation, interactive=True)
|
||||
with gr.Row(equal_height=True, variant='compact', visible=True) as ffmpeg_set_row:
|
||||
ffmpeg_crf = gr.Slider(minimum=0, maximum=51, step=1, label="CRF", value=dv.ffmpeg_crf, interactive=True)
|
||||
ffmpeg_preset = gr.Dropdown(label="Preset", choices=['veryslow', 'slower', 'slow', 'medium', 'fast', 'faster', 'veryfast', 'superfast', 'ultrafast'], interactive=True, value=dv.ffmpeg_preset, type="value")
|
||||
with gr.Row(equal_height=True, variant='compact', visible=True) as ffmpeg_location_row:
|
||||
ffmpeg_location = gr.Textbox(label="Location", lines=1, interactive=True, value=dv.ffmpeg_location)
|
||||
with gr.Column(scale=1, variant='default'):
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_file = gr.File(label="Video", interactive=True, file_count="single", file_types=["video"], elem_id="metadata_chosen_file")
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_btn = gr.Button(value='View metadata')
|
||||
with gr.Row(variant='compact'):
|
||||
metadata_box = gr.HTML()
|
||||
|
||||
def get_metadata(file):
|
||||
print('Reading metadata')
|
||||
video = MP4(file.name)
|
||||
return video["\xa9cmt"]
|
||||
|
||||
metadata_btn.click(get_metadata, inputs=[metadata_file], outputs=[metadata_box])
|
||||
metadata_btn.click(get_metadata, inputs=[metadata_file], outputs=[metadata_box])
|
||||
with gr.Tab('How to install? Where to get help, how to help?'):
|
||||
gr.Markdown(welcome_text)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue