mirror of
https://github.com/HVision-NKU/StoryDiffusion.git
synced 2026-10-18 21:21:04 +08:00
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
import yaml
|
|
import torch
|
|
from diffusers import StableDiffusionXLPipeline
|
|
from utils import PhotoMakerStableDiffusionXLPipeline
|
|
import os
|
|
|
|
def get_models_dict():
|
|
# 打开并读取YAML文件
|
|
with open('config/models.yaml', 'r') as stream:
|
|
try:
|
|
# 解析YAML文件内容
|
|
data = yaml.safe_load(stream)
|
|
|
|
# 此时 'data' 是一个Python字典,里面包含了YAML文件的所有数据
|
|
print(data)
|
|
return data
|
|
|
|
except yaml.YAMLError as exc:
|
|
# 如果在解析过程中发生了错误,打印异常信息
|
|
print(exc)
|
|
|
|
def load_models(model_info,device,photomaker_path):
|
|
path = model_info["path"]
|
|
single_files = model_info["single_files"]
|
|
use_safetensors = model_info["use_safetensors"]
|
|
model_type = model_info["model_type"]
|
|
|
|
if model_type == "original":
|
|
if single_files:
|
|
pipe = StableDiffusionXLPipeline.from_single_file(
|
|
path,
|
|
torch_dtype=torch.float16
|
|
)
|
|
else:
|
|
pipe = StableDiffusionXLPipeline.from_pretrained(path, torch_dtype=torch.float16, use_safetensors=use_safetensors)
|
|
pipe = pipe.to(device)
|
|
elif model_type == "Photomaker":
|
|
if single_files:
|
|
print("loading from a single_files")
|
|
pipe = PhotoMakerStableDiffusionXLPipeline.from_single_file(
|
|
path,
|
|
torch_dtype=torch.float16
|
|
)
|
|
else:
|
|
pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained(
|
|
path, torch_dtype=torch.float16, use_safetensors=use_safetensors)
|
|
pipe = pipe.to(device)
|
|
pipe.load_photomaker_adapter(
|
|
os.path.dirname(photomaker_path),
|
|
subfolder="",
|
|
weight_name=os.path.basename(photomaker_path),
|
|
trigger_word="img" # define the trigger word
|
|
)
|
|
pipe.fuse_lora()
|
|
else:
|
|
raise NotImplementedError("You should choice between original and Photomaker!",f"But you choice {model_type}")
|
|
return pipe |