IOPaint/iopaint/model_info.py

104 lines
2.9 KiB
Python
Raw Normal View History

2023-12-27 15:00:07 +01:00
from typing import List
from pydantic import computed_field, BaseModel
2024-01-05 08:19:23 +01:00
from iopaint.const import (
2023-12-27 15:00:07 +01:00
SDXL_CONTROLNET_CHOICES,
SD2_CONTROLNET_CHOICES,
SD_CONTROLNET_CHOICES,
2024-01-05 09:38:55 +01:00
INSTRUCT_PIX2PIX_NAME,
KANDINSKY22_NAME,
POWERPAINT_NAME,
2024-01-21 16:25:50 +01:00
ANYTEXT_NAME,
2023-12-27 15:00:07 +01:00
)
2024-01-05 08:19:23 +01:00
from iopaint.schema import ModelType
2023-12-27 15:00:07 +01:00
class ModelInfo(BaseModel):
name: str
path: str
model_type: ModelType
is_single_file_diffusers: bool = False
@computed_field
@property
def need_prompt(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
] or self.name in [
2024-01-05 09:38:55 +01:00
INSTRUCT_PIX2PIX_NAME,
KANDINSKY22_NAME,
POWERPAINT_NAME,
2024-01-21 16:25:50 +01:00
ANYTEXT_NAME,
2023-12-27 15:00:07 +01:00
]
@computed_field
@property
def controlnets(self) -> List[str]:
if self.model_type in [
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SDXL_INPAINT,
]:
return SDXL_CONTROLNET_CHOICES
if self.model_type in [ModelType.DIFFUSERS_SD, ModelType.DIFFUSERS_SD_INPAINT]:
2024-01-05 09:38:55 +01:00
if "sd2" in self.name.lower():
2023-12-27 15:00:07 +01:00
return SD2_CONTROLNET_CHOICES
else:
return SD_CONTROLNET_CHOICES
2024-01-05 09:38:55 +01:00
if self.name == POWERPAINT_NAME:
2023-12-27 15:00:07 +01:00
return SD_CONTROLNET_CHOICES
return []
@computed_field
@property
def support_strength(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
2024-01-21 16:25:50 +01:00
] or self.name in [POWERPAINT_NAME, ANYTEXT_NAME]
2023-12-27 15:00:07 +01:00
@computed_field
@property
def support_outpainting(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
2024-01-05 09:38:55 +01:00
] or self.name in [KANDINSKY22_NAME, POWERPAINT_NAME]
2023-12-27 15:00:07 +01:00
@computed_field
@property
def support_lcm_lora(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
]
@computed_field
@property
def support_controlnet(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
]
2023-12-27 15:00:07 +01:00
@computed_field
@property
def support_freeu(self) -> bool:
return self.model_type in [
ModelType.DIFFUSERS_SD,
ModelType.DIFFUSERS_SDXL,
ModelType.DIFFUSERS_SD_INPAINT,
ModelType.DIFFUSERS_SDXL_INPAINT,
2024-01-05 09:38:55 +01:00
] or self.name in [INSTRUCT_PIX2PIX_NAME]