import os import gradio as gr from video_processing import process_video from gradio.themes.base import Base from gradio.themes.utils import colors, fonts, sizes from typing import Iterable class CustomTheme(Base): def __init__( self, *, primary_hue: colors.Color | str = colors.orange, secondary_hue: colors.Color | str = colors.orange, neutral_hue: colors.Color | str = colors.gray, spacing_size: sizes.Size | str = sizes.spacing_md, radius_size: sizes.Size | str = sizes.radius_md, text_size: sizes.Size | str = sizes.text_md, font: fonts.Font | str | Iterable[fonts.Font | str] = ( fonts.GoogleFont("Sora"), "ui-sans-serif", "sans-serif", ), font_mono: fonts.Font | str | Iterable[fonts.Font | str] = ( fonts.GoogleFont("Sora"), "ui-monospace", "monospace", ), ): super().__init__( primary_hue=primary_hue, secondary_hue=secondary_hue, neutral_hue=neutral_hue, spacing_size=spacing_size, radius_size=radius_size, text_size=text_size, font=font, font_mono=font_mono, ) super().set( body_background_fill="radial-gradient(circle at center, rgba(235, 87, 38, 1) 0%, rgba(235, 87, 38, 0) 70%), radial-gradient(#eb5726 1px, transparent 1px)", body_text_color="#282828", block_background_fill="#ffffff", block_title_text_color="#eb5726", block_label_text_color="#eb5726", button_primary_background_fill="#eb5726", button_primary_text_color="#ffffff", ) custom_theme = CustomTheme() def save_uploaded_file(uploaded_file): if uploaded_file is None: print("No file uploaded.") return None # Handle cases where no file was uploaded print("File received:", type(uploaded_file), len(uploaded_file)) upload_dir = "uploaded_videos" os.makedirs(upload_dir, exist_ok=True) file_path = os.path.join(upload_dir, "uploaded_video.mp4") with open(file_path, "wb") as f: f.write(uploaded_file) # Write file content to disk f.flush() os.fsync(f.fileno()) # Ensure all file data is flushed to disk print(f"File saved to {file_path}, size: {os.path.getsize(file_path)} bytes") # Debugging return file_path def display_results(video_url, video_file, description): """Process video from URL or file upload and return the results.""" print("Function called with:", video_url, video_file, description) if video_url: print("Processing video from URL.") # Simplified for testing: Just simulate processing and return a URL. return "Processed video URL would be here", "Dummy video URL for testing" elif video_file: print("Received video file for processing.") video_file_path = save_uploaded_file(video_file) if video_file_path: print(f"Video file saved to: {video_file_path}") # Simplified for testing return "Processed video file would be here", "Dummy video file path for testing" else: print("No file provided or file save error.") return "No file provided or file save error", None else: print("No valid input received.") return "No input received", None css = """ body { background-color: #ffffff; background-image: radial-gradient(#eb5726 1px, transparent 1px); background-size: 10px 10px; background-repeat: repeat; background-attachment: fixed; } #video_url { background-color: #ffffff; color: #282828; border: 2px solid #eb5726; } #description { background-color: #ffffff; color: #282828; border: 2px solid #eb5726; } #submit_button { background-color: #eb5726; color: #ffffff; border: 2px solid #ffffff; } #submit_button:hover { background-color: #f5986e; color: #ffffff; border: 2px solid #ffffff; } label[for="video_url"] { color: #eb5726 !important; } label[for="description"] { color: #eb5726 !important; } h3 { color: #eb5726; } .centered-markdown { text-align: center; background-color: #ffffff; padding: 10px; } #sickstadium-title { font-size: 3em !important; font-weight: bold; text-transform: uppercase; } """ def interface_function(video_file): if video_file is not None: file_path = save_uploaded_file(video_file) return f"File saved at {file_path}" return "No file uploaded." def test_upload(video_file): if video_file is not None: return f"Received file with {len(video_file)} bytes" return "No file uploaded." with gr.Blocks() as demo: with gr.Column(): video_file = gr.UploadButton("Upload Video File", type="binary", file_types=["video"]) output = gr.Textbox() video_file.change(test_upload, inputs=[video_file], outputs=[output]) demo.launch()