Spaces:
Paused
Paused
| import os | |
| import sys | |
| import json | |
| import shutil | |
| import requests | |
| import tempfile | |
| import gradio as gr | |
| import pandas as pd | |
| from concurrent.futures import ThreadPoolExecutor | |
| from tqdm import tqdm | |
| now_dir = os.getcwd() | |
| sys.path.append(now_dir) | |
| from core import run_download_script | |
| from rvc.lib.utils import format_title | |
| from assets.i18n.i18n import I18nAuto | |
| i18n = I18nAuto() | |
| gradio_temp_dir = os.path.join(tempfile.gettempdir(), "gradio") | |
| if os.path.exists(gradio_temp_dir): | |
| shutil.rmtree(gradio_temp_dir) | |
| def save_drop_model(dropbox): | |
| if "pth" not in dropbox and "index" not in dropbox: | |
| raise gr.Error( | |
| message="The file you dropped is not a valid model file. Please try again." | |
| ) | |
| file_name = format_title(os.path.basename(dropbox)) | |
| model_name = file_name | |
| if ".pth" in model_name: | |
| model_name = model_name.split(".pth")[0] | |
| elif ".index" in model_name: | |
| replacements = ["nprobe_1_", "_v1", "_v2", "added_"] | |
| for rep in replacements: | |
| model_name = model_name.replace(rep, "") | |
| model_name = model_name.split(".index")[0] | |
| model_path = os.path.join(now_dir, "logs", model_name) | |
| if not os.path.exists(model_path): | |
| os.makedirs(model_path) | |
| if os.path.exists(os.path.join(model_path, file_name)): | |
| os.remove(os.path.join(model_path, file_name)) | |
| shutil.move(dropbox, os.path.join(model_path, file_name)) | |
| print(f"{file_name} saved in {model_path}") | |
| gr.Info(f"{file_name} saved in {model_path}") | |
| return None | |
| json_url = "https://huggingface.co/IAHispano/Applio/raw/main/pretrains.json" | |
| def fetch_pretrained_data(): | |
| pretraineds_custom_path = os.path.join( | |
| "rvc", "models", "pretraineds", "pretraineds_custom" | |
| ) | |
| os.makedirs(pretraineds_custom_path, exist_ok=True) | |
| try: | |
| with open( | |
| os.path.join(pretraineds_custom_path, json_url.split("/")[-1]), "r" | |
| ) as f: | |
| data = json.load(f) | |
| except: | |
| try: | |
| response = requests.get(json_url) | |
| response.raise_for_status() | |
| data = response.json() | |
| with open( | |
| os.path.join(pretraineds_custom_path, json_url.split("/")[-1]), | |
| "w", | |
| encoding="utf-8", | |
| ) as f: | |
| json.dump( | |
| data, | |
| f, | |
| indent=2, | |
| separators=(",", ": "), | |
| ensure_ascii=False, | |
| ) | |
| except: | |
| data = { | |
| "Titan": { | |
| "32k": {"D": "null", "G": "null"}, | |
| }, | |
| } | |
| return data | |
| def get_pretrained_list(): | |
| data = fetch_pretrained_data() | |
| return list(data.keys()) | |
| def get_pretrained_sample_rates(model): | |
| data = fetch_pretrained_data() | |
| return list(data[model].keys()) | |
| def get_file_size(url): | |
| response = requests.head(url) | |
| return int(response.headers.get("content-length", 0)) | |
| def download_file(url, destination_path, progress_bar): | |
| os.makedirs(os.path.dirname(destination_path), exist_ok=True) | |
| response = requests.get(url, stream=True) | |
| block_size = 1024 | |
| with open(destination_path, "wb") as file: | |
| for data in response.iter_content(block_size): | |
| file.write(data) | |
| progress_bar.update(len(data)) | |
| def download_pretrained_model(model, sample_rate): | |
| data = fetch_pretrained_data() | |
| paths = data[model][sample_rate] | |
| pretraineds_custom_path = os.path.join( | |
| "rvc", "models", "pretraineds", "pretraineds_custom" | |
| ) | |
| os.makedirs(pretraineds_custom_path, exist_ok=True) | |
| d_url = f"https://huggingface.co/{paths['D']}" | |
| g_url = f"https://huggingface.co/{paths['G']}" | |
| total_size = get_file_size(d_url) + get_file_size(g_url) | |
| gr.Info("Downloading pretrained model...") | |
| with tqdm( | |
| total=total_size, unit="iB", unit_scale=True, desc="Downloading files" | |
| ) as progress_bar: | |
| with ThreadPoolExecutor(max_workers=2) as executor: | |
| futures = [ | |
| executor.submit( | |
| download_file, | |
| d_url, | |
| os.path.join(pretraineds_custom_path, os.path.basename(paths["D"])), | |
| progress_bar, | |
| ), | |
| executor.submit( | |
| download_file, | |
| g_url, | |
| os.path.join(pretraineds_custom_path, os.path.basename(paths["G"])), | |
| progress_bar, | |
| ), | |
| ] | |
| for future in futures: | |
| future.result() | |
| gr.Info("Pretrained model downloaded successfully!") | |
| print("Pretrained model downloaded successfully!") | |
| def update_sample_rate_dropdown(model): | |
| return { | |
| "choices": get_pretrained_sample_rates(model), | |
| "value": get_pretrained_sample_rates(model)[0], | |
| "__type__": "update", | |
| } | |
| def download_tab(): | |
| with gr.Column(): | |
| gr.Markdown(value=i18n("## Download Model")) | |
| model_link = gr.Textbox( | |
| label=i18n("Model Link"), | |
| placeholder=i18n("Introduce the model link"), | |
| interactive=True, | |
| ) | |
| model_download_output_info = gr.Textbox( | |
| label=i18n("Output Information"), | |
| info=i18n("The output information will be displayed here."), | |
| value="", | |
| max_lines=8, | |
| interactive=False, | |
| ) | |
| model_download_button = gr.Button(i18n("Download Model")) | |
| model_download_button.click( | |
| fn=run_download_script, | |
| inputs=[model_link], | |
| outputs=[model_download_output_info], | |
| ) | |
| gr.Markdown(value=i18n("## Drop files")) | |
| dropbox = gr.File( | |
| label=i18n( | |
| "Drag your .pth file and .index file into this space. Drag one and then the other." | |
| ), | |
| type="filepath", | |
| ) | |
| dropbox.upload( | |
| fn=save_drop_model, | |
| inputs=[dropbox], | |
| outputs=[dropbox], | |
| ) | |
| gr.Markdown(value=i18n("## Download Pretrained Models")) | |
| pretrained_model = gr.Dropdown( | |
| label=i18n("Pretrained"), | |
| info=i18n("Select the pretrained model you want to download."), | |
| choices=get_pretrained_list(), | |
| value="Titan", | |
| interactive=True, | |
| ) | |
| pretrained_sample_rate = gr.Dropdown( | |
| label=i18n("Sampling Rate"), | |
| info=i18n("And select the sampling rate."), | |
| choices=get_pretrained_sample_rates(pretrained_model.value), | |
| value="40k", | |
| interactive=True, | |
| allow_custom_value=True, | |
| ) | |
| pretrained_model.change( | |
| update_sample_rate_dropdown, | |
| inputs=[pretrained_model], | |
| outputs=[pretrained_sample_rate], | |
| ) | |
| download_pretrained = gr.Button(i18n("Download")) | |
| download_pretrained.click( | |
| fn=download_pretrained_model, | |
| inputs=[pretrained_model, pretrained_sample_rate], | |
| outputs=[], | |
| ) | |