update pulid

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2024-11-08 14:00:50 -05:00
parent 5de457bb18
commit 34bc7377d8
6 changed files with 41 additions and 19 deletions
+1 -1
View File
@@ -486,7 +486,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
image = images.resize_image(self.resize_mode, image, self.width, self.height, upscaler_name=self.resize_name, context=self.resize_context)
self.width = image.width
self.height = image.height
if self.image_mask is not None and shared.opts.mask_apply_overlay:
if self.image_mask is not None and shared.opts.mask_apply_overlay and not hasattr(self, 'xyz'):
image_masked = Image.new('RGBa', (image.width, image.height))
image_to_paste = image.convert("RGBA").convert("RGBa")
image_to_mask = ImageOps.invert(self.mask_for_overlay.convert('L')) if self.mask_for_overlay is not None else None
+6 -6
View File
@@ -393,8 +393,8 @@ def sample_dpmpp_2s_ancestral(model, x, sigmas, extra_args=None, callback=None,
extra_args = {} if extra_args is None else extra_args
noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler
s_in = x.new_ones([x.shape[0]])
sigma_fn = lambda t: t.neg().exp()
t_fn = lambda sigma: sigma.log().neg()
sigma_fn = lambda t: t.neg().exp() # pylint: disable=C3001
t_fn = lambda sigma: sigma.log().neg() # pylint: disable=C3001
for i in trange(len(sigmas) - 1, disable=disable):
denoised = model(x, sigmas[i] * s_in, **extra_args)
@@ -430,8 +430,8 @@ def sample_dpmpp_sde(model, x, sigmas, extra_args=None, callback=None, disable=N
noise_sampler = BrownianTreeNoiseSampler(x, sigma_min, sigma_max) if noise_sampler is None else noise_sampler
extra_args = {} if extra_args is None else extra_args
s_in = x.new_ones([x.shape[0]])
sigma_fn = lambda t: t.neg().exp()
t_fn = lambda sigma: sigma.log().neg()
sigma_fn = lambda t: t.neg().exp() # pylint: disable=C3001
t_fn = lambda sigma: sigma.log().neg() # pylint: disable=C3001
for i in trange(len(sigmas) - 1, disable=disable):
denoised = model(x, sigmas[i] * s_in, **extra_args)
@@ -472,8 +472,8 @@ def sample_dpmpp_2m(model, x, sigmas, extra_args=None, callback=None, disable=No
"""DPM-Solver++(2M)."""
extra_args = {} if extra_args is None else extra_args
s_in = x.new_ones([x.shape[0]])
sigma_fn = lambda t: t.neg().exp()
t_fn = lambda sigma: sigma.log().neg()
sigma_fn = lambda t: t.neg().exp() # pylint: disable=C3001
t_fn = lambda sigma: sigma.log().neg() # pylint: disable=C3001
old_denoised = None
for i in trange(len(sigmas) - 1, disable=disable):
+7 -2
View File
@@ -449,6 +449,9 @@ def move_model(model, device=None, force=False):
devices.torch_gc()
return
if hasattr(model, 'pipe'):
move_model(model.pipe, device, force)
fn = f'{sys._getframe(2).f_code.co_name}:{sys._getframe(1).f_code.co_name}' # pylint: disable=protected-access
if getattr(model, 'vae', None) is not None and get_diffusers_task(model) != DiffusersTaskType.TEXT_2_IMAGE:
if device == devices.device and model.vae.device.type != "meta": # force vae back to gpu if not in txt2img mode
@@ -476,7 +479,8 @@ def move_model(model, device=None, force=False):
try:
t0 = time.time()
try:
model.to(device)
if hasattr(model, 'to'):
model.to(device)
if hasattr(model, "prior_pipe"):
model.prior_pipe.to(device)
except Exception as e0:
@@ -486,7 +490,8 @@ def move_model(model, device=None, force=False):
if hasattr(component, 'modules'):
for module in component.modules():
try:
module.to(device)
if hasattr(module, 'to'):
module.to(device)
except Exception as e2:
if 'Cannot copy out of meta tensor' in str(e2):
if os.environ.get('SD_MOVE_DEBUG', None):
+7
View File
@@ -2,6 +2,9 @@ import gradio as gr
from modules import scripts, processing, shared, sd_models
registered = False
class Script(scripts.Script):
def __init__(self):
super().__init__()
@@ -24,6 +27,10 @@ class Script(scripts.Script):
return [eta, momentum, threshold]
def register(self): # register xyz grid elements
global registered # pylint: disable=global-statement
if registered:
return
registered = True
def apply_field(field):
def fun(p, x, xs): # pylint: disable=unused-argument
setattr(p, field, x)
+19 -10
View File
@@ -9,13 +9,15 @@ from modules import shared, devices, errors, scripts, processing, processing_hel
debug = os.environ.get('SD_PULID_DEBUG', None) is not None
direct = False
registered = False
uploaded_images = []
class Script(scripts.Script):
def __init__(self):
self.images = []
self.pulid = None
self.cache = None
self.mask_apply_overlay = shared.opts.mask_apply_overlay
super().__init__()
self.register() # pulid is script with processing override so xyz doesnt execute
@@ -33,6 +35,10 @@ class Script(scripts.Script):
install('pydantic==1.10.15', 'pydantic', ignore=False, reinstall=True)
def register(self): # register xyz grid elements
global registered # pylint: disable=global-statement
if registered:
return
registered = True
def apply_field(field):
def fun(p, x, xs): # pylint: disable=unused-argument
setattr(p, field, x)
@@ -52,7 +58,7 @@ class Script(scripts.Script):
def load_images(self, files):
self.images = []
uploaded_images.clear()
for file in files or []:
try:
if isinstance(file, str):
@@ -66,10 +72,10 @@ class Script(scripts.Script):
image = Image.open(file.name) # _TemporaryFileWrapper from gr.Files
else:
raise ValueError(f'IP adapter unknown input: {file}')
self.images.append(image)
uploaded_images.append(image)
except Exception as e:
shared.log.warning(f'IP adapter failed to load image: {e}')
return gr.update(value=self.images, visible=len(self.images) > 0)
return gr.update(value=uploaded_images, visible=len(uploaded_images) > 0)
# return signature is array of gradio components
def ui(self, _is_img2img):
@@ -95,7 +101,7 @@ class Script(scripts.Script):
try:
if len(gallery) == 0:
from modules.api.api import decode_base64_to_image
images = getattr(p, 'pulid_images', self.images)
images = getattr(p, 'pulid_images', uploaded_images)
images = [decode_base64_to_image(image) if isinstance(image, str) else image for image in images]
else:
images = [Image.open(f['name']) if isinstance(f, dict) else f for f in gallery]
@@ -134,6 +140,8 @@ class Script(scripts.Script):
ortho = getattr(p, 'pulid_ortho', ortho)
sampler = getattr(p, 'pulid_sampler', sampler)
sampler_fn = getattr(self.pulid.sampling, f'sample_{sampler}', None)
self.mask_apply_overlay = shared.opts.mask_apply_overlay
shared.opts.data['mask_apply_overlay'] = False
if sampler_fn is None:
sampler_fn = self.pulid.sampling.sample_dpmpp_2m_sde
@@ -149,7 +157,7 @@ class Script(scripts.Script):
)
shared.sd_model.no_recurse = True
sd_models.copy_diffuser_options(shared.sd_model, shared.sd_model.pipe)
# sd_models.move_model(shared.sd_model, devices.device) # move pipeline to device
sd_models.move_model(shared.sd_model, devices.device) # move pipeline to device
sd_models.set_diffuser_options(shared.sd_model, vae=None, op='model')
devices.torch_gc()
except Exception as e:
@@ -204,11 +212,12 @@ class Script(scripts.Script):
def after(self, p: processing.StableDiffusionProcessing, processed: processing.Processed, *args): # pylint: disable=unused-argument
_strength, _zero, _sampler, _ortho, _gallery, cache = args
cache = getattr(p, 'pulid_cache', cache)
if cache:
shared.log.debug(f'PuLID cache: class={shared.sd_model.__class__.__name__}')
return processed
if hasattr(shared.sd_model, 'pipe') and shared.sd_model_type == "sdxl":
shared.opts.data['mask_apply_overlay'] = self.mask_apply_overlay
cache = getattr(p, 'pulid_cache', cache)
if cache:
shared.log.debug(f'PuLID cache: class={shared.sd_model.__class__.__name__}')
return processed
if hasattr(shared.sd_model, 'app'):
shared.sd_model.app = None
shared.sd_model.ip_adapter = None
+1
View File
@@ -136,6 +136,7 @@ axis_options = [
AxisOption("[Postprocess] Upscaler", str, apply_upscaler, cost=0.4, choices=lambda: [x.name for x in shared.sd_upscalers][1:]),
AxisOption("[Postprocess] Context", str, apply_context, choices=lambda: ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"]),
AxisOption("[Postprocess] Detailer", str, apply_detailer, fmt=format_value_add_label),
AxisOption("[Postprocess] Detailer strength", str, apply_field("detailer_strength")),
AxisOption("[HDR] Mode", int, apply_field("hdr_mode")),
AxisOption("[HDR] Brightness", float, apply_field("hdr_brightness")),
AxisOption("[HDR] Color", float, apply_field("hdr_color")),