diff --git a/invokeai/app/invocations/model.py b/invokeai/app/invocations/model.py index b77aa5dafd..7490414bce 100644 --- a/invokeai/app/invocations/model.py +++ b/invokeai/app/invocations/model.py @@ -73,7 +73,7 @@ class PipelineModelLoaderInvocation(BaseInvocation): base_model = self.model.base_model model_name = self.model.model_name - model_type = ModelType.Pipeline + model_type = ModelType.Main # TODO: not found exceptions if not context.services.model_manager.model_exists( diff --git a/invokeai/backend/install/invokeai_configure.py b/invokeai/backend/install/invokeai_configure.py index 48ad76a0a0..5f9612fcea 100755 --- a/invokeai/backend/install/invokeai_configure.py +++ b/invokeai/backend/install/invokeai_configure.py @@ -618,7 +618,7 @@ def initialize_rootdir(root: Path, yes_to_all: bool = False): dest = root / 'models' for model_base in [BaseModelType.StableDiffusion1,BaseModelType.StableDiffusion2]: - for model_type in [ModelType.Pipeline, ModelType.Vae, ModelType.Lora, + for model_type in [ModelType.Main, ModelType.Vae, ModelType.Lora, ModelType.ControlNet,ModelType.TextualInversion]: path = dest / model_base.value / model_type.value path.mkdir(parents=True, exist_ok=True) diff --git a/invokeai/backend/install/migrate_to_3.py b/invokeai/backend/install/migrate_to_3.py index 5e9a194125..77a476e5c5 100644 --- a/invokeai/backend/install/migrate_to_3.py +++ b/invokeai/backend/install/migrate_to_3.py @@ -94,7 +94,7 @@ class MigrateTo3(object): Create the basic directory structure for the models folder. ''' for model_base in [BaseModelType.StableDiffusion1,BaseModelType.StableDiffusion2]: - for model_type in [ModelType.Pipeline, ModelType.Vae, ModelType.Lora, + for model_type in [ModelType.Main, ModelType.Vae, ModelType.Lora, ModelType.ControlNet,ModelType.TextualInversion]: path = self.dest_models / model_base.value / model_type.value path.mkdir(parents=True, exist_ok=True) diff --git a/invokeai/backend/install/model_install_backend.py b/invokeai/backend/install/model_install_backend.py index 457f8b593f..1e50c0c9b6 100644 --- a/invokeai/backend/install/model_install_backend.py +++ b/invokeai/backend/install/model_install_backend.py @@ -139,7 +139,7 @@ class ModelInstall(object): models = set() for key, value in self.datasets.items(): name,base,model_type = ModelManager.parse_key(key) - if model_type==ModelType.Pipeline: + if model_type==ModelType.Main: models.add(key) return models @@ -224,7 +224,7 @@ class ModelInstall(object): try: logger.info(f'Probing {path}') info = info or ModelProbe().heuristic_probe(path,self.prediction_helper) - if info.model_type == ModelType.Pipeline: + if info.model_type == ModelType.Main: model_name = path.stem if info.format=='checkpoint' else path.name if self.mgr.model_exists(model_name, info.base_type, info.model_type): raise Exception(f'A model named "{model_name}" is already installed.') @@ -314,7 +314,7 @@ class ModelInstall(object): description = str(description), model_format = info.format, ) - if info.model_type == ModelType.Pipeline: + if info.model_type == ModelType.Main: attributes.update(dict(variant = info.variant_type,)) if info.format=="checkpoint": try: diff --git a/invokeai/backend/model_management/model_probe.py b/invokeai/backend/model_management/model_probe.py index 9aeb829a25..17c76250b9 100644 --- a/invokeai/backend/model_management/model_probe.py +++ b/invokeai/backend/model_management/model_probe.py @@ -33,7 +33,7 @@ class ModelProbe(object): } CLASS2TYPE = { - 'StableDiffusionPipeline' : ModelType.Pipeline, + 'StableDiffusionPipeline' : ModelType.Main, 'AutoencoderKL' : ModelType.Vae, 'ControlNetModel' : ModelType.ControlNet, } @@ -116,7 +116,7 @@ class ModelProbe(object): if len(checkpoint) < 10 and all(isinstance(v, torch.Tensor) for v in checkpoint.values()): return ModelType.TextualInversion if any([x.startswith("model.diffusion_model") for x in state_dict.keys()]): - return ModelType.Pipeline + return ModelType.Main if any([x.startswith("encoder.conv_in") for x in state_dict.keys()]): return ModelType.Vae if "string_to_token" in state_dict or "emb_params" in state_dict: @@ -207,7 +207,7 @@ class CheckpointProbeBase(ProbeBase): def get_variant_type(self)-> ModelVariantType: model_type = ModelProbe.get_model_type_from_checkpoint(self.checkpoint_path,self.checkpoint) - if model_type != ModelType.Pipeline: + if model_type != ModelType.Main: return ModelVariantType.Normal state_dict = self.checkpoint.get('state_dict') or self.checkpoint in_channels = state_dict[ @@ -409,12 +409,12 @@ class LoRAFolderProbe(FolderProbeBase): return LoRACheckpointProbe(model_file,None).get_base_type() ############## register probe classes ###### -ModelProbe.register_probe('diffusers', ModelType.Pipeline, PipelineFolderProbe) +ModelProbe.register_probe('diffusers', ModelType.Main, PipelineFolderProbe) ModelProbe.register_probe('diffusers', ModelType.Vae, VaeFolderProbe) ModelProbe.register_probe('diffusers', ModelType.Lora, LoRAFolderProbe) ModelProbe.register_probe('diffusers', ModelType.TextualInversion, TextualInversionFolderProbe) ModelProbe.register_probe('diffusers', ModelType.ControlNet, ControlNetFolderProbe) -ModelProbe.register_probe('checkpoint', ModelType.Pipeline, PipelineCheckpointProbe) +ModelProbe.register_probe('checkpoint', ModelType.Main, PipelineCheckpointProbe) ModelProbe.register_probe('checkpoint', ModelType.Vae, VaeCheckpointProbe) ModelProbe.register_probe('checkpoint', ModelType.Lora, LoRACheckpointProbe) ModelProbe.register_probe('checkpoint', ModelType.TextualInversion, TextualInversionCheckpointProbe) diff --git a/invokeai/backend/model_management/models/__init__.py b/invokeai/backend/model_management/models/__init__.py index 6975d45f93..87b0ad3c4e 100644 --- a/invokeai/backend/model_management/models/__init__.py +++ b/invokeai/backend/model_management/models/__init__.py @@ -11,21 +11,21 @@ from .textual_inversion import TextualInversionModel MODEL_CLASSES = { BaseModelType.StableDiffusion1: { - ModelType.Pipeline: StableDiffusion1Model, + ModelType.Main: StableDiffusion1Model, ModelType.Vae: VaeModel, ModelType.Lora: LoRAModel, ModelType.ControlNet: ControlNetModel, ModelType.TextualInversion: TextualInversionModel, }, BaseModelType.StableDiffusion2: { - ModelType.Pipeline: StableDiffusion2Model, + ModelType.Main: StableDiffusion2Model, ModelType.Vae: VaeModel, ModelType.Lora: LoRAModel, ModelType.ControlNet: ControlNetModel, ModelType.TextualInversion: TextualInversionModel, }, #BaseModelType.Kandinsky2_1: { - # ModelType.Pipeline: Kandinsky2_1Model, + # ModelType.Main: Kandinsky2_1Model, # ModelType.MoVQ: MoVQModel, # ModelType.Lora: LoRAModel, # ModelType.ControlNet: ControlNetModel, diff --git a/invokeai/backend/model_management/models/base.py b/invokeai/backend/model_management/models/base.py index 0b36cd4235..beaac40109 100644 --- a/invokeai/backend/model_management/models/base.py +++ b/invokeai/backend/model_management/models/base.py @@ -18,7 +18,7 @@ class BaseModelType(str, Enum): #Kandinsky2_1 = "kandinsky-2.1" class ModelType(str, Enum): - Pipeline = "pipeline" + Main = "main" Vae = "vae" Lora = "lora" ControlNet = "controlnet" # used by model_probe diff --git a/invokeai/backend/model_management/models/stable_diffusion.py b/invokeai/backend/model_management/models/stable_diffusion.py index aa7d05b766..a269ae12e2 100644 --- a/invokeai/backend/model_management/models/stable_diffusion.py +++ b/invokeai/backend/model_management/models/stable_diffusion.py @@ -40,11 +40,11 @@ class StableDiffusion1Model(DiffusersModel): def __init__(self, model_path: str, base_model: BaseModelType, model_type: ModelType): assert base_model == BaseModelType.StableDiffusion1 - assert model_type == ModelType.Pipeline + assert model_type == ModelType.Main super().__init__( model_path=model_path, base_model=BaseModelType.StableDiffusion1, - model_type=ModelType.Pipeline, + model_type=ModelType.Main, ) @classmethod @@ -140,11 +140,11 @@ class StableDiffusion2Model(DiffusersModel): def __init__(self, model_path: str, base_model: BaseModelType, model_type: ModelType): assert base_model == BaseModelType.StableDiffusion2 - assert model_type == ModelType.Pipeline + assert model_type == ModelType.Main super().__init__( model_path=model_path, base_model=BaseModelType.StableDiffusion2, - model_type=ModelType.Pipeline, + model_type=ModelType.Main, ) @classmethod diff --git a/invokeai/configs/INITIAL_MODELS.yaml b/invokeai/configs/INITIAL_MODELS.yaml index 9ff9efc3f5..4ba67bc4bc 100644 --- a/invokeai/configs/INITIAL_MODELS.yaml +++ b/invokeai/configs/INITIAL_MODELS.yaml @@ -1,58 +1,58 @@ # This file predefines a few models that the user may want to install. -sd-1/pipeline/stable-diffusion-v1-5: +sd-1/main/stable-diffusion-v1-5: description: Stable Diffusion version 1.5 diffusers model (4.27 GB) repo_id: runwayml/stable-diffusion-v1-5 recommended: True default: True -sd-1/pipeline/stable-diffusion-inpainting: +sd-1/main/stable-diffusion-inpainting: description: RunwayML SD 1.5 model optimized for inpainting, diffusers version (4.27 GB) repo_id: runwayml/stable-diffusion-inpainting recommended: True -sd-2/pipeline/stable-diffusion-2-1: +sd-2/main/stable-diffusion-2-1: description: Stable Diffusion version 2.1 diffusers model, trained on 768 pixel images (5.21 GB) repo_id: stabilityai/stable-diffusion-2-1 recommended: True -sd-2/pipeline/stable-diffusion-2-inpainting: +sd-2/main/stable-diffusion-2-inpainting: description: Stable Diffusion version 2.0 inpainting model (5.21 GB) repo_id: stabilityai/stable-diffusion-2-inpainting recommended: False -sd-1/pipeline/Analog-Diffusion: +sd-1/main/Analog-Diffusion: description: An SD-1.5 model trained on diverse analog photographs (2.13 GB) repo_id: wavymulder/Analog-Diffusion recommended: false -sd-1/pipeline/Deliberate: +sd-1/main/Deliberate: description: Versatile model that produces detailed images up to 768px (4.27 GB) repo_id: XpucT/Deliberate recommended: False -sd-1/pipeline/Dungeons-and-Diffusion: +sd-1/main/Dungeons-and-Diffusion: description: Dungeons & Dragons characters (2.13 GB) repo_id: 0xJustin/Dungeons-and-Diffusion recommended: False -sd-1/pipeline/dreamlike-photoreal-2: +sd-1/main/dreamlike-photoreal-2: description: A photorealistic model trained on 768 pixel images based on SD 1.5 (2.13 GB) repo_id: dreamlike-art/dreamlike-photoreal-2.0 recommended: False -sd-1/pipeline/Inkpunk-Diffusion: +sd-1/main/Inkpunk-Diffusion: description: Stylized illustrations inspired by Gorillaz, FLCL and Shinkawa; prompt with "nvinkpunk" (4.27 GB) repo_id: Envvi/Inkpunk-Diffusion recommended: False -sd-1/pipeline/openjourney: +sd-1/main/openjourney: description: An SD 1.5 model fine tuned on Midjourney; prompt with "mdjrny-v4 style" (2.13 GB) repo_id: prompthero/openjourney recommended: False -sd-1/pipeline/portraitplus: +sd-1/main/portraitplus: description: An SD-1.5 model trained on close range portraits of people; prompt with "portrait+" (2.13 GB) repo_id: wavymulder/portraitplus recommended: False -sd-1/pipeline/seek.art_MEGA: +sd-1/main/seek.art_MEGA: repo_id: coreco/seek.art_MEGA description: A general use SD-1.5 "anything" model that supports multiple styles (2.1 GB) recommended: False -sd-1/pipeline/trinart_stable_diffusion_v2: +sd-1/main/trinart_stable_diffusion_v2: description: An SD-1.5 model finetuned with ~40K assorted high resolution manga/anime-style images (2.13 GB) repo_id: naclbit/trinart_stable_diffusion_v2 recommended: False -sd-1/pipeline/waifu-diffusion: +sd-1/main/waifu-diffusion: description: An SD-1.5 model trained on 680k anime/manga-style images (2.13 GB) repo_id: hakurei/waifu-diffusion recommended: False diff --git a/invokeai/frontend/install/model_install.py b/invokeai/frontend/install/model_install.py index 206cdcacdb..5dd72d4776 100644 --- a/invokeai/frontend/install/model_install.py +++ b/invokeai/frontend/install/model_install.py @@ -127,7 +127,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): self.nextrely = top_of_table self.pipeline_models = self.add_pipeline_widgets( - model_type=ModelType.Pipeline, + model_type=ModelType.Main, window_width=window_width, exclude = self.starter_models ) @@ -303,7 +303,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage): ### Tab for arbitrary diffusers widgets ### def add_pipeline_widgets(self, - model_type: ModelType=ModelType.Pipeline, + model_type: ModelType=ModelType.Main, window_width: int=120, **kwargs, )->dict[str,npyscreen.widget]: