File size: 4,923 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
4793b98
73d2101
 
b0ff174
73d2101
 
 
 
 
 
 
 
 
 
 
 
b0ff174
73d2101
4793b98
b0ff174
51efef6
73d2101
a8c338d
51efef6
 
a8c338d
 
 
eea176b
51efef6
 
 
 
a8c338d
e579fcc
 
51efef6
 
f774200
1dd6469
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73d2101
5d5059e
73d2101
 
 
7dbced5
 
 
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
152
153
154
155
156
157
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

    print(f"Received object type: {type(uploaded_file)}")  # Debug: Check the object type
    print(f"Uploaded file content: {uploaded_file}")  # Debug: Inspect the content

    # Handling file content based on its type
    if isinstance(uploaded_file, tuple):
        # If it's a tuple, it usually contains (filename, filedata)
        filename, filedata = uploaded_file
        file_path = os.path.join("uploaded_videos", filename)
        with open(file_path, "wb") as f:
            f.write(filedata)
    elif isinstance(uploaded_file, str):
        # If it's a string, assuming it's a file path
        file_path = uploaded_file
    else:
        raise ValueError("Unexpected file input type")

    os.makedirs(os.path.dirname(file_path), exist_ok=True)
    print(f"File saved to {file_path}, size: {os.path.getsize(file_path)} bytes")
    return file_path


def display_results(video_url, video_file, description):
    final_clip_path = None

    if video_url:
        final_clip_path = process_video(video_url, description, is_url=True)
    elif video_file:
        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

    if final_clip_path:
        return final_clip_path, final_clip_path
    else:
        return "No matching scene found", 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;
}
"""

with gr.Blocks() as demo:
    with gr.Column():
        video_url = gr.Textbox(label="Video URL")
        video_file = gr.File(label="Upload Video File", type="file")
        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()