| import subprocess |
| import os |
| import sys |
| import errno |
| import shutil |
| import yt_dlp |
| from mega import Mega |
| import datetime |
| import unicodedata |
| import torch |
| import glob |
| import gradio as gr |
| import gdown |
| import zipfile |
| import traceback |
| import json |
| import requests |
| import wget |
| import ffmpeg |
| import hashlib |
| now_dir = os.getcwd() |
| sys.path.append(now_dir) |
| from unidecode import unidecode |
| import re |
| import time |
| from lib.infer_pack.models_onnx import SynthesizerTrnMsNSFsidM |
| from vc_infer_pipeline import VC |
| from lib.infer_pack.models import ( |
| SynthesizerTrnMs256NSFsid, |
| SynthesizerTrnMs256NSFsid_nono, |
| SynthesizerTrnMs768NSFsid, |
| SynthesizerTrnMs768NSFsid_nono, |
| ) |
| from MDXNet import MDXNetDereverb |
| from config import Config |
| from infer_uvr5 import _audio_pre_, _audio_pre_new |
| from huggingface_hub import HfApi, list_models |
| from huggingface_hub import login |
| from i18n import I18nAuto |
| i18n = I18nAuto() |
| from bs4 import BeautifulSoup |
| from sklearn.cluster import MiniBatchKMeans |
|
|
| config = Config() |
| tmp = os.path.join(now_dir, "TEMP") |
| shutil.rmtree(tmp, ignore_errors=True) |
| os.environ["TEMP"] = tmp |
| weight_root = "weights" |
| weight_uvr5_root = "uvr5_weights" |
| index_root = "./logs/" |
| audio_root = "audios" |
| names = [] |
| for name in os.listdir(weight_root): |
| if name.endswith(".pth"): |
| names.append(name) |
| index_paths = [] |
|
|
| global indexes_list |
| indexes_list = [] |
|
|
| audio_paths = [] |
| for root, dirs, files in os.walk(index_root, topdown=False): |
| for name in files: |
| if name.endswith(".index") and "trained" not in name: |
| index_paths.append("%s\\%s" % (root, name)) |
|
|
| for root, dirs, files in os.walk(audio_root, topdown=False): |
| for name in files: |
| audio_paths.append("%s/%s" % (root, name)) |
|
|
| uvr5_names = [] |
| for name in os.listdir(weight_uvr5_root): |
| if name.endswith(".pth") or "onnx" in name: |
| uvr5_names.append(name.replace(".pth", "")) |
|
|
| def calculate_md5(file_path): |
| hash_md5 = hashlib.md5() |
| with open(file_path, "rb") as f: |
| for chunk in iter(lambda: f.read(4096), b""): |
| hash_md5.update(chunk) |
| return hash_md5.hexdigest() |
|
|
| def silentremove(filename): |
| try: |
| os.remove(filename) |
| except OSError as e: |
| if e.errno != errno.ENOENT: |
| raise |
| def get_md5(temp_folder): |
| for root, subfolders, files in os.walk(temp_folder): |
| for file in files: |
| if not file.startswith("G_") and not file.startswith("D_") and file.endswith(".pth") and not "_G_" in file and not "_D_" in file: |
| md5_hash = calculate_md5(os.path.join(root, file)) |
| return md5_hash |
|
|
| return None |
|
|
| def find_parent(search_dir, file_name): |
| for dirpath, dirnames, filenames in os.walk(search_dir): |
| if file_name in filenames: |
| return os.path.abspath(dirpath) |
| return None |
|
|
| def find_folder_parent(search_dir, folder_name): |
| for dirpath, dirnames, filenames in os.walk(search_dir): |
| if folder_name in dirnames: |
| return os.path.abspath(dirpath) |
| return None |
|
|
| def get_drive_folder_id(url): |
| if "drive.google.com" in url: |
| if "file/d/" in url: |
| file_id = url.split("file/d/")[1].split("/")[0] |
| elif "id=" in url: |
| file_id = url.split("id=")[1].split("&")[0] |
| else: |
| return None |
|
|
| def download_from_url(url): |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| zips_path = os.path.join(parent_path, 'zips') |
| |
| if url != '': |
| print(i18n("下载文件:") + f"{url}") |
| if "drive.google.com" in url: |
| if "file/d/" in url: |
| file_id = url.split("file/d/")[1].split("/")[0] |
| elif "id=" in url: |
| file_id = url.split("id=")[1].split("&")[0] |
| else: |
| return None |
| |
| if file_id: |
| os.chdir('./zips') |
| result = subprocess.run(["gdown", f"https://drive.google.com/uc?id={file_id}", "--fuzzy"], capture_output=True, text=True, encoding='utf-8') |
| if "Too many users have viewed or downloaded this file recently" in str(result.stderr): |
| return "demasiado uso" |
| if "Cannot retrieve the public link of the file." in str(result.stderr): |
| return "link privado" |
| print(result.stderr) |
| |
| elif "/blob/" in url: |
| os.chdir('./zips') |
| url = url.replace("blob", "resolve") |
| |
| wget.download(url) |
| elif "mega.nz" in url: |
| if "#!" in url: |
| file_id = url.split("#!")[1].split("!")[0] |
| elif "file/" in url: |
| file_id = url.split("file/")[1].split("/")[0] |
| else: |
| return None |
| if file_id: |
| m = Mega() |
| m.download_url(url, zips_path) |
| elif "/tree/main" in url: |
| response = requests.get(url) |
| soup = BeautifulSoup(response.content, 'html.parser') |
| temp_url = '' |
| for link in soup.find_all('a', href=True): |
| if link['href'].endswith('.zip'): |
| temp_url = link['href'] |
| break |
| if temp_url: |
| url = temp_url |
| |
| url = url.replace("blob", "resolve") |
| |
|
|
| if "huggingface.co" not in url: |
| url = "https://huggingface.co" + url |
|
|
| wget.download(url) |
| else: |
| print("No .zip file found on the page.") |
| |
| else: |
| os.chdir('./zips') |
| wget.download(url) |
| |
| os.chdir(parent_path) |
| print(i18n("完整下载")) |
| return "downloaded" |
| else: |
| return None |
| |
| class error_message(Exception): |
| def __init__(self, mensaje): |
| self.mensaje = mensaje |
| super().__init__(mensaje) |
|
|
| |
| def get_vc(sid, to_return_protect0, to_return_protect1): |
| global n_spk, tgt_sr, net_g, vc, cpt, version |
| if sid == "" or sid == []: |
| global hubert_model |
| if hubert_model is not None: |
| print("clean_empty_cache") |
| del net_g, n_spk, vc, hubert_model, tgt_sr |
| hubert_model = net_g = n_spk = vc = hubert_model = tgt_sr = None |
| if torch.cuda.is_available(): |
| torch.cuda.empty_cache() |
| |
| if_f0 = cpt.get("f0", 1) |
| version = cpt.get("version", "v1") |
| if version == "v1": |
| if if_f0 == 1: |
| net_g = SynthesizerTrnMs256NSFsid( |
| *cpt["config"], is_half=config.is_half |
| ) |
| else: |
| net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) |
| elif version == "v2": |
| if if_f0 == 1: |
| net_g = SynthesizerTrnMs768NSFsid( |
| *cpt["config"], is_half=config.is_half |
| ) |
| else: |
| net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) |
| del net_g, cpt |
| if torch.cuda.is_available(): |
| torch.cuda.empty_cache() |
| cpt = None |
| return ( |
| {"visible": False, "__type__": "update"}, |
| {"visible": False, "__type__": "update"}, |
| {"visible": False, "__type__": "update"}, |
| ) |
| person = "%s/%s" % (weight_root, sid) |
| print("loading %s" % person) |
| cpt = torch.load(person, map_location="cpu") |
| tgt_sr = cpt["config"][-1] |
| cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] |
| if_f0 = cpt.get("f0", 1) |
| if if_f0 == 0: |
| to_return_protect0 = to_return_protect1 = { |
| "visible": False, |
| "value": 0.5, |
| "__type__": "update", |
| } |
| else: |
| to_return_protect0 = { |
| "visible": True, |
| "value": to_return_protect0, |
| "__type__": "update", |
| } |
| to_return_protect1 = { |
| "visible": True, |
| "value": to_return_protect1, |
| "__type__": "update", |
| } |
| version = cpt.get("version", "v1") |
| if version == "v1": |
| if if_f0 == 1: |
| net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=config.is_half) |
| else: |
| net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) |
| elif version == "v2": |
| if if_f0 == 1: |
| net_g = SynthesizerTrnMs768NSFsid(*cpt["config"], is_half=config.is_half) |
| else: |
| net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) |
| del net_g.enc_q |
| print(net_g.load_state_dict(cpt["weight"], strict=False)) |
| net_g.eval().to(config.device) |
| if config.is_half: |
| net_g = net_g.half() |
| else: |
| net_g = net_g.float() |
| vc = VC(tgt_sr, config) |
| n_spk = cpt["config"][-3] |
| return ( |
| {"visible": True, "maximum": n_spk, "__type__": "update"}, |
| to_return_protect0, |
| to_return_protect1, |
| ) |
| |
| def load_downloaded_model(url): |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| try: |
| infos = [] |
| logs_folders = ['0_gt_wavs','1_16k_wavs','2a_f0','2b-f0nsf','3_feature256','3_feature768'] |
| zips_path = os.path.join(parent_path, 'zips') |
| unzips_path = os.path.join(parent_path, 'unzips') |
| weights_path = os.path.join(parent_path, 'weights') |
| logs_dir = "" |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
|
|
| os.mkdir(zips_path) |
| os.mkdir(unzips_path) |
| |
| download_file = download_from_url(url) |
| if not download_file: |
| print(i18n("无法下载模型。")) |
| infos.append(i18n("无法下载模型。")) |
| yield "\n".join(infos) |
| elif download_file == "downloaded": |
| print(i18n("模型下载成功。")) |
| infos.append(i18n("模型下载成功。")) |
| yield "\n".join(infos) |
| elif download_file == "demasiado uso": |
| raise Exception(i18n("最近查看或下载此文件的用户过多")) |
| elif download_file == "link privado": |
| raise Exception(i18n("无法从该私人链接获取文件")) |
| |
| |
| for filename in os.listdir(zips_path): |
| if filename.endswith(".zip"): |
| zipfile_path = os.path.join(zips_path,filename) |
| print(i18n("继续提取...")) |
| infos.append(i18n("继续提取...")) |
| shutil.unpack_archive(zipfile_path, unzips_path, 'zip') |
| model_name = os.path.basename(zipfile_path) |
| logs_dir = os.path.join(parent_path,'logs', os.path.normpath(str(model_name).replace(".zip",""))) |
| yield "\n".join(infos) |
| else: |
| print(i18n("解压缩出错。")) |
| infos.append(i18n("解压缩出错。")) |
| yield "\n".join(infos) |
| |
| index_file = False |
| model_file = False |
| D_file = False |
| G_file = False |
| |
| |
| for path, subdirs, files in os.walk(unzips_path): |
| for item in files: |
| item_path = os.path.join(path, item) |
| if not 'G_' in item and not 'D_' in item and item.endswith('.pth'): |
| model_file = True |
| model_name = item.replace(".pth","") |
| logs_dir = os.path.join(parent_path,'logs', model_name) |
| if os.path.exists(logs_dir): |
| shutil.rmtree(logs_dir) |
| os.mkdir(logs_dir) |
| if not os.path.exists(weights_path): |
| os.mkdir(weights_path) |
| if os.path.exists(os.path.join(weights_path, item)): |
| os.remove(os.path.join(weights_path, item)) |
| if os.path.exists(item_path): |
| shutil.move(item_path, weights_path) |
| |
| if not model_file and not os.path.exists(logs_dir): |
| os.mkdir(logs_dir) |
| |
| for path, subdirs, files in os.walk(unzips_path): |
| for item in files: |
| item_path = os.path.join(path, item) |
| if item.startswith('added_') and item.endswith('.index'): |
| index_file = True |
| if os.path.exists(item_path): |
| if os.path.exists(os.path.join(logs_dir, item)): |
| os.remove(os.path.join(logs_dir, item)) |
| shutil.move(item_path, logs_dir) |
| if item.startswith('total_fea.npy') or item.startswith('events.'): |
| if os.path.exists(item_path): |
| if os.path.exists(os.path.join(logs_dir, item)): |
| os.remove(os.path.join(logs_dir, item)) |
| shutil.move(item_path, logs_dir) |
| |
| |
| result = "" |
| if model_file: |
| if index_file: |
| print(i18n("该模型可用于推理,并有 .index 文件。")) |
| infos.append("\n" + i18n("该模型可用于推理,并有 .index 文件。")) |
| yield "\n".join(infos) |
| else: |
| print(i18n("该模型可用于推理,但没有 .index 文件。")) |
| infos.append("\n" + i18n("该模型可用于推理,但没有 .index 文件。")) |
| yield "\n".join(infos) |
| |
| if not index_file and not model_file: |
| print(i18n("未找到可上传的相关文件")) |
| infos.append(i18n("未找到可上传的相关文件")) |
| yield "\n".join(infos) |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
| os.chdir(parent_path) |
| return result |
| except Exception as e: |
| os.chdir(parent_path) |
| if "demasiado uso" in str(e): |
| print(i18n("最近查看或下载此文件的用户过多")) |
| yield i18n("最近查看或下载此文件的用户过多") |
| elif "link privado" in str(e): |
| print(i18n("无法从该私人链接获取文件")) |
| yield i18n("无法从该私人链接获取文件") |
| else: |
| print(e) |
| yield i18n("下载模型时发生错误。") |
| finally: |
| os.chdir(parent_path) |
| |
| def load_dowloaded_dataset(url): |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| infos = [] |
| try: |
| zips_path = os.path.join(parent_path, 'zips') |
| unzips_path = os.path.join(parent_path, 'unzips') |
| datasets_path = os.path.join(parent_path, 'datasets') |
| audio_extenions =["flac","wav"] |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
| |
| if not os.path.exists(datasets_path): |
| os.mkdir(datasets_path) |
| |
| os.mkdir(zips_path) |
| os.mkdir(unzips_path) |
| |
| download_file = download_from_url(url) |
| |
| if not download_file: |
| print(i18n("下载模型时发生错误。")) |
| infos.append(i18n("下载模型时发生错误。")) |
| yield "\n".join(infos) |
| raise Exception(i18n("下载模型时发生错误。")) |
| elif download_file == "downloaded": |
| print(i18n("模型下载成功。")) |
| infos.append(i18n("模型下载成功。")) |
| yield "\n".join(infos) |
| elif download_file == "demasiado uso": |
| raise Exception(i18n("最近查看或下载此文件的用户过多")) |
| elif download_file == "link privado": |
| raise Exception(i18n("无法从该私人链接获取文件")) |
| |
| zip_path = os.listdir(zips_path) |
| foldername = "" |
| for file in zip_path: |
| if file.endswith('.zip'): |
| file_path = os.path.join(zips_path, file) |
| print("....") |
| foldername = file.replace(".zip","").replace(" ","").replace("-","_") |
| dataset_path = os.path.join(datasets_path, foldername) |
| print(i18n("继续提取...")) |
| infos.append(i18n("继续提取...")) |
| yield "\n".join(infos) |
| shutil.unpack_archive(file_path, unzips_path, 'zip') |
| if os.path.exists(dataset_path): |
| shutil.rmtree(dataset_path) |
| |
| os.mkdir(dataset_path) |
| |
| for root, subfolders, songs in os.walk(unzips_path): |
| for song in songs: |
| song_path = os.path.join(root, song) |
| if song.endswith(tuple(audio_extenions)): |
| shutil.move(song_path, dataset_path) |
| else: |
| print(i18n("解压缩出错。")) |
| infos.append(i18n("解压缩出错。")) |
| yield "\n".join(infos) |
| |
| |
|
|
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
| |
| print(i18n("数据集加载成功。")) |
| infos.append(i18n("数据集加载成功。")) |
| yield "\n".join(infos) |
| except Exception as e: |
| os.chdir(parent_path) |
| if "demasiado uso" in str(e): |
| print(i18n("最近查看或下载此文件的用户过多")) |
| yield i18n("最近查看或下载此文件的用户过多") |
| elif "link privado" in str(e): |
| print(i18n("无法从该私人链接获取文件")) |
| yield i18n("无法从该私人链接获取文件") |
| else: |
| print(e) |
| yield i18n("下载模型时发生错误。") |
| finally: |
| os.chdir(parent_path) |
|
|
| def save_model(modelname, save_action): |
| |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| zips_path = os.path.join(parent_path, 'zips') |
| dst = os.path.join(zips_path,modelname) |
| logs_path = os.path.join(parent_path, 'logs', modelname) |
| weights_path = os.path.join(parent_path, 'weights', f"{modelname}.pth") |
| save_folder = parent_path |
| infos = [] |
| |
| try: |
| if not os.path.exists(logs_path): |
| raise Exception("No model found.") |
| |
| if not 'content' in parent_path: |
| save_folder = os.path.join(parent_path, 'RVC_Backup') |
| else: |
| save_folder = '/content/drive/MyDrive/RVC_Backup' |
| |
| infos.append(i18n("保存模型...")) |
| yield "\n".join(infos) |
| |
| |
| if not os.path.exists(save_folder): |
| os.mkdir(save_folder) |
| if not os.path.exists(os.path.join(save_folder, 'ManualTrainingBackup')): |
| os.mkdir(os.path.join(save_folder, 'ManualTrainingBackup')) |
| if not os.path.exists(os.path.join(save_folder, 'Finished')): |
| os.mkdir(os.path.join(save_folder, 'Finished')) |
|
|
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| |
| os.mkdir(zips_path) |
| added_file = glob.glob(os.path.join(logs_path, "added_*.index")) |
| d_file = glob.glob(os.path.join(logs_path, "D_*.pth")) |
| g_file = glob.glob(os.path.join(logs_path, "G_*.pth")) |
| |
| if save_action == i18n("选择模型保存方法"): |
| raise Exception("No method choosen.") |
| |
| if save_action == i18n("保存所有"): |
| print(i18n("保存所有")) |
| save_folder = os.path.join(save_folder, 'ManualTrainingBackup') |
| shutil.copytree(logs_path, dst) |
| else: |
| |
| if not os.path.exists(dst): |
| os.mkdir(dst) |
| |
| if save_action == i18n("保存 D 和 G"): |
| print(i18n("保存 D 和 G")) |
| save_folder = os.path.join(save_folder, 'ManualTrainingBackup') |
| if len(d_file) > 0: |
| shutil.copy(d_file[0], dst) |
| if len(g_file) > 0: |
| shutil.copy(g_file[0], dst) |
| |
| if len(added_file) > 0: |
| shutil.copy(added_file[0], dst) |
| else: |
| infos.append(i18n("保存时未编制索引...")) |
| |
| if save_action == i18n("保存声音"): |
| print(i18n("保存声音")) |
| save_folder = os.path.join(save_folder, 'Finished') |
| if len(added_file) > 0: |
| shutil.copy(added_file[0], dst) |
| else: |
| infos.append(i18n("保存时未编制索引...")) |
| |
| |
| yield "\n".join(infos) |
| |
| if not os.path.exists(weights_path): |
| infos.append(i18n("无模型保存(PTH)")) |
| |
| else: |
| shutil.copy(weights_path, dst) |
| |
| yield "\n".join(infos) |
| infos.append("\n" + i18n("这可能需要几分钟时间,请稍候...")) |
| yield "\n".join(infos) |
| |
| shutil.make_archive(os.path.join(zips_path,f"{modelname}"), 'zip', zips_path) |
| shutil.move(os.path.join(zips_path,f"{modelname}.zip"), os.path.join(save_folder, f'{modelname}.zip')) |
| |
| shutil.rmtree(zips_path) |
| |
| |
| infos.append("\n" + i18n("正确存储模型")) |
| yield "\n".join(infos) |
| |
| except Exception as e: |
| print(e) |
| if "No model found." in str(e): |
| infos.append(i18n("您要保存的模型不存在,请确保输入的名称正确。")) |
| else: |
| infos.append(i18n("保存模型时发生错误")) |
| |
| yield "\n".join(infos) |
| |
| def load_downloaded_backup(url): |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| try: |
| infos = [] |
| logs_folders = ['0_gt_wavs','1_16k_wavs','2a_f0','2b-f0nsf','3_feature256','3_feature768'] |
| zips_path = os.path.join(parent_path, 'zips') |
| unzips_path = os.path.join(parent_path, 'unzips') |
| weights_path = os.path.join(parent_path, 'weights') |
| logs_dir = os.path.join(parent_path, 'logs') |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
|
|
| os.mkdir(zips_path) |
| os.mkdir(unzips_path) |
| |
| download_file = download_from_url(url) |
| if not download_file: |
| print(i18n("无法下载模型。")) |
| infos.append(i18n("无法下载模型。")) |
| yield "\n".join(infos) |
| elif download_file == "downloaded": |
| print(i18n("模型下载成功。")) |
| infos.append(i18n("模型下载成功。")) |
| yield "\n".join(infos) |
| elif download_file == "demasiado uso": |
| raise Exception(i18n("最近查看或下载此文件的用户过多")) |
| elif download_file == "link privado": |
| raise Exception(i18n("无法从该私人链接获取文件")) |
| |
| |
| for filename in os.listdir(zips_path): |
| if filename.endswith(".zip"): |
| zipfile_path = os.path.join(zips_path,filename) |
| zip_dir_name = os.path.splitext(filename)[0] |
| unzip_dir = unzips_path |
| print(i18n("继续提取...")) |
| infos.append(i18n("继续提取...")) |
| shutil.unpack_archive(zipfile_path, unzip_dir, 'zip') |
| |
| if os.path.exists(os.path.join(unzip_dir, zip_dir_name)): |
| |
| shutil.move(os.path.join(unzip_dir, zip_dir_name), logs_dir) |
| else: |
| |
| new_folder_path = os.path.join(logs_dir, zip_dir_name) |
| os.mkdir(new_folder_path) |
| for item_name in os.listdir(unzip_dir): |
| item_path = os.path.join(unzip_dir, item_name) |
| if os.path.isfile(item_path): |
| shutil.move(item_path, new_folder_path) |
| elif os.path.isdir(item_path): |
| shutil.move(item_path, new_folder_path) |
| |
| yield "\n".join(infos) |
| else: |
| print(i18n("解压缩出错。")) |
| infos.append(i18n("解压缩出错。")) |
| yield "\n".join(infos) |
| |
| result = "" |
| |
| for filename in os.listdir(unzips_path): |
| if filename.endswith(".zip"): |
| silentremove(filename) |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
| if os.path.exists(os.path.join(parent_path, 'unzips')): |
| shutil.rmtree(os.path.join(parent_path, 'unzips')) |
| print(i18n("备份已成功上传。")) |
| infos.append("\n" + i18n("备份已成功上传。")) |
| yield "\n".join(infos) |
| os.chdir(parent_path) |
| return result |
| except Exception as e: |
| os.chdir(parent_path) |
| if "demasiado uso" in str(e): |
| print(i18n("最近查看或下载此文件的用户过多")) |
| yield i18n("最近查看或下载此文件的用户过多") |
| elif "link privado" in str(e): |
| print(i18n("无法从该私人链接获取文件")) |
| yield i18n("无法从该私人链接获取文件") |
| else: |
| print(e) |
| yield i18n("下载模型时发生错误。") |
| finally: |
| os.chdir(parent_path) |
|
|
| def save_to_wav(record_button): |
| if record_button is None: |
| pass |
| else: |
| path_to_file=record_button |
| new_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+'.wav' |
| new_path='./audios/'+new_name |
| shutil.move(path_to_file,new_path) |
| return new_name |
|
|
| def save_to_wav2(dropbox): |
| file_path = dropbox.name |
| target_path = os.path.join('./audios', os.path.basename(file_path)) |
|
|
| if os.path.exists(target_path): |
| os.remove(target_path) |
| |
|
|
| shutil.move(file_path, target_path) |
| return target_path |
|
|
| def change_choices2(): |
| audio_paths=[] |
| for filename in os.listdir("./audios"): |
| if filename.endswith(('wav', 'mp3', 'flac', 'ogg', 'opus', |
| 'm4a', 'mp4', 'aac', 'alac', 'wma', |
| 'aiff', 'webm', 'ac3')): |
| audio_paths.append(os.path.join('./audios',filename).replace('\\', '/')) |
| return {"choices": sorted(audio_paths), "__type__": "update"}, {"__type__": "update"} |
|
|
| def get_models_by_name(modelname): |
| url = "https://script.google.com/macros/s/AKfycbzyrdLZzUww9qbjxnbnI08budD4yxbmRPHkWbp3UEJ9h3Id5cnNNVg0UtfFAnqqX5Rr/exec" |
| |
| response = requests.post(url, json={ |
| 'type': 'search_by_filename', |
| 'filename': unidecode(modelname.strip().lower()) |
| }) |
|
|
| response_json = response.json() |
| models = response_json['ocurrences'] |
| |
| result = [] |
| message = "Busqueda realizada" |
| if len(models) == 0: |
| message = "No se han encontrado resultados." |
| else: |
| message = f"Se han encontrado {len(models)} resultados para {modelname}" |
| |
| for i in range(20): |
| if i < len(models): |
| urls = models[i].get('url') |
| url = eval(urls)[0] |
| name = str(models[i].get('name')) |
| filename = str(models[i].get('filename')) if not name or name.strip() == "" else name |
| |
| result.append( |
| { |
| "visible": True, |
| "value": str("### ") + filename, |
| "__type__": "update", |
| }) |
| |
| result.append( |
| { |
| "visible": False, |
| "value": url, |
| "__type__": "update", |
| }) |
| |
| result.append({ |
| "visible": True, |
| "__type__": "update", |
| }) |
| |
| |
| if i == len(models) - 1: |
| result.append({ |
| "visible": False, |
| "__type__": "update", |
| }) |
| else: |
| result.append({ |
| "visible": True, |
| "__type__": "update", |
| }) |
| |
| |
| result.append( |
| { |
| "visible": True, |
| "__type__": "update", |
| }) |
| else: |
| |
| result.append( |
| { |
| "visible": False, |
| "__type__": "update", |
| }) |
| |
| result.append( |
| { |
| "visible": False, |
| "value": False, |
| "__type__": "update", |
| }) |
| |
| result.append({ |
| "visible": False, |
| "__type__": "update", |
| }) |
| |
| result.append({ |
| "visible": False, |
| "__type__": "update", |
| }) |
| |
| result.append( |
| { |
| "visible": False, |
| "__type__": "update", |
| }) |
| |
| result.append( |
| { |
| "value": message, |
| "__type__": "update", |
| } |
| ) |
| |
| return result |
|
|
| def search_model(): |
| gr.Markdown(value="# Buscar un modelo") |
| with gr.Row(): |
| model_name = gr.inputs.Textbox(lines=1, label="Término de búsqueda") |
| search_model_button=gr.Button("Buscar modelo") |
| |
| models = [] |
| results = gr.Textbox(label="Resultado", value="", max_lines=20) |
| with gr.Row(visible=False) as row1: |
| l1 = gr.Markdown(value="", visible=False) |
| l1_url = gr.Textbox("Label 1", visible=False) |
| b1 = gr.Button("Cargar modelo", visible=False) |
| |
| mk1 = gr.Markdown(value="---", visible=False) |
| b1.click(fn=load_downloaded_model, inputs=l1_url, outputs=results) |
| |
| with gr.Row(visible=False) as row2: |
| l2 = gr.Markdown(value="", visible=False) |
| l2_url = gr.Textbox("Label 1", visible=False) |
| b2 = gr.Button("Cargar modelo", visible=False) |
| |
| mk2 = gr.Markdown(value="---", visible=False) |
| b2.click(fn=load_downloaded_model, inputs=l2_url, outputs=results) |
| |
| with gr.Row(visible=False) as row3: |
| l3 = gr.Markdown(value="", visible=False) |
| l3_url = gr.Textbox("Label 1", visible=False) |
| b3 = gr.Button("Cargar modelo", visible=False) |
| |
| mk3 = gr.Markdown(value="---", visible=False) |
| b3.click(fn=load_downloaded_model, inputs=l3_url, outputs=results) |
| |
| with gr.Row(visible=False) as row4: |
| l4 = gr.Markdown(value="", visible=False) |
| l4_url = gr.Textbox("Label 1", visible=False) |
| b4 = gr.Button("Cargar modelo", visible=False) |
| mk4 = gr.Markdown(value="---", visible=False) |
| b4.click(fn=load_downloaded_model, inputs=l4_url, outputs=results) |
| |
| with gr.Row(visible=False) as row5: |
| l5 = gr.Markdown(value="", visible=False) |
| l5_url = gr.Textbox("Label 1", visible=False) |
| b5 = gr.Button("Cargar modelo", visible=False) |
| |
| mk5 = gr.Markdown(value="---", visible=False) |
| b5.click(fn=load_downloaded_model, inputs=l5_url, outputs=results) |
| |
| with gr.Row(visible=False) as row6: |
| l6 = gr.Markdown(value="", visible=False) |
| l6_url = gr.Textbox("Label 1", visible=False) |
| b6 = gr.Button("Cargar modelo", visible=False) |
|
|
| mk6 = gr.Markdown(value="---", visible=False) |
| b6.click(fn=load_downloaded_model, inputs=l6_url, outputs=results) |
| |
| with gr.Row(visible=False) as row7: |
| l7 = gr.Markdown(value="", visible=False) |
| l7_url = gr.Textbox("Label 1", visible=False) |
| b7 = gr.Button("Cargar modelo", visible=False) |
| |
| mk7 = gr.Markdown(value="---", visible=False) |
| b7.click(fn=load_downloaded_model, inputs=l7_url, outputs=results) |
| |
| with gr.Row(visible=False) as row8: |
| l8 = gr.Markdown(value="", visible=False) |
| l8_url = gr.Textbox("Label 1", visible=False) |
| b8 = gr.Button("Cargar modelo", visible=False) |
| |
| mk8 = gr.Markdown(value="---", visible=False) |
| b8.click(fn=load_downloaded_model, inputs=l8_url, outputs=results) |
| |
| with gr.Row(visible=False) as row9: |
| l9 = gr.Markdown(value="", visible=False) |
| l9_url = gr.Textbox("Label 1", visible=False) |
| b9 = gr.Button("Cargar modelo", visible=False) |
| |
| mk9 = gr.Markdown(value="---", visible=False) |
| b9.click(fn=load_downloaded_model, inputs=l9_url, outputs=results) |
| |
| with gr.Row(visible=False) as row10: |
| l10 = gr.Markdown(value="", visible=False) |
| l10_url = gr.Textbox("Label 1", visible=False) |
| b10 = gr.Button("Cargar modelo", visible=False) |
| |
| mk10 = gr.Markdown(value="---", visible=False) |
| b10.click(fn=load_downloaded_model, inputs=l10_url, outputs=results) |
| |
| with gr.Row(visible=False) as row11: |
| l11 = gr.Markdown(value="", visible=False) |
| l11_url = gr.Textbox("Label 1", visible=False) |
| b11 = gr.Button("Cargar modelo", visible=False) |
| |
| mk11 = gr.Markdown(value="---", visible=False) |
| b11.click(fn=load_downloaded_model, inputs=l11_url, outputs=results) |
| |
| with gr.Row(visible=False) as row12: |
| l12 = gr.Markdown(value="", visible=False) |
| l12_url = gr.Textbox("Label 1", visible=False) |
| b12 = gr.Button("Cargar modelo", visible=False) |
|
|
| mk12 = gr.Markdown(value="---", visible=False) |
| b12.click(fn=load_downloaded_model, inputs=l12_url, outputs=results) |
| |
| with gr.Row(visible=False) as row13: |
| l13 = gr.Markdown(value="", visible=False) |
| l13_url = gr.Textbox("Label 1", visible=False) |
| b13 = gr.Button("Cargar modelo", visible=False) |
| |
| mk13 = gr.Markdown(value="---", visible=False) |
| b13.click(fn=load_downloaded_model, inputs=l13_url, outputs=results) |
| |
| with gr.Row(visible=False) as row14: |
| l14 = gr.Markdown(value="", visible=False) |
| l14_url = gr.Textbox("Label 1", visible=False) |
| b14 = gr.Button("Cargar modelo", visible=False) |
| |
| mk14 = gr.Markdown(value="---", visible=False) |
| b14.click(fn=load_downloaded_model, inputs=l14_url, outputs=results) |
| |
| with gr.Row(visible=False) as row15: |
| l15 = gr.Markdown(value="", visible=False) |
| l15_url = gr.Textbox("Label 1", visible=False) |
| b15 = gr.Button("Cargar modelo", visible=False) |
|
|
| mk15 = gr.Markdown(value="---", visible=False) |
| b15.click(fn=load_downloaded_model, inputs=l15_url, outputs=results) |
| |
| with gr.Row(visible=False) as row16: |
| l16 = gr.Markdown(value="", visible=False) |
| l16_url = gr.Textbox("Label 1", visible=False) |
| b16 = gr.Button("Cargar modelo", visible=False) |
| |
| mk16 = gr.Markdown(value="---", visible=False) |
| b16.click(fn=load_downloaded_model, inputs=l16_url, outputs=results) |
| |
| with gr.Row(visible=False) as row17: |
| l17 = gr.Markdown(value="", visible=False) |
| l17_url = gr.Textbox("Label 1", visible=False) |
| b17 = gr.Button("Cargar modelo", visible=False) |
| |
| mk17 = gr.Markdown(value="---", visible=False) |
| b17.click(fn=load_downloaded_model, inputs=l17_url, outputs=results) |
| |
| with gr.Row(visible=False) as row18: |
| l18 = gr.Markdown(value="", visible=False) |
| l18_url = gr.Textbox("Label 1", visible=False) |
| b18 = gr.Button("Cargar modelo", visible=False) |
| |
| mk18 = gr.Markdown(value="---", visible=False) |
| b18.click(fn=load_downloaded_model, inputs=l18_url, outputs=results) |
| |
| with gr.Row(visible=False) as row19: |
| l19 = gr.Markdown(value="", visible=False) |
| l19_url = gr.Textbox("Label 1", visible=False) |
| b19 = gr.Button("Cargar modelo", visible=False) |
| |
| mk19 = gr.Markdown(value="---", visible=False) |
| b19.click(fn=load_downloaded_model, inputs=l19_url, outputs=results) |
| |
| with gr.Row(visible=False) as row20: |
| l20 = gr.Markdown(value="", visible=False) |
| l20_url = gr.Textbox("Label 1", visible=False) |
| b20 = gr.Button("Cargar modelo", visible=False) |
| |
| mk20 = gr.Markdown(value="---", visible=False) |
| b20.click(fn=load_downloaded_model, inputs=l20_url, outputs=results) |
| |
| |
|
|
| search_model_button.click(fn=get_models_by_name, inputs=model_name, outputs=[l1,l1_url, b1, mk1, row1, |
| l2,l2_url, b2, mk2, row2, |
| l3,l3_url, b3, mk3, row3, |
| l4,l4_url, b4, mk4, row4, |
| l5,l5_url, b5, mk5, row5, |
| l6,l6_url, b6, mk6, row6, |
| l7,l7_url, b7, mk7, row7, |
| l8,l8_url, b8, mk8, row8, |
| l9,l9_url, b9, mk9, row9, |
| l10,l10_url, b10, mk10, row10, |
| l11,l11_url, b11, mk11, row11, |
| l12,l12_url, b12, mk12, row12, |
| l13,l13_url, b13, mk13, row13, |
| l14,l14_url, b14, mk14, row14, |
| l15,l15_url, b15, mk15, row15, |
| l16,l16_url, b16, mk16, row16, |
| l17,l17_url, b17, mk17, row17, |
| l18,l18_url, b18, mk18, row18, |
| l19,l19_url, b19, mk19, row19, |
| l20,l20_url, b20, mk20, row20, |
| results |
| ]) |
| |
|
|
| def descargar_desde_drive(url, name, output_file): |
|
|
| print(f"Descargando {name} de drive") |
| |
| try: |
| downloaded_file = gdown.download(url, output=output_file, fuzzy=True) |
| return downloaded_file |
| except: |
| print("El intento de descargar con drive no funcionó") |
| return None |
|
|
| def descargar_desde_mega(url, name): |
| response = False |
| try: |
| file_id = None |
|
|
| if "#!" in url: |
| file_id = url.split("#!")[1].split("!")[0] |
| elif "file/" in url: |
| file_id = url.split("file/")[1].split("/")[0] |
| else: |
| file_id = None |
|
|
| if file_id: |
| mega = Mega() |
| m = mega.login() |
|
|
| print(f"Descargando {name} de mega") |
| downloaded_file = m.download_url(url) |
|
|
| return downloaded_file |
| else: |
| return None |
|
|
| except Exception as e: |
| print("Error**") |
| print(e) |
| return None |
|
|
| def descargar_desde_url_basica(url, name, output_file): |
| try: |
| print(f"Descargando {name} de URL BASICA") |
| filename = wget.download(url=url, out=output_file) |
| return filename |
| except Exception as e: |
| print(f"Error al descargar el archivo: {str(e)}") |
|
|
| def is_valid_model(name): |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| unzips_path = os.path.join(parent_path, 'unzips') |
| |
| response = [] |
| file_path = os.path.join(unzips_path, name) |
|
|
| has_model = False |
| has_index = False |
|
|
| for root, subfolders, files in os.walk(file_path): |
| for file in files: |
| current_file_path = os.path.join(root, file) |
| if not file.startswith("G_") and not file.startswith("D_") and file.endswith(".pth") and not "_G_" in file and not "_D_" in file: |
| has_model = True |
| if file.startswith('added_') and file.endswith('.index'): |
| has_index = True |
|
|
| |
| if has_index: |
| response.append(".index") |
|
|
| if has_model: |
| response.append(".pth") |
|
|
| return response |
|
|
|
|
| def create_zip(new_name): |
| |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| temp_folder_path = os.path.join(parent_path, 'temp_models') |
| unzips_path = os.path.join(parent_path, 'unzips') |
| zips_path = os.path.join(parent_path, 'zips') |
| |
| file_path = os.path.join(unzips_path, new_name) |
| file_name = os.path.join(temp_folder_path, new_name) |
|
|
| if not os.path.exists(zips_path): |
| os.mkdir(zips_path) |
|
|
| if os.path.exists(file_name): |
| shutil.rmtree(file_name) |
|
|
| os.mkdir(file_name) |
|
|
| while not os.path.exists(file_name): |
| time.sleep(1) |
|
|
| for root, subfolders, files in os.walk(file_path): |
| for file in files: |
| current_file_path = os.path.join(root, file) |
| if not file.startswith("G_") and not file.startswith("D_") and file.endswith(".pth") and not "_G_" in file and not "_D_" in file: |
| print(f'Copiando {current_file_path} a {os.path.join(temp_folder_path, new_name)}') |
| shutil.copy(current_file_path, file_name) |
| if file.startswith('added_') and file.endswith('.index'): |
| print(f'Copiando {current_file_path} a {os.path.join(temp_folder_path, new_name)}') |
| shutil.copy(current_file_path, file_name) |
|
|
| print("Comprimiendo modelo") |
| zip_path = os.path.join(zips_path, new_name) |
| |
| print(f"Comprimiendo {file_name} en {zip_path}") |
| shutil.make_archive(zip_path, 'zip', file_name) |
| |
| def upload_to_huggingface(file_path, new_filename): |
| api = HfApi() |
| login(token="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") |
| api.upload_file( |
| path_or_fileobj=file_path, |
| path_in_repo=new_filename, |
| repo_id="juuxn/RVCModels", |
| repo_type="model", |
| ) |
| return f"https://huggingface.co/juuxn/RVCModels/resolve/main/{new_filename}" |
|
|
|
|
| def publish_model_clicked(model_name, model_url, model_version, model_creator): |
| |
| web_service_url = "https://script.google.com/macros/s/AKfycbzyrdLZzUww9qbjxnbnI08budD4yxbmRPHkWbp3UEJ9h3Id5cnNNVg0UtfFAnqqX5Rr/exec" |
| name = unidecode(model_name) |
| new_name = unidecode(name.strip().replace(" ","_").replace("'","")) |
| |
| downloaded_path = "" |
| url = model_url |
| version = model_version |
| creator = model_creator |
| parent_path = find_folder_parent(".", "pretrained_v2") |
| output_folder = os.path.join(parent_path, 'archivos_descargados') |
| output_file = os.path.join(output_folder, f'{new_name}.zip') |
| unzips_path = os.path.join(parent_path, 'unzips') |
| zips_path = os.path.join(parent_path, 'zips') |
| temp_folder_path = os.path.join(parent_path, 'temp_models') |
| |
| if os.path.exists(output_folder): |
| shutil.rmtree(output_folder) |
| os.mkdir(output_folder) |
| |
| if os.path.exists(temp_folder_path): |
| shutil.rmtree(temp_folder_path) |
| os.mkdir(temp_folder_path) |
| |
| |
| if url and 'drive.google.com' in url: |
| |
| downloaded_path = descargar_desde_drive(url, new_name, output_file) |
| elif url and 'mega.nz' in url: |
| downloaded_path = descargar_desde_mega(url, new_name, output_file) |
| elif url and 'pixeldrain' in url: |
| print("No se puede descargar de pixeldrain") |
| else: |
| downloaded_path = descargar_desde_url_basica(url, new_name, output_file) |
| |
| if not downloaded_path: |
| print(f"No se pudo descargar: {name}") |
| else: |
| filename = name.strip().replace(" ","_") |
| dst =f'{filename}.zip' |
| shutil.unpack_archive(downloaded_path, os.path.join(unzips_path, filename)) |
| md5_hash = get_md5(os.path.join(unzips_path, filename)) |
|
|
| if not md5_hash: |
| print("No tiene modelo pequeño") |
| return |
|
|
| md5_response_raw = requests.post(web_service_url, json={ |
| 'type': 'check_md5', |
| 'md5_hash': md5_hash |
| }) |
| |
| md5_response = md5_response_raw.json() |
| ok = md5_response["ok"] |
| exists = md5_response["exists"] |
| message = md5_response["message"] |
|
|
| is_valid = is_valid_model(filename) |
| |
| if md5_hash and exists: |
| print(f"El archivo ya se ha publicado en spreadsheet con md5: {md5_hash}") |
| return f"El archivo ya se ha publicado con md5: {md5_hash}" |
| |
| if ".pth" in is_valid and not exists: |
|
|
| create_zip(filename) |
| huggingface_url = upload_to_huggingface(os.path.join(zips_path,dst), dst) |
| |
| response = requests.post(web_service_url, json={ |
| 'type': 'save_model', |
| 'elements': [{ |
| 'name': name, |
| 'filename': filename, |
| 'url': [huggingface_url], |
| 'version': version, |
| 'creator': creator, |
| 'md5_hash': md5_hash, |
| 'content': is_valid |
| }]}) |
| |
| response_data = response.json() |
| ok = response_data["ok"] |
| message = response_data["message"] |
|
|
| print({ |
| 'name': name, |
| 'filename': filename, |
| 'url': [huggingface_url], |
| 'version': version, |
| 'creator': creator, |
| 'md5_hash': md5_hash, |
| 'content': is_valid |
| }) |
| |
| if ok: |
| return f"El archivo se ha publicado con md5: {md5_hash}" |
| else: |
| print(message) |
| return message |
| |
| |
| if os.path.exists(output_folder): |
| shutil.rmtree(output_folder) |
| |
| |
| if os.path.exists(unzips_path): |
| shutil.rmtree(unzips_path) |
| |
| |
| if os.path.exists(temp_folder_path): |
| shutil.rmtree(temp_folder_path) |
| |
| |
| if os.path.exists(zips_path): |
| shutil.rmtree(zips_path) |
|
|
| def uvr(input_url, output_path, model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format0): |
| carpeta_a_eliminar = "yt_downloads" |
| if os.path.exists(carpeta_a_eliminar) and os.path.isdir(carpeta_a_eliminar): |
| |
| for archivo in os.listdir(carpeta_a_eliminar): |
| ruta_archivo = os.path.join(carpeta_a_eliminar, archivo) |
| if os.path.isfile(ruta_archivo): |
| os.remove(ruta_archivo) |
| elif os.path.isdir(ruta_archivo): |
| shutil.rmtree(ruta_archivo) |
| |
| def format_title(title): |
| |
| formatted_title = re.sub(r'[^\w\s-]', '', title) |
| |
| formatted_title = formatted_title.replace(" ", "_") |
| return formatted_title |
|
|
| ydl_opts = { |
| 'no-windows-filenames': True, |
| 'restrict-filenames': True, |
| 'extract_audio': True, |
| 'format': 'bestaudio', |
| } |
|
|
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: |
| info_dict = ydl.extract_info(input_url, download=False) |
| formatted_title = format_title(info_dict.get('title', 'default_title')) |
| formatted_outtmpl = output_path + '/' + formatted_title + '.wav' |
| ydl_opts['outtmpl'] = formatted_outtmpl |
| ydl = yt_dlp.YoutubeDL(ydl_opts) |
| ydl.download([input_url]) |
| |
| infos = [] |
| pre_fun = None |
| try: |
| inp_root, save_root_vocal, save_root_ins = [x.strip(" ").strip('"').strip("\n").strip('"').strip(" ") if isinstance(x, str) else x for x in [inp_root, save_root_vocal, save_root_ins]] |
| if model_name == "onnx_dereverb_By_FoxJoy": |
| pre_fun = MDXNetDereverb(15) |
| else: |
| func = _audio_pre_ if "DeEcho" not in model_name else _audio_pre_new |
| pre_fun = func( |
| agg=10, |
| model_path=os.path.join(weight_uvr5_root, model_name + ".pth"), |
| device=config.device, |
| is_half=config.is_half, |
| ) |
| if inp_root != "": |
| paths = [os.path.join(inp_root, name) for name in os.listdir(inp_root)] |
| else: |
| paths = [path.name for path in paths] |
| for path in paths: |
| inp_path = os.path.join(inp_root, path) |
| need_reformat = 1 |
| done = 0 |
| try: |
| info = ffmpeg.probe(inp_path, cmd="ffprobe") |
| if ( |
| info["streams"][0]["channels"] == 2 |
| and info["streams"][0]["sample_rate"] == "44100" |
| ): |
| need_reformat = 0 |
| pre_fun._path_audio_( |
| inp_path, save_root_ins, save_root_vocal, format0 |
| ) |
| done = 1 |
| except: |
| need_reformat = 1 |
| traceback.print_exc() |
| if need_reformat == 1: |
| tmp_path = "%s/%s.reformatted.wav" % (tmp, os.path.basename(inp_path)) |
| os.system( |
| "ffmpeg -i %s -vn -acodec pcm_s16le -ac 2 -ar 44100 %s -y" |
| % (inp_path, tmp_path) |
| ) |
| inp_path = tmp_path |
| try: |
| if done == 0: |
| pre_fun._path_audio_( |
| inp_path, save_root_ins, save_root_vocal, format0 |
| ) |
| infos.append("%s->Success" % (os.path.basename(inp_path))) |
| yield "\n".join(infos) |
| except: |
| infos.append( |
| "%s->%s" % (os.path.basename(inp_path), traceback.format_exc()) |
| ) |
| yield "\n".join(infos) |
| except: |
| infos.append(traceback.format_exc()) |
| yield "\n".join(infos) |
| finally: |
| try: |
| if pre_fun is not None: |
| if model_name == "onnx_dereverb_By_FoxJoy": |
| del pre_fun.pred.model |
| del pre_fun.pred.model_ |
| else: |
| del pre_fun.model |
| del pre_fun |
| except: |
| traceback.print_exc() |
| print("clean_empty_cache") |
| if torch.cuda.is_available(): |
| torch.cuda.empty_cache() |
| yield "\n".join(infos) |
| |
| def publish_models(): |
| with gr.Column(): |
| gr.Markdown("# Publicar un modelo en la comunidad") |
| gr.Markdown("El modelo se va a verificar antes de publicarse. Importante que contenga el archivo **.pth** del modelo para que no sea rechazado.") |
| |
| model_name = gr.inputs.Textbox(lines=1, label="Nombre descriptivo del modelo Ej: (Ben 10 [Latino] - RVC V2 - 250 Epoch)") |
| url = gr.inputs.Textbox(lines=1, label="Enlace del modelo") |
| moder_version = gr.Radio( |
| label="Versión", |
| choices=["RVC v1", "RVC v2"], |
| value="RVC v1", |
| interactive=True, |
| ) |
| model_creator = gr.inputs.Textbox(lines=1, label="ID de discord del creador del modelo Ej: <@123455656>") |
| publish_model_button=gr.Button("Publicar modelo") |
| results = gr.Textbox(label="Resultado", value="", max_lines=20) |
| |
| publish_model_button.click(fn=publish_model_clicked, inputs=[model_name, url, moder_version, model_creator], outputs=results) |
|
|
| def download_model(): |
| gr.Markdown(value="# " + i18n("下载模型")) |
| gr.Markdown(value=i18n("它用于下载您的推理模型。")) |
| with gr.Row(): |
| model_url=gr.Textbox(label=i18n("网址")) |
| with gr.Row(): |
| download_model_status_bar=gr.Textbox(label=i18n("地位")) |
| with gr.Row(): |
| download_button=gr.Button(i18n("下载")) |
| download_button.click(fn=load_downloaded_model, inputs=[model_url], outputs=[download_model_status_bar]) |
|
|
| def download_backup(): |
| gr.Markdown(value="# " + i18n("下载备份")) |
| gr.Markdown(value=i18n("它用于下载您的训练备份。")) |
| with gr.Row(): |
| model_url=gr.Textbox(label=i18n("网址")) |
| with gr.Row(): |
| download_model_status_bar=gr.Textbox(label=i18n("地位")) |
| with gr.Row(): |
| download_button=gr.Button(i18n("下载")) |
| download_button.click(fn=load_downloaded_backup, inputs=[model_url], outputs=[download_model_status_bar]) |
|
|
| def update_dataset_list(name): |
| new_datasets = [] |
| for foldername in os.listdir("./datasets"): |
| if "." not in foldername: |
| new_datasets.append(os.path.join(find_folder_parent(".","pretrained"),"datasets",foldername)) |
| return gr.Dropdown.update(choices=new_datasets) |
|
|
| def download_dataset(trainset_dir4): |
| gr.Markdown(value="# " + i18n("下载数据集")) |
| gr.Markdown(value=i18n("下载兼容格式(.wav/.flac)的音频数据集以训练模型。")) |
| with gr.Row(): |
| dataset_url=gr.Textbox(label=i18n("网址")) |
| with gr.Row(): |
| load_dataset_status_bar=gr.Textbox(label=i18n("地位")) |
| with gr.Row(): |
| load_dataset_button=gr.Button(i18n("下载")) |
| load_dataset_button.click(fn=load_dowloaded_dataset, inputs=[dataset_url], outputs=[load_dataset_status_bar]) |
| load_dataset_status_bar.change(update_dataset_list, dataset_url, trainset_dir4) |
| |
| def youtube_separator(): |
| gr.Markdown(value="# " + i18n("单独的 YouTube 曲目")) |
| gr.Markdown(value=i18n("下载 YouTube 视频的音频并自动分离声音和伴奏轨道")) |
| with gr.Row(): |
| input_url = gr.inputs.Textbox(label=i18n("粘贴 YouTube 链接")) |
| output_path = gr.Textbox( |
| label=i18n("输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)"), |
| value=os.path.abspath(os.getcwd()).replace('\\', '/') + "/yt_downloads", |
| visible=False, |
| ) |
| save_root_ins = gr.Textbox( |
| label=i18n("输入待处理音频文件夹路径"), |
| value=((os.getcwd()).replace('\\', '/') + "/yt_downloads"), |
| visible=False, |
| ) |
| model_choose = gr.Textbox( |
| value=os.path.abspath(os.getcwd()).replace('\\', '/') + "/uvr5_weights/HP5_only_main_vocal", |
| visible=False, |
| ) |
| save_root_vocal = gr.Textbox( |
| label=i18n("指定输出主人声文件夹"), value="audios", |
| visible=False, |
| ) |
| opt_ins_root = gr.Textbox( |
| label=i18n("指定输出非主人声文件夹"), value="opt", |
| visible=False, |
| ) |
| format0 = gr.Radio( |
| label=i18n("导出文件格式"), |
| choices=["wav", "flac", "mp3", "m4a"], |
| value="wav", |
| interactive=True, |
| visible=False, |
| ) |
| with gr.Row(): |
| vc_output4 = gr.Textbox(label=i18n("地位")) |
| with gr.Row(): |
| but2 = gr.Button(i18n("下载并分离")) |
| but2.click( |
| uvr, |
| [ |
| input_url, |
| output_path, |
| model_choose, |
| save_root_ins, |
| save_root_vocal, |
| opt_ins_root, |
| format0, |
| ], |
| [vc_output4], |
| ) |