Hev832 commited on
Commit
72ae837
·
verified ·
1 Parent(s): fce4cb3

Create download_model.py

Browse files
Files changed (1) hide show
  1. 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
+