From a540cc537f39a1a31e8d598b070b858c2b7c8fa0 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 24 Feb 2023 00:53:48 -0500 Subject: [PATCH] add curated set of HuggingFace diffusers models for 2.3.1 release - Final list can be found in invokeai/configs/INITIAL_MODELS.yaml - After installing all the models, I discovered a bug in the file selection form that caused a crash when no remaining uninstalled models remained. So had to fix this. --- invokeai/configs/INITIAL_MODELS.yaml | 77 +++++++++++++++++--------- ldm/invoke/config/model_install.py | 82 +++++++++++++++------------- 2 files changed, 96 insertions(+), 63 deletions(-) diff --git a/invokeai/configs/INITIAL_MODELS.yaml b/invokeai/configs/INITIAL_MODELS.yaml index 60ddbf3324..edc6285a38 100644 --- a/invokeai/configs/INITIAL_MODELS.yaml +++ b/invokeai/configs/INITIAL_MODELS.yaml @@ -6,53 +6,78 @@ stable-diffusion-1.5: repo_id: stabilityai/sd-vae-ft-mse recommended: True default: True -inpainting-1.5: +sd-inpainting-1.5: description: RunwayML SD 1.5 model optimized for inpainting, diffusers version (4.27 GB) repo_id: runwayml/stable-diffusion-inpainting format: diffusers vae: repo_id: stabilityai/sd-vae-ft-mse recommended: True -dreamlike-diffusion-1.0: - description: An SD 1.5 model fine tuned on high quality art by dreamlike.art, diffusers version (2.13 BG) - format: diffusers - repo_id: dreamlike-art/dreamlike-diffusion-1.0 - vae: - repo_id: stabilityai/sd-vae-ft-mse - recommended: True -dreamlike-photoreal-2.0: - description: A photorealistic model trained on 768 pixel images based on SD 1.5 (2.13 GB) - format: diffusers - repo_id: dreamlike-art/dreamlike-photoreal-2.0 - recommended: False -stable-diffusion-2.1-768: +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 format: diffusers recommended: True -stable-diffusion-2.1-base: - description: Stable Diffusion version 2.1 diffusers base model, trained on 512 pixel images (5.21 GB) - repo_id: stabilityai/stable-diffusion-2-1-base +sd-inpainting-2.0: + description: Stable Diffusion version 2.0 inpainting model (5.21 GB) + repo_id: stabilityai/stable-diffusion-2-1 format: diffusers recommended: False +analog-diffusion-1.0: + description: An SD-1.5 model trained on diverse analog photographs (2.13 GB) + repo_id: wavymulder/Analog-Diffusion + format: diffusers + recommended: false +deliberate-1.0: + description: Versatile model that produces detailed images up to 768px (4.27 GB) + format: diffusers + repo_id: XpucT/Deliberate + recommended: False +d&d-diffusion-1.0: + description: Dungeons & Dragons characters (2.13 GB) + format: diffusers + repo_id: 0xJustin/Dungeons-and-Diffusion + recommended: False +dreamlike-photoreal-2.0: + description: A photorealistic model trained on 768 pixel images based on SD 1.5 (2.13 GB) + format: diffusers + repo_id: dreamlike-art/dreamlike-photoreal-2.0 + recommended: False +inkpunk-1.0: + description: Stylized illustrations inspired by Gorillaz, FLCL and Shinkawa; prompt with "nvinkpunk" (4.27 GB) + format: diffusers + repo_id: Envvi/Inkpunk-Diffusion + recommended: False openjourney-4.0: - description: An SD 1.5 model fine tuned on Midjourney images by PromptHero - include "mdjrny-v4 style" in your prompts (2.13 GB) - format: diffusers - repo_id: prompthero/openjourney - vae: + description: An SD 1.5 model fine tuned on Midjourney; prompt with "mdjrny-v4 style" (2.13 GB) + format: diffusers + repo_id: prompthero/openjourney + vae: repo_id: stabilityai/sd-vae-ft-mse - recommended: False -nitro-diffusion-1.0: - description: A SD 1.5 model trained on three artstyles - prompt with "archer style", "arcane style" and/or "modern disney style" (2.13 GB) - repo_id: nitrosocke/Nitro-Diffusion + recommended: False +portrait-plus-1.0: + description: An SD-1.5 model trained on close range portraits of people; prompt with "portrait+" (2.13 GB) + format: diffusers + repo_id: wavymulder/portraitplus + recommended: False +seek-art-mega-1.0: + description: A general use SD-1.5 "anything" model that supports multiple styles (2.1 GB) + repo_id: coreco/seek.art_MEGA format: diffusers vae: repo_id: stabilityai/sd-vae-ft-mse recommended: False trinart-2.0: - description: An SD model finetuned with ~40,000 assorted high resolution manga/anime-style pictures, diffusers version (2.13 GB) + 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 format: diffusers vae: repo_id: stabilityai/sd-vae-ft-mse recommended: False +waifu-diffusion-1.4: + description: An SD-1.5 model trained on 680k anime/manga-style images (2.13 GB) + repo_id: hakurei/waifu-diffusion + format: diffusers + vae: + repo_id: stabilityai/sd-vae-ft-mse + recommended: False diff --git a/ldm/invoke/config/model_install.py b/ldm/invoke/config/model_install.py index 7dd5831707..287283ca27 100644 --- a/ldm/invoke/config/model_install.py +++ b/ldm/invoke/config/model_install.py @@ -114,37 +114,37 @@ class addModelsForm(npyscreen.FormMultiPage): relx=4, ) self.nextrely += 1 - self.add_widget_intelligent( - CenteredTitleText, - name="== STARTER MODELS (recommended ones selected) ==", - editable=False, - color="CONTROL", - ) - self.nextrely -= 1 - self.add_widget_intelligent( - CenteredTitleText, - name="Select from a starter set of Stable Diffusion models from HuggingFace:", - editable=False, - labelColor="CAUTION", - ) - - self.nextrely -= 1 - # if user has already installed some initial models, then don't patronize them - # by showing more recommendations - show_recommended = not self.existing_models - self.models_selected = self.add_widget_intelligent( - npyscreen.MultiSelect, - name="Install Starter Models", - values=starter_model_labels, - value=[ - self.starter_model_list.index(x) - for x in self.starter_model_list - if show_recommended and x in recommended_models - ], - max_height=len(starter_model_labels) + 1, - relx=4, - scroll_exit=True, - ) + if len(self.starter_model_list) > 0: + self.add_widget_intelligent( + CenteredTitleText, + name="== STARTER MODELS (recommended ones selected) ==", + editable=False, + color="CONTROL", + ) + self.nextrely -= 1 + self.add_widget_intelligent( + CenteredTitleText, + name="Select from a starter set of Stable Diffusion models from HuggingFace.", + editable=False, + labelColor="CAUTION", + ) + self.nextrely -= 1 + # if user has already installed some initial models, then don't patronize them + # by showing more recommendations + show_recommended = not self.existing_models + self.models_selected = self.add_widget_intelligent( + npyscreen.MultiSelect, + name="Install Starter Models", + values=starter_model_labels, + value=[ + self.starter_model_list.index(x) + for x in self.starter_model_list + if show_recommended and x in recommended_models + ], + max_height=len(starter_model_labels) + 1, + relx=4, + scroll_exit=True, + ) self.add_widget_intelligent( CenteredTitleText, name='== IMPORT LOCAL AND REMOTE MODELS ==', @@ -166,7 +166,11 @@ class addModelsForm(npyscreen.FormMultiPage): ) self.nextrely -= 1 self.import_model_paths = self.add_widget_intelligent( - TextBox, max_height=5, scroll_exit=True, editable=True, relx=4 + TextBox, + max_height=7, + scroll_exit=True, + editable=True, + relx=4 ) self.nextrely += 1 self.show_directory_fields = self.add_widget_intelligent( @@ -241,7 +245,8 @@ class addModelsForm(npyscreen.FormMultiPage): def resize(self): super().resize() - self.models_selected.values = self._get_starter_model_labels() + if hasattr(self,'models_selected'): + self.models_selected.values = self._get_starter_model_labels() def _clear_scan_directory(self): if not self.show_directory_fields.value: @@ -320,11 +325,14 @@ class addModelsForm(npyscreen.FormMultiPage): selections = self.parentApp.user_selections # starter models to install/remove - starter_models = dict( - map( - lambda x: (self.starter_model_list[x], True), self.models_selected.value + if hasattr(self,'models_selected'): + starter_models = dict( + map( + lambda x: (self.starter_model_list[x], True), self.models_selected.value + ) ) - ) + else: + starter_models = dict() selections.purge_deleted_models = False if hasattr(self, "previously_installed_models"): unchecked = [