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." ) else: file_name = format_title(os.path.basename(dropbox)) if ".pth" in dropbox: model_name = file_name.split(".pth")[0] elif ".index" in dropbox: if "v1" in dropbox: model_name = ( file_name.split("_nprobe_1_")[1].split("_v1")[0].split(".index")[0] ) elif "v2" in dropbox: model_name = ( file_name.split("_nprobe_1_")[1].split("_v2")[0].split(".index")[0] ) else: model_name = file_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 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_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], )