Create download_model.py
Browse files- download_model.py +61 -0
download_model.py
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
def extract_zip(extraction_folder, zip_name):
|
2 |
+
os.makedirs(extraction_folder)
|
3 |
+
with zipfile.ZipFile(zip_name, 'r') as zip_ref:
|
4 |
+
zip_ref.extractall(extraction_folder)
|
5 |
+
os.remove(zip_name)
|
6 |
+
|
7 |
+
index_filepath, model_filepath = None, None
|
8 |
+
for root, dirs, files in os.walk(extraction_folder):
|
9 |
+
for name in files:
|
10 |
+
if name.endswith('.index') and os.stat(os.path.join(root, name)).st_size > 1024 * 100:
|
11 |
+
index_filepath = os.path.join(root, name)
|
12 |
+
|
13 |
+
if name.endswith('.pth') and os.stat(os.path.join(root, name)).st_size > 1024 * 1024 * 40:
|
14 |
+
model_filepath = os.path.join(root, name)
|
15 |
+
|
16 |
+
if not model_filepath:
|
17 |
+
raise Exception(f'No .pth model file was found in the extracted zip. Please check {extraction_folder}.')
|
18 |
+
|
19 |
+
# move model and index file to extraction folder
|
20 |
+
os.rename(model_filepath, os.path.join(extraction_folder, os.path.basename(model_filepath)))
|
21 |
+
if index_filepath:
|
22 |
+
os.rename(index_filepath, os.path.join(extraction_folder, os.path.basename(index_filepath)))
|
23 |
+
|
24 |
+
# remove any unnecessary nested folders
|
25 |
+
for filepath in os.listdir(extraction_folder):
|
26 |
+
if os.path.isdir(os.path.join(extraction_folder, filepath)):
|
27 |
+
shutil.rmtree(os.path.join(extraction_folder, filepath))
|
28 |
+
|
29 |
+
|
30 |
+
def download_online_model(url, dir_name, models_dir='./rvc_models'):
|
31 |
+
try:
|
32 |
+
print(f'[~] Downloading voice model with name {dir_name}...')
|
33 |
+
zip_name = url.split('/')[-1]
|
34 |
+
extraction_folder = os.path.join(models_dir, dir_name)
|
35 |
+
|
36 |
+
if os.path.exists(extraction_folder):
|
37 |
+
return f'[!] Voice model directory {dir_name} already exists! Choose a different name for your voice model.'
|
38 |
+
|
39 |
+
# Download from pixeldrain
|
40 |
+
if 'pixeldrain.com' in url:
|
41 |
+
url = f'https://pixeldrain.com/api/file/{zip_name}'
|
42 |
+
urllib.request.urlretrieve(url, zip_name)
|
43 |
+
# Download from Google Drive
|
44 |
+
elif 'drive.google.com' in url:
|
45 |
+
zip_name = dir_name + ".zip"
|
46 |
+
gdown.download(url, output=zip_name, use_cookies=True, quiet=True)
|
47 |
+
else:
|
48 |
+
# General URL download
|
49 |
+
urllib.request.urlretrieve(url, zip_name)
|
50 |
+
|
51 |
+
print(f'[~] Extracting zip file...')
|
52 |
+
extract_zip(extraction_folder, zip_name)
|
53 |
+
print(f'[+] {dir_name} Model successfully downloaded!')
|
54 |
+
|
55 |
+
# Return success message after successful download
|
56 |
+
return f"[+] {dir_name} Model successfully downloaded!"
|
57 |
+
|
58 |
+
except Exception as e:
|
59 |
+
# Return the error message instead of raising an exception
|
60 |
+
return f'[!] Error: {str(e)}'
|
61 |
+
|