Update controlnet.py

This commit is contained in:
lllyasviel
2024-01-29 15:54:00 -08:00
parent 929ee203c2
commit 20ccfef8ed

View File

@@ -632,38 +632,6 @@ class ControlNetForForgeOfficial(scripts.Script):
def controlnet_main_entry(self, p):
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):
""" Preprocess single input image. """
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)
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
def process_unit_before_every_sampling(self, p, unit, params, *args, **kwargs):