Spaces:
Running
on
T4
Running
on
T4
Add Waveform Animation and Video orientation options
Browse files
app.py
CHANGED
@@ -134,6 +134,12 @@ def git_tag():
|
|
134 |
except Exception:
|
135 |
return "<none>"
|
136 |
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
def load_melody_filepath(melody_filepath, title, assigned_model,topp, temperature, cfg_coef, segment_length = 30):
|
138 |
# get melody filename
|
139 |
#$Union[str, os.PathLike]
|
@@ -169,7 +175,7 @@ def load_melody_filepath(melody_filepath, title, assigned_model,topp, temperatur
|
|
169 |
|
170 |
return gr.update(value=melody_name), gr.update(maximum=MAX_PROMPT_INDEX, value=-1), gr.update(value=assigned_model, interactive=True), gr.update(value=topp), gr.update(value=temperature), gr.update(value=cfg_coef), gr.update(maximum=MAX_OVERLAP)
|
171 |
|
172 |
-
def predict(model, text, melody_filepath, duration, dimension, topk, topp, temperature, cfg_coef, background, title, settings_font, settings_font_color, seed, overlap=1, prompt_index = 0, include_title = True, include_settings = True, harmony_only = False, profile = gr.OAuthProfile, segment_length = 30, settings_font_size=28, progress=gr.Progress(track_tqdm=True)):
|
173 |
global MODEL, INTERRUPTED, INTERRUPTING, MOVE_TO_CPU
|
174 |
output_segments = None
|
175 |
melody_name = "Not Used"
|
@@ -323,16 +329,20 @@ def predict(model, text, melody_filepath, duration, dimension, topk, topp, tempe
|
|
323 |
return None, None, seed
|
324 |
else:
|
325 |
output = output.detach().cpu().float()[0]
|
|
|
|
|
|
|
|
|
326 |
|
327 |
title_file_name = convert_title_to_filename(title)
|
328 |
with NamedTemporaryFile("wb", suffix=".wav", delete=False, prefix=title_file_name) as file:
|
329 |
video_description = f"{text}\n Duration: {str(initial_duration)} Dimension: {dimension}\n Top-k:{topk} Top-p:{topp}\n Randomness:{temperature}\n cfg:{cfg_coef} overlap: {overlap}\n Seed: {seed}\n Model: {model}\n Melody Condition:{melody_name}\n Sample Segment: {prompt_index}"
|
330 |
if include_settings or include_title:
|
331 |
-
background = add_settings_to_image(title if include_title else "",video_description if include_settings else "",background_path=background,font=settings_font,font_color=settings_font_color, font_size=settings_font_size)
|
332 |
audio_write(
|
333 |
file.name, output, MODEL.sample_rate, strategy="loudness",
|
334 |
loudness_headroom_db=18, loudness_compressor=True, add_suffix=False, channels=2)
|
335 |
-
waveform_video_path = get_waveform(file.name, bg_image=background, bar_count=45, name=title_file_name, animate=
|
336 |
# Remove the extension from file.name
|
337 |
file_name_without_extension = os.path.splitext(file.name)[0]
|
338 |
# Get the directory, filename, name, extension, and new extension of the waveform video path
|
@@ -352,8 +362,8 @@ def predict(model, text, melody_filepath, duration, dimension, topk, topp, tempe
|
|
352 |
"negative_prompt": "",
|
353 |
"Seed": seed,
|
354 |
"steps": 1,
|
355 |
-
"
|
356 |
-
"
|
357 |
"Dimension": dimension,
|
358 |
"Top-k": topk,
|
359 |
"Top-p": topp,
|
@@ -483,11 +493,13 @@ def ui(**kwargs):
|
|
483 |
with gr.Column():
|
484 |
include_title = gr.Checkbox(label="Add Title", value=True, interactive=True,key="add_title")
|
485 |
include_settings = gr.Checkbox(label="Add Settings to background", value=True, interactive=True, key="add_settings")
|
|
|
486 |
with gr.Row():
|
487 |
title = gr.Textbox(label="Title", value="UnlimitedMusicGen", interactive=True, key="song_title")
|
488 |
settings_font = gr.Text(label="Settings Font", value="./assets/arial.ttf", interactive=True)
|
489 |
settings_font_color = gr.ColorPicker(label="Settings Font Color", value="#c87f05", interactive=True, key="settings_font_color")
|
490 |
settings_font_size = gr.Slider(minimum=8, maximum=64, value=28, step=1, label="Settings Font Size", interactive=True, key="settings_font_size")
|
|
|
491 |
with gr.Accordion("Expert", open=False):
|
492 |
with gr.Row():
|
493 |
segment_length = gr.Slider(minimum=10, maximum=30, value=30, step=1,label="Music Generation Segment Length (s)", interactive=True,key="segment_length")
|
@@ -507,7 +519,8 @@ def ui(**kwargs):
|
|
507 |
wave_file = gr.File(label=".wav file", elem_id="output_wavefile", interactive=True)
|
508 |
seed_used = gr.Number(label='Seed used', value=-1, interactive=False)
|
509 |
|
510 |
-
radio.change(toggle_audio_src, radio, [melody_filepath], queue=False, show_progress=False)
|
|
|
511 |
melody_filepath.change(load_melody_filepath, inputs=[melody_filepath, title, model,topp, temperature, cfg_coef, segment_length], outputs=[title, prompt_index , model, topp, temperature, cfg_coef, overlap], api_name="melody_filepath_change", queue=False)
|
512 |
reuse_seed.click(fn=lambda x: x, inputs=[seed_used], outputs=[seed], queue=False, api_name="reuse_seed_click")
|
513 |
autoplay_cb.change(fn=lambda x: gr.update(autoplay=x), inputs=[autoplay_cb], outputs=[output], queue=False, api_name="autoplay_cb_change")
|
@@ -582,7 +595,7 @@ def ui(**kwargs):
|
|
582 |
api_name="submit"
|
583 |
).then(
|
584 |
predict,
|
585 |
-
inputs=[model, text,melody_filepath, duration, dimension, topk, topp, temperature, cfg_coef, background, title, settings_font, settings_font_color, seed, overlap, prompt_index, include_title, include_settings, harmony_only, user_profile, segment_length, settings_font_size],
|
586 |
outputs=[output, wave_file, seed_used], scroll_to_output=True)
|
587 |
|
588 |
# Show the interface
|
|
|
134 |
except Exception:
|
135 |
return "<none>"
|
136 |
|
137 |
+
def load_background_filepath(video_orientation):
|
138 |
+
if video_orientation == "Landscape":
|
139 |
+
return "./assets/background.png"
|
140 |
+
else:
|
141 |
+
return "./assets/background_portrait.png"
|
142 |
+
|
143 |
def load_melody_filepath(melody_filepath, title, assigned_model,topp, temperature, cfg_coef, segment_length = 30):
|
144 |
# get melody filename
|
145 |
#$Union[str, os.PathLike]
|
|
|
175 |
|
176 |
return gr.update(value=melody_name), gr.update(maximum=MAX_PROMPT_INDEX, value=-1), gr.update(value=assigned_model, interactive=True), gr.update(value=topp), gr.update(value=temperature), gr.update(value=cfg_coef), gr.update(maximum=MAX_OVERLAP)
|
177 |
|
178 |
+
def predict(model, text, melody_filepath, duration, dimension, topk, topp, temperature, cfg_coef, background, title, settings_font, settings_font_color, seed, overlap=1, prompt_index = 0, include_title = True, include_settings = True, harmony_only = False, profile = gr.OAuthProfile, segment_length = 30, settings_font_size=28, settings_animate_waveform=False, video_orientation="Landscape", progress=gr.Progress(track_tqdm=True)):
|
179 |
global MODEL, INTERRUPTED, INTERRUPTING, MOVE_TO_CPU
|
180 |
output_segments = None
|
181 |
melody_name = "Not Used"
|
|
|
329 |
return None, None, seed
|
330 |
else:
|
331 |
output = output.detach().cpu().float()[0]
|
332 |
+
|
333 |
+
video_width, video_height = 768, 512
|
334 |
+
if video_orientation == "Portait":
|
335 |
+
video_width, video_height = 512, 768
|
336 |
|
337 |
title_file_name = convert_title_to_filename(title)
|
338 |
with NamedTemporaryFile("wb", suffix=".wav", delete=False, prefix=title_file_name) as file:
|
339 |
video_description = f"{text}\n Duration: {str(initial_duration)} Dimension: {dimension}\n Top-k:{topk} Top-p:{topp}\n Randomness:{temperature}\n cfg:{cfg_coef} overlap: {overlap}\n Seed: {seed}\n Model: {model}\n Melody Condition:{melody_name}\n Sample Segment: {prompt_index}"
|
340 |
if include_settings or include_title:
|
341 |
+
background = add_settings_to_image(title if include_title else "",video_description if include_settings else "",width=video_width, height=video_height, background_path=background,font=settings_font,font_color=settings_font_color, font_size=settings_font_size)
|
342 |
audio_write(
|
343 |
file.name, output, MODEL.sample_rate, strategy="loudness",
|
344 |
loudness_headroom_db=18, loudness_compressor=True, add_suffix=False, channels=2)
|
345 |
+
waveform_video_path = get_waveform(file.name, bg_image=background, bar_count=45, name=title_file_name, animate=settings_animate_waveform, progress=gr.Progress(track_tqdm=True))
|
346 |
# Remove the extension from file.name
|
347 |
file_name_without_extension = os.path.splitext(file.name)[0]
|
348 |
# Get the directory, filename, name, extension, and new extension of the waveform video path
|
|
|
362 |
"negative_prompt": "",
|
363 |
"Seed": seed,
|
364 |
"steps": 1,
|
365 |
+
"wdth": video_width,
|
366 |
+
"hght": video_height,
|
367 |
"Dimension": dimension,
|
368 |
"Top-k": topk,
|
369 |
"Top-p": topp,
|
|
|
493 |
with gr.Column():
|
494 |
include_title = gr.Checkbox(label="Add Title", value=True, interactive=True,key="add_title")
|
495 |
include_settings = gr.Checkbox(label="Add Settings to background", value=True, interactive=True, key="add_settings")
|
496 |
+
video_orientation = gr.Radio(label="Video Orientation", choices=["Landscape", "Portait"], value="Landscape", interactive=True, key="video_orientation")
|
497 |
with gr.Row():
|
498 |
title = gr.Textbox(label="Title", value="UnlimitedMusicGen", interactive=True, key="song_title")
|
499 |
settings_font = gr.Text(label="Settings Font", value="./assets/arial.ttf", interactive=True)
|
500 |
settings_font_color = gr.ColorPicker(label="Settings Font Color", value="#c87f05", interactive=True, key="settings_font_color")
|
501 |
settings_font_size = gr.Slider(minimum=8, maximum=64, value=28, step=1, label="Settings Font Size", interactive=True, key="settings_font_size")
|
502 |
+
settings_animate_waveform = gr.Checkbox(label="Animate Waveform", value=False, interactive=True, key="animate_waveform")
|
503 |
with gr.Accordion("Expert", open=False):
|
504 |
with gr.Row():
|
505 |
segment_length = gr.Slider(minimum=10, maximum=30, value=30, step=1,label="Music Generation Segment Length (s)", interactive=True,key="segment_length")
|
|
|
519 |
wave_file = gr.File(label=".wav file", elem_id="output_wavefile", interactive=True)
|
520 |
seed_used = gr.Number(label='Seed used', value=-1, interactive=False)
|
521 |
|
522 |
+
radio.change(toggle_audio_src, radio, [melody_filepath], queue=False, show_progress=False, api_name="audio_src_change")
|
523 |
+
video_orientation.change(load_background_filepath, inputs=[video_orientation], outputs=[background], queue=False, show_progress=False, api_name="video_orientation_change")
|
524 |
melody_filepath.change(load_melody_filepath, inputs=[melody_filepath, title, model,topp, temperature, cfg_coef, segment_length], outputs=[title, prompt_index , model, topp, temperature, cfg_coef, overlap], api_name="melody_filepath_change", queue=False)
|
525 |
reuse_seed.click(fn=lambda x: x, inputs=[seed_used], outputs=[seed], queue=False, api_name="reuse_seed_click")
|
526 |
autoplay_cb.change(fn=lambda x: gr.update(autoplay=x), inputs=[autoplay_cb], outputs=[output], queue=False, api_name="autoplay_cb_change")
|
|
|
595 |
api_name="submit"
|
596 |
).then(
|
597 |
predict,
|
598 |
+
inputs=[model, text,melody_filepath, duration, dimension, topk, topp, temperature, cfg_coef, background, title, settings_font, settings_font_color, seed, overlap, prompt_index, include_title, include_settings, harmony_only, user_profile, segment_length, settings_font_size, settings_animate_waveform, video_orientation],
|
599 |
outputs=[output, wave_file, seed_used], scroll_to_output=True)
|
600 |
|
601 |
# Show the interface
|