Spaces:
Runtime error
Runtime error
| from enum import Enum | |
| class HiResFixOption(Enum): | |
| BOTH = "Both" | |
| LOW_RES_ONLY = "Low res only" | |
| HIGH_RES_ONLY = "High res only" | |
| def from_value(value) -> "HiResFixOption": | |
| if isinstance(value, str) and value.startswith("HiResFixOption."): | |
| _, field = value.split(".") | |
| return getattr(HiResFixOption, field) | |
| if isinstance(value, str): | |
| return HiResFixOption(value) | |
| elif isinstance(value, int): | |
| return [x for x in HiResFixOption][value] | |
| else: | |
| assert isinstance(value, HiResFixOption) | |
| return value | |
| def low_res_enabled(self) -> bool: | |
| return self in (HiResFixOption.BOTH, HiResFixOption.LOW_RES_ONLY) | |
| def high_res_enabled(self) -> bool: | |
| return self in (HiResFixOption.BOTH, HiResFixOption.HIGH_RES_ONLY) | |
| class StableDiffusionVersion(Enum): | |
| """The version family of stable diffusion model.""" | |
| UNKNOWN = 0 | |
| SD1x = 1 | |
| SD2x = 2 | |
| SDXL = 3 | |
| def detect_from_model_name(model_name: str) -> "StableDiffusionVersion": | |
| """Based on the model name provided, guess what stable diffusion version it is. | |
| This might not be accurate without actually inspect the file content. | |
| """ | |
| if any(f"sd{v}" in model_name.lower() for v in ("14", "15", "16")): | |
| return StableDiffusionVersion.SD1x | |
| if "sd21" in model_name or "2.1" in model_name: | |
| return StableDiffusionVersion.SD2x | |
| if "xl" in model_name.lower(): | |
| return StableDiffusionVersion.SDXL | |
| return StableDiffusionVersion.UNKNOWN | |
| def encoder_block_num(self) -> int: | |
| if self in (StableDiffusionVersion.SD1x, StableDiffusionVersion.SD2x, StableDiffusionVersion.UNKNOWN): | |
| return 12 | |
| else: | |
| return 9 # SDXL | |
| def controlnet_layer_num(self) -> int: | |
| return self.encoder_block_num() + 1 | |
| def is_compatible_with(self, other: "StableDiffusionVersion") -> bool: | |
| """ Incompatible only when one of version is SDXL and other is not. """ | |
| return ( | |
| any(v == StableDiffusionVersion.UNKNOWN for v in [self, other]) or | |
| sum(v == StableDiffusionVersion.SDXL for v in [self, other]) != 1 | |
| ) | |
| class InputMode(Enum): | |
| # Single image to a single ControlNet unit. | |
| SIMPLE = "simple" | |
| # Input is a directory. N generations. Each generation takes 1 input image | |
| # from the directory. | |
| BATCH = "batch" | |
| # Input is a directory. 1 generation. Each generation takes N input image | |
| # from the directory. | |
| MERGE = "merge" | |