Spaces:
Running
Running
Update main/app/app.py
Browse files- main/app/app.py +244 -239
main/app/app.py
CHANGED
@@ -74,6 +74,7 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
74 |
with gr.Accordion(translations["use_url"], open=False):
|
75 |
url = gr.Textbox(label=translations["url_audio"], value="", placeholder="https://www.youtube.com/...", scale=6)
|
76 |
download_button = gr.Button(translations["downloads"])
|
|
|
77 |
with gr.Column():
|
78 |
with gr.Row():
|
79 |
clean_strength = gr.Slider(label=translations["clean_strength"], info=translations["clean_strength_info"], minimum=0, maximum=1, value=0.5, step=0.1, interactive=True, visible=cleaner.value)
|
@@ -147,6 +148,7 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
147 |
model_index = gr.Dropdown(label=translations["index_path"], choices=index_path, value=index_path[0] if len(index_path) >= 1 else "", interactive=True, allow_custom_value=True)
|
148 |
refesh = gr.Button(translations["refesh"])
|
149 |
|
|
|
150 |
with gr.Row():
|
151 |
with gr.Column():
|
152 |
audio_select = gr.Dropdown(label=translations["select_separate"], choices=[], value="", interactive=True, allow_custom_value=True, visible=False)
|
@@ -432,149 +434,112 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
432 |
api_name="convert_audio"
|
433 |
)
|
434 |
|
435 |
-
|
436 |
-
|
|
|
437 |
with gr.Row():
|
438 |
-
gr.Markdown(translations["
|
439 |
with gr.Row():
|
440 |
-
with gr.
|
441 |
-
with gr.
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
formant_shifting2 = gr.Checkbox(label=translations["formantshift"], value=False, interactive=True)
|
447 |
with gr.Row():
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
with gr.Row():
|
453 |
-
with gr.
|
454 |
-
with gr.
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
refesh2 = gr.Button(translations["refesh"])
|
460 |
-
with gr.Row():
|
461 |
-
pitch3 = gr.Slider(minimum=-20, maximum=20, step=1, info=translations["pitch_info"], label=translations["pitch"], value=0, interactive=True)
|
462 |
-
index_strength2 = gr.Slider(label=translations["index_strength"], info=translations["index_strength_info"], minimum=0, maximum=1, value=0.5, step=0.01, interactive=True, visible=model_index2.value != "")
|
463 |
-
with gr.Accordion(translations["input_output"], open=False):
|
464 |
-
with gr.Column():
|
465 |
-
export_format2 = gr.Radio(label=translations["export_format"], info=translations["export_info"], choices=["wav", "mp3", "flac", "ogg", "opus", "m4a", "mp4", "aac", "alac", "wma", "aiff", "webm", "ac3"], value="wav", interactive=True)
|
466 |
-
input_audio1 = gr.Dropdown(label=translations["audio_path"], value="", choices=paths_for_files, info=translations["provide_audio"], allow_custom_value=True, interactive=True)
|
467 |
-
output_audio2 = gr.Textbox(label=translations["output_path"], value="audios/output.wav", placeholder="audios/output.wav", info=translations["output_path_info"], interactive=True)
|
468 |
-
with gr.Column():
|
469 |
-
refesh4 = gr.Button(translations["refesh"])
|
470 |
-
with gr.Row():
|
471 |
-
input2 = gr.File(label=translations["drop_audio"], file_types=[".wav", ".mp3", ".flac", ".ogg", ".opus", ".m4a", ".mp4", ".aac", ".alac", ".wma", ".aiff", ".webm", ".ac3"])
|
472 |
-
with gr.Column():
|
473 |
-
with gr.Accordion(translations["model_accordion"] + " 2", open=True):
|
474 |
-
with gr.Row():
|
475 |
-
model_pth3 = gr.Dropdown(label=translations["model_name"], choices=model_name, value=model_name[0] if len(model_name) >= 1 else "", interactive=True, allow_custom_value=True)
|
476 |
-
model_index3 = gr.Dropdown(label=translations["index_path"], choices=index_path, value=index_path[0] if len(index_path) >= 1 else "", interactive=True, allow_custom_value=True)
|
477 |
-
with gr.Row():
|
478 |
-
refesh3 = gr.Button(translations["refesh"])
|
479 |
-
with gr.Row():
|
480 |
-
pitch4 = gr.Slider(minimum=-20, maximum=20, step=1, info=translations["pitch_info"], label=translations["pitch"], value=0, interactive=True)
|
481 |
-
index_strength3 = gr.Slider(label=translations["index_strength"], info=translations["index_strength_info"], minimum=0, maximum=1, value=0.5, step=0.01, interactive=True, visible=model_index3.value != "")
|
482 |
-
with gr.Accordion(translations["setting"], open=False):
|
483 |
-
with gr.Row():
|
484 |
-
model_size = gr.Radio(label=translations["model_size"], info=translations["model_size_info"], choices=["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3", "large-v3-turbo"], value="medium", interactive=True)
|
485 |
-
with gr.Accordion(translations["f0_method"], open=False):
|
486 |
-
with gr.Group():
|
487 |
-
with gr.Row():
|
488 |
-
onnx_f0_mode4 = gr.Checkbox(label=translations["f0_onnx_mode"], info=translations["f0_onnx_mode_info"], value=False, interactive=True)
|
489 |
-
unlock_full_method2 = gr.Checkbox(label=translations["f0_unlock"], info=translations["f0_unlock_info"], value=False, interactive=True)
|
490 |
-
method3 = gr.Radio(label=translations["f0_method"], info=translations["f0_method_info"], choices=method_f0+["hybrid"], value="rmvpe", interactive=True)
|
491 |
-
hybrid_method3 = gr.Dropdown(label=translations["f0_method_hybrid"], info=translations["f0_method_hybrid_info"], choices=["hybrid[pm+dio]", "hybrid[pm+crepe-tiny]", "hybrid[pm+crepe]", "hybrid[pm+fcpe]", "hybrid[pm+rmvpe]", "hybrid[pm+harvest]", "hybrid[pm+yin]", "hybrid[dio+crepe-tiny]", "hybrid[dio+crepe]", "hybrid[dio+fcpe]", "hybrid[dio+rmvpe]", "hybrid[dio+harvest]", "hybrid[dio+yin]", "hybrid[crepe-tiny+crepe]", "hybrid[crepe-tiny+fcpe]", "hybrid[crepe-tiny+rmvpe]", "hybrid[crepe-tiny+harvest]", "hybrid[crepe+fcpe]", "hybrid[crepe+rmvpe]", "hybrid[crepe+harvest]", "hybrid[crepe+yin]", "hybrid[fcpe+rmvpe]", "hybrid[fcpe+harvest]", "hybrid[fcpe+yin]", "hybrid[rmvpe+harvest]", "hybrid[rmvpe+yin]", "hybrid[harvest+yin]"], value="hybrid[pm+dio]", interactive=True, allow_custom_value=True, visible=method3.value == "hybrid")
|
492 |
-
hop_length3 = gr.Slider(label="Hop length", info=translations["hop_length_info"], minimum=1, maximum=512, value=128, step=1, interactive=True, visible=False)
|
493 |
-
with gr.Accordion(translations["hubert_model"], open=False):
|
494 |
-
embed_mode3 = gr.Radio(label=translations["embed_mode"], info=translations["embed_mode_info"], value="fairseq", choices=embedders_mode, interactive=True, visible=True)
|
495 |
-
embedders3 = gr.Radio(label=translations["hubert_model"], info=translations["hubert_info"], choices=embedders_model, value="hubert_base", interactive=True)
|
496 |
-
custom_embedders3 = gr.Textbox(label=translations["modelname"], info=translations["modelname_info"], value="", placeholder="hubert_base", interactive=True, visible=embedders3.value == "custom")
|
497 |
-
with gr.Column():
|
498 |
-
clean_strength3 = gr.Slider(label=translations["clean_strength"], info=translations["clean_strength_info"], minimum=0, maximum=1, value=0.5, step=0.1, interactive=True, visible=cleaner2.value)
|
499 |
-
f0_autotune_strength3 = gr.Slider(minimum=0, maximum=1, label=translations["autotune_rate"], info=translations["autotune_rate_info"], value=1, step=0.1, interactive=True, visible=autotune.value)
|
500 |
-
resample_sr3 = gr.Slider(minimum=0, maximum=96000, label=translations["resample"], info=translations["resample_info"], value=0, step=1, interactive=True)
|
501 |
-
filter_radius3 = gr.Slider(minimum=0, maximum=7, label=translations["filter_radius"], info=translations["filter_radius_info"], value=3, step=1, interactive=True)
|
502 |
-
volume_envelope3 = gr.Slider(minimum=0, maximum=1, label=translations["volume_envelope"], info=translations["volume_envelope_info"], value=1, step=0.1, interactive=True)
|
503 |
-
protect3 = gr.Slider(minimum=0, maximum=1, label=translations["protect"], info=translations["protect_info"], value=0.5, step=0.01, interactive=True)
|
504 |
with gr.Row():
|
505 |
-
|
506 |
-
|
|
|
|
|
507 |
with gr.Row():
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
play_audio3 = gr.Audio(show_download_button=True, interactive=False, label=translations["output_file_tts_convert"])
|
515 |
-
with gr.Row():
|
516 |
-
autotune2.change(fn=visible, inputs=[autotune2], outputs=[f0_autotune_strength3])
|
517 |
-
cleaner2.change(fn=visible, inputs=[cleaner2], outputs=[clean_strength3])
|
518 |
-
method3.change(fn=lambda method, hybrid: [visible(method == "hybrid"), hoplength_show(method, hybrid)], inputs=[method3, hybrid_method3], outputs=[hybrid_method3, hop_length3])
|
519 |
-
with gr.Row():
|
520 |
-
hybrid_method3.change(fn=hoplength_show, inputs=[method3, hybrid_method3], outputs=[hop_length3])
|
521 |
-
refesh2.click(fn=change_models_choices, inputs=[], outputs=[model_pth2, model_index2])
|
522 |
-
model_pth2.change(fn=get_index, inputs=[model_pth2], outputs=[model_index2])
|
523 |
with gr.Row():
|
524 |
-
|
525 |
-
|
526 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
527 |
with gr.Row():
|
528 |
-
|
529 |
-
|
530 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
531 |
with gr.Row():
|
532 |
-
|
533 |
-
|
534 |
-
model_index3.change(fn=index_strength_show, inputs=[model_index3], outputs=[index_strength3])
|
535 |
with gr.Row():
|
536 |
-
|
537 |
-
|
538 |
-
convert_button3.click(
|
539 |
-
fn=convert_with_whisper,
|
540 |
inputs=[
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
clean_strength3,
|
545 |
-
autotune2,
|
546 |
-
f0_autotune_strength3,
|
547 |
-
checkpointing2,
|
548 |
-
model_pth2,
|
549 |
-
model_pth3,
|
550 |
-
model_index2,
|
551 |
-
model_index3,
|
552 |
-
pitch3,
|
553 |
-
pitch4,
|
554 |
-
index_strength2,
|
555 |
-
index_strength3,
|
556 |
-
export_format2,
|
557 |
-
input_audio1,
|
558 |
-
output_audio2,
|
559 |
-
onnx_f0_mode4,
|
560 |
-
method3,
|
561 |
-
hybrid_method3,
|
562 |
-
hop_length3,
|
563 |
-
embed_mode3,
|
564 |
-
embedders3,
|
565 |
-
custom_embedders3,
|
566 |
-
resample_sr3,
|
567 |
-
filter_radius3,
|
568 |
-
volume_envelope3,
|
569 |
-
protect3,
|
570 |
-
formant_shifting2,
|
571 |
-
formant_qfrency3,
|
572 |
-
formant_timbre3,
|
573 |
-
formant_qfrency4,
|
574 |
-
formant_timbre4,
|
575 |
],
|
576 |
-
outputs=[
|
577 |
-
api_name="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
)
|
579 |
|
580 |
with gr.TabItem(translations["convert_text"], visible=configs.get("tts_tab", True)):
|
@@ -723,113 +688,7 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
723 |
api_name="convert_tts"
|
724 |
)
|
725 |
|
726 |
-
|
727 |
-
gr.Markdown(translations["download_markdown"])
|
728 |
-
with gr.Row():
|
729 |
-
gr.Markdown(translations["download_markdown_2"])
|
730 |
-
with gr.Row():
|
731 |
-
with gr.Accordion(translations["model_download"], open=True):
|
732 |
-
with gr.Row():
|
733 |
-
downloadmodel = gr.Radio(label=translations["model_download_select"], choices=[translations["download_url"], translations["download_from_csv"], translations["search_models"], translations["upload"]], interactive=True, value=translations["download_url"])
|
734 |
-
with gr.Row():
|
735 |
-
gr.Markdown("___")
|
736 |
-
with gr.Column():
|
737 |
-
with gr.Row():
|
738 |
-
url_input = gr.Textbox(label=translations["model_url"], value="", placeholder="https://...", scale=6)
|
739 |
-
download_model_name = gr.Textbox(label=translations["modelname"], value="", placeholder=translations["modelname"], scale=2)
|
740 |
-
url_download = gr.Button(value=translations["downloads"], scale=2)
|
741 |
-
with gr.Column():
|
742 |
-
model_browser = gr.Dropdown(choices=models.keys(), label=translations["model_warehouse"], scale=8, allow_custom_value=True, visible=False)
|
743 |
-
download_from_browser = gr.Button(value=translations["get_model"], scale=2, variant="primary", visible=False)
|
744 |
-
with gr.Column():
|
745 |
-
search_name = gr.Textbox(label=translations["name_to_search"], placeholder=translations["modelname"], interactive=True, scale=8, visible=False)
|
746 |
-
search = gr.Button(translations["search_2"], scale=2, visible=False)
|
747 |
-
search_dropdown = gr.Dropdown(label=translations["select_download_model"], value="", choices=[], allow_custom_value=True, interactive=False, visible=False)
|
748 |
-
download = gr.Button(translations["downloads"], variant="primary", visible=False)
|
749 |
-
with gr.Column():
|
750 |
-
model_upload = gr.File(label=translations["drop_model"], file_types=[".pth", ".onnx", ".index", ".zip"], visible=False)
|
751 |
-
with gr.Row():
|
752 |
-
with gr.Accordion(translations["download_pretrained_2"], open=False):
|
753 |
-
with gr.Row():
|
754 |
-
pretrain_download_choices = gr.Radio(label=translations["model_download_select"], choices=[translations["download_url"], translations["list_model"], translations["upload"]], value=translations["download_url"], interactive=True)
|
755 |
-
with gr.Row():
|
756 |
-
gr.Markdown("___")
|
757 |
-
with gr.Column():
|
758 |
-
with gr.Row():
|
759 |
-
pretrainD = gr.Textbox(label=translations["pretrained_url"].format(dg="D"), value="", info=translations["only_huggingface"], placeholder="https://...", interactive=True, scale=4)
|
760 |
-
pretrainG = gr.Textbox(label=translations["pretrained_url"].format(dg="G"), value="", info=translations["only_huggingface"], placeholder="https://...", interactive=True, scale=4)
|
761 |
-
download_pretrain_button = gr.Button(translations["downloads"], scale=2)
|
762 |
-
with gr.Column():
|
763 |
-
with gr.Row():
|
764 |
-
pretrain_choices = gr.Dropdown(label=translations["select_pretrain"], info=translations["select_pretrain_info"], choices=list(fetch_pretrained_data().keys()), value="Titan_Medium", allow_custom_value=True, interactive=True, scale=6, visible=False)
|
765 |
-
sample_rate_pretrain = gr.Dropdown(label=translations["pretrain_sr"], info=translations["pretrain_sr"], choices=["48k", "40k", "32k"], value="48k", interactive=True, visible=False)
|
766 |
-
download_pretrain_choices_button = gr.Button(translations["downloads"], scale=2, variant="primary", visible=False)
|
767 |
-
with gr.Row():
|
768 |
-
pretrain_upload_g = gr.File(label=translations["drop_pretrain"].format(dg="G"), file_types=[".pth"], visible=False)
|
769 |
-
pretrain_upload_d = gr.File(label=translations["drop_pretrain"].format(dg="D"), file_types=[".pth"], visible=False)
|
770 |
-
with gr.Row():
|
771 |
-
url_download.click(
|
772 |
-
fn=download_model,
|
773 |
-
inputs=[
|
774 |
-
url_input,
|
775 |
-
download_model_name
|
776 |
-
],
|
777 |
-
outputs=[url_input],
|
778 |
-
api_name="download_model"
|
779 |
-
)
|
780 |
-
download_from_browser.click(
|
781 |
-
fn=lambda model: download_model(models[model], model),
|
782 |
-
inputs=[model_browser],
|
783 |
-
outputs=[model_browser],
|
784 |
-
api_name="download_browser"
|
785 |
-
)
|
786 |
-
with gr.Row():
|
787 |
-
downloadmodel.change(fn=change_download_choices, inputs=[downloadmodel], outputs=[url_input, download_model_name, url_download, model_browser, download_from_browser, search_name, search, search_dropdown, download, model_upload])
|
788 |
-
search.click(fn=search_models, inputs=[search_name], outputs=[search_dropdown, download])
|
789 |
-
model_upload.upload(fn=save_drop_model, inputs=[model_upload], outputs=[model_upload])
|
790 |
-
download.click(
|
791 |
-
fn=lambda model: download_model(model_options[model], model),
|
792 |
-
inputs=[search_dropdown],
|
793 |
-
outputs=[search_dropdown],
|
794 |
-
api_name="search_models"
|
795 |
-
)
|
796 |
-
with gr.Row():
|
797 |
-
pretrain_download_choices.change(fn=change_download_pretrained_choices, inputs=[pretrain_download_choices], outputs=[pretrainD, pretrainG, download_pretrain_button, pretrain_choices, sample_rate_pretrain, download_pretrain_choices_button, pretrain_upload_d, pretrain_upload_g])
|
798 |
-
pretrain_choices.change(fn=update_sample_rate_dropdown, inputs=[pretrain_choices], outputs=[sample_rate_pretrain])
|
799 |
-
with gr.Row():
|
800 |
-
download_pretrain_button.click(
|
801 |
-
fn=download_pretrained_model,
|
802 |
-
inputs=[
|
803 |
-
pretrain_download_choices,
|
804 |
-
pretrainD,
|
805 |
-
pretrainG
|
806 |
-
],
|
807 |
-
outputs=[pretrainD],
|
808 |
-
api_name="download_pretrain_link"
|
809 |
-
)
|
810 |
-
download_pretrain_choices_button.click(
|
811 |
-
fn=download_pretrained_model,
|
812 |
-
inputs=[
|
813 |
-
pretrain_download_choices,
|
814 |
-
pretrain_choices,
|
815 |
-
sample_rate_pretrain
|
816 |
-
],
|
817 |
-
outputs=[pretrain_choices],
|
818 |
-
api_name="download_pretrain_choices"
|
819 |
-
)
|
820 |
-
pretrain_upload_g.upload(
|
821 |
-
fn=lambda pretrain_upload_g: shutil.move(pretrain_upload_g.name, os.path.join("assets", "models", "pretrained_custom")),
|
822 |
-
inputs=[pretrain_upload_g],
|
823 |
-
outputs=[],
|
824 |
-
api_name="upload_pretrain_g"
|
825 |
-
)
|
826 |
-
pretrain_upload_d.upload(
|
827 |
-
fn=lambda pretrain_upload_d: shutil.move(pretrain_upload_d.name, os.path.join("assets", "models", "pretrained_custom")),
|
828 |
-
inputs=[pretrain_upload_d],
|
829 |
-
outputs=[],
|
830 |
-
api_name="upload_pretrain_d"
|
831 |
-
)
|
832 |
-
|
833 |
with gr.TabItem(translations["training_model"], visible=configs.get("training_tab", True)):
|
834 |
gr.Markdown(f"## {translations['training_model']}")
|
835 |
with gr.Row():
|
@@ -1041,6 +900,152 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
1041 |
api_name="training_model"
|
1042 |
)
|
1043 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1044 |
with gr.TabItem(translations["audio_editing"], visible=configs.get("audioldm2", True)):
|
1045 |
gr.Markdown(translations["audio_editing_info"])
|
1046 |
with gr.Row():
|
@@ -1537,7 +1542,7 @@ with gr.Blocks(title=" Ultimate RVC Maker ⚡", theme=theme) as app:
|
|
1537 |
|
1538 |
with gr.Row():
|
1539 |
gr.Markdown(translations["terms_of_use"])
|
1540 |
-
|
1541 |
gr.Markdown(translations["exemption"])
|
1542 |
|
1543 |
logger.info(translations["start_app"])
|
|
|
74 |
with gr.Accordion(translations["use_url"], open=False):
|
75 |
url = gr.Textbox(label=translations["url_audio"], value="", placeholder="https://www.youtube.com/...", scale=6)
|
76 |
download_button = gr.Button(translations["downloads"])
|
77 |
+
with gr.Row():
|
78 |
with gr.Column():
|
79 |
with gr.Row():
|
80 |
clean_strength = gr.Slider(label=translations["clean_strength"], info=translations["clean_strength_info"], minimum=0, maximum=1, value=0.5, step=0.1, interactive=True, visible=cleaner.value)
|
|
|
148 |
model_index = gr.Dropdown(label=translations["index_path"], choices=index_path, value=index_path[0] if len(index_path) >= 1 else "", interactive=True, allow_custom_value=True)
|
149 |
refesh = gr.Button(translations["refesh"])
|
150 |
|
151 |
+
|
152 |
with gr.Row():
|
153 |
with gr.Column():
|
154 |
audio_select = gr.Dropdown(label=translations["select_separate"], choices=[], value="", interactive=True, allow_custom_value=True, visible=False)
|
|
|
434 |
api_name="convert_audio"
|
435 |
)
|
436 |
|
437 |
+
|
438 |
+
with gr.TabItem(translations["downloads"], visible=configs.get("downloads_tab", True)):
|
439 |
+
gr.Markdown(translations["download_markdown"])
|
440 |
with gr.Row():
|
441 |
+
gr.Markdown(translations["download_markdown_2"])
|
442 |
with gr.Row():
|
443 |
+
with gr.Accordion(translations["model_download"], open=True):
|
444 |
+
with gr.Row():
|
445 |
+
downloadmodel = gr.Radio(label=translations["model_download_select"], choices=[translations["download_url"], translations["download_from_csv"], translations["search_models"], translations["upload"]], interactive=True, value=translations["download_url"])
|
446 |
+
with gr.Row():
|
447 |
+
gr.Markdown("___")
|
448 |
+
with gr.Column():
|
|
|
449 |
with gr.Row():
|
450 |
+
url_input = gr.Textbox(label=translations["model_url"], value="", placeholder="https://...", scale=6)
|
451 |
+
download_model_name = gr.Textbox(label=translations["modelname"], value="", placeholder=translations["modelname"], scale=2)
|
452 |
+
url_download = gr.Button(value=translations["downloads"], scale=2)
|
453 |
+
with gr.Column():
|
454 |
+
model_browser = gr.Dropdown(choices=models.keys(), label=translations["model_warehouse"], scale=8, allow_custom_value=True, visible=False)
|
455 |
+
download_from_browser = gr.Button(value=translations["get_model"], scale=2, variant="primary", visible=False)
|
456 |
+
with gr.Column():
|
457 |
+
search_name = gr.Textbox(label=translations["name_to_search"], placeholder=translations["modelname"], interactive=True, scale=8, visible=False)
|
458 |
+
search = gr.Button(translations["search_2"], scale=2, visible=False)
|
459 |
+
search_dropdown = gr.Dropdown(label=translations["select_download_model"], value="", choices=[], allow_custom_value=True, interactive=False, visible=False)
|
460 |
+
download = gr.Button(translations["downloads"], variant="primary", visible=False)
|
461 |
+
with gr.Column():
|
462 |
+
model_upload = gr.File(label=translations["drop_model"], file_types=[".pth", ".onnx", ".index", ".zip"], visible=False)
|
463 |
with gr.Row():
|
464 |
+
with gr.Accordion(translations["download_pretrained_2"], open=False):
|
465 |
+
with gr.Row():
|
466 |
+
pretrain_download_choices = gr.Radio(label=translations["model_download_select"], choices=[translations["download_url"], translations["list_model"], translations["upload"]], value=translations["download_url"], interactive=True)
|
467 |
+
with gr.Row():
|
468 |
+
gr.Markdown("___")
|
469 |
+
with gr.Column():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
470 |
with gr.Row():
|
471 |
+
pretrainD = gr.Textbox(label=translations["pretrained_url"].format(dg="D"), value="", info=translations["only_huggingface"], placeholder="https://...", interactive=True, scale=4)
|
472 |
+
pretrainG = gr.Textbox(label=translations["pretrained_url"].format(dg="G"), value="", info=translations["only_huggingface"], placeholder="https://...", interactive=True, scale=4)
|
473 |
+
download_pretrain_button = gr.Button(translations["downloads"], scale=2)
|
474 |
+
with gr.Column():
|
475 |
with gr.Row():
|
476 |
+
pretrain_choices = gr.Dropdown(label=translations["select_pretrain"], info=translations["select_pretrain_info"], choices=list(fetch_pretrained_data().keys()), value="Titan_Medium", allow_custom_value=True, interactive=True, scale=6, visible=False)
|
477 |
+
sample_rate_pretrain = gr.Dropdown(label=translations["pretrain_sr"], info=translations["pretrain_sr"], choices=["48k", "40k", "32k"], value="48k", interactive=True, visible=False)
|
478 |
+
download_pretrain_choices_button = gr.Button(translations["downloads"], scale=2, variant="primary", visible=False)
|
479 |
+
with gr.Row():
|
480 |
+
pretrain_upload_g = gr.File(label=translations["drop_pretrain"].format(dg="G"), file_types=[".pth"], visible=False)
|
481 |
+
pretrain_upload_d = gr.File(label=translations["drop_pretrain"].format(dg="D"), file_types=[".pth"], visible=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
482 |
with gr.Row():
|
483 |
+
url_download.click(
|
484 |
+
fn=download_model,
|
485 |
+
inputs=[
|
486 |
+
url_input,
|
487 |
+
download_model_name
|
488 |
+
],
|
489 |
+
outputs=[url_input],
|
490 |
+
api_name="download_model"
|
491 |
+
)
|
492 |
+
download_from_browser.click(
|
493 |
+
fn=lambda model: download_model(models[model], model),
|
494 |
+
inputs=[model_browser],
|
495 |
+
outputs=[model_browser],
|
496 |
+
api_name="download_browser"
|
497 |
+
)
|
498 |
with gr.Row():
|
499 |
+
downloadmodel.change(fn=change_download_choices, inputs=[downloadmodel], outputs=[url_input, download_model_name, url_download, model_browser, download_from_browser, search_name, search, search_dropdown, download, model_upload])
|
500 |
+
search.click(fn=search_models, inputs=[search_name], outputs=[search_dropdown, download])
|
501 |
+
model_upload.upload(fn=save_drop_model, inputs=[model_upload], outputs=[model_upload])
|
502 |
+
download.click(
|
503 |
+
fn=lambda model: download_model(model_options[model], model),
|
504 |
+
inputs=[search_dropdown],
|
505 |
+
outputs=[search_dropdown],
|
506 |
+
api_name="search_models"
|
507 |
+
)
|
508 |
with gr.Row():
|
509 |
+
pretrain_download_choices.change(fn=change_download_pretrained_choices, inputs=[pretrain_download_choices], outputs=[pretrainD, pretrainG, download_pretrain_button, pretrain_choices, sample_rate_pretrain, download_pretrain_choices_button, pretrain_upload_d, pretrain_upload_g])
|
510 |
+
pretrain_choices.change(fn=update_sample_rate_dropdown, inputs=[pretrain_choices], outputs=[sample_rate_pretrain])
|
|
|
511 |
with gr.Row():
|
512 |
+
download_pretrain_button.click(
|
513 |
+
fn=download_pretrained_model,
|
|
|
|
|
514 |
inputs=[
|
515 |
+
pretrain_download_choices,
|
516 |
+
pretrainD,
|
517 |
+
pretrainG
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
],
|
519 |
+
outputs=[pretrainD],
|
520 |
+
api_name="download_pretrain_link"
|
521 |
+
)
|
522 |
+
download_pretrain_choices_button.click(
|
523 |
+
fn=download_pretrained_model,
|
524 |
+
inputs=[
|
525 |
+
pretrain_download_choices,
|
526 |
+
pretrain_choices,
|
527 |
+
sample_rate_pretrain
|
528 |
+
],
|
529 |
+
outputs=[pretrain_choices],
|
530 |
+
api_name="download_pretrain_choices"
|
531 |
+
)
|
532 |
+
pretrain_upload_g.upload(
|
533 |
+
fn=lambda pretrain_upload_g: shutil.move(pretrain_upload_g.name, os.path.join("assets", "models", "pretrained_custom")),
|
534 |
+
inputs=[pretrain_upload_g],
|
535 |
+
outputs=[],
|
536 |
+
api_name="upload_pretrain_g"
|
537 |
+
)
|
538 |
+
pretrain_upload_d.upload(
|
539 |
+
fn=lambda pretrain_upload_d: shutil.move(pretrain_upload_d.name, os.path.join("assets", "models", "pretrained_custom")),
|
540 |
+
inputs=[pretrain_upload_d],
|
541 |
+
outputs=[],
|
542 |
+
api_name="upload_pretrain_d"
|
543 |
)
|
544 |
|
545 |
with gr.TabItem(translations["convert_text"], visible=configs.get("tts_tab", True)):
|
|
|
688 |
api_name="convert_tts"
|
689 |
)
|
690 |
|
691 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
with gr.TabItem(translations["training_model"], visible=configs.get("training_tab", True)):
|
693 |
gr.Markdown(f"## {translations['training_model']}")
|
694 |
with gr.Row():
|
|
|
900 |
api_name="training_model"
|
901 |
)
|
902 |
|
903 |
+
with gr.TabItem(translations["convert_with_whisper"], visible=configs.get("convert_with_whisper", True)):
|
904 |
+
gr.Markdown(f"## {translations['convert_with_whisper']}")
|
905 |
+
with gr.Row():
|
906 |
+
gr.Markdown(translations["convert_with_whisper_info"])
|
907 |
+
with gr.Row():
|
908 |
+
with gr.Column():
|
909 |
+
with gr.Group():
|
910 |
+
with gr.Row():
|
911 |
+
cleaner2 = gr.Checkbox(label=translations["clear_audio"], value=False, interactive=True)
|
912 |
+
autotune2 = gr.Checkbox(label=translations["autotune"], value=False, interactive=True)
|
913 |
+
checkpointing2 = gr.Checkbox(label=translations["memory_efficient_training"], value=False, interactive=True)
|
914 |
+
formant_shifting2 = gr.Checkbox(label=translations["formantshift"], value=False, interactive=True)
|
915 |
+
with gr.Row():
|
916 |
+
num_spk = gr.Slider(minimum=2, maximum=8, step=1, info=translations["num_spk_info"], label=translations["num_spk"], value=2, interactive=True)
|
917 |
+
with gr.Row():
|
918 |
+
with gr.Column():
|
919 |
+
convert_button3 = gr.Button(translations["convert_audio"], variant="primary")
|
920 |
+
with gr.Row():
|
921 |
+
with gr.Column():
|
922 |
+
with gr.Accordion(translations["model_accordion"] + " 1", open=True):
|
923 |
+
with gr.Row():
|
924 |
+
model_pth2 = gr.Dropdown(label=translations["model_name"], choices=model_name, value=model_name[0] if len(model_name) >= 1 else "", interactive=True, allow_custom_value=True)
|
925 |
+
model_index2 = gr.Dropdown(label=translations["index_path"], choices=index_path, value=index_path[0] if len(index_path) >= 1 else "", interactive=True, allow_custom_value=True)
|
926 |
+
with gr.Row():
|
927 |
+
refesh2 = gr.Button(translations["refesh"])
|
928 |
+
with gr.Row():
|
929 |
+
pitch3 = gr.Slider(minimum=-20, maximum=20, step=1, info=translations["pitch_info"], label=translations["pitch"], value=0, interactive=True)
|
930 |
+
index_strength2 = gr.Slider(label=translations["index_strength"], info=translations["index_strength_info"], minimum=0, maximum=1, value=0.5, step=0.01, interactive=True, visible=model_index2.value != "")
|
931 |
+
with gr.Accordion(translations["input_output"], open=False):
|
932 |
+
with gr.Column():
|
933 |
+
export_format2 = gr.Radio(label=translations["export_format"], info=translations["export_info"], choices=["wav", "mp3", "flac", "ogg", "opus", "m4a", "mp4", "aac", "alac", "wma", "aiff", "webm", "ac3"], value="wav", interactive=True)
|
934 |
+
input_audio1 = gr.Dropdown(label=translations["audio_path"], value="", choices=paths_for_files, info=translations["provide_audio"], allow_custom_value=True, interactive=True)
|
935 |
+
output_audio2 = gr.Textbox(label=translations["output_path"], value="audios/output.wav", placeholder="audios/output.wav", info=translations["output_path_info"], interactive=True)
|
936 |
+
with gr.Column():
|
937 |
+
refesh4 = gr.Button(translations["refesh"])
|
938 |
+
with gr.Row():
|
939 |
+
input2 = gr.File(label=translations["drop_audio"], file_types=[".wav", ".mp3", ".flac", ".ogg", ".opus", ".m4a", ".mp4", ".aac", ".alac", ".wma", ".aiff", ".webm", ".ac3"])
|
940 |
+
with gr.Column():
|
941 |
+
with gr.Accordion(translations["model_accordion"] + " 2", open=True):
|
942 |
+
with gr.Row():
|
943 |
+
model_pth3 = gr.Dropdown(label=translations["model_name"], choices=model_name, value=model_name[0] if len(model_name) >= 1 else "", interactive=True, allow_custom_value=True)
|
944 |
+
model_index3 = gr.Dropdown(label=translations["index_path"], choices=index_path, value=index_path[0] if len(index_path) >= 1 else "", interactive=True, allow_custom_value=True)
|
945 |
+
with gr.Row():
|
946 |
+
refesh3 = gr.Button(translations["refesh"])
|
947 |
+
with gr.Row():
|
948 |
+
pitch4 = gr.Slider(minimum=-20, maximum=20, step=1, info=translations["pitch_info"], label=translations["pitch"], value=0, interactive=True)
|
949 |
+
index_strength3 = gr.Slider(label=translations["index_strength"], info=translations["index_strength_info"], minimum=0, maximum=1, value=0.5, step=0.01, interactive=True, visible=model_index3.value != "")
|
950 |
+
with gr.Accordion(translations["setting"], open=False):
|
951 |
+
with gr.Row():
|
952 |
+
model_size = gr.Radio(label=translations["model_size"], info=translations["model_size_info"], choices=["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large-v1", "large-v2", "large-v3", "large-v3-turbo"], value="medium", interactive=True)
|
953 |
+
with gr.Accordion(translations["f0_method"], open=False):
|
954 |
+
with gr.Group():
|
955 |
+
with gr.Row():
|
956 |
+
onnx_f0_mode4 = gr.Checkbox(label=translations["f0_onnx_mode"], info=translations["f0_onnx_mode_info"], value=False, interactive=True)
|
957 |
+
unlock_full_method2 = gr.Checkbox(label=translations["f0_unlock"], info=translations["f0_unlock_info"], value=False, interactive=True)
|
958 |
+
method3 = gr.Radio(label=translations["f0_method"], info=translations["f0_method_info"], choices=method_f0+["hybrid"], value="rmvpe", interactive=True)
|
959 |
+
hybrid_method3 = gr.Dropdown(label=translations["f0_method_hybrid"], info=translations["f0_method_hybrid_info"], choices=["hybrid[pm+dio]", "hybrid[pm+crepe-tiny]", "hybrid[pm+crepe]", "hybrid[pm+fcpe]", "hybrid[pm+rmvpe]", "hybrid[pm+harvest]", "hybrid[pm+yin]", "hybrid[dio+crepe-tiny]", "hybrid[dio+crepe]", "hybrid[dio+fcpe]", "hybrid[dio+rmvpe]", "hybrid[dio+harvest]", "hybrid[dio+yin]", "hybrid[crepe-tiny+crepe]", "hybrid[crepe-tiny+fcpe]", "hybrid[crepe-tiny+rmvpe]", "hybrid[crepe-tiny+harvest]", "hybrid[crepe+fcpe]", "hybrid[crepe+rmvpe]", "hybrid[crepe+harvest]", "hybrid[crepe+yin]", "hybrid[fcpe+rmvpe]", "hybrid[fcpe+harvest]", "hybrid[fcpe+yin]", "hybrid[rmvpe+harvest]", "hybrid[rmvpe+yin]", "hybrid[harvest+yin]"], value="hybrid[pm+dio]", interactive=True, allow_custom_value=True, visible=method3.value == "hybrid")
|
960 |
+
hop_length3 = gr.Slider(label="Hop length", info=translations["hop_length_info"], minimum=1, maximum=512, value=128, step=1, interactive=True, visible=False)
|
961 |
+
with gr.Accordion(translations["hubert_model"], open=False):
|
962 |
+
embed_mode3 = gr.Radio(label=translations["embed_mode"], info=translations["embed_mode_info"], value="fairseq", choices=embedders_mode, interactive=True, visible=True)
|
963 |
+
embedders3 = gr.Radio(label=translations["hubert_model"], info=translations["hubert_info"], choices=embedders_model, value="hubert_base", interactive=True)
|
964 |
+
custom_embedders3 = gr.Textbox(label=translations["modelname"], info=translations["modelname_info"], value="", placeholder="hubert_base", interactive=True, visible=embedders3.value == "custom")
|
965 |
+
with gr.Column():
|
966 |
+
clean_strength3 = gr.Slider(label=translations["clean_strength"], info=translations["clean_strength_info"], minimum=0, maximum=1, value=0.5, step=0.1, interactive=True, visible=cleaner2.value)
|
967 |
+
f0_autotune_strength3 = gr.Slider(minimum=0, maximum=1, label=translations["autotune_rate"], info=translations["autotune_rate_info"], value=1, step=0.1, interactive=True, visible=autotune.value)
|
968 |
+
resample_sr3 = gr.Slider(minimum=0, maximum=96000, label=translations["resample"], info=translations["resample_info"], value=0, step=1, interactive=True)
|
969 |
+
filter_radius3 = gr.Slider(minimum=0, maximum=7, label=translations["filter_radius"], info=translations["filter_radius_info"], value=3, step=1, interactive=True)
|
970 |
+
volume_envelope3 = gr.Slider(minimum=0, maximum=1, label=translations["volume_envelope"], info=translations["volume_envelope_info"], value=1, step=0.1, interactive=True)
|
971 |
+
protect3 = gr.Slider(minimum=0, maximum=1, label=translations["protect"], info=translations["protect_info"], value=0.5, step=0.01, interactive=True)
|
972 |
+
with gr.Row():
|
973 |
+
formant_qfrency3 = gr.Slider(value=1.0, label=translations["formant_qfrency"] + " 1", info=translations["formant_qfrency"], minimum=0.0, maximum=16.0, step=0.1, interactive=True, visible=False)
|
974 |
+
formant_timbre3 = gr.Slider(value=1.0, label=translations["formant_timbre"] + " 1", info=translations["formant_timbre"], minimum=0.0, maximum=16.0, step=0.1, interactive=True, visible=False)
|
975 |
+
with gr.Row():
|
976 |
+
formant_qfrency4 = gr.Slider(value=1.0, label=translations["formant_qfrency"] + " 2", info=translations["formant_qfrency"], minimum=0.0, maximum=16.0, step=0.1, interactive=True, visible=False)
|
977 |
+
formant_timbre4 = gr.Slider(value=1.0, label=translations["formant_timbre"] + " 2", info=translations["formant_timbre"], minimum=0.0, maximum=16.0, step=0.1, interactive=True, visible=False)
|
978 |
+
with gr.Row():
|
979 |
+
gr.Markdown(translations["input_output"])
|
980 |
+
with gr.Row():
|
981 |
+
play_audio2 = gr.Audio(show_download_button=True, interactive=False, label=translations["input_audio"])
|
982 |
+
play_audio3 = gr.Audio(show_download_button=True, interactive=False, label=translations["output_file_tts_convert"])
|
983 |
+
with gr.Row():
|
984 |
+
autotune2.change(fn=visible, inputs=[autotune2], outputs=[f0_autotune_strength3])
|
985 |
+
cleaner2.change(fn=visible, inputs=[cleaner2], outputs=[clean_strength3])
|
986 |
+
method3.change(fn=lambda method, hybrid: [visible(method == "hybrid"), hoplength_show(method, hybrid)], inputs=[method3, hybrid_method3], outputs=[hybrid_method3, hop_length3])
|
987 |
+
with gr.Row():
|
988 |
+
hybrid_method3.change(fn=hoplength_show, inputs=[method3, hybrid_method3], outputs=[hop_length3])
|
989 |
+
refesh2.click(fn=change_models_choices, inputs=[], outputs=[model_pth2, model_index2])
|
990 |
+
model_pth2.change(fn=get_index, inputs=[model_pth2], outputs=[model_index2])
|
991 |
+
with gr.Row():
|
992 |
+
refesh3.click(fn=change_models_choices, inputs=[], outputs=[model_pth3, model_index3])
|
993 |
+
model_pth3.change(fn=get_index, inputs=[model_pth3], outputs=[model_index3])
|
994 |
+
input2.upload(fn=lambda audio_in: shutil.move(audio_in.name, os.path.join("audios")), inputs=[input2], outputs=[input_audio1])
|
995 |
+
with gr.Row():
|
996 |
+
input_audio1.change(fn=lambda audio: audio if os.path.isfile(audio) else None, inputs=[input_audio1], outputs=[play_audio2])
|
997 |
+
formant_shifting2.change(fn=lambda a: [visible(a)]*4, inputs=[formant_shifting2], outputs=[formant_qfrency3, formant_timbre3, formant_qfrency4, formant_timbre4])
|
998 |
+
embedders3.change(fn=lambda embedders: visible(embedders == "custom"), inputs=[embedders3], outputs=[custom_embedders3])
|
999 |
+
with gr.Row():
|
1000 |
+
refesh4.click(fn=change_audios_choices, inputs=[input_audio1], outputs=[input_audio1])
|
1001 |
+
model_index2.change(fn=index_strength_show, inputs=[model_index2], outputs=[index_strength2])
|
1002 |
+
model_index3.change(fn=index_strength_show, inputs=[model_index3], outputs=[index_strength3])
|
1003 |
+
with gr.Row():
|
1004 |
+
unlock_full_method2.change(fn=unlock_f0, inputs=[unlock_full_method2], outputs=[method3])
|
1005 |
+
embed_mode3.change(fn=visible_embedders, inputs=[embed_mode3], outputs=[embedders3])
|
1006 |
+
convert_button3.click(
|
1007 |
+
fn=convert_with_whisper,
|
1008 |
+
inputs=[
|
1009 |
+
num_spk,
|
1010 |
+
model_size,
|
1011 |
+
cleaner2,
|
1012 |
+
clean_strength3,
|
1013 |
+
autotune2,
|
1014 |
+
f0_autotune_strength3,
|
1015 |
+
checkpointing2,
|
1016 |
+
model_pth2,
|
1017 |
+
model_pth3,
|
1018 |
+
model_index2,
|
1019 |
+
model_index3,
|
1020 |
+
pitch3,
|
1021 |
+
pitch4,
|
1022 |
+
index_strength2,
|
1023 |
+
index_strength3,
|
1024 |
+
export_format2,
|
1025 |
+
input_audio1,
|
1026 |
+
output_audio2,
|
1027 |
+
onnx_f0_mode4,
|
1028 |
+
method3,
|
1029 |
+
hybrid_method3,
|
1030 |
+
hop_length3,
|
1031 |
+
embed_mode3,
|
1032 |
+
embedders3,
|
1033 |
+
custom_embedders3,
|
1034 |
+
resample_sr3,
|
1035 |
+
filter_radius3,
|
1036 |
+
volume_envelope3,
|
1037 |
+
protect3,
|
1038 |
+
formant_shifting2,
|
1039 |
+
formant_qfrency3,
|
1040 |
+
formant_timbre3,
|
1041 |
+
formant_qfrency4,
|
1042 |
+
formant_timbre4,
|
1043 |
+
],
|
1044 |
+
outputs=[play_audio3],
|
1045 |
+
api_name="convert_with_whisper"
|
1046 |
+
)
|
1047 |
+
|
1048 |
+
|
1049 |
with gr.TabItem(translations["audio_editing"], visible=configs.get("audioldm2", True)):
|
1050 |
gr.Markdown(translations["audio_editing_info"])
|
1051 |
with gr.Row():
|
|
|
1542 |
|
1543 |
with gr.Row():
|
1544 |
gr.Markdown(translations["terms_of_use"])
|
1545 |
+
|
1546 |
gr.Markdown(translations["exemption"])
|
1547 |
|
1548 |
logger.info(translations["start_app"])
|