Spaces:
Running on Zero
Running on Zero
File size: 5,355 Bytes
cdefade 347cf89 9e18944 31e9635 cdefade 31e9635 f9f3338 31e9635 cdefade 31e9635 7dcaf5a cdefade 31e9635 17164a6 31e9635 17164a6 ae18889 17164a6 cdefade 17164a6 cdefade 31e9635 cdefade f9f3338 347cf89 f9f3338 58731cc 6ccb37e 347cf89 1cbf0c9 f9f3338 347cf89 31e9635 cdefade 1cbf0c9 31e9635 1cbf0c9 6ccb37e 31e9635 1cbf0c9 347cf89 31e9635 5d38bdd 01b6505 cdefade 31e9635 cdefade 1cbf0c9 9e18944 1cbf0c9 9e18944 1cbf0c9 9e18944 cdefade 31e9635 cdefade 31e9635 cdefade 31e9635 cdefade 31e9635 347cf89 cdefade 31e9635 cdefade 31e9635 cdefade | 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 | import gradio as gr
import prompt_enhancer
import video_merger
from image_utils import extract_frame, get_timestamp_js
from pipeline_manager import generate_video
from ui_modules import (
CSS, load_template, get_header_html,
render_column_inputs, render_column_player,
render_sulphur_vision_suite, render_vip_suite, render_cpu_tools
)
def create_ui():
with gr.Blocks(delete_cache=(3600, 10800), title="I2V EXTENDED v3.5 VIP") as demo:
gr.HTML(f"<style>{CSS}</style>" + get_header_html())
with gr.Row():
# Column 1: Standard Generation Inputs (scale=4)
c1 = render_column_inputs()
# Column 2: Video Player & Output Tools (scale=4)
c2 = render_column_player()
# Column 3: Specialized Tool Suite (Stacked Accordions Top-to-Bottom, scale=4)
with gr.Column(scale=4):
silver = render_sulphur_vision_suite(
input_img=c1['input_image_component']
)
vip = render_vip_suite(
input_img=c1['input_image_component'],
output_video=c2['video_output']
)
cpu = render_cpu_tools(
input_img=c1['input_image_component']
)
# -------------------------------------------------------------
# GLOBAL ACTION CALLBACKS & CLICK HANDLERS
# -------------------------------------------------------------
# Sulphur Vision Enhancer Button Click (No VIP password required!)
silver['sulphur_enhance_btn'].click(
fn=prompt_enhancer.call_sulphur_enhancer_api,
inputs=[
c1['input_image_component'],
silver['sulphur_subject_input'],
silver['sulphur_adegan_input'],
silver['sulphur_camera_dropdown'],
silver['sulphur_atmosphere_dropdown'],
c1['duration_seconds_input'],
silver['sulphur_mode_dropdown'],
silver['sulphur_enable_swap_checkbox']
],
outputs=[
silver['relay_prompt_schedule_input'],
silver['enable_prompt_relay_checkbox'],
silver['sulphur_api_status_box'],
c1['input_image_component']
]
)
# Main Video Generator Click Handler
ui_inputs = [
c1['input_image_component'], c2['last_image_component'], c1['prompt_input'], vip['steps_slider'],
vip['negative_prompt_input'], c1['duration_seconds_input'],
vip['guidance_scale_input'], vip['guidance_scale_2_input'], vip['seed_input'], vip['randomize_seed_checkbox'],
vip['quality_slider'], vip['scheduler_dropdown'], vip['flow_shift_slider'], c1['frame_multi'],
c1['motion_extension_dropdown'],
c1['safe_mode_checkbox'],
c1['custom_lora_url_input'],
c1['custom_lora_scale_input'],
silver['enable_prompt_relay_checkbox'],
silver['relay_prompt_schedule_input'],
gr.State(None),
gr.State("Female Faces Only"),
c2['play_result_video'],
vip['custom_filename_input'],
c1['noise_temperature_slider'],
vip['enable_vip_rife_checkbox'],
vip['vip_rife_multiplier_radio'],
vip['vip_rife_mode_dropdown'],
vip['vip_rife_upscale_checkbox'],
vip['vip_rife_enhance_face_checkbox'],
vip['vip_master_password_input'],
c1['cached_lora_dropdown'],
c1['extra_gpu_buffer_slider']
]
c1['generate_button'].click(
fn=generate_video,
inputs=ui_inputs,
outputs=[c2['video_output'], c2['file_output'], vip['seed_input'], c2['gpu_report_box']]
)
# Standalone Manual Video Merge Click Handlers
c2['append_merge_btn'].click(
fn=video_merger.handle_append_video,
inputs=[c2['file_output'], c2['merge_queue_state'], vip['custom_filename_input']],
outputs=[c2['merged_video_output'], c2['merged_file_output'], c2['merge_queue_state'], c2['merge_status_box']]
)
c2['clear_merge_btn'].click(
fn=video_merger.handle_clear_merge_queue,
inputs=None,
outputs=[c2['merged_video_output'], c2['merged_file_output'], c2['merge_queue_state'], c2['merge_status_box']]
)
# 3-Way Instant Video Frame Extraction Handlers
c2['grab_frame_btn'].click(
fn=extract_frame,
inputs=[c2['video_output'], c2['timestamp_box']],
outputs=[c1['input_image_component'], c2['timestamp_box']],
js=get_timestamp_js
)
c2['grab_last_frame_btn'].click(
fn=extract_frame,
inputs=[c2['video_output'], c2['timestamp_box']],
outputs=[c2['last_image_component'], c2['timestamp_box']],
js=get_timestamp_js
)
c2['grab_swap_target_btn'].click(
fn=extract_frame,
inputs=[c2['video_output'], c2['timestamp_box']],
outputs=[cpu['tool_target_img'], c2['timestamp_box']],
js=get_timestamp_js
)
gr.HTML(load_template("footer.html"))
return demo
|