mirror of
https://github.com/lllyasviel/stable-diffusion-webui-forge.git
synced 2026-04-29 10:41:25 +00:00
Update controlnet.py
This commit is contained in:
@@ -632,38 +632,6 @@ class ControlNetForForgeOfficial(scripts.Script):
|
|||||||
def controlnet_main_entry(self, p):
|
def controlnet_main_entry(self, p):
|
||||||
for idx, unit in enumerate(self.enabled_units):
|
for idx, unit in enumerate(self.enabled_units):
|
||||||
|
|
||||||
input_image, resize_mode = Script.choose_input_image(p, unit, idx)
|
|
||||||
if isinstance(input_image, list):
|
|
||||||
assert unit.accepts_multiple_inputs()
|
|
||||||
input_images = input_image
|
|
||||||
else: # Following operations are only for single input image.
|
|
||||||
input_image = Script.try_crop_image_with_a1111_mask(p, unit, input_image, resize_mode)
|
|
||||||
input_image = np.ascontiguousarray(input_image.copy()).copy() # safe numpy
|
|
||||||
if unit.module == 'inpaint_only+lama' and resize_mode == external_code.ResizeMode.OUTER_FIT:
|
|
||||||
# inpaint_only+lama is special and required outpaint fix
|
|
||||||
_, input_image = Script.detectmap_proc(input_image, unit.module, resize_mode, hr_y, hr_x)
|
|
||||||
if unit.pixel_perfect:
|
|
||||||
unit.processor_res = external_code.pixel_perfect_resolution(
|
|
||||||
input_image,
|
|
||||||
target_H=h,
|
|
||||||
target_W=w,
|
|
||||||
resize_mode=resize_mode,
|
|
||||||
)
|
|
||||||
input_images = [input_image]
|
|
||||||
# Preprocessor result may depend on numpy random operations, use the
|
|
||||||
# random seed in `StableDiffusionProcessing` to make the
|
|
||||||
# preprocessor result reproducable.
|
|
||||||
# Currently following preprocessors use numpy random:
|
|
||||||
# - shuffle
|
|
||||||
seed = set_numpy_seed(p)
|
|
||||||
logger.debug(f"Use numpy seed {seed}.")
|
|
||||||
logger.info(f"Using preprocessor: {unit.module}")
|
|
||||||
logger.info(f'preprocessor resolution = {unit.processor_res}')
|
|
||||||
|
|
||||||
def store_detected_map(detected_map, module: str) -> None:
|
|
||||||
if unit.save_detected_map:
|
|
||||||
detected_maps.append((detected_map, module))
|
|
||||||
|
|
||||||
def preprocess_input_image(input_image: np.ndarray):
|
def preprocess_input_image(input_image: np.ndarray):
|
||||||
""" Preprocess single input image. """
|
""" Preprocess single input image. """
|
||||||
detected_map, is_image = self.preprocessor[unit.module](
|
detected_map, is_image = self.preprocessor[unit.module](
|
||||||
@@ -857,6 +825,31 @@ class ControlNetForForgeOfficial(scripts.Script):
|
|||||||
input_image, resize_mode = self.choose_input_image(p, unit)
|
input_image, resize_mode = self.choose_input_image(p, unit)
|
||||||
assert isinstance(input_image, np.ndarray), 'Invalid input image!'
|
assert isinstance(input_image, np.ndarray), 'Invalid input image!'
|
||||||
|
|
||||||
|
input_image = self.try_crop_image_with_a1111_mask(p, unit, input_image, resize_mode)
|
||||||
|
input_image = np.ascontiguousarray(input_image.copy()).copy() # safe numpy
|
||||||
|
|
||||||
|
if unit.pixel_perfect:
|
||||||
|
unit.processor_res = external_code.pixel_perfect_resolution(
|
||||||
|
input_image,
|
||||||
|
target_H=h,
|
||||||
|
target_W=w,
|
||||||
|
resize_mode=resize_mode,
|
||||||
|
)
|
||||||
|
|
||||||
|
seed = set_numpy_seed(p)
|
||||||
|
logger.debug(f"Use numpy seed {seed}.")
|
||||||
|
logger.info(f"Using preprocessor: {unit.module}")
|
||||||
|
logger.info(f'preprocessor resolution = {unit.processor_res}')
|
||||||
|
|
||||||
|
detected_map = global_state.get_preprocessor(unit.module)(
|
||||||
|
input_image=input_image,
|
||||||
|
resolution=unit.processor_res,
|
||||||
|
slider_1=unit.threshold_a,
|
||||||
|
slider_2=unit.threshold_b,
|
||||||
|
)
|
||||||
|
|
||||||
|
detected_map_is_image = detected_map.ndim == 3 and detected_map.shape[2] < 5
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def process_unit_before_every_sampling(self, p, unit, params, *args, **kwargs):
|
def process_unit_before_every_sampling(self, p, unit, params, *args, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user