dikdimon's picture
Upload extensions using SD-Hub extension
f4a41d8 verified
raw
history blame
3.34 kB
"""This modules uses the JSON files created by the
https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper extension"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "scripts"))
from scripts.Logger import Logger
from scripts.Utils import Utils
import modules.shared as shared
import modules.scripts as scripts
import json
class CivitaihelperPrompts():
"""
This class is used to get the prompts from the JSON files created by the
Stable-Diffusion-Webui-Civitai-Helper extension
"""
def __init__(self) -> None:
self.model_path = self.get_custom_model_folder()
self.utils = Utils()
self.logger = Logger()
self.logger.debug = False
def get_custom_model_folder(self) -> str:
"""Get the custom model folder from the command line options or the default folder
Returns:
str: the model folder path
"""
if shared.cmd_opts.ckpt_dir and os.path.isdir(shared.cmd_opts.ckpt_dir):
return shared.cmd_opts.ckpt_dir
else:
return os.path.join(scripts.basedir(), "models", "Stable-diffusion")
def get_civitAi_prompt_from_model(self, path: str) -> str:
"""Get the prompt from the civitai.info file
Args:
path (str): the path to the model
Returns:
str: the prompt
"""
path = path.replace(".ckpt", ".civitai.info").replace(
".safetensors", ".civitai.info")
path = self.utils.get_clean_checkpoint_path(path)
path = os.path.join(self.model_path, path)
self.logger.debug_log(f"{path} -> is file {os.path.isfile(path)}")
if not os.path.exists(os.path.realpath(path)):
return "{prompt};"
model_info = None
with open(os.path.realpath(path), 'r') as f:
try:
model_info = json.load(f)
except Exception as e:
self.logger.debug_log(f"Error loading civitai info: {e}", False)
return "{prompt};"
try:
self.logger.debug_log(f"len: {len(model_info['images'])}")
for i in range(0, len(model_info['images'])):
try:
info = model_info['images'][i]['meta']['prompt']
self.logger.debug_log(f"Prompt: {info}")
if info:
return f"{info};"
except:
pass
return "{prompt};"
except:
return "{prompt};"
def createCivitaiPromptString(self, checkpoints: str) -> str:
"""Create a string with all the prompts from the checkpoints
Indices are added to the prompts
Args:
checkpoints (str): the checkpoints
Returns:
str: the prompt string with indices
"""
checkpoints_list = self.utils.getCheckpointListFromInput(checkpoints)
prompts = ""
prompts_with_info = ""
for i, checkpoint in enumerate(checkpoints_list):
prompts += self.get_civitAi_prompt_from_model(checkpoint)
prompts_with_info += self.utils.add_index_to_string(
prompts, is_checkpoint=False)
self.logger.log_info("loaded all prompts")
return prompts_with_info