Spaces:
Runtime error
Runtime error
| # From https://github.com/cubiq/ComfyUI_IPAdapter_plus | |
| from ..enums import StableDiffusionVersion, TransformerIDResult | |
| def calc_weights( | |
| weight_type: str, | |
| weight: float, | |
| sd_version: StableDiffusionVersion, | |
| weight_composition: float = 0.0, | |
| ): | |
| layers = sd_version.transformer_block_num | |
| return [ | |
| _calc_weight( | |
| weight_type, | |
| weight, | |
| sd_version, | |
| t_idx, | |
| weight_composition, | |
| ) | |
| for t_idx in range(layers) | |
| ] | |
| def _calc_weight( | |
| weight_type: str, | |
| weight: float, | |
| sd_version: StableDiffusionVersion, | |
| t_idx: int, | |
| weight_composition: float = 0.0, | |
| ): | |
| is_sdxl = sd_version == StableDiffusionVersion.SDXL | |
| layers = sd_version.transformer_block_num | |
| ids: TransformerIDResult = sd_version.transformer_ids | |
| block_type = [i for i in ids.to_list() if i.transformer_index == t_idx][ | |
| 0 | |
| ].block_type.value | |
| if weight_type == "normal": | |
| return weight | |
| elif weight_type == "ease in": | |
| weight = weight * (0.05 + 0.95 * (1 - t_idx / layers)) | |
| elif weight_type == "ease out": | |
| weight = weight * (0.05 + 0.95 * (t_idx / layers)) | |
| elif weight_type == "ease in-out": | |
| weight = weight * (0.05 + 0.95 * (1 - abs(t_idx - (layers / 2)) / (layers / 2))) | |
| elif weight_type == "reverse in-out": | |
| weight = weight * (0.05 + 0.95 * (abs(t_idx - (layers / 2)) / (layers / 2))) | |
| elif weight_type == "weak input": | |
| weight = weight * 0.2 if block_type == "input" else weight | |
| elif weight_type == "weak middle": | |
| weight = weight * 0.2 if block_type == "middle" else weight | |
| elif weight_type == "weak output": | |
| weight = weight * 0.2 if block_type == "output" else weight | |
| elif weight_type == "strong middle": | |
| weight = ( | |
| weight * 0.2 | |
| if (block_type == "input" or block_type == "output") | |
| else weight | |
| ) | |
| elif weight_type.startswith("style transfer"): | |
| weight = ( | |
| {6: weight} | |
| if is_sdxl | |
| else { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 3: weight, | |
| 9: weight, | |
| 10: weight, | |
| 11: weight, | |
| 12: weight, | |
| 13: weight, | |
| 14: weight, | |
| 15: weight, | |
| } | |
| ) | |
| elif weight_type.startswith("composition"): | |
| weight = {3: weight} if is_sdxl else {4: weight * 0.25, 5: weight} | |
| elif weight_type == "strong style transfer": | |
| if is_sdxl: | |
| weight = { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 4: weight, | |
| 5: weight, | |
| 6: weight, | |
| 7: weight, | |
| 8: weight, | |
| 9: weight, | |
| 10: weight, | |
| } | |
| else: | |
| weight = { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 3: weight, | |
| 6: weight, | |
| 7: weight, | |
| 8: weight, | |
| 9: weight, | |
| 10: weight, | |
| 11: weight, | |
| 12: weight, | |
| 13: weight, | |
| 14: weight, | |
| 15: weight, | |
| } | |
| elif weight_type == "style and composition": | |
| if is_sdxl: | |
| weight = {3: weight_composition, 6: weight} | |
| else: | |
| weight = { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 3: weight, | |
| 4: weight_composition * 0.25, | |
| 5: weight_composition, | |
| 9: weight, | |
| 10: weight, | |
| 11: weight, | |
| 12: weight, | |
| 13: weight, | |
| 14: weight, | |
| 15: weight, | |
| } | |
| elif weight_type == "strong style and composition": | |
| if is_sdxl: | |
| weight = { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 3: weight_composition, | |
| 4: weight, | |
| 5: weight, | |
| 6: weight, | |
| 7: weight, | |
| 8: weight, | |
| 9: weight, | |
| 10: weight, | |
| } | |
| else: | |
| weight = { | |
| 0: weight, | |
| 1: weight, | |
| 2: weight, | |
| 3: weight, | |
| 4: weight_composition, | |
| 5: weight_composition, | |
| 6: weight, | |
| 7: weight, | |
| 8: weight, | |
| 9: weight, | |
| 10: weight, | |
| 11: weight, | |
| 12: weight, | |
| 13: weight, | |
| 14: weight, | |
| 15: weight, | |
| } | |
| else: | |
| raise Exception("Unrecognized weight type!") | |
| if isinstance(weight, dict): | |
| return weight.get(t_idx, 0.0) | |
| else: | |
| return weight | |