mirror of
https://github.com/lllyasviel/Fooocus.git
synced 2026-08-16 13:13:16 +02:00
Merge branch 'main_upstream'
# Conflicts: # launch.py # ldm_patched/modules/args_parser.py # modules/config.py # presets/anime.json # presets/default.json # presets/lcm.json # presets/realistic.json
This commit is contained in:
+22
-12
@@ -84,7 +84,7 @@ def list_presets():
|
||||
presets = ['initial']
|
||||
if not os.path.exists(preset_folder):
|
||||
print('No presets found.')
|
||||
return presets;
|
||||
return presets
|
||||
|
||||
return presets + [f[:f.index(".json")] for f in os.listdir(preset_folder) if f.endswith('.json')]
|
||||
|
||||
@@ -126,6 +126,14 @@ def try_load_preset_global(preset):
|
||||
print(f'Load preset [{preset_path}] failed')
|
||||
print(e)
|
||||
|
||||
|
||||
try:
|
||||
with open(os.path.abspath(f'./presets/default.json'), "r", encoding="utf-8") as json_file:
|
||||
config_dict.update(json.load(json_file))
|
||||
except Exception as e:
|
||||
print(f'Load default preset failed.')
|
||||
print(e)
|
||||
|
||||
preset = args_manager.args.preset
|
||||
try_load_preset_global(preset)
|
||||
|
||||
@@ -194,9 +202,14 @@ def get_config_item_or_set_default(key, default_value, validator, disable_empty_
|
||||
|
||||
default_base_model_name = default_model = get_config_item_or_set_default(
|
||||
key='default_model',
|
||||
default_value='juggernautXL_v8Rundiffusion.safetensors',
|
||||
default_value='model.safetensors',
|
||||
validator=lambda x: isinstance(x, str)
|
||||
)
|
||||
previous_default_models = get_config_item_or_set_default(
|
||||
key='previous_default_models',
|
||||
default_value=[],
|
||||
validator=lambda x: isinstance(x, list) and all(isinstance(k, str) for k in x)
|
||||
)
|
||||
default_refiner_model_name = default_refiner = get_config_item_or_set_default(
|
||||
key='default_refiner',
|
||||
default_value='None',
|
||||
@@ -204,15 +217,15 @@ default_refiner_model_name = default_refiner = get_config_item_or_set_default(
|
||||
)
|
||||
default_refiner_switch = get_config_item_or_set_default(
|
||||
key='default_refiner_switch',
|
||||
default_value=0.5,
|
||||
default_value=0.8,
|
||||
validator=lambda x: isinstance(x, numbers.Number) and 0 <= x <= 1
|
||||
)
|
||||
default_loras = get_config_item_or_set_default(
|
||||
key='default_loras',
|
||||
default_value=[
|
||||
[
|
||||
"sd_xl_offset_example-lora_1.0.safetensors",
|
||||
0.1
|
||||
"None",
|
||||
1.0
|
||||
],
|
||||
[
|
||||
"None",
|
||||
@@ -235,7 +248,7 @@ default_loras = get_config_item_or_set_default(
|
||||
)
|
||||
default_cfg_scale = get_config_item_or_set_default(
|
||||
key='default_cfg_scale',
|
||||
default_value=4.0,
|
||||
default_value=7.0,
|
||||
validator=lambda x: isinstance(x, numbers.Number)
|
||||
)
|
||||
default_sample_sharpness = get_config_item_or_set_default(
|
||||
@@ -301,16 +314,12 @@ default_image_number = get_config_item_or_set_default(
|
||||
)
|
||||
checkpoint_downloads = get_config_item_or_set_default(
|
||||
key='checkpoint_downloads',
|
||||
default_value={
|
||||
"juggernautXL_v8Rundiffusion.safetensors": "https://civitai.com/api/download/models/288982"
|
||||
},
|
||||
default_value={},
|
||||
validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items())
|
||||
)
|
||||
lora_downloads = get_config_item_or_set_default(
|
||||
key='lora_downloads',
|
||||
default_value={
|
||||
"sd_xl_offset_example-lora_1.0.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors"
|
||||
},
|
||||
default_value={},
|
||||
validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items())
|
||||
)
|
||||
embeddings_downloads = get_config_item_or_set_default(
|
||||
@@ -409,6 +418,7 @@ possible_preset_keys = {
|
||||
"default_model": "Base Model",
|
||||
"default_refiner": "Refiner Model",
|
||||
"default_refiner_switch": "Refiner Switch",
|
||||
"previous_default_models": "previous_default_models",
|
||||
"default_loras": "<processed>",
|
||||
"default_cfg_scale": "Guidance Scale",
|
||||
"default_sample_sharpness": "Sharpness",
|
||||
|
||||
+17
-10
@@ -4,6 +4,7 @@ import numpy as np
|
||||
from PIL import Image, ImageFilter
|
||||
from modules.util import resample_image, set_image_shape_ceil, get_image_shape_ceil
|
||||
from modules.upscaler import perform_upscale
|
||||
import cv2
|
||||
|
||||
|
||||
inpaint_head_model = None
|
||||
@@ -28,19 +29,25 @@ def box_blur(x, k):
|
||||
return np.array(x)
|
||||
|
||||
|
||||
def max33(x):
|
||||
x = Image.fromarray(x)
|
||||
x = x.filter(ImageFilter.MaxFilter(3))
|
||||
return np.array(x)
|
||||
def max_filter_opencv(x, ksize=3):
|
||||
# Use OpenCV maximum filter
|
||||
# Make sure the input type is int16
|
||||
return cv2.dilate(x, np.ones((ksize, ksize), dtype=np.int16))
|
||||
|
||||
|
||||
def morphological_open(x):
|
||||
x_int32 = np.zeros_like(x).astype(np.int32)
|
||||
x_int32[x > 127] = 256
|
||||
for _ in range(32):
|
||||
maxed = max33(x_int32) - 8
|
||||
x_int32 = np.maximum(maxed, x_int32)
|
||||
return x_int32.clip(0, 255).astype(np.uint8)
|
||||
# Convert array to int16 type via threshold operation
|
||||
x_int16 = np.zeros_like(x, dtype=np.int16)
|
||||
x_int16[x > 127] = 256
|
||||
|
||||
for i in range(32):
|
||||
# Use int16 type to avoid overflow
|
||||
maxed = max_filter_opencv(x_int16, ksize=3) - 8
|
||||
x_int16 = np.maximum(maxed, x_int16)
|
||||
|
||||
# Clip negative values to 0 and convert back to uint8 type
|
||||
x_uint8 = np.clip(x_int16, 0, 255).astype(np.uint8)
|
||||
return x_uint8
|
||||
|
||||
|
||||
def up255(x, t=0):
|
||||
|
||||
+17
-21
@@ -5,6 +5,11 @@ import subprocess
|
||||
import sys
|
||||
import re
|
||||
import logging
|
||||
import importlib.metadata
|
||||
import packaging.version
|
||||
from packaging.requirements import Requirement
|
||||
|
||||
|
||||
|
||||
|
||||
logging.getLogger("torch.distributed.nn").setLevel(logging.ERROR) # sshh...
|
||||
@@ -73,35 +78,26 @@ def run_pip(command, desc=None, live=default_command_live):
|
||||
|
||||
|
||||
def requirements_met(requirements_file):
|
||||
"""
|
||||
Does a simple parse of a requirements.txt file to determine if all rerqirements in it
|
||||
are already installed. Returns True if so, False if not installed or parsing fails.
|
||||
"""
|
||||
|
||||
import importlib.metadata
|
||||
import packaging.version
|
||||
|
||||
with open(requirements_file, "r", encoding="utf8") as file:
|
||||
for line in file:
|
||||
if line.strip() == "":
|
||||
line = line.strip()
|
||||
if line == "" or line.startswith('#'):
|
||||
continue
|
||||
|
||||
m = re.match(re_requirement, line)
|
||||
if m is None:
|
||||
return False
|
||||
|
||||
package = m.group(1).strip()
|
||||
version_required = (m.group(2) or "").strip()
|
||||
|
||||
if version_required == "":
|
||||
continue
|
||||
requirement = Requirement(line)
|
||||
package = requirement.name
|
||||
|
||||
try:
|
||||
version_installed = importlib.metadata.version(package)
|
||||
except Exception:
|
||||
return False
|
||||
installed_version = packaging.version.parse(version_installed)
|
||||
|
||||
if packaging.version.parse(version_required) != packaging.version.parse(version_installed):
|
||||
# Check if the installed version satisfies the requirement
|
||||
if installed_version not in requirement.specifier:
|
||||
print(f"Version mismatch for {package}: Installed version {version_installed} does not meet requirement {requirement}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"Error checking version for {package}: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
@@ -155,6 +155,7 @@ def load_parameter_button_click(raw_prompt_txt, is_generating):
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def parse_meta_from_preset(preset_content):
|
||||
assert isinstance(preset_content, dict)
|
||||
preset_prepared = {}
|
||||
@@ -182,4 +183,4 @@ def parse_meta_from_preset(preset_content):
|
||||
if settings_key == "default_styles" or settings_key == "default_aspect_ratio":
|
||||
preset_prepared[meta_key] = str(preset_prepared[meta_key])
|
||||
|
||||
return preset_prepared
|
||||
return preset_prepared
|
||||
|
||||
Reference in New Issue
Block a user