|
|
|
|
@ -2,6 +2,7 @@ import json
|
|
|
|
|
import math
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
import warnings
|
|
|
|
|
|
|
|
|
|
import torch
|
|
|
|
|
import numpy as np
|
|
|
|
|
@ -66,19 +67,15 @@ def apply_overlay(image, paste_loc, index, overlays):
|
|
|
|
|
|
|
|
|
|
return image
|
|
|
|
|
|
|
|
|
|
def get_correct_sampler(p):
|
|
|
|
|
if isinstance(p, modules.processing.StableDiffusionProcessingTxt2Img):
|
|
|
|
|
return sd_samplers.samplers
|
|
|
|
|
elif isinstance(p, modules.processing.StableDiffusionProcessingImg2Img):
|
|
|
|
|
return sd_samplers.samplers_for_img2img
|
|
|
|
|
elif isinstance(p, modules.api.processing.StableDiffusionProcessingAPI):
|
|
|
|
|
return sd_samplers.samplers
|
|
|
|
|
|
|
|
|
|
class StableDiffusionProcessing():
|
|
|
|
|
"""
|
|
|
|
|
The first set of paramaters: sd_models -> do_not_reload_embeddings represent the minimum required to create a StableDiffusionProcessing
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, sd_model=None, outpath_samples=None, outpath_grids=None, prompt: str = "", styles: List[str] = None, seed: int = -1, subseed: int = -1, subseed_strength: float = 0, seed_resize_from_h: int = -1, seed_resize_from_w: int = -1, seed_enable_extras: bool = True, sampler_index: int = 0, batch_size: int = 1, n_iter: int = 1, steps: int = 50, cfg_scale: float = 7.0, width: int = 512, height: int = 512, restore_faces: bool = False, tiling: bool = False, do_not_save_samples: bool = False, do_not_save_grid: bool = False, extra_generation_params: Dict[Any, Any] = None, overlay_images: Any = None, negative_prompt: str = None, eta: float = None, do_not_reload_embeddings: bool = False, denoising_strength: float = 0, ddim_discretize: str = None, s_churn: float = 0.0, s_tmax: float = None, s_tmin: float = 0.0, s_noise: float = 1.0, override_settings: Dict[str, Any] = None):
|
|
|
|
|
def __init__(self, sd_model=None, outpath_samples=None, outpath_grids=None, prompt: str = "", styles: List[str] = None, seed: int = -1, subseed: int = -1, subseed_strength: float = 0, seed_resize_from_h: int = -1, seed_resize_from_w: int = -1, seed_enable_extras: bool = True, sampler_name: str = None, batch_size: int = 1, n_iter: int = 1, steps: int = 50, cfg_scale: float = 7.0, width: int = 512, height: int = 512, restore_faces: bool = False, tiling: bool = False, do_not_save_samples: bool = False, do_not_save_grid: bool = False, extra_generation_params: Dict[Any, Any] = None, overlay_images: Any = None, negative_prompt: str = None, eta: float = None, do_not_reload_embeddings: bool = False, denoising_strength: float = 0, ddim_discretize: str = None, s_churn: float = 0.0, s_tmax: float = None, s_tmin: float = 0.0, s_noise: float = 1.0, override_settings: Dict[str, Any] = None, sampler_index: int = None):
|
|
|
|
|
if sampler_index is not None:
|
|
|
|
|
warnings.warn("sampler_index argument for StableDiffusionProcessing does not do anything; use sampler_name")
|
|
|
|
|
|
|
|
|
|
self.sd_model = sd_model
|
|
|
|
|
self.outpath_samples: str = outpath_samples
|
|
|
|
|
self.outpath_grids: str = outpath_grids
|
|
|
|
|
@ -91,7 +88,7 @@ class StableDiffusionProcessing():
|
|
|
|
|
self.subseed_strength: float = subseed_strength
|
|
|
|
|
self.seed_resize_from_h: int = seed_resize_from_h
|
|
|
|
|
self.seed_resize_from_w: int = seed_resize_from_w
|
|
|
|
|
self.sampler_index: int = sampler_index
|
|
|
|
|
self.sampler_name: str = sampler_name
|
|
|
|
|
self.batch_size: int = batch_size
|
|
|
|
|
self.n_iter: int = n_iter
|
|
|
|
|
self.steps: int = steps
|
|
|
|
|
@ -210,8 +207,7 @@ class Processed:
|
|
|
|
|
self.info = info
|
|
|
|
|
self.width = p.width
|
|
|
|
|
self.height = p.height
|
|
|
|
|
self.sampler_index = p.sampler_index
|
|
|
|
|
self.sampler = sd_samplers.samplers[p.sampler_index].name
|
|
|
|
|
self.sampler_name = p.sampler_name
|
|
|
|
|
self.cfg_scale = p.cfg_scale
|
|
|
|
|
self.steps = p.steps
|
|
|
|
|
self.batch_size = p.batch_size
|
|
|
|
|
@ -256,8 +252,7 @@ class Processed:
|
|
|
|
|
"subseed_strength": self.subseed_strength,
|
|
|
|
|
"width": self.width,
|
|
|
|
|
"height": self.height,
|
|
|
|
|
"sampler_index": self.sampler_index,
|
|
|
|
|
"sampler": self.sampler,
|
|
|
|
|
"sampler_name": self.sampler_name,
|
|
|
|
|
"cfg_scale": self.cfg_scale,
|
|
|
|
|
"steps": self.steps,
|
|
|
|
|
"batch_size": self.batch_size,
|
|
|
|
|
@ -384,7 +379,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments, iteration
|
|
|
|
|
|
|
|
|
|
generation_params = {
|
|
|
|
|
"Steps": p.steps,
|
|
|
|
|
"Sampler": get_correct_sampler(p)[p.sampler_index].name,
|
|
|
|
|
"Sampler": p.sampler_name,
|
|
|
|
|
"CFG scale": p.cfg_scale,
|
|
|
|
|
"Seed": all_seeds[index],
|
|
|
|
|
"Face restoration": (opts.face_restoration_model if p.restore_faces else None),
|
|
|
|
|
@ -399,6 +394,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments, iteration
|
|
|
|
|
"Variation seed strength": (None if p.subseed_strength == 0 else p.subseed_strength),
|
|
|
|
|
"Seed resize from": (None if p.seed_resize_from_w == 0 or p.seed_resize_from_h == 0 else f"{p.seed_resize_from_w}x{p.seed_resize_from_h}"),
|
|
|
|
|
"Denoising strength": getattr(p, 'denoising_strength', None),
|
|
|
|
|
"Inpainting strength": (None if getattr(p, 'denoising_strength', None) is None else getattr(p, "inpainting_mask_weight", shared.opts.inpainting_mask_weight)),
|
|
|
|
|
"Eta": (None if p.sampler is None or p.sampler.eta == p.sampler.default_eta else p.sampler.eta),
|
|
|
|
|
"Clip skip": None if clip_skip <= 1 else clip_skip,
|
|
|
|
|
"ENSD": None if opts.eta_noise_seed_delta == 0 else opts.eta_noise_seed_delta,
|
|
|
|
|
@ -645,7 +641,7 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
|
|
|
|
self.truncate_y = int(self.firstphase_height - firstphase_height_truncated) // opt_f
|
|
|
|
|
|
|
|
|
|
def sample(self, conditioning, unconditional_conditioning, seeds, subseeds, subseed_strength, prompts):
|
|
|
|
|
self.sampler = sd_samplers.create_sampler_with_index(sd_samplers.samplers, self.sampler_index, self.sd_model)
|
|
|
|
|
self.sampler = sd_samplers.create_sampler(self.sampler_name, self.sd_model)
|
|
|
|
|
|
|
|
|
|
if not self.enable_hr:
|
|
|
|
|
x = create_random_tensors([opt_C, self.height // opt_f, self.width // opt_f], seeds=seeds, subseeds=subseeds, subseed_strength=self.subseed_strength, seed_resize_from_h=self.seed_resize_from_h, seed_resize_from_w=self.seed_resize_from_w, p=self)
|
|
|
|
|
@ -706,7 +702,7 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
|
|
|
|
|
|
|
|
|
shared.state.nextjob()
|
|
|
|
|
|
|
|
|
|
self.sampler = sd_samplers.create_sampler_with_index(sd_samplers.samplers, self.sampler_index, self.sd_model)
|
|
|
|
|
self.sampler = sd_samplers.create_sampler(self.sampler_name, self.sd_model)
|
|
|
|
|
|
|
|
|
|
noise = create_random_tensors(samples.shape[1:], seeds=seeds, subseeds=subseeds, subseed_strength=subseed_strength, seed_resize_from_h=self.seed_resize_from_h, seed_resize_from_w=self.seed_resize_from_w, p=self)
|
|
|
|
|
|
|
|
|
|
@ -743,7 +739,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
|
|
|
|
self.image_conditioning = None
|
|
|
|
|
|
|
|
|
|
def init(self, all_prompts, all_seeds, all_subseeds):
|
|
|
|
|
self.sampler = sd_samplers.create_sampler_with_index(sd_samplers.samplers_for_img2img, self.sampler_index, self.sd_model)
|
|
|
|
|
self.sampler = sd_samplers.create_sampler(self.sampler_name, self.sd_model)
|
|
|
|
|
crop_region = None
|
|
|
|
|
|
|
|
|
|
if self.image_mask is not None:
|
|
|
|
|
|