48
48
],
49
49
}
50
50
preset_models_on_modelscope = {
51
+ # Hunyuan DiT
51
52
"HunyuanDiT" : [
52
53
("modelscope/HunyuanDiT" , "t2i/clip_text_encoder/pytorch_model.bin" , "models/HunyuanDiT/t2i/clip_text_encoder" ),
53
54
("modelscope/HunyuanDiT" , "t2i/mt5/pytorch_model.bin" , "models/HunyuanDiT/t2i/mt5" ),
54
55
("modelscope/HunyuanDiT" , "t2i/model/pytorch_model_ema.pt" , "models/HunyuanDiT/t2i/model" ),
55
56
("modelscope/HunyuanDiT" , "t2i/sdxl-vae-fp16-fix/diffusion_pytorch_model.bin" , "models/HunyuanDiT/t2i/sdxl-vae-fp16-fix" ),
56
57
],
58
+ # Stable Video Diffusion
57
59
"stable-video-diffusion-img2vid-xt" : [
58
60
("AI-ModelScope/stable-video-diffusion-img2vid-xt" , "svd_xt.safetensors" , "models/stable_video_diffusion" ),
59
61
],
62
+ # ExVideo
60
63
"ExVideo-SVD-128f-v1" : [
61
64
("ECNU-CILab/ExVideo-SVD-128f-v1" , "model.fp16.safetensors" , "models/stable_video_diffusion" ),
62
65
],
66
+ # Stable Diffusion
67
+ "StableDiffusion_v15" : [
68
+ ("AI-ModelScope/stable-diffusion-v1-5" , "v1-5-pruned-emaonly.safetensors" , "models/stable_diffusion" ),
69
+ ],
70
+ "DreamShaper_8" : [
71
+ ("sd_lora/dreamshaper_8" , "dreamshaper_8.safetensors" , "models/stable_diffusion" ),
72
+ ],
73
+ "AingDiffusion_v12" : [
74
+ ("sd_lora/aingdiffusion_v12" , "aingdiffusion_v12.safetensors" , "models/stable_diffusion" ),
75
+ ],
76
+ "Flat2DAnimerge_v45Sharp" : [
77
+ ("sd_lora/Flat-2D-Animerge" , "flat2DAnimerge_v45Sharp.safetensors" , "models/stable_diffusion" ),
78
+ ],
79
+ # Textual Inversion
80
+ "TextualInversion_VeryBadImageNegative_v1.3" : [
81
+ ("sd_lora/verybadimagenegative_v1.3" , "verybadimagenegative_v1.3.pt" , "models/textual_inversion" ),
82
+ ],
83
+ # Stable Diffusion XL
84
+ "StableDiffusionXL_v1" : [
85
+ ("AI-ModelScope/stable-diffusion-xl-base-1.0" , "sd_xl_base_1.0.safetensors" , "models/stable_diffusion_xl" ),
86
+ ],
87
+ "BluePencilXL_v200" : [
88
+ ("sd_lora/bluePencilXL_v200" , "bluePencilXL_v200.safetensors" , "models/stable_diffusion_xl" ),
89
+ ],
90
+ "StableDiffusionXL_Turbo" : [
91
+ ("AI-ModelScope/sdxl-turbo" , "sd_xl_turbo_1.0_fp16.safetensors" , "models/stable_diffusion_xl_turbo" ),
92
+ ],
93
+ # ControlNet
94
+ "ControlNet_v11f1p_sd15_depth" : [
95
+ ("AI-ModelScope/ControlNet-v1-1" , "control_v11f1p_sd15_depth.pth" , "models/ControlNet" ),
96
+ ("sd_lora/Annotators" , "dpt_hybrid-midas-501f0c75.pt" , "models/Annotators" )
97
+ ],
98
+ "ControlNet_v11p_sd15_softedge" : [
99
+ ("AI-ModelScope/ControlNet-v1-1" , "control_v11p_sd15_softedge.pth" , "models/ControlNet" ),
100
+ ("sd_lora/Annotators" , "ControlNetHED.pth" , "models/Annotators" )
101
+ ],
102
+ "ControlNet_v11f1e_sd15_tile" : [
103
+ ("AI-ModelScope/ControlNet-v1-1" , "control_v11f1e_sd15_tile.pth" , "models/ControlNet" )
104
+ ],
105
+ "ControlNet_v11p_sd15_lineart" : [
106
+ ("AI-ModelScope/ControlNet-v1-1" , "control_v11p_sd15_lineart.pth" , "models/ControlNet" ),
107
+ ("sd_lora/Annotators" , "sk_model.pth" , "models/Annotators" ),
108
+ ("sd_lora/Annotators" , "sk_model2.pth" , "models/Annotators" )
109
+ ],
110
+ # AnimateDiff
111
+ "AnimateDiff_v2" : [
112
+ ("Shanghai_AI_Laboratory/animatediff" , "mm_sd_v15_v2.ckpt" , "models/AnimateDiff" ),
113
+ ],
114
+ "AnimateDiff_xl_beta" : [
115
+ ("Shanghai_AI_Laboratory/animatediff" , "mm_sdxl_v10_beta.ckpt" , "models/AnimateDiff" ),
116
+ ],
117
+ # RIFE
118
+ "RIFE" : [
119
+ ("Damo_XR_Lab/cv_rife_video-frame-interpolation" , "flownet.pkl" , "models/RIFE" ),
120
+ ],
121
+ # Beautiful Prompt
122
+ "BeautifulPrompt" : [
123
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "config.json" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
124
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "generation_config.json" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
125
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "model.safetensors" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
126
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "special_tokens_map.json" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
127
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "tokenizer.json" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
128
+ ("AI-ModelScope/pai-bloom-1b1-text2prompt-sd" , "tokenizer_config.json" , "models/BeautifulPrompt/pai-bloom-1b1-text2prompt-sd" ),
129
+ ],
130
+ # Translator
131
+ "opus-mt-zh-en" : [
132
+ ("moxying/opus-mt-zh-en" , "config.json" , "models/translator/opus-mt-zh-en" ),
133
+ ("moxying/opus-mt-zh-en" , "generation_config.json" , "models/translator/opus-mt-zh-en" ),
134
+ ("moxying/opus-mt-zh-en" , "metadata.json" , "models/translator/opus-mt-zh-en" ),
135
+ ("moxying/opus-mt-zh-en" , "pytorch_model.bin" , "models/translator/opus-mt-zh-en" ),
136
+ ("moxying/opus-mt-zh-en" , "source.spm" , "models/translator/opus-mt-zh-en" ),
137
+ ("moxying/opus-mt-zh-en" , "target.spm" , "models/translator/opus-mt-zh-en" ),
138
+ ("moxying/opus-mt-zh-en" , "tokenizer_config.json" , "models/translator/opus-mt-zh-en" ),
139
+ ("moxying/opus-mt-zh-en" , "vocab.json" , "models/translator/opus-mt-zh-en" ),
140
+ ],
141
+ # IP-Adapter
142
+ "IP-Adapter-SD" : [
143
+ ("AI-ModelScope/IP-Adapter" , "models/image_encoder/model.safetensors" , "models/IpAdapter/stable_diffusion/image_encoder" ),
144
+ ("AI-ModelScope/IP-Adapter" , "models/ip-adapter_sd15.bin" , "models/IpAdapter/stable_diffusion" ),
145
+ ],
146
+ "IP-Adapter-SDXL" : [
147
+ ("AI-ModelScope/IP-Adapter" , "sdxl_models/image_encoder/model.safetensors" , "models/IpAdapter/stable_diffusion_xl/image_encoder" ),
148
+ ("AI-ModelScope/IP-Adapter" , "sdxl_models/ip-adapter_sdxl.bin" , "models/IpAdapter/stable_diffusion_xl" ),
149
+ ],
63
150
}
64
151
Preset_model_id : TypeAlias = Literal [
65
152
"HunyuanDiT" ,
66
153
"stable-video-diffusion-img2vid-xt" ,
67
- "ExVideo-SVD-128f-v1"
154
+ "ExVideo-SVD-128f-v1" ,
155
+ "StableDiffusion_v15" ,
156
+ "DreamShaper_8" ,
157
+ "AingDiffusion_v12" ,
158
+ "Flat2DAnimerge_v45Sharp" ,
159
+ "TextualInversion_VeryBadImageNegative_v1.3" ,
160
+ "StableDiffusionXL_v1" ,
161
+ "BluePencilXL_v200" ,
162
+ "StableDiffusionXL_Turbo" ,
163
+ "ControlNet_v11f1p_sd15_depth" ,
164
+ "ControlNet_v11p_sd15_softedge" ,
165
+ "ControlNet_v11f1e_sd15_tile" ,
166
+ "ControlNet_v11p_sd15_lineart" ,
167
+ "AnimateDiff_v2" ,
168
+ "AnimateDiff_xl_beta" ,
169
+ "RIFE" ,
170
+ "BeautifulPrompt" ,
171
+ "opus-mt-zh-en" ,
172
+ "IP-Adapter-SD" ,
173
+ "IP-Adapter-SDXL" ,
68
174
]
69
175
Preset_model_website : TypeAlias = Literal [
70
176
"HuggingFace" ,
80
186
}
81
187
82
188
189
+ def download_models (
190
+ model_id_list : List [Preset_model_id ] = [],
191
+ downloading_priority : List [Preset_model_website ] = ["ModelScope" , "HuggingFace" ],
192
+ ):
193
+ downloaded_files = []
194
+ for model_id in model_id_list :
195
+ for website in downloading_priority :
196
+ if model_id in website_to_preset_models [website ]:
197
+ for model_id , origin_file_path , local_dir in website_to_preset_models [website ][model_id ]:
198
+ # Check if the file is downloaded.
199
+ file_to_download = os .path .join (local_dir , os .path .basename (origin_file_path ))
200
+ if file_to_download in downloaded_files :
201
+ continue
202
+ # Download
203
+ website_to_download_fn [website ](model_id , origin_file_path , local_dir )
204
+ if os .path .basename (origin_file_path ) in os .listdir (local_dir ):
205
+ downloaded_files .append (file_to_download )
206
+ return downloaded_files
207
+
208
+
83
209
class ModelManager :
84
210
def __init__ (
85
211
self ,
@@ -94,28 +220,19 @@ def __init__(
94
220
self .model = {}
95
221
self .model_path = {}
96
222
self .textual_inversion_dict = {}
97
- downloaded_files = self . download_models (model_id_list , downloading_priority )
223
+ downloaded_files = download_models (model_id_list , downloading_priority )
98
224
self .load_models (downloaded_files + file_path_list )
99
225
100
- def download_models (
226
+ def load_model_from_origin (
101
227
self ,
102
- model_id_list : List [Preset_model_id ] = [],
103
- downloading_priority : List [Preset_model_website ] = ["ModelScope" , "HuggingFace" ],
228
+ download_from : Preset_model_website = "ModelScope" ,
229
+ model_id = "" ,
230
+ origin_file_path = "" ,
231
+ local_dir = ""
104
232
):
105
- downloaded_files = []
106
- for model_id in model_id_list :
107
- for website in downloading_priority :
108
- if model_id in website_to_preset_models [website ]:
109
- for model_id , origin_file_path , local_dir in website_to_preset_models [website ][model_id ]:
110
- # Check if the file is downloaded.
111
- file_to_download = os .path .join (local_dir , os .path .basename (origin_file_path ))
112
- if file_to_download in downloaded_files :
113
- continue
114
- # Download
115
- website_to_download_fn [website ](model_id , origin_file_path , local_dir )
116
- if os .path .basename (origin_file_path ) in os .listdir (local_dir ):
117
- downloaded_files .append (file_to_download )
118
- return downloaded_files
233
+ website_to_download_fn [download_from ](model_id , origin_file_path , local_dir )
234
+ file_to_download = os .path .join (local_dir , os .path .basename (origin_file_path ))
235
+ self .load_model (file_to_download )
119
236
120
237
def is_stable_video_diffusion (self , state_dict ):
121
238
param_name = "model.diffusion_model.output_blocks.9.1.time_stack.0.norm_in.weight"
@@ -158,7 +275,7 @@ def is_sd_lora(self, state_dict):
158
275
159
276
def is_translator (self , state_dict ):
160
277
param_name = "model.encoder.layers.5.self_attn_layer_norm.weight"
161
- return param_name in state_dict and len (state_dict ) == 254
278
+ return param_name in state_dict and len (state_dict ) == 258
162
279
163
280
def is_ipadapter (self , state_dict ):
164
281
return "image_proj" in state_dict and "ip_adapter" in state_dict and state_dict ["image_proj" ]["proj.weight" ].shape == torch .Size ([3072 , 1024 ])
0 commit comments