Spaces:
Running
Running
Lazarus
commited on
Commit
•
3673342
1
Parent(s):
b43a58a
Refactor media output components and setup listeners
Browse files- app.py +8 -5
- functions.py +32 -100
app.py
CHANGED
@@ -122,12 +122,15 @@ with gr.Blocks(
|
|
122 |
audio_button = gr.Button("Audio")
|
123 |
file_button = gr.Button("File")
|
124 |
media_output_audio = gr.Audio(
|
125 |
-
type="filepath",
|
|
|
|
|
|
|
126 |
)
|
127 |
media_output_video = gr.Video(
|
128 |
-
label="
|
129 |
)
|
130 |
-
media_output_file = gr.File(label="
|
131 |
with gr.Row() as command_output:
|
132 |
output_textbox = gr.Code(
|
133 |
value="$ echo 'Hello, World!'",
|
@@ -250,9 +253,9 @@ with gr.Blocks(
|
|
250 |
ffmpeg_commands = CommandBuilder(
|
251 |
inputs_clip, video_inputs, audio_inputs, filter_inputs, filter_inputs_1
|
252 |
)
|
253 |
-
ffmpeg_commands.
|
254 |
# pprint(ffmpeg_commands.commands)
|
255 |
ffmpeg_commands.update(output_textbox)
|
256 |
|
257 |
if __name__ == "__main__":
|
258 |
-
demo.launch(show_error=True)
|
|
|
122 |
audio_button = gr.Button("Audio")
|
123 |
file_button = gr.Button("File")
|
124 |
media_output_audio = gr.Audio(
|
125 |
+
type="filepath",
|
126 |
+
label="Audio",
|
127 |
+
visible=False,
|
128 |
+
interactive=False,
|
129 |
)
|
130 |
media_output_video = gr.Video(
|
131 |
+
label="Video", visible=True, height=300
|
132 |
)
|
133 |
+
media_output_file = gr.File(label="File", visible=False)
|
134 |
with gr.Row() as command_output:
|
135 |
output_textbox = gr.Code(
|
136 |
value="$ echo 'Hello, World!'",
|
|
|
253 |
ffmpeg_commands = CommandBuilder(
|
254 |
inputs_clip, video_inputs, audio_inputs, filter_inputs, filter_inputs_1
|
255 |
)
|
256 |
+
ffmpeg_commands.setup_listener()
|
257 |
# pprint(ffmpeg_commands.commands)
|
258 |
ffmpeg_commands.update(output_textbox)
|
259 |
|
260 |
if __name__ == "__main__":
|
261 |
+
demo.launch(show_error=True, max_threads=300)
|
functions.py
CHANGED
@@ -58,25 +58,6 @@ class CommandBuilder:
|
|
58 |
a function to each component in the context
|
59 |
to build an array of ffmpeg commands"""
|
60 |
|
61 |
-
def __call__(self, *args, **kwds):
|
62 |
-
return [i.value for i in self._component]
|
63 |
-
|
64 |
-
def do(self, *inputs, **kwds):
|
65 |
-
for comp in self._component:
|
66 |
-
if comp.label is not None:
|
67 |
-
# self.changefunc(comp, comp.value)
|
68 |
-
# print(
|
69 |
-
# comp.label,
|
70 |
-
# comp,
|
71 |
-
# )
|
72 |
-
state = gr.State(value=comp.label)
|
73 |
-
comp.change(fn=self.changefunc, inputs=[state, comp], outputs=[])
|
74 |
-
|
75 |
-
def reset(self):
|
76 |
-
self.output_dict = {"vf": {}, "af": {}}
|
77 |
-
self.commands = ""
|
78 |
-
self.vf, self.af, self.extra = ([] for _ in range(3))
|
79 |
-
|
80 |
def __init__(self, *inputs: gr.Row | gr.Column) -> None:
|
81 |
"""
|
82 |
Parameters:
|
@@ -85,8 +66,6 @@ class CommandBuilder:
|
|
85 |
|
86 |
self.output_dict = {"vf": {}, "af": {}}
|
87 |
self.formatoutputdict = {"vf": {}, "af": {}}
|
88 |
-
# state=gr.Variable()
|
89 |
-
# state2=gr.Variable()
|
90 |
|
91 |
self._component: List[Component] = []
|
92 |
self.vf, self.af, self.extra = ([] for _ in range(3))
|
@@ -95,8 +74,6 @@ class CommandBuilder:
|
|
95 |
return None
|
96 |
for i in inputs:
|
97 |
self._component += self._get_component_instance(i)
|
98 |
-
# print(self._component, "component")
|
99 |
-
# print(len(self._component), "length")
|
100 |
# for comp in self._component:
|
101 |
# state = gr.State()
|
102 |
# if comp.label is not None:
|
@@ -105,6 +82,29 @@ class CommandBuilder:
|
|
105 |
# self.changefunc(state.value, comp.value)
|
106 |
# comp.change(fn=self.changefunc, inputs=[state, comp], outputs=[])
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
def changefunc(self, component_label: str | None, new_value=""):
|
109 |
label, *_ = (
|
110 |
component_label.strip(": \n").lower().split()
|
@@ -224,16 +224,11 @@ class CommandBuilder:
|
|
224 |
if not hasattr(i, "children"):
|
225 |
# res.append(gr.components.get_component_instance(i,render=True))
|
226 |
# if isinstance(i, gr.components.Component):
|
227 |
-
|
228 |
-
res += [gr.components.get_component_instance(i, render=True)]
|
229 |
-
# print(res)
|
230 |
-
# elif hasattr(i, "children"):
|
231 |
else:
|
232 |
-
# if isinstance(i, gr.Blocks):
|
233 |
res += self._get_component_instance(i)
|
234 |
# print(res)
|
235 |
return res
|
236 |
-
# return [gr.components.get_component_instance(i, render=True) for i in inputs.children if not hasattr(i, "children")]
|
237 |
|
238 |
def set_video_filters(self, options):
|
239 |
value = self.output_dict.get(options, "-")
|
@@ -339,34 +334,6 @@ class CommandBuilder:
|
|
339 |
self.build()
|
340 |
|
341 |
|
342 |
-
# def somefunc(input: gr.components.IOComponent, c_label=""):
|
343 |
-
# label = ""
|
344 |
-
# output = {}
|
345 |
-
# print(input, c_label)
|
346 |
-
# label, *_ = input.label.strip(": ").lower().split(
|
347 |
-
# ) if type(input.label) != list else "".join(input.label).strip(": ").lower().split()
|
348 |
-
# label += "".join(_).title()
|
349 |
-
# print(newoutputMap.get(label), label, c_label)
|
350 |
-
# if c_label not in [None, "Source", "Auto", ""]:
|
351 |
-
# print(input.value)
|
352 |
-
# output.update({label: c_label})
|
353 |
-
# else:
|
354 |
-
# output.pop(label, "No Key Exists")
|
355 |
-
# pprint(output)
|
356 |
-
|
357 |
-
# def mediaChange(option):
|
358 |
-
# no_=gr.update(visible=False)
|
359 |
-
# if option in video_containers:
|
360 |
-
# output=gr.update(visible=True)
|
361 |
-
# return [no_,output]
|
362 |
-
# elif option in audio_containers:
|
363 |
-
# output=gr.update(visible=True)
|
364 |
-
# return [output,no_]
|
365 |
-
# else:
|
366 |
-
# output=gr.update(visible=False)
|
367 |
-
# return [no_,no_]
|
368 |
-
|
369 |
-
|
370 |
def media_change(option: str, state) -> List[Component]:
|
371 |
"""
|
372 |
Allows playing the media in various options,
|
@@ -389,20 +356,6 @@ def media_change(option: str, state) -> List[Component]:
|
|
389 |
return [chosen(ops), chosen(ops2), chosen(ops3)]
|
390 |
|
391 |
|
392 |
-
# def videoChange(value):
|
393 |
-
# print(value.name)
|
394 |
-
|
395 |
-
# if option in video_containers:
|
396 |
-
# output=gr.update(visible=True)
|
397 |
-
# return [no_,output]
|
398 |
-
# elif option in audio_containers:
|
399 |
-
# output=gr.update(visible=True)
|
400 |
-
# return [output,no_]
|
401 |
-
# else:
|
402 |
-
# output=gr.update(visible=False)
|
403 |
-
# return [no_,no_]
|
404 |
-
|
405 |
-
|
406 |
"""Helper Functions for Processing """
|
407 |
|
408 |
|
@@ -492,8 +445,6 @@ def change_clipbox(choice: str) -> List[Component]:
|
|
492 |
print(choice, " now choice")
|
493 |
if choice == "Enabled":
|
494 |
return [
|
495 |
-
# gr.update(visible=True, value="00:00"),
|
496 |
-
# gr.update(visible=True, value="00:10"),
|
497 |
gr.Textbox(
|
498 |
label="Start Time:", placeholder="00:00", visible=True, value="00:00"
|
499 |
),
|
@@ -514,29 +465,9 @@ def change_clipbox(choice: str) -> List[Component]:
|
|
514 |
# return gr.update(value=file.name)
|
515 |
|
516 |
|
517 |
-
def get_component_instance(inputs: gr.Blocks) -> List[Component]:
|
518 |
-
"""returns only components
|
519 |
-
|
520 |
-
Args:
|
521 |
-
inputs: layout elements
|
522 |
-
|
523 |
-
Returns:
|
524 |
-
List[Component]: components
|
525 |
-
"""
|
526 |
-
return [
|
527 |
-
gr.components.get_component_instance(i, render=True) for i in inputs.children
|
528 |
-
]
|
529 |
-
|
530 |
-
|
531 |
class Clear(CommandBuilder):
|
532 |
"""Class for clearing components in layouts"""
|
533 |
|
534 |
-
def __call__(self, *args, **kwds):
|
535 |
-
return self._component
|
536 |
-
|
537 |
-
def __str__(self):
|
538 |
-
return f"{self._component} __clear__ class"
|
539 |
-
|
540 |
def __init__(self, *input_component: gr.Row | gr.Column) -> None:
|
541 |
"""
|
542 |
Parameters:
|
@@ -549,24 +480,25 @@ class Clear(CommandBuilder):
|
|
549 |
# self._component += super()._get_component_instance(i)
|
550 |
self._component += self.__get_component_instance(i)
|
551 |
|
|
|
|
|
|
|
|
|
|
|
|
|
552 |
def __get_component_instance(self, inputs: gr.Row | gr.Column) -> list:
|
553 |
-
# print(inputs, " class instance")
|
554 |
res = []
|
555 |
-
# print(*inputs.children)
|
556 |
for i in inputs.children:
|
557 |
# print(i,hasattr(i,"children"))
|
558 |
if not hasattr(i, "children"):
|
559 |
# res.append(gr.components.get_component_instance(i,render=True))
|
560 |
-
res += [gr.components.get_component_instance(i
|
561 |
# print(i)
|
562 |
-
|
563 |
-
# print(*i.children)
|
564 |
res += self.__get_component_instance(i)
|
565 |
# res=[gr.components.get_component_instance(i, render=True) for i in inputs.children if not hasattr(i, "children")]
|
566 |
-
# print(res,"__ result")
|
567 |
# print(res)
|
568 |
return res
|
569 |
-
# return [gr.components.get_component_instance(i, render=True) for i in inputs.children if not hasattr(i, "children")]
|
570 |
|
571 |
def add(self, *args):
|
572 |
print(args, type(args))
|
|
|
58 |
a function to each component in the context
|
59 |
to build an array of ffmpeg commands"""
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
def __init__(self, *inputs: gr.Row | gr.Column) -> None:
|
62 |
"""
|
63 |
Parameters:
|
|
|
66 |
|
67 |
self.output_dict = {"vf": {}, "af": {}}
|
68 |
self.formatoutputdict = {"vf": {}, "af": {}}
|
|
|
|
|
69 |
|
70 |
self._component: List[Component] = []
|
71 |
self.vf, self.af, self.extra = ([] for _ in range(3))
|
|
|
74 |
return None
|
75 |
for i in inputs:
|
76 |
self._component += self._get_component_instance(i)
|
|
|
|
|
77 |
# for comp in self._component:
|
78 |
# state = gr.State()
|
79 |
# if comp.label is not None:
|
|
|
82 |
# self.changefunc(state.value, comp.value)
|
83 |
# comp.change(fn=self.changefunc, inputs=[state, comp], outputs=[])
|
84 |
|
85 |
+
def __call__(self, *args, **kwds):
|
86 |
+
return [i.value for i in self._component]
|
87 |
+
|
88 |
+
def setup_listener(self, *inputs, **kwds):
|
89 |
+
"""
|
90 |
+
Sets up listeners for component updates in the current instance.
|
91 |
+
|
92 |
+
"""
|
93 |
+
for comp in self._component:
|
94 |
+
if comp.label is not None:
|
95 |
+
# self.changefunc(comp, comp.value)
|
96 |
+
# print(
|
97 |
+
# comp.label,
|
98 |
+
# comp,
|
99 |
+
# )
|
100 |
+
state = gr.State(value=comp.label)
|
101 |
+
comp.change(fn=self.changefunc, inputs=[state, comp], outputs=[])
|
102 |
+
|
103 |
+
def reset(self):
|
104 |
+
self.output_dict = {"vf": {}, "af": {}}
|
105 |
+
self.commands = ""
|
106 |
+
self.vf, self.af, self.extra = ([] for _ in range(3))
|
107 |
+
|
108 |
def changefunc(self, component_label: str | None, new_value=""):
|
109 |
label, *_ = (
|
110 |
component_label.strip(": \n").lower().split()
|
|
|
224 |
if not hasattr(i, "children"):
|
225 |
# res.append(gr.components.get_component_instance(i,render=True))
|
226 |
# if isinstance(i, gr.components.Component):
|
227 |
+
res += [gr.components.get_component_instance(i)]
|
|
|
|
|
|
|
228 |
else:
|
|
|
229 |
res += self._get_component_instance(i)
|
230 |
# print(res)
|
231 |
return res
|
|
|
232 |
|
233 |
def set_video_filters(self, options):
|
234 |
value = self.output_dict.get(options, "-")
|
|
|
334 |
self.build()
|
335 |
|
336 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
def media_change(option: str, state) -> List[Component]:
|
338 |
"""
|
339 |
Allows playing the media in various options,
|
|
|
356 |
return [chosen(ops), chosen(ops2), chosen(ops3)]
|
357 |
|
358 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
"""Helper Functions for Processing """
|
360 |
|
361 |
|
|
|
445 |
print(choice, " now choice")
|
446 |
if choice == "Enabled":
|
447 |
return [
|
|
|
|
|
448 |
gr.Textbox(
|
449 |
label="Start Time:", placeholder="00:00", visible=True, value="00:00"
|
450 |
),
|
|
|
465 |
# return gr.update(value=file.name)
|
466 |
|
467 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
468 |
class Clear(CommandBuilder):
|
469 |
"""Class for clearing components in layouts"""
|
470 |
|
|
|
|
|
|
|
|
|
|
|
|
|
471 |
def __init__(self, *input_component: gr.Row | gr.Column) -> None:
|
472 |
"""
|
473 |
Parameters:
|
|
|
480 |
# self._component += super()._get_component_instance(i)
|
481 |
self._component += self.__get_component_instance(i)
|
482 |
|
483 |
+
def __call__(self, *args, **kwds):
|
484 |
+
return self._component
|
485 |
+
|
486 |
+
def __str__(self):
|
487 |
+
return f"{self._component} __clear__ class"
|
488 |
+
|
489 |
def __get_component_instance(self, inputs: gr.Row | gr.Column) -> list:
|
|
|
490 |
res = []
|
|
|
491 |
for i in inputs.children:
|
492 |
# print(i,hasattr(i,"children"))
|
493 |
if not hasattr(i, "children"):
|
494 |
# res.append(gr.components.get_component_instance(i,render=True))
|
495 |
+
res += [gr.components.get_component_instance(i)]
|
496 |
# print(i)
|
497 |
+
else:
|
|
|
498 |
res += self.__get_component_instance(i)
|
499 |
# res=[gr.components.get_component_instance(i, render=True) for i in inputs.children if not hasattr(i, "children")]
|
|
|
500 |
# print(res)
|
501 |
return res
|
|
|
502 |
|
503 |
def add(self, *args):
|
504 |
print(args, type(args))
|