Spaces:
Running
on
L40S
Running
on
L40S
Update app.py
Browse files
app.py
CHANGED
@@ -516,7 +516,7 @@ character_name_to_yaml = {
|
|
516 |
}
|
517 |
|
518 |
@spaces.GPU(duration=200)
|
519 |
-
def tango(audio_path, character_name, seed, create_graph=False, video_folder_path=None):
|
520 |
os.system("rm -r ./outputs/")
|
521 |
cfg = prepare_all("./configs/gradio.yaml")
|
522 |
cfg.seed = seed
|
@@ -551,7 +551,7 @@ def tango(audio_path, character_name, seed, create_graph=False, video_folder_pat
|
|
551 |
graph_save_path = "./outputs/save_video.pkl"
|
552 |
os.system(f"cd ./SMPLer-X/ && python app.py --video_folder_path .{video_folder_path} --data_save_path .{data_save_path} --json_save_path .{json_save_path} && cd ..")
|
553 |
print(f"cd ./SMPLer-X/ && python app.py --video_folder_path .{video_folder_path} --data_save_path .{data_save_path} --json_save_path .{json_save_path} && cd ..")
|
554 |
-
os.system(f"python ./create_graph.py --json_save_path {json_save_path} --graph_save_path {graph_save_path}")
|
555 |
cfg.data.test_meta_paths = json_save_path
|
556 |
gc.collect()
|
557 |
torch.cuda.empty_cache()
|
@@ -609,7 +609,7 @@ examples_video = [
|
|
609 |
]
|
610 |
|
611 |
combined_examples = [
|
612 |
-
["./datasets/cached_audio/example_female_voice_9_seconds.wav", "./datasets/cached_audio/female_test_V1.mp4", 2024],
|
613 |
# ["./datasets/cached_audio/example_female_voice_9_seconds.wav", "./datasets/cached_audio/101099-00_18_09-00_18_19.mp4", 2024],
|
614 |
]
|
615 |
|
@@ -664,10 +664,12 @@ def make_demo():
|
|
664 |
with gr.Row():
|
665 |
gr.Markdown(
|
666 |
"""
|
667 |
-
<div style="display: flex; justify-content: center; align-items: center; text-align:
|
|
|
|
|
668 |
This is an open-source project supported by Hugging Face's free L40S GPU. Runtime is limited, so it operates in low-quality mode. Some generated results from high-quality mode are shown above.
|
669 |
<br>
|
670 |
-
|
671 |
<br>
|
672 |
[10/15]: Add watermark, fix bugs on custom character by downgrades to py3.9, fix bugs to support audio less than 4s.
|
673 |
<br>
|
@@ -716,7 +718,7 @@ def make_demo():
|
|
716 |
with gr.Row():
|
717 |
with gr.Column(scale=1):
|
718 |
audio_input = gr.Audio(label="Upload your audio")
|
719 |
-
seed_input = gr.Number(label="Seed", value=2024, interactive=True)
|
720 |
with gr.Column(scale=2):
|
721 |
gr.Examples(
|
722 |
examples=examples_audio,
|
@@ -727,6 +729,7 @@ def make_demo():
|
|
727 |
)
|
728 |
with gr.Column(scale=1):
|
729 |
video_input = gr.Video(label="Your Character", elem_classes="video")
|
|
|
730 |
with gr.Column(scale=2):
|
731 |
gr.Examples(
|
732 |
examples=examples_video,
|
@@ -735,6 +738,7 @@ def make_demo():
|
|
735 |
label="Character Examples",
|
736 |
cache_examples=False
|
737 |
)
|
|
|
738 |
|
739 |
# Fourth row: Generate video button
|
740 |
with gr.Row():
|
@@ -743,7 +747,7 @@ def make_demo():
|
|
743 |
# Define button click behavior
|
744 |
run_button.click(
|
745 |
fn=tango,
|
746 |
-
inputs=[audio_input, video_input, seed_input],
|
747 |
outputs=[video_output_1, video_output_2, file_output_1, file_output_2]
|
748 |
)
|
749 |
|
@@ -751,7 +755,7 @@ def make_demo():
|
|
751 |
with gr.Column(scale=4):
|
752 |
gr.Examples(
|
753 |
examples=combined_examples,
|
754 |
-
inputs=[audio_input, video_input, seed_input], # Both audio and video as inputs
|
755 |
outputs=[video_output_1, video_output_2, file_output_1, file_output_2],
|
756 |
fn=tango, # Function that processes both audio and video inputs
|
757 |
label="Select Combined Audio and Video Examples (Cached)",
|
|
|
516 |
}
|
517 |
|
518 |
@spaces.GPU(duration=200)
|
519 |
+
def tango(audio_path, character_name, seed, threshold=1.0, create_graph=False, video_folder_path=None):
|
520 |
os.system("rm -r ./outputs/")
|
521 |
cfg = prepare_all("./configs/gradio.yaml")
|
522 |
cfg.seed = seed
|
|
|
551 |
graph_save_path = "./outputs/save_video.pkl"
|
552 |
os.system(f"cd ./SMPLer-X/ && python app.py --video_folder_path .{video_folder_path} --data_save_path .{data_save_path} --json_save_path .{json_save_path} && cd ..")
|
553 |
print(f"cd ./SMPLer-X/ && python app.py --video_folder_path .{video_folder_path} --data_save_path .{data_save_path} --json_save_path .{json_save_path} && cd ..")
|
554 |
+
os.system(f"python ./create_graph.py --json_save_path {json_save_path} --graph_save_path {graph_save_path} --threshold {threshold}")
|
555 |
cfg.data.test_meta_paths = json_save_path
|
556 |
gc.collect()
|
557 |
torch.cuda.empty_cache()
|
|
|
609 |
]
|
610 |
|
611 |
combined_examples = [
|
612 |
+
["./datasets/cached_audio/example_female_voice_9_seconds.wav", "./datasets/cached_audio/female_test_V1.mp4", 2024, 1.0],
|
613 |
# ["./datasets/cached_audio/example_female_voice_9_seconds.wav", "./datasets/cached_audio/101099-00_18_09-00_18_19.mp4", 2024],
|
614 |
]
|
615 |
|
|
|
664 |
with gr.Row():
|
665 |
gr.Markdown(
|
666 |
"""
|
667 |
+
<div style="display: flex; justify-content: center; align-items: center; text-align: left;">
|
668 |
+
News:
|
669 |
+
<br>
|
670 |
This is an open-source project supported by Hugging Face's free L40S GPU. Runtime is limited, so it operates in low-quality mode. Some generated results from high-quality mode are shown above.
|
671 |
<br>
|
672 |
+
[10/19]: Add a parameter to control "smooth" or "jumpy" for custom uploaded video. lower threshold is more smooth but more repeated gestures.
|
673 |
<br>
|
674 |
[10/15]: Add watermark, fix bugs on custom character by downgrades to py3.9, fix bugs to support audio less than 4s.
|
675 |
<br>
|
|
|
718 |
with gr.Row():
|
719 |
with gr.Column(scale=1):
|
720 |
audio_input = gr.Audio(label="Upload your audio")
|
721 |
+
seed_input = gr.Number(label="Random Seed", value=2024, interactive=True)
|
722 |
with gr.Column(scale=2):
|
723 |
gr.Examples(
|
724 |
examples=examples_audio,
|
|
|
729 |
)
|
730 |
with gr.Column(scale=1):
|
731 |
video_input = gr.Video(label="Your Character", elem_classes="video")
|
732 |
+
# threshold_input = gr.Slider(label="Result's Smoothness, lower is more smooth, only effective for custom uploaded videos.", minimum=0.7, maximum=1.0, value=1.0, step=0.01, interactive=True)
|
733 |
with gr.Column(scale=2):
|
734 |
gr.Examples(
|
735 |
examples=examples_video,
|
|
|
738 |
label="Character Examples",
|
739 |
cache_examples=False
|
740 |
)
|
741 |
+
threshold_input = gr.Slider(label="Result's Smoothness, lower is more smooth, only effective for custom uploaded videos.", minimum=0.7, maximum=1.0, value=1.0, step=0.01, interactive=True)
|
742 |
|
743 |
# Fourth row: Generate video button
|
744 |
with gr.Row():
|
|
|
747 |
# Define button click behavior
|
748 |
run_button.click(
|
749 |
fn=tango,
|
750 |
+
inputs=[audio_input, video_input, seed_input, threshold_input],
|
751 |
outputs=[video_output_1, video_output_2, file_output_1, file_output_2]
|
752 |
)
|
753 |
|
|
|
755 |
with gr.Column(scale=4):
|
756 |
gr.Examples(
|
757 |
examples=combined_examples,
|
758 |
+
inputs=[audio_input, video_input, seed_input, threshold_input], # Both audio and video as inputs
|
759 |
outputs=[video_output_1, video_output_2, file_output_1, file_output_2],
|
760 |
fn=tango, # Function that processes both audio and video inputs
|
761 |
label="Select Combined Audio and Video Examples (Cached)",
|