sdwebuiapi icon indicating copy to clipboard operation
sdwebuiapi copied to clipboard

Please update script, sd-webui-controlnet updated new version

Open onlinerender opened this issue 2 years ago • 3 comments

Please update script, sd-webui-controlnet updated new version

onlinerender avatar May 04 '23 08:05 onlinerender

yes, when I run the examples with controlnet 1.1 installed automatic1111 v3.0 it behaves as though no control net unit is passed. i updated to automatic1111 5.0 (commit: 22bcc7be) and it worked.

afterglowstudios avatar May 09 '23 06:05 afterglowstudios

I have a same problem. PLS upgrade your sd version, and use controlnet 1.1.112 ~ 120 version.

AllanChen avatar May 11 '23 03:05 AllanChen

FYI I was getting some strange results with the tile model - it looks like the ControlNetUnit needs to be update - this worked for me:

from enum import Enum
from typing import List, Any, Optional, Union, Tuple, Dict
import base64
import io
from PIL import Image

class ControlMode(str, Enum):
    """
    The improved guess mode.
    """

    BALANCED = "Balanced"
    PROMPT = "My prompt is more important"
    CONTROL = "ControlNet is more important"


class ResizeMode(Enum):
    """
    Resize modes for ControlNet input images.
    """

    RESIZE = "Just Resize"
    INNER_FIT = "Crop and Resize"
    OUTER_FIT = "Resize and Fill"

    def int_value(self):
        if self == ResizeMode.RESIZE:
            return 0
        elif self == ResizeMode.INNER_FIT:
            return 1
        elif self == ResizeMode.OUTER_FIT:
            return 2
        assert False, "NOTREACHED"

def raw_b64_img(image: Image) -> str:
    # XXX controlnet only accepts RAW base64 without headers
    with io.BytesIO() as output_bytes:
        metadata = None
        for key, value in image.info.items():
            if isinstance(key, str) and isinstance(value, str):
                if metadata is None:
                    metadata = PngImagePlugin.PngInfo()
                metadata.add_text(key, value)
        image.save(output_bytes, format="PNG", pnginfo=metadata)

        bytes_data = output_bytes.getvalue()

    return str(base64.b64encode(bytes_data), "utf-8")

class ControlNetUnit:
    '''
    This class was taken from the controlnet automatic1111 plugin since the unit that
    ships with webuiapi is not up to date and gives weird results for some models
    '''
    def __init__(
        self,
        input_image: Image = None,
        mask: Image = None,
        module: str = "none",
        model: str = "None",
        weight: float = 1.0,
        resize_mode: Union[ResizeMode, int, str] = ResizeMode.INNER_FIT,
        lowvram: bool = False,
        processor_res: int = -1,
        threshold_a: float = -1,
        threshold_b: float = -1,
        guidance: float = 1.0,
        guidance_start: float = 0.0,
        guidance_end: float = 1.0,
        control_mode: Union[ControlMode, int, str] = ControlMode.BALANCED,
        pixel_perfect: bool = False
    ):
        self.input_image = input_image
        self.mask = mask
        self.module = module
        self.model = model
        self.weight = weight
        self.resize_mode = resize_mode
        self.lowvram = lowvram
        self.processor_res = processor_res
        self.threshold_a = threshold_a
        self.threshold_b = threshold_b
        self.guidance = guidance
        self.guidance_start = guidance_start
        self.guidance_end = guidance_end
        self.control_mode = control_mode
        self.pixel_perfect = pixel_perfect

    def to_dict(self):
        return {
            "input_image": raw_b64_img(self.input_image) if self.input_image else "",
            "mask": raw_b64_img(self.mask) if self.mask is not None else None,
            "module": self.module,
            "model": self.model,
            "weight": self.weight,
            "resize_mode": self.resize_mode.int_value(),
            "lowvram": self.lowvram,
            "processor_res": self.processor_res,
            "threshold_a": self.threshold_a,
            "threshold_b": self.threshold_b,
            "guidance": self.guidance,
            "guidance_start": self.guidance_start,
            "guidance_end": self.guidance_end,
            "control_mode": self.control_mode,
            "pixel_perfect": self.pixel_perfect,
        }

zacharyfmarion avatar Jun 13 '23 20:06 zacharyfmarion