mirror of
https://github.com/lllyasviel/Fooocus.git
synced 2026-08-16 13:13:16 +02:00
Sync branch 'mashb1t_main' with develop_upstream
This commit is contained in:
+1209
-758
File diff suppressed because it is too large
Load Diff
+143
-5
@@ -7,6 +7,7 @@ import args_manager
|
||||
import tempfile
|
||||
import modules.flags
|
||||
import modules.sdxl_styles
|
||||
from modules.hash_cache import init_cache
|
||||
|
||||
from modules.model_loader import load_file_from_url
|
||||
from modules.extra_utils import makedirs_with_log, get_files_from_folder, try_eval_env_var
|
||||
@@ -98,7 +99,6 @@ def try_load_deprecated_user_path_config():
|
||||
|
||||
try_load_deprecated_user_path_config()
|
||||
|
||||
|
||||
def get_presets():
|
||||
preset_folder = 'presets'
|
||||
presets = ['initial']
|
||||
@@ -106,8 +106,11 @@ def get_presets():
|
||||
print('No presets found.')
|
||||
return presets
|
||||
|
||||
return presets + [f[:f.index('.json')] for f in os.listdir(preset_folder) if f.endswith('.json')]
|
||||
return presets + [f[:f.index(".json")] for f in os.listdir(preset_folder) if f.endswith('.json')]
|
||||
|
||||
def update_presets():
|
||||
global available_presets
|
||||
available_presets = get_presets()
|
||||
|
||||
def try_get_preset_content(preset):
|
||||
if isinstance(preset, str):
|
||||
@@ -198,6 +201,7 @@ path_clip_vision = get_dir_or_set_default('path_clip_vision', '../models/clip_vi
|
||||
path_fooocus_expansion = get_dir_or_set_default('path_fooocus_expansion', '../models/prompt_expansion/fooocus_expansion')
|
||||
path_wildcards = get_dir_or_set_default('path_wildcards', '../wildcards/')
|
||||
path_safety_checker = get_dir_or_set_default('path_safety_checker', '../models/safety_checker/')
|
||||
path_sam = get_dir_or_set_default('path_sam', '../models/sam/')
|
||||
path_outputs = get_path_output()
|
||||
|
||||
|
||||
@@ -397,7 +401,7 @@ default_prompt = get_config_item_or_set_default(
|
||||
default_performance = get_config_item_or_set_default(
|
||||
key='default_performance',
|
||||
default_value=Performance.SPEED.value,
|
||||
validator=lambda x: x in Performance.list(),
|
||||
validator=lambda x: x in Performance.values(),
|
||||
expected_type=str
|
||||
)
|
||||
default_advanced_checkbox = get_config_item_or_set_default(
|
||||
@@ -442,6 +446,12 @@ embeddings_downloads = get_config_item_or_set_default(
|
||||
validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items()),
|
||||
expected_type=dict
|
||||
)
|
||||
vae_downloads = get_config_item_or_set_default(
|
||||
key='vae_downloads',
|
||||
default_value={},
|
||||
validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items()),
|
||||
expected_type=dict
|
||||
)
|
||||
available_aspect_ratios = get_config_item_or_set_default(
|
||||
key='available_aspect_ratios',
|
||||
default_value=modules.flags.sdxl_aspect_ratios,
|
||||
@@ -460,6 +470,12 @@ default_inpaint_engine_version = get_config_item_or_set_default(
|
||||
validator=lambda x: x in modules.flags.inpaint_engine_versions,
|
||||
expected_type=str
|
||||
)
|
||||
default_inpaint_method = get_config_item_or_set_default(
|
||||
key='default_inpaint_method',
|
||||
default_value=modules.flags.inpaint_option_default,
|
||||
validator=lambda x: x in modules.flags.inpaint_options,
|
||||
expected_type=str
|
||||
)
|
||||
default_cfg_tsnr = get_config_item_or_set_default(
|
||||
key='default_cfg_tsnr',
|
||||
default_value=7.0,
|
||||
@@ -484,6 +500,11 @@ default_overwrite_switch = get_config_item_or_set_default(
|
||||
validator=lambda x: isinstance(x, int),
|
||||
expected_type=int
|
||||
)
|
||||
default_overwrite_upscale = get_config_item_or_set_default(
|
||||
key='default_overwrite_upscale',
|
||||
default_value=-1,
|
||||
validator=lambda x: isinstance(x, numbers.Number)
|
||||
)
|
||||
example_inpaint_prompts = get_config_item_or_set_default(
|
||||
key='example_inpaint_prompts',
|
||||
default_value=[
|
||||
@@ -492,6 +513,50 @@ example_inpaint_prompts = get_config_item_or_set_default(
|
||||
validator=lambda x: isinstance(x, list) and all(isinstance(v, str) for v in x),
|
||||
expected_type=list
|
||||
)
|
||||
example_enhance_detection_prompts = get_config_item_or_set_default(
|
||||
key='example_enhance_detection_prompts',
|
||||
default_value=[
|
||||
'face', 'eye', 'mouth', 'hair', 'hand', 'body'
|
||||
],
|
||||
validator=lambda x: isinstance(x, list) and all(isinstance(v, str) for v in x),
|
||||
expected_type=list
|
||||
)
|
||||
default_enhance_tabs = get_config_item_or_set_default(
|
||||
key='default_enhance_tabs',
|
||||
default_value=3,
|
||||
validator=lambda x: isinstance(x, int) and 1 <= x <= 5,
|
||||
expected_type=int
|
||||
)
|
||||
default_enhance_checkbox = get_config_item_or_set_default(
|
||||
key='default_enhance_checkbox',
|
||||
default_value=False,
|
||||
validator=lambda x: isinstance(x, bool),
|
||||
expected_type=bool
|
||||
)
|
||||
default_enhance_uov_method = get_config_item_or_set_default(
|
||||
key='default_enhance_uov_method',
|
||||
default_value=modules.flags.disabled,
|
||||
validator=lambda x: x in modules.flags.uov_list,
|
||||
expected_type=int
|
||||
)
|
||||
default_enhance_uov_processing_order = get_config_item_or_set_default(
|
||||
key='default_enhance_uov_processing_order',
|
||||
default_value=modules.flags.enhancement_uov_before,
|
||||
validator=lambda x: x in modules.flags.enhancement_uov_processing_order,
|
||||
expected_type=int
|
||||
)
|
||||
default_enhance_uov_prompt_type = get_config_item_or_set_default(
|
||||
key='default_enhance_uov_prompt_type',
|
||||
default_value=modules.flags.enhancement_uov_prompt_type_original,
|
||||
validator=lambda x: x in modules.flags.enhancement_uov_prompt_types,
|
||||
expected_type=int
|
||||
)
|
||||
default_sam_max_detections = get_config_item_or_set_default(
|
||||
key='default_sam_max_detections',
|
||||
default_value=0,
|
||||
validator=lambda x: isinstance(x, int) and 0 <= x <= 10,
|
||||
expected_type=int
|
||||
)
|
||||
default_black_out_nsfw = get_config_item_or_set_default(
|
||||
key='default_black_out_nsfw',
|
||||
default_value=False,
|
||||
@@ -518,10 +583,39 @@ metadata_created_by = get_config_item_or_set_default(
|
||||
)
|
||||
|
||||
example_inpaint_prompts = [[x] for x in example_inpaint_prompts]
|
||||
example_enhance_detection_prompts = [[x] for x in example_enhance_detection_prompts]
|
||||
|
||||
default_inpaint_mask_model = get_config_item_or_set_default(
|
||||
key='default_inpaint_mask_model',
|
||||
default_value='isnet-general-use',
|
||||
validator=lambda x: x in modules.flags.inpaint_mask_models,
|
||||
expected_type=str
|
||||
)
|
||||
|
||||
default_enhance_inpaint_mask_model = get_config_item_or_set_default(
|
||||
key='default_enhance_inpaint_mask_model',
|
||||
default_value='sam',
|
||||
validator=lambda x: x in modules.flags.inpaint_mask_models,
|
||||
expected_type=str
|
||||
)
|
||||
|
||||
default_inpaint_mask_cloth_category = get_config_item_or_set_default(
|
||||
key='default_inpaint_mask_cloth_category',
|
||||
default_value='full',
|
||||
validator=lambda x: x in modules.flags.inpaint_mask_cloth_category,
|
||||
expected_type=str
|
||||
)
|
||||
|
||||
default_inpaint_mask_sam_model = get_config_item_or_set_default(
|
||||
key='default_inpaint_mask_sam_model',
|
||||
default_value='vit_b',
|
||||
validator=lambda x: x in [y[1] for y in modules.flags.inpaint_mask_sam_model if y[1] == x],
|
||||
expected_type=str
|
||||
)
|
||||
|
||||
config_dict["default_loras"] = default_loras = default_loras[:default_max_lora_number] + [[True, 'None', 1.0] for _ in range(default_max_lora_number - len(default_loras))]
|
||||
|
||||
# mapping config to meta parameter
|
||||
# mapping config to meta parameter
|
||||
possible_preset_keys = {
|
||||
"default_model": "base_model",
|
||||
"default_refiner": "refiner_model",
|
||||
@@ -537,6 +631,7 @@ possible_preset_keys = {
|
||||
"default_sampler": "sampler",
|
||||
"default_scheduler": "scheduler",
|
||||
"default_overwrite_step": "steps",
|
||||
"default_overwrite_switch": "overwrite_switch",
|
||||
"default_performance": "performance",
|
||||
"default_image_number": "image_number",
|
||||
"default_prompt": "prompt",
|
||||
@@ -547,7 +642,10 @@ possible_preset_keys = {
|
||||
"checkpoint_downloads": "checkpoint_downloads",
|
||||
"embeddings_downloads": "embeddings_downloads",
|
||||
"lora_downloads": "lora_downloads",
|
||||
"default_vae": "vae"
|
||||
"vae_downloads": "vae_downloads",
|
||||
"default_vae": "vae",
|
||||
# "default_inpaint_method": "inpaint_method", # disabled so inpaint mode doesn't refresh after every preset change
|
||||
"default_inpaint_engine_version": "inpaint_engine_version",
|
||||
}
|
||||
|
||||
REWRITE_PRESET = False
|
||||
@@ -754,4 +852,44 @@ def downloading_safety_checker_model():
|
||||
return os.path.join(path_safety_checker, 'stable-diffusion-safety-checker.bin')
|
||||
|
||||
|
||||
def download_sam_model(sam_model: str) -> str:
|
||||
match sam_model:
|
||||
case 'vit_b':
|
||||
return downloading_sam_vit_b()
|
||||
case 'vit_l':
|
||||
return downloading_sam_vit_l()
|
||||
case 'vit_h':
|
||||
return downloading_sam_vit_h()
|
||||
case _:
|
||||
raise ValueError(f"sam model {sam_model} does not exist.")
|
||||
|
||||
|
||||
def downloading_sam_vit_b():
|
||||
load_file_from_url(
|
||||
url='https://huggingface.co/mashb1t/misc/resolve/main/sam_vit_b_01ec64.pth',
|
||||
model_dir=path_sam,
|
||||
file_name='sam_vit_b_01ec64.pth'
|
||||
)
|
||||
return os.path.join(path_sam, 'sam_vit_b_01ec64.pth')
|
||||
|
||||
|
||||
def downloading_sam_vit_l():
|
||||
load_file_from_url(
|
||||
url='https://huggingface.co/mashb1t/misc/resolve/main/sam_vit_l_0b3195.pth',
|
||||
model_dir=path_sam,
|
||||
file_name='sam_vit_l_0b3195.pth'
|
||||
)
|
||||
return os.path.join(path_sam, 'sam_vit_l_0b3195.pth')
|
||||
|
||||
|
||||
def downloading_sam_vit_h():
|
||||
load_file_from_url(
|
||||
url='https://huggingface.co/mashb1t/misc/resolve/main/sam_vit_h_4b8939.pth',
|
||||
model_dir=path_sam,
|
||||
file_name='sam_vit_h_4b8939.pth'
|
||||
)
|
||||
return os.path.join(path_sam, 'sam_vit_h_4b8939.pth')
|
||||
|
||||
|
||||
update_files()
|
||||
init_cache(model_filenames, paths_checkpoints, lora_filenames, paths_loras)
|
||||
|
||||
+23
-5
@@ -8,9 +8,15 @@ upscale_15 = 'Upscale (1.5x)'
|
||||
upscale_2 = 'Upscale (2x)'
|
||||
upscale_fast = 'Upscale (Fast 2x)'
|
||||
|
||||
uov_list = [
|
||||
disabled, subtle_variation, strong_variation, upscale_15, upscale_2, upscale_fast
|
||||
]
|
||||
uov_list = [disabled, subtle_variation, strong_variation, upscale_15, upscale_2, upscale_fast]
|
||||
|
||||
enhancement_uov_before = "Before First Enhancement"
|
||||
enhancement_uov_after = "After Last Enhancement"
|
||||
enhancement_uov_processing_order = [enhancement_uov_before, enhancement_uov_after]
|
||||
|
||||
enhancement_uov_prompt_type_original = 'Original Prompts'
|
||||
enhancement_uov_prompt_type_last_filled = 'Last Filled Enhancement Prompts'
|
||||
enhancement_uov_prompt_types = [enhancement_uov_prompt_type_original, enhancement_uov_prompt_type_last_filled]
|
||||
|
||||
CIVITAI_NO_KARRAS = ["euler", "euler_ancestral", "heun", "dpm_fast", "dpm_adaptive", "ddim", "uni_pc"]
|
||||
|
||||
@@ -75,6 +81,10 @@ default_parameters = {
|
||||
|
||||
output_formats = ['png', 'jpeg', 'webp']
|
||||
|
||||
inpaint_mask_models = ['u2net', 'u2netp', 'u2net_human_seg', 'u2net_cloth_seg', 'silueta', 'isnet-general-use', 'isnet-anime', 'sam']
|
||||
inpaint_mask_cloth_category = ['full', 'upper', 'lower']
|
||||
inpaint_mask_sam_model = ['vit_b', 'vit_l', 'vit_h']
|
||||
|
||||
inpaint_engine_versions = ['None', 'v1', 'v2.5', 'v2.6']
|
||||
inpaint_option_default = 'Inpaint or Outpaint (default)'
|
||||
inpaint_option_detail = 'Improve Detail (face, hand, eyes, etc.)'
|
||||
@@ -104,7 +114,6 @@ metadata_scheme = [
|
||||
]
|
||||
|
||||
controlnet_image_count = 4
|
||||
preparation_step_count = 13
|
||||
|
||||
|
||||
class OutputFormat(Enum):
|
||||
@@ -154,7 +163,7 @@ class Performance(Enum):
|
||||
|
||||
@classmethod
|
||||
def list(cls) -> list:
|
||||
return list(map(lambda c: c.value, cls))
|
||||
return list(map(lambda c: (c.name, c.value), cls))
|
||||
|
||||
@classmethod
|
||||
def values(cls) -> list:
|
||||
@@ -178,3 +187,12 @@ class Performance(Enum):
|
||||
|
||||
def lora_filename(self) -> str | None:
|
||||
return PerformanceLoRA[self.name].value if self.name in PerformanceLoRA.__members__ else None
|
||||
|
||||
|
||||
performance_selections = []
|
||||
|
||||
for name, value in Performance.list():
|
||||
restricted_text = ''
|
||||
if Performance.has_restricted_features(value):
|
||||
restricted_text = '*'
|
||||
performance_selections.append((f'{value} <span style="color: grey;"> \U00002223 {Steps[name].value} steps {restricted_text}</span>', Performance[name].value))
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
import json
|
||||
import os
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from multiprocessing import cpu_count
|
||||
|
||||
import args_manager
|
||||
from modules.util import get_file_from_folder_list
|
||||
from modules.util import sha256, HASH_SHA256_LENGTH
|
||||
|
||||
hash_cache_filename = 'hash_cache.txt'
|
||||
hash_cache = {}
|
||||
|
||||
|
||||
def sha256_from_cache(filepath):
|
||||
global hash_cache
|
||||
if filepath not in hash_cache:
|
||||
print(f"[Cache] Calculating sha256 for {filepath}")
|
||||
hash_value = sha256(filepath)
|
||||
print(f"[Cache] sha256 for {filepath}: {hash_value}")
|
||||
hash_cache[filepath] = hash_value
|
||||
save_cache_to_file(filepath, hash_value)
|
||||
|
||||
return hash_cache[filepath]
|
||||
|
||||
|
||||
def load_cache_from_file():
|
||||
global hash_cache
|
||||
|
||||
try:
|
||||
if os.path.exists(hash_cache_filename):
|
||||
with open(hash_cache_filename, 'rt', encoding='utf-8') as fp:
|
||||
for line in fp:
|
||||
entry = json.loads(line)
|
||||
for filepath, hash_value in entry.items():
|
||||
if not os.path.exists(filepath) or not isinstance(hash_value, str) and len(hash_value) != HASH_SHA256_LENGTH:
|
||||
print(f'[Cache] Skipping invalid cache entry: {filepath}')
|
||||
continue
|
||||
hash_cache[filepath] = hash_value
|
||||
except Exception as e:
|
||||
print(f'[Cache] Loading failed: {e}')
|
||||
|
||||
|
||||
def save_cache_to_file(filename=None, hash_value=None):
|
||||
global hash_cache
|
||||
|
||||
if filename is not None and hash_value is not None:
|
||||
items = [(filename, hash_value)]
|
||||
mode = 'at'
|
||||
else:
|
||||
items = sorted(hash_cache.items())
|
||||
mode = 'wt'
|
||||
|
||||
try:
|
||||
with open(hash_cache_filename, mode, encoding='utf-8') as fp:
|
||||
for filepath, hash_value in items:
|
||||
json.dump({filepath: hash_value}, fp)
|
||||
fp.write('\n')
|
||||
except Exception as e:
|
||||
print(f'[Cache] Saving failed: {e}')
|
||||
|
||||
|
||||
def init_cache(model_filenames, paths_checkpoints, lora_filenames, paths_loras):
|
||||
load_cache_from_file()
|
||||
|
||||
if args_manager.args.rebuild_hash_cache:
|
||||
max_workers = args_manager.args.rebuild_hash_cache if args_manager.args.rebuild_hash_cache > 0 else cpu_count()
|
||||
rebuild_cache(lora_filenames, model_filenames, paths_checkpoints, paths_loras, max_workers)
|
||||
|
||||
# write cache to file again for sorting and cleanup of invalid cache entries
|
||||
save_cache_to_file()
|
||||
|
||||
|
||||
def rebuild_cache(lora_filenames, model_filenames, paths_checkpoints, paths_loras, max_workers=cpu_count()):
|
||||
def thread(filename, paths):
|
||||
filepath = get_file_from_folder_list(filename, paths)
|
||||
sha256_from_cache(filepath)
|
||||
|
||||
print('[Cache] Rebuilding hash cache')
|
||||
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
||||
for model_filename in model_filenames:
|
||||
executor.submit(thread, model_filename, paths_checkpoints)
|
||||
for lora_filename in lora_filenames:
|
||||
executor.submit(thread, lora_filename, paths_loras)
|
||||
print('[Cache] Done')
|
||||
+40
-17
@@ -9,18 +9,18 @@ from PIL import Image
|
||||
import fooocus_version
|
||||
import modules.config
|
||||
import modules.sdxl_styles
|
||||
from modules import hash_cache
|
||||
from modules.flags import MetadataScheme, Performance, Steps
|
||||
from modules.flags import SAMPLERS, CIVITAI_NO_KARRAS
|
||||
from modules.util import quote, unquote, extract_styles_from_prompt, is_json, get_file_from_folder_list, sha256
|
||||
from modules.hash_cache import sha256_from_cache
|
||||
from modules.util import quote, unquote, extract_styles_from_prompt, is_json, get_file_from_folder_list
|
||||
|
||||
re_param_code = r'\s*(\w[\w \-/]+):\s*("(?:\\.|[^\\"])+"|[^,]*)(?:,|$)'
|
||||
re_param = re.compile(re_param_code)
|
||||
re_imagesize = re.compile(r"^(\d+)x(\d+)$")
|
||||
|
||||
hash_cache = {}
|
||||
|
||||
|
||||
def load_parameter_button_click(raw_metadata: dict | str, is_generating: bool):
|
||||
def load_parameter_button_click(raw_metadata: dict | str, is_generating: bool, inpaint_mode: str):
|
||||
loaded_parameter_dict = raw_metadata
|
||||
if isinstance(raw_metadata, str):
|
||||
loaded_parameter_dict = json.loads(raw_metadata)
|
||||
@@ -49,6 +49,8 @@ def load_parameter_button_click(raw_metadata: dict | str, is_generating: bool):
|
||||
get_str('scheduler', 'Scheduler', loaded_parameter_dict, results)
|
||||
get_str('vae', 'VAE', loaded_parameter_dict, results)
|
||||
get_seed('seed', 'Seed', loaded_parameter_dict, results)
|
||||
get_inpaint_engine_version('inpaint_engine_version', 'Inpaint Engine Version', loaded_parameter_dict, results, inpaint_mode)
|
||||
get_inpaint_method('inpaint_method', 'Inpaint Mode', loaded_parameter_dict, results)
|
||||
|
||||
if is_generating:
|
||||
results.append(gr.update())
|
||||
@@ -160,6 +162,36 @@ def get_seed(key: str, fallback: str | None, source_dict: dict, results: list, d
|
||||
results.append(gr.update())
|
||||
|
||||
|
||||
def get_inpaint_engine_version(key: str, fallback: str | None, source_dict: dict, results: list, inpaint_mode: str, default=None) -> str | None:
|
||||
try:
|
||||
h = source_dict.get(key, source_dict.get(fallback, default))
|
||||
assert isinstance(h, str) and h in modules.flags.inpaint_engine_versions
|
||||
if inpaint_mode != modules.flags.inpaint_option_detail:
|
||||
results.append(h)
|
||||
else:
|
||||
results.append(gr.update())
|
||||
results.append(h)
|
||||
return h
|
||||
except:
|
||||
results.append(gr.update())
|
||||
results.append('empty')
|
||||
return None
|
||||
|
||||
|
||||
def get_inpaint_method(key: str, fallback: str | None, source_dict: dict, results: list, default=None) -> str | None:
|
||||
try:
|
||||
h = source_dict.get(key, source_dict.get(fallback, default))
|
||||
assert isinstance(h, str) and h in modules.flags.inpaint_options
|
||||
results.append(h)
|
||||
for i in range(modules.config.default_enhance_tabs):
|
||||
results.append(h)
|
||||
return h
|
||||
except:
|
||||
results.append(gr.update())
|
||||
for i in range(modules.config.default_enhance_tabs):
|
||||
results.append(gr.update())
|
||||
|
||||
|
||||
def get_adm_guidance(key: str, fallback: str | None, source_dict: dict, results: list, default=None):
|
||||
try:
|
||||
h = source_dict.get(key, source_dict.get(fallback, default))
|
||||
@@ -215,14 +247,6 @@ def get_lora(key: str, fallback: str | None, source_dict: dict, results: list, p
|
||||
results.append(1)
|
||||
|
||||
|
||||
def get_sha256(filepath):
|
||||
global hash_cache
|
||||
if filepath not in hash_cache:
|
||||
hash_cache[filepath] = sha256(filepath)
|
||||
|
||||
return hash_cache[filepath]
|
||||
|
||||
|
||||
def parse_meta_from_preset(preset_content):
|
||||
assert isinstance(preset_content, dict)
|
||||
preset_prepared = {}
|
||||
@@ -245,8 +269,7 @@ def parse_meta_from_preset(preset_content):
|
||||
height = height[:height.index(" ")]
|
||||
preset_prepared[meta_key] = (width, height)
|
||||
else:
|
||||
preset_prepared[meta_key] = items[settings_key] if settings_key in items and items[
|
||||
settings_key] is not None else getattr(modules.config, settings_key)
|
||||
preset_prepared[meta_key] = items[settings_key] if settings_key in items and items[settings_key] is not None else getattr(modules.config, settings_key)
|
||||
|
||||
if settings_key == "default_styles" or settings_key == "default_aspect_ratio":
|
||||
preset_prepared[meta_key] = str(preset_prepared[meta_key])
|
||||
@@ -290,18 +313,18 @@ class MetadataParser(ABC):
|
||||
self.base_model_name = Path(base_model_name).stem
|
||||
|
||||
base_model_path = get_file_from_folder_list(base_model_name, modules.config.paths_checkpoints)
|
||||
self.base_model_hash = get_sha256(base_model_path)
|
||||
self.base_model_hash = sha256_from_cache(base_model_path)
|
||||
|
||||
if refiner_model_name not in ['', 'None']:
|
||||
self.refiner_model_name = Path(refiner_model_name).stem
|
||||
refiner_model_path = get_file_from_folder_list(refiner_model_name, modules.config.paths_checkpoints)
|
||||
self.refiner_model_hash = get_sha256(refiner_model_path)
|
||||
self.refiner_model_hash = sha256_from_cache(refiner_model_path)
|
||||
|
||||
self.loras = []
|
||||
for (lora_name, lora_weight) in loras:
|
||||
if lora_name != 'None':
|
||||
lora_path = get_file_from_folder_list(lora_name, modules.config.paths_loras)
|
||||
lora_hash = get_sha256(lora_path)
|
||||
lora_hash = sha256_from_cache(lora_path)
|
||||
self.loras.append((Path(lora_name).stem, lora_weight, lora_hash))
|
||||
self.vae_name = Path(vae_name).stem
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ def sort_styles(selected):
|
||||
global all_styles
|
||||
unselected = [y for y in all_styles if y not in selected]
|
||||
sorted_styles = selected + unselected
|
||||
"""
|
||||
try:
|
||||
with open('sorted_styles.json', 'wt', encoding='utf-8') as fp:
|
||||
json.dump(sorted_styles, fp, indent=4)
|
||||
@@ -44,6 +45,7 @@ def sort_styles(selected):
|
||||
print('Write style sorting failed.')
|
||||
print(e)
|
||||
all_styles = sorted_styles
|
||||
"""
|
||||
return gr.CheckboxGroup.update(choices=sorted_styles)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import translators
|
||||
from functools import lru_cache
|
||||
|
||||
@lru_cache(maxsize=32, typed=False)
|
||||
def translate2en(text, element):
|
||||
if not text:
|
||||
return text
|
||||
|
||||
try:
|
||||
result = translators.translate_text(text,to_language='en')
|
||||
print(f'[Parameters] Translated {element}: {result}')
|
||||
return result
|
||||
except Exception as e:
|
||||
print(f'[Parameters] Error during translation of {element}: {e}')
|
||||
return text
|
||||
+7
-8
@@ -1,13 +1,11 @@
|
||||
import os
|
||||
import torch
|
||||
import modules.core as core
|
||||
|
||||
from ldm_patched.pfn.architecture.RRDB import RRDBNet as ESRGAN
|
||||
from ldm_patched.contrib.external_upscale_model import ImageUpscaleWithModel
|
||||
from collections import OrderedDict
|
||||
from modules.config import path_upscale_models
|
||||
|
||||
model_filename = os.path.join(path_upscale_models, 'fooocus_upscaler_s409985e5.bin')
|
||||
import modules.core as core
|
||||
import torch
|
||||
from ldm_patched.contrib.external_upscale_model import ImageUpscaleWithModel
|
||||
from ldm_patched.pfn.architecture.RRDB import RRDBNet as ESRGAN
|
||||
from modules.config import downloading_upscale_model
|
||||
|
||||
opImageUpscaleWithModel = ImageUpscaleWithModel()
|
||||
model = None
|
||||
|
||||
@@ -18,6 +16,7 @@ def perform_upscale(img):
|
||||
print(f'Upscaling image with shape {str(img.shape)} ...')
|
||||
|
||||
if model is None:
|
||||
model_filename = downloading_upscale_model()
|
||||
sd = torch.load(model_filename)
|
||||
sdo = OrderedDict()
|
||||
for k, v in sd.items():
|
||||
|
||||
+3
-9
@@ -176,13 +176,11 @@ def generate_temp_filename(folder='./outputs/', extension='png'):
|
||||
|
||||
|
||||
def sha256(filename, use_addnet_hash=False, length=HASH_SHA256_LENGTH):
|
||||
print(f"Calculating sha256 for {filename}: ", end='')
|
||||
if use_addnet_hash:
|
||||
with open(filename, "rb") as file:
|
||||
sha256_value = addnet_hash_safetensors(file)
|
||||
else:
|
||||
sha256_value = calculate_sha256(filename)
|
||||
print(f"{sha256_value}")
|
||||
|
||||
return sha256_value[:length] if length is not None else sha256_value
|
||||
|
||||
@@ -383,13 +381,6 @@ def get_file_from_folder_list(name, folders):
|
||||
return os.path.abspath(os.path.realpath(os.path.join(folders[0], name)))
|
||||
|
||||
|
||||
def makedirs_with_log(path):
|
||||
try:
|
||||
os.makedirs(path, exist_ok=True)
|
||||
except OSError as error:
|
||||
print(f'Directory {path} could not be created, reason: {error}')
|
||||
|
||||
|
||||
def get_enabled_loras(loras: list, remove_none=True) -> list:
|
||||
return [(lora[1], lora[2]) for lora in loras if lora[0] and (lora[1] != 'None' if remove_none else True)]
|
||||
|
||||
@@ -397,6 +388,9 @@ def get_enabled_loras(loras: list, remove_none=True) -> list:
|
||||
def parse_lora_references_from_prompt(prompt: str, loras: List[Tuple[AnyStr, float]], loras_limit: int = 5,
|
||||
skip_file_check=False, prompt_cleanup=True, deduplicate_loras=True,
|
||||
lora_filenames=None) -> tuple[List[Tuple[AnyStr, float]], str]:
|
||||
# prevent unintended side effects when returning without detection
|
||||
loras = loras.copy()
|
||||
|
||||
if lora_filenames is None:
|
||||
lora_filenames = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user