3
3
import hashlib
4
4
import requests
5
5
from io import BytesIO
6
- from typing import Dict
6
+ from typing import Dict , Tuple , Optional
7
7
from mmap import mmap , ACCESS_READ
8
8
9
9
from .log import logger
@@ -42,46 +42,54 @@ def check_model(
42
42
os .remove (bakfile )
43
43
return True
44
44
45
+ def check_folder (base_dir : Path , * innder_dirs : str , names : Tuple [str ], sha256_map : Dict [str , str ], update = False ) -> bool :
46
+ key = "sha256_"
47
+ current_dir = base_dir
48
+ for d in innder_dirs :
49
+ current_dir /= d
50
+ key += f"{ d } _"
51
+
52
+ for model in names :
53
+ menv = model .replace ("." , "_" )
54
+ if not check_model (
55
+ current_dir , model , sha256_map [f"{ key } { menv } " ], update
56
+ ):
57
+ return False
58
+ return True
45
59
46
60
def check_all_assets (base_dir : Path , sha256_map : Dict [str , str ], update = False ) -> bool :
47
61
logger .get_logger ().info ("checking assets..." )
48
62
49
- current_dir = base_dir / "asset"
50
- names = [
63
+ if not check_folder (base_dir , "asset" , names = (
51
64
"Decoder.pt" ,
52
65
"DVAE_full.pt" ,
53
- "GPT.pt " ,
66
+ "Embed.safetensors " ,
54
67
"Vocos.pt" ,
55
- ]
56
- for model in names :
57
- menv = model .replace ("." , "_" )
58
- if not check_model (
59
- current_dir , model , sha256_map [f"sha256_asset_{ menv } " ], update
60
- ):
61
- return False
68
+ ), sha256_map = sha256_map , update = update ):
69
+ return False
70
+
71
+ if not check_folder (base_dir , "asset" , "gpt" , names = (
72
+ "config.json" ,
73
+ "model.safetensors" ,
74
+ ), sha256_map = sha256_map , update = update ):
75
+ return False
62
76
63
- current_dir = base_dir / "asset" / "tokenizer"
64
- names = [
77
+ if not check_folder (base_dir , "asset" , "tokenizer" , names = (
65
78
"special_tokens_map.json" ,
66
79
"tokenizer_config.json" ,
67
80
"tokenizer.json" ,
68
- ]
69
- for model in names :
70
- menv = model .replace ("." , "_" )
71
- if not check_model (
72
- current_dir , model , sha256_map [f"sha256_asset_tokenizer_{ menv } " ], update
73
- ):
74
- return False
81
+ ), sha256_map = sha256_map , update = update ):
82
+ return False
75
83
76
84
logger .get_logger ().info ("all assets are already latest." )
77
85
return True
78
86
79
87
80
- def download_and_extract_tar_gz (url : str , folder : str ):
88
+ def download_and_extract_tar_gz (url : str , folder : str , headers : Optional [ Dict [ str , str ]] = None ):
81
89
import tarfile
82
90
83
91
logger .get_logger ().info (f"downloading { url } " )
84
- response = requests .get (url , stream = True , timeout = (5 , 10 ))
92
+ response = requests .get (url , headers = headers , stream = True , timeout = (10 , 3 ))
85
93
with BytesIO () as out_file :
86
94
out_file .write (response .content )
87
95
out_file .seek (0 )
@@ -91,11 +99,11 @@ def download_and_extract_tar_gz(url: str, folder: str):
91
99
logger .get_logger ().info (f"extracted into { folder } " )
92
100
93
101
94
- def download_and_extract_zip (url : str , folder : str ):
102
+ def download_and_extract_zip (url : str , folder : str , headers : Optional [ Dict [ str , str ]] = None ):
95
103
import zipfile
96
104
97
105
logger .get_logger ().info (f"downloading { url } " )
98
- response = requests .get (url , stream = True , timeout = (5 , 10 ))
106
+ response = requests .get (url , headers = headers , stream = True , timeout = (10 , 3 ))
99
107
with BytesIO () as out_file :
100
108
out_file .write (response .content )
101
109
out_file .seek (0 )
@@ -105,15 +113,15 @@ def download_and_extract_zip(url: str, folder: str):
105
113
logger .get_logger ().info (f"extracted into { folder } " )
106
114
107
115
108
- def download_dns_yaml (url : str , folder : str ):
116
+ def download_dns_yaml (url : str , folder : str , headers : Dict [ str , str ] ):
109
117
logger .get_logger ().info (f"downloading { url } " )
110
- response = requests .get (url , stream = True , timeout = (5 , 10 ))
118
+ response = requests .get (url , headers = headers , stream = True , timeout = (100 , 3 ))
111
119
with open (os .path .join (folder , "dns.yaml" ), "wb" ) as out_file :
112
120
out_file .write (response .content )
113
121
logger .get_logger ().info (f"downloaded into { folder } " )
114
122
115
123
116
- def download_all_assets (tmpdir : str , version = "0.2.7 " ):
124
+ def download_all_assets (tmpdir : str , version = "0.2.8 " ):
117
125
import subprocess
118
126
import platform
119
127
@@ -150,20 +158,13 @@ def download_all_assets(tmpdir: str, version="0.2.7"):
150
158
os .chmod (cmdfile , 0o755 )
151
159
subprocess .run ([cmdfile , "-notui" , "-w" , "0" , "assets/chtts" ])
152
160
except Exception :
153
- BASE_URL = "https://raw.gitcode.com/u011570312/RVC-Models-Downloader/assets/"
154
- suffix = {
155
- "darwin_amd64" : "987" ,
156
- "darwin_arm64" : "988" ,
157
- "linux_386" : "989" ,
158
- "linux_amd64" : "990" ,
159
- "linux_arm64" : "991" ,
160
- "windows_386" : "992" ,
161
- "windows_amd64" : "993" ,
162
- }[f"{ system_type } _{ architecture } " ]
163
- RVCMD_URL = BASE_URL + suffix
161
+ BASE_URL = "https://gitea.seku.su/fumiama/RVC-Models-Downloader/releases/download/"
162
+ suffix = "zip" if is_win else "tar.gz"
163
+ RVCMD_URL = BASE_URL + f"v{ version } /rvcmd_{ system_type } _{ architecture } .{ suffix } "
164
164
download_dns_yaml (
165
- "https://raw.gitcode.com/u011570312 /RVC-Models-Downloader/raw/main/dns.yaml" ,
165
+ "https://gitea.seku.su/fumiama /RVC-Models-Downloader/raw/branch /main/dns.yaml" ,
166
166
tmpdir ,
167
+ headers = {"user-agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" },
167
168
)
168
169
if is_win :
169
170
download_and_extract_zip (RVCMD_URL , tmpdir )
0 commit comments