Spaces:
Running
Running
| import gradio as gr | |
| import mimetypes | |
| def process_video(video, visualize_features): | |
| if video is None: | |
| return None, "Error: No video uploaded." | |
| # Validate video format | |
| mime_type, _ = mimetypes.guess_type(video) | |
| if not mime_type or not mime_type.startswith("video"): | |
| return None, "Error: Unsupported file format. Please upload a valid video file." | |
| try: | |
| # Placeholder: In a real app, process the video and visualize features if requested | |
| msg = "Feature visualization enabled." if visualize_features else "Feature visualization disabled." | |
| return video, msg | |
| except Exception as e: | |
| return None, f"Error: {str(e)}" | |
| with gr.Blocks(theme=gr.themes.Base(), css=".gradio-container {background: #111827; color: #d1d5db;}" ) as demo: | |
| gr.Markdown( | |
| """ | |
| # <span style="background: linear-gradient(to right, #2dd4bf, #06b6d4); -webkit-background-clip: text; color: transparent;">DINOv3 Video Tracking</span> | |
| <span style="color:#94a3b8;">In-browser video tracking powered by Transformers.js</span> | |
| """, | |
| elem_id="title" | |
| ) | |
| with gr.Row(): | |
| video_input = gr.Video(label="Select a video or drag and drop") | |
| with gr.Row(): | |
| visualize = gr.Checkbox(label="Visualize Dense Features", value=False) | |
| with gr.Row(): | |
| video_output = gr.Video(label="Preview") | |
| msg_output = gr.Textbox(label="Status", interactive=False) | |
| gr.Button("Run").click( | |
| process_video, | |
| inputs=[video_input, visualize], | |
| outputs=[video_output, msg_output] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |