jbilcke-hf's picture
jbilcke-hf HF Staff
work on basic monitor (no gpu for now)
f20bd02
raw
history blame
3.13 kB
"""
Upload tab for Video Model Studio UI.
Handles manual file uploads for videos, images, and archives.
"""
import gradio as gr
import logging
from pathlib import Path
from typing import Dict, Any, Optional
from ..base_tab import BaseTab
logger = logging.getLogger(__name__)
class UploadTab(BaseTab):
"""Upload tab for manual file uploads"""
def __init__(self, app_state):
super().__init__(app_state)
self.id = "upload_tab"
self.title = "Manual Upload"
def create(self, parent=None) -> gr.Tab:
"""Create the Upload tab UI components"""
with gr.Tab(self.title, id=self.id) as tab:
with gr.Column():
with gr.Row():
gr.Markdown("## Manual upload of video files")
with gr.Row():
with gr.Column():
with gr.Row():
gr.Markdown("You can upload either:")
with gr.Row():
gr.Markdown("- A single MP4 video file")
with gr.Row():
gr.Markdown("- A ZIP archive containing multiple videos/images and optional caption files")
with gr.Row():
gr.Markdown("- A WebDataset shard (.tar file)")
with gr.Row():
gr.Markdown("- A ZIP archive containing WebDataset shards (.tar files)")
with gr.Column():
with gr.Row():
self.components["files"] = gr.Files(
label="Upload Images, Videos, ZIP or WebDataset",
file_types=[".jpg", ".jpeg", ".png", ".webp", ".webp", ".avif", ".heic", ".mp4", ".zip", ".tar"],
type="filepath"
)
return tab
def connect_events(self) -> None:
"""Connect event handlers to UI components"""
# File upload event
self.components["files"].upload(
fn=lambda x: self.app.importer.process_uploaded_files(x),
inputs=[self.components["files"]],
outputs=[self.components["import_status"]] # This comes from parent tab
).success(
fn=self.app.tabs["import_tab"].update_titles_after_import,
inputs=[
self.components["enable_automatic_video_split"],
self.components["enable_automatic_content_captioning"],
self.app.tabs["caption_tab"].components["custom_prompt_prefix"]
],
outputs=[
self.app.tabs_component, # Main tabs component
self.app.tabs["split_tab"].components["video_list"],
self.app.tabs["split_tab"].components["detect_status"],
self.app.tabs["split_tab"].components["split_title"],
self.app.tabs["caption_tab"].components["caption_title"],
self.app.tabs["train_tab"].components["train_title"]
]
)