RVC-MAKER / main /app /app.py
NeoPy's picture
new colab links
efe64a3 verified
raw
history blame
15.1 kB
import os
import sys
import torch
import shutil
import librosa
import logging
import requests
import subprocess
import numpy as np
import gradio as gr
import soundfile as sf
from time import sleep
from multiprocessing import cpu_count
sys.path.append(os.getcwd())
from main.app.tabs.inference.inference import inference_tabs
from main.app.tabs.models.model import model_tabs
from main.app.tabs.utils.utils import utils_tabs
from main.tools import huggingface
from main.configs.config import Config
from main.app.based.utils import *
with gr.Blocks(title="Ultimate RVC Maker ⚡", theme=theme) as app:
gr.HTML("<h1 style='text-align: center;'>Ultimate RVC Maker ⚡</h1>")
gr.Markdown(
f"""
If you liked this HF Space you can give me a ❤️
Try Ultimate RVC Maker WebUI using Colab [here](https://colab.research.google.com/github/TheNeodev/Notebook/blob/main/RVC-MAKER.ipynb)
"""
)
with gr.Tabs():
with gr.TabItem("Inference"):
inference_tabs()
with gr.TabItem("Model Options"):
model_tabs()
with gr.TabItem(translations["separator_tab"], visible=configs.get("separator_tab", True)):
gr.Markdown(f"## {translations['separator_tab']}")
with gr.Row():
gr.Markdown(translations["4_part"])
with gr.Row():
with gr.Column():
with gr.Group():
with gr.Row(equal_height=True):
cleaner = gr.Checkbox(label=translations["clear_audio"], value=False, interactive=True, min_width=140)
backing = gr.Checkbox(label=translations["separator_backing"], value=False, interactive=True, min_width=140)
reverb = gr.Checkbox(label=translations["dereveb_audio"], value=False, interactive=True, min_width=140)
backing_reverb = gr.Checkbox(label=translations["dereveb_backing"], value=False, interactive=False, min_width=140)
denoise = gr.Checkbox(label=translations["denoise_mdx"], value=False, interactive=False, min_width=140)
with gr.Row(equal_height=True):
separator_model = gr.Dropdown(label=translations["separator_model"], value=uvr_model[0], choices=uvr_model, interactive=True)
separator_backing_model = gr.Dropdown(label=translations["separator_backing_model"], value="Version-1", choices=["Version-1", "Version-2"], interactive=True, visible=backing.value)
with gr.Row():
with gr.Column():
with gr.Group():
with gr.Row(equal_height=True):
shifts = gr.Slider(label=translations["shift"], info=translations["shift_info"], minimum=1, maximum=20, value=2, step=1, interactive=True)
segment_size = gr.Slider(label=translations["segments_size"], info=translations["segments_size_info"], minimum=32, maximum=3072, value=256, step=32, interactive=True)
with gr.Row():
mdx_batch_size = gr.Slider(label=translations["batch_size"], info=translations["mdx_batch_size_info"], minimum=1, maximum=64, value=1, step=1, interactive=True, visible=backing.value or reverb.value or separator_model.value in mdx_model)
with gr.Column():
with gr.Group():
with gr.Row():
overlap = gr.Radio(label=translations["overlap"], info=translations["overlap_info"], choices=["0.25", "0.5", "0.75", "0.99"], value="0.25", interactive=True)
with gr.Row():
mdx_hop_length = gr.Slider(label="Hop length", info=translations["hop_length_info"], minimum=1, maximum=8192, value=1024, step=1, interactive=True, visible=backing.value or reverb.value or separator_model.value in mdx_model)
with gr.Column():
with gr.Row():
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)
sample_rate1 = gr.Slider(minimum=8000, maximum=96000, step=1, value=44100, label=translations["sr"], info=translations["sr_info"], interactive=True)
input = gr.File(label=translations["drop_audio"], file_types=[".wav", ".mp3", ".flac", ".ogg", ".opus", ".m4a", ".mp4", ".aac", ".alac", ".wma", ".aiff", ".webm", ".ac3"])
audio_input = gr.Audio(show_download_button=True, interactive=False, label=translations["input_audio"])
with gr.Column():
with gr.Accordion(translations["use_url"], open=False):
url = gr.Textbox(label=translations["url_audio"], value="", placeholder="https://www.youtube.com/...", scale=6)
download_button = gr.Button(translations["downloads"])
with gr.Column():
with gr.Accordion(translations["input_output"], open=False):
format = 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)
input_audio = gr.Dropdown(label=translations["audio_path"], value="", choices=paths_for_files, allow_custom_value=True, interactive=True)
refesh_separator = gr.Button(translations["refesh"])
output_separator = gr.Textbox(label=translations["output_folder"], value="audios", placeholder="audios", info=translations["output_folder_info"], interactive=True)
separator_button = gr.Button(translations["separator_tab"], variant="primary")
with gr.Row():
gr.Markdown(translations["output_separator"])
with gr.Row():
instruments_audio = gr.Audio(show_download_button=True, interactive=False, label=translations["instruments"])
original_vocals = gr.Audio(show_download_button=True, interactive=False, label=translations["original_vocal"])
main_vocals = gr.Audio(show_download_button=True, interactive=False, label=translations["main_vocal"], visible=backing.value)
backing_vocals = gr.Audio(show_download_button=True, interactive=False, label=translations["backing_vocal"], visible=backing.value)
with gr.Row():
separator_model.change(fn=lambda a, b, c: [visible(a or b or c in mdx_model), visible(a or b or c in mdx_model), valueFalse_interactive(a or b or c in mdx_model), visible(c not in mdx_model)], inputs=[backing, reverb, separator_model], outputs=[mdx_batch_size, mdx_hop_length, denoise, shifts])
backing.change(fn=lambda a, b, c: [visible(a or b or c in mdx_model), visible(a or b or c in mdx_model), valueFalse_interactive(a or b or c in mdx_model), visible(a), visible(a), visible(a), valueFalse_interactive(a and b)], inputs=[backing, reverb, separator_model], outputs=[mdx_batch_size, mdx_hop_length, denoise, separator_backing_model, main_vocals, backing_vocals, backing_reverb])
reverb.change(fn=lambda a, b, c: [visible(a or b or c in mdx_model), visible(a or b or c in mdx_model), valueFalse_interactive(a or b or c in mdx_model), valueFalse_interactive(a and b)], inputs=[backing, reverb, separator_model], outputs=[mdx_batch_size, mdx_hop_length, denoise, backing_reverb])
with gr.Row():
input_audio.change(fn=lambda audio: audio if os.path.isfile(audio) else None, inputs=[input_audio], outputs=[audio_input])
cleaner.change(fn=visible, inputs=[cleaner], outputs=[clean_strength])
with gr.Row():
input.upload(fn=lambda audio_in: shutil.move(audio_in.name, os.path.join("audios")), inputs=[input], outputs=[input_audio])
refesh_separator.click(fn=change_audios_choices, inputs=[input_audio], outputs=[input_audio])
with gr.Row():
download_button.click(
fn=download_url,
inputs=[url],
outputs=[input_audio, audio_input, url],
api_name='download_url'
)
separator_button.click(
fn=separator_music,
inputs=[
input_audio,
output_separator,
format,
shifts,
segment_size,
overlap,
cleaner,
clean_strength,
denoise,
separator_model,
separator_backing_model,
backing,
reverb,
backing_reverb,
mdx_hop_length,
mdx_batch_size,
sample_rate1
],
outputs=[original_vocals, instruments_audio, main_vocals, backing_vocals],
api_name='separator_music'
)
utils_tabs()
with gr.TabItem(translations["settings"], visible=configs.get("settings_tab", True)):
gr.Markdown(translations["settings_markdown"])
with gr.Row():
gr.Markdown(translations["settings_markdown_2"])
with gr.Row():
toggle_button = gr.Button(translations["change_light_dark"], variant="secondary", scale=2)
with gr.Row():
with gr.Column():
language_dropdown = gr.Dropdown(label=translations["lang"], interactive=True, info=translations["lang_restart"], choices=configs.get("support_language", "vi-VN"), value=language)
change_lang = gr.Button(translations["change_lang"], variant="primary", scale=2)
with gr.Column():
theme_dropdown = gr.Dropdown(label=translations["theme"], interactive=True, info=translations["theme_restart"], choices=configs.get("themes", theme), value=theme, allow_custom_value=True)
changetheme = gr.Button(translations["theme_button"], variant="primary", scale=2)
with gr.Row():
with gr.Column():
fp_choice = gr.Radio(choices=["fp16","fp32"], value="fp16" if configs.get("fp16", False) else "fp32", label=translations["precision"], info=translations["precision_info"], interactive=True)
fp_button = gr.Button(translations["update_precision"], variant="secondary", scale=2)
with gr.Column():
font_choice = gr.Textbox(label=translations["font"], info=translations["font_info"], value=font, interactive=True)
font_button = gr.Button(translations["change_font"])
with gr.Row():
with gr.Column():
with gr.Accordion(translations["stop"], open=False):
separate_stop = gr.Button(translations["stop_separate"])
convert_stop = gr.Button(translations["stop_convert"])
create_dataset_stop = gr.Button(translations["stop_create_dataset"])
audioldm2_stop = gr.Button(translations["stop_audioldm2"])
with gr.Accordion(translations["stop_training"], open=False):
model_name_stop = gr.Textbox(label=translations["modelname"], info=translations["training_model_name"], value="", placeholder=translations["modelname"], interactive=True)
preprocess_stop = gr.Button(translations["stop_preprocess"])
extract_stop = gr.Button(translations["stop_extract"])
train_stop = gr.Button(translations["stop_training"])
with gr.Row():
toggle_button.click(fn=None, js="() => {document.body.classList.toggle('dark')}")
fp_button.click(fn=change_fp, inputs=[fp_choice], outputs=[fp_choice])
with gr.Row():
change_lang.click(fn=change_language, inputs=[language_dropdown], outputs=[])
changetheme.click(fn=change_theme, inputs=[theme_dropdown], outputs=[])
font_button.click(fn=change_font, inputs=[font_choice], outputs=[])
with gr.Row():
change_lang.click(fn=None, js="setTimeout(function() {location.reload()}, 15000)", inputs=[], outputs=[])
changetheme.click(fn=None, js="setTimeout(function() {location.reload()}, 15000)", inputs=[], outputs=[])
font_button.click(fn=None, js="setTimeout(function() {location.reload()}, 15000)", inputs=[], outputs=[])
with gr.Row():
separate_stop.click(fn=lambda: stop_pid("separate_pid", None, False), inputs=[], outputs=[])
convert_stop.click(fn=lambda: stop_pid("convert_pid", None, False), inputs=[], outputs=[])
create_dataset_stop.click(fn=lambda: stop_pid("create_dataset_pid", None, False), inputs=[], outputs=[])
with gr.Row():
preprocess_stop.click(fn=lambda model_name_stop: stop_pid("preprocess_pid", model_name_stop, False), inputs=[model_name_stop], outputs=[])
extract_stop.click(fn=lambda model_name_stop: stop_pid("extract_pid", model_name_stop, False), inputs=[model_name_stop], outputs=[])
train_stop.click(fn=lambda model_name_stop: stop_pid("train_pid", model_name_stop, True), inputs=[model_name_stop], outputs=[])
with gr.Row():
audioldm2_stop.click(fn=lambda: stop_pid("audioldm2_pid", None, False), inputs=[], outputs=[])
with gr.Row():
gr.Markdown(translations["terms_of_use"])
gr.Markdown(translations["exemption"])
logger.info(translations["start_app"])
logger.info(translations["set_lang"].format(lang=language))
port = configs.get("app_port", 7860)
for i in range(configs.get("num_of_restart", 5)):
try:
app.queue().launch(
favicon_path=os.path.join("assets", "ico.png"),
server_name=configs.get("server_name", "0.0.0.0"),
server_port=port,
show_error=configs.get("app_show_error", False),
inbrowser="--open" in sys.argv,
share="--share" in sys.argv,
allowed_paths=allow_disk
)
break
except OSError:
logger.debug(translations["port"].format(port=port))
port -= 1
except Exception as e:
logger.error(translations["error_occurred"].format(e=e))
sys.exit(1)