|
|
|
|
|
import os |
|
import json |
|
from . import util |
|
from modules import shared |
|
|
|
|
|
|
|
root_path = os.getcwd() |
|
|
|
|
|
|
|
|
|
folders = { |
|
"ti": os.path.join(root_path, "embeddings"), |
|
"hyper": os.path.join(root_path, "models", "hypernetworks"), |
|
"ckp": os.path.join(root_path, "models", "Stable-diffusion"), |
|
"lora": os.path.join(root_path, "models", "Lora"), |
|
} |
|
|
|
exts = (".bin", ".pt", ".safetensors", ".ckpt") |
|
info_ext = ".info" |
|
vae_suffix = ".vae" |
|
|
|
|
|
|
|
def get_custom_model_folder(): |
|
util.printD("Get Custom Model Folder") |
|
|
|
global folders |
|
|
|
if shared.cmd_opts.embeddings_dir and os.path.isdir(shared.cmd_opts.embeddings_dir): |
|
folders["ti"] = shared.cmd_opts.embeddings_dir |
|
|
|
if shared.cmd_opts.hypernetwork_dir and os.path.isdir(shared.cmd_opts.hypernetwork_dir): |
|
folders["hyper"] = shared.cmd_opts.hypernetwork_dir |
|
|
|
if shared.cmd_opts.ckpt_dir and os.path.isdir(shared.cmd_opts.ckpt_dir): |
|
folders["ckp"] = shared.cmd_opts.ckpt_dir |
|
|
|
if shared.cmd_opts.lora_dir and os.path.isdir(shared.cmd_opts.lora_dir): |
|
folders["lora"] = shared.cmd_opts.lora_dir |
|
|
|
|
|
|
|
|
|
|
|
|
|
def write_model_info(path, model_info): |
|
util.printD("Write model info to file: " + path) |
|
with open(os.path.realpath(path), 'w') as f: |
|
f.write(json.dumps(model_info, indent=4)) |
|
|
|
|
|
def load_model_info(path): |
|
|
|
model_info = None |
|
with open(os.path.realpath(path), 'r') as f: |
|
try: |
|
model_info = json.load(f) |
|
except Exception as e: |
|
util.printD("Selected file is not json: " + path) |
|
util.printD(e) |
|
return |
|
|
|
return model_info |
|
|
|
|
|
|
|
|
|
|
|
def get_model_names_by_type(model_type:str) -> list: |
|
|
|
model_folder = folders[model_type] |
|
|
|
|
|
|
|
model_names = [] |
|
for root, dirs, files in os.walk(model_folder, followlinks=True): |
|
for filename in files: |
|
item = os.path.join(root, filename) |
|
|
|
base, ext = os.path.splitext(item) |
|
if ext in exts: |
|
|
|
model_names.append(filename) |
|
|
|
|
|
return model_names |
|
|
|
|
|
|
|
def get_model_path_by_type_and_name(model_type:str, model_name:str) -> str: |
|
util.printD("Run get_model_path_by_type_and_name") |
|
if model_type not in folders.keys(): |
|
util.printD("unknown model_type: " + model_type) |
|
return |
|
|
|
if not model_name: |
|
util.printD("model name can not be empty") |
|
return |
|
|
|
folder = folders[model_type] |
|
|
|
|
|
model_root = "" |
|
model_path = "" |
|
for root, dirs, files in os.walk(folder, followlinks=True): |
|
for filename in files: |
|
if filename == model_name: |
|
|
|
model_root = root |
|
model_path = os.path.join(root, filename) |
|
return (model_root, model_path) |
|
|
|
return |
|
|
|
|
|
|
|
|