File size: 4,748 Bytes
480d4ef
dcb53fc
 
0268b89
 
79da273
0268b89
1dd6469
3af1c8c
0268b89
 
 
79da273
 
 
0268b89
 
79da273
0d88658
2f13a57
0268b89
 
 
0d88658
2f13a57
0268b89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e76448d
3af1c8c
0268b89
12d9720
81edc2c
79da273
 
0268b89
 
3af1c8c
dcb53fc
51efef6
 
2977112
90b9bf8
 
 
 
 
4793b98
90b9bf8
 
 
 
 
b0ff174
4793b98
b0ff174
51efef6
90b9bf8
a8c338d
 
90b9bf8
a8c338d
 
90b9bf8
eea176b
51efef6
 
 
 
 
90b9bf8
 
 
f774200
1dd6469
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73d2101
5d5059e
73d2101
9312dbc
73d2101
7dbced5
 
 
90b9bf8
73d2101
 
 
 
 
dcb53fc
73d2101
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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:
        return None  # Handle cases where no file was uploaded
    
    filename, filedata = uploaded_file  # Unpack the tuple into filename and binary data
    upload_dir = "uploaded_videos"
    os.makedirs(upload_dir, exist_ok=True)  # Ensure the directory exists
    file_path = os.path.join(upload_dir, filename)

    # Write the binary data to a new file in the specified directory
    with open(file_path, "wb") as f:
        f.write(filedata)
        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")
    return file_path

# Define a function to process the video and display results
def display_results(video_url, video_file, description):
    if video_url:
        # Process video from URL
        final_clip_path = process_video(video_url, description, is_url=True)
    elif video_file:
        # Save and process video from file upload
        video_file_path = save_uploaded_file(video_file)
        if video_file_path:
            final_clip_path = process_video(video_file_path, description, is_url=False)
        else:
            return "No file provided or file save error", None
    else:
        return "No input provided", None

    return final_clip_path, gr.Video.update(value=final_clip_path)

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;
}
"""

with gr.Blocks() as demo:
    with gr.Column():
        video_url = gr.Textbox(label="Video URL")
        video_file = gr.File(label="Upload Video File", type="binary")
        description = gr.Textbox(label="Describe your clip")
        submit_button = gr.Button("Process Video")
        video_output = gr.Video(label="Processed Video")
        download_output = gr.File(label="Download Processed Video")

        submit_button.click(
            fn=display_results,
            inputs=[video_url, video_file, description],
            outputs=[video_output, download_output]
        )

demo.launch()