import gradio as gr def render_column_player(): with gr.Column(scale=4): video_output = gr.Video( label="📹 Generated Video Result", autoplay=True, sources=["upload"], buttons=["download", "share"], interactive=True, elem_id="generated-video" ) with gr.Row(): grab_frame_btn = gr.Button("📸 Frame -> Input Image", variant="secondary") grab_last_frame_btn = gr.Button("🏁 Frame -> Last Frame", variant="secondary") grab_swap_target_btn = gr.Button("👤 Frame -> Swap Target", variant="secondary") timestamp_box = gr.Number(value=0, label="Timestamp", visible=True, elem_id="hidden-timestamp") gpu_report_box = gr.HTML() file_output = gr.File(label="📥 Download Video File") with gr.Accordion("🖼️ Last Image (Optional End Frame)", open=False): last_image_component = gr.Image( type="pil", label="Last Image (Optional End Frame)", sources=["upload", "clipboard"], height=200 ) play_result_video = gr.Checkbox(label="Display Video Preview", value=True, interactive=True) merge_queue_state = gr.State(value=[]) with gr.Accordion("🔗 Standalone Video Merge & Stitcher", open=False): with gr.Row(): append_merge_btn = gr.Button("➕ Append Output Video & Merge", variant="primary") clear_merge_btn = gr.Button("🗑️ Clear Queue", variant="stop") merge_status_box = gr.HTML("