diff --git a/.gitignore b/.gitignore index c84ffb1e65..031c102165 100644 --- a/.gitignore +++ b/.gitignore @@ -198,7 +198,7 @@ checkpoints .DS_Store # Let the frontend manage its own gitignore -!invokeai/frontend/* +!invokeai/frontend/web/* # Scratch folder .scratch/ diff --git a/ldm/invoke/app/api/dependencies.py b/invokeai/app/api/dependencies.py similarity index 100% rename from ldm/invoke/app/api/dependencies.py rename to invokeai/app/api/dependencies.py diff --git a/ldm/invoke/app/api/events.py b/invokeai/app/api/events.py similarity index 100% rename from ldm/invoke/app/api/events.py rename to invokeai/app/api/events.py diff --git a/ldm/invoke/app/api/routers/images.py b/invokeai/app/api/routers/images.py similarity index 100% rename from ldm/invoke/app/api/routers/images.py rename to invokeai/app/api/routers/images.py diff --git a/ldm/invoke/app/api/routers/sessions.py b/invokeai/app/api/routers/sessions.py similarity index 100% rename from ldm/invoke/app/api/routers/sessions.py rename to invokeai/app/api/routers/sessions.py diff --git a/ldm/invoke/app/api/sockets.py b/invokeai/app/api/sockets.py similarity index 100% rename from ldm/invoke/app/api/sockets.py rename to invokeai/app/api/sockets.py diff --git a/ldm/invoke/app/api_app.py b/invokeai/app/api_app.py similarity index 100% rename from ldm/invoke/app/api_app.py rename to invokeai/app/api_app.py diff --git a/ldm/invoke/app/cli_app.py b/invokeai/app/cli_app.py similarity index 100% rename from ldm/invoke/app/cli_app.py rename to invokeai/app/cli_app.py diff --git a/ldm/invoke/app/invocations/__init__.py b/invokeai/app/invocations/__init__.py similarity index 100% rename from ldm/invoke/app/invocations/__init__.py rename to invokeai/app/invocations/__init__.py diff --git a/ldm/invoke/app/invocations/baseinvocation.py b/invokeai/app/invocations/baseinvocation.py similarity index 100% rename from ldm/invoke/app/invocations/baseinvocation.py rename to invokeai/app/invocations/baseinvocation.py diff --git a/ldm/invoke/app/invocations/cv.py b/invokeai/app/invocations/cv.py similarity index 100% rename from ldm/invoke/app/invocations/cv.py rename to invokeai/app/invocations/cv.py diff --git a/ldm/invoke/app/invocations/generate.py b/invokeai/app/invocations/generate.py similarity index 100% rename from ldm/invoke/app/invocations/generate.py rename to invokeai/app/invocations/generate.py diff --git a/ldm/invoke/app/invocations/image.py b/invokeai/app/invocations/image.py similarity index 100% rename from ldm/invoke/app/invocations/image.py rename to invokeai/app/invocations/image.py diff --git a/ldm/invoke/app/invocations/prompt.py b/invokeai/app/invocations/prompt.py similarity index 100% rename from ldm/invoke/app/invocations/prompt.py rename to invokeai/app/invocations/prompt.py diff --git a/ldm/invoke/app/invocations/reconstruct.py b/invokeai/app/invocations/reconstruct.py similarity index 100% rename from ldm/invoke/app/invocations/reconstruct.py rename to invokeai/app/invocations/reconstruct.py diff --git a/ldm/invoke/app/invocations/upscale.py b/invokeai/app/invocations/upscale.py similarity index 100% rename from ldm/invoke/app/invocations/upscale.py rename to invokeai/app/invocations/upscale.py diff --git a/invokeai/backend/modules/__init__.py b/invokeai/app/services/__init__.py similarity index 100% rename from invokeai/backend/modules/__init__.py rename to invokeai/app/services/__init__.py diff --git a/ldm/invoke/app/services/events.py b/invokeai/app/services/events.py similarity index 100% rename from ldm/invoke/app/services/events.py rename to invokeai/app/services/events.py diff --git a/ldm/invoke/app/services/generate_initializer.py b/invokeai/app/services/generate_initializer.py similarity index 97% rename from ldm/invoke/app/services/generate_initializer.py rename to invokeai/app/services/generate_initializer.py index e1162a1b9a..c6e81a2403 100644 --- a/ldm/invoke/app/services/generate_initializer.py +++ b/invokeai/app/services/generate_initializer.py @@ -3,11 +3,10 @@ import os import sys import traceback -from invokeai.backend.models import ModelManager +from invokeai.backend import ModelManager, Generate from ...globals import Globals -from ....generate import Generate -import ldm.invoke +import invokeai.version # TODO: most of this code should be split into individual services as the Generate.py code is deprecated def get_generate(args, config) -> Generate: @@ -16,7 +15,7 @@ def get_generate(args, config) -> Generate: if not os.path.exists(config_file): report_model_error(args, FileNotFoundError(f"The file {config_file} could not be found.")) - print(f'>> {ldm.invoke.__app_name__}, version {ldm.invoke.__version__}') + print(f'>> {invokeai.version.__app_name__}, version {invokeai.version.__version__}') print(f'>> InvokeAI runtime directory is "{Globals.root}"') # these two lines prevent a horrible warning message from appearing @@ -160,7 +159,7 @@ def report_model_error(opt:Namespace, e:Exception): # Temporary initializer for Generate until we migrate off of it def old_get_generate(args, config) -> Generate: # TODO: Remove the need for globals - from ldm.invoke.globals import Globals + from invokeai.backend.globals import Globals # alert - setting globals here Globals.root = os.path.expanduser(args.root_dir or os.environ.get('INVOKEAI_ROOT') or os.path.abspath('.')) diff --git a/ldm/invoke/app/services/graph.py b/invokeai/app/services/graph.py similarity index 100% rename from ldm/invoke/app/services/graph.py rename to invokeai/app/services/graph.py diff --git a/ldm/invoke/app/services/image_storage.py b/invokeai/app/services/image_storage.py similarity index 100% rename from ldm/invoke/app/services/image_storage.py rename to invokeai/app/services/image_storage.py diff --git a/ldm/invoke/app/services/invocation_queue.py b/invokeai/app/services/invocation_queue.py similarity index 100% rename from ldm/invoke/app/services/invocation_queue.py rename to invokeai/app/services/invocation_queue.py diff --git a/ldm/invoke/app/services/invocation_services.py b/invokeai/app/services/invocation_services.py similarity index 96% rename from ldm/invoke/app/services/invocation_services.py rename to invokeai/app/services/invocation_services.py index 40a64e64e5..93d60bb230 100644 --- a/ldm/invoke/app/services/invocation_services.py +++ b/invokeai/app/services/invocation_services.py @@ -3,8 +3,7 @@ from .invocation_queue import InvocationQueueABC from .item_storage import ItemStorageABC from .image_storage import ImageStorageBase from .events import EventServiceBase -from ....generate import Generate - +from invokeai.backend import Generate class InvocationServices(): """Services that can be used by invocations""" diff --git a/ldm/invoke/app/services/invoker.py b/invokeai/app/services/invoker.py similarity index 100% rename from ldm/invoke/app/services/invoker.py rename to invokeai/app/services/invoker.py diff --git a/ldm/invoke/app/services/item_storage.py b/invokeai/app/services/item_storage.py similarity index 100% rename from ldm/invoke/app/services/item_storage.py rename to invokeai/app/services/item_storage.py diff --git a/ldm/invoke/app/services/processor.py b/invokeai/app/services/processor.py similarity index 100% rename from ldm/invoke/app/services/processor.py rename to invokeai/app/services/processor.py diff --git a/ldm/invoke/app/services/sqlite.py b/invokeai/app/services/sqlite.py similarity index 100% rename from ldm/invoke/app/services/sqlite.py rename to invokeai/app/services/sqlite.py diff --git a/invokeai/backend/__init__.py b/invokeai/backend/__init__.py index 5384b3cee0..7bdc6e7270 100644 --- a/invokeai/backend/__init__.py +++ b/invokeai/backend/__init__.py @@ -1,8 +1,8 @@ ''' Initialization file for invokeai.backend ''' -# this is causing circular import issues -# from .invoke_ai_web_server import InvokeAIWebServer -from .model_manager import ModelManager +from .model_management import ModelManager +from .generate import Generate + diff --git a/ldm/invoke/args.py b/invokeai/backend/args.py similarity index 99% rename from ldm/invoke/args.py rename to invokeai/backend/args.py index d661409d18..7de6b35edb 100644 --- a/ldm/invoke/args.py +++ b/invokeai/backend/args.py @@ -98,8 +98,8 @@ from typing import List from invokeai.backend.image_util import retrieve_metadata import invokeai.version -from ldm.invoke.globals import Globals -from invokeai.backend.prompting import split_weighted_subprompts +from .globals import Globals +from .prompting import split_weighted_subprompts APP_ID = invokeai.version.__app_id__ APP_NAME = invokeai.version.__app_name__ diff --git a/ldm/__init__.py b/invokeai/backend/config/__init__.py similarity index 100% rename from ldm/__init__.py rename to invokeai/backend/config/__init__.py diff --git a/ldm/invoke/config/invokeai_configure.py b/invokeai/backend/config/invokeai_configure.py similarity index 99% rename from ldm/invoke/config/invokeai_configure.py rename to invokeai/backend/config/invokeai_configure.py index bb967fba37..9b1cc5affa 100755 --- a/ldm/invoke/config/invokeai_configure.py +++ b/invokeai/backend/config/invokeai_configure.py @@ -39,14 +39,14 @@ import invokeai.configs as configs from ..args import PRECISION_CHOICES, Args from ..globals import Globals, global_config_dir, global_config_file, global_cache_dir -from .model_install import addModelsForm, process_and_execute +from ...frontend.config.model_install import addModelsForm, process_and_execute from .model_install_backend import ( default_dataset, download_from_hf, recommended_datasets, hf_download_with_resume, ) -from .widgets import IntTitleSlider, CenteredButtonPress, set_min_terminal_size +from ...frontend.config.widgets import IntTitleSlider, CenteredButtonPress, set_min_terminal_size warnings.filterwarnings("ignore") diff --git a/ldm/invoke/config/model_install_backend.py b/invokeai/backend/config/model_install_backend.py similarity index 99% rename from ldm/invoke/config/model_install_backend.py rename to invokeai/backend/config/model_install_backend.py index d281ffbd73..6157c2b2b4 100644 --- a/ldm/invoke/config/model_install_backend.py +++ b/invokeai/backend/config/model_install_backend.py @@ -18,9 +18,9 @@ from tqdm import tqdm from typing import List import invokeai.configs as configs -from invokeai.backend.stable_diffusion import StableDiffusionGeneratorPipeline +from ..stable_diffusion import StableDiffusionGeneratorPipeline from ..globals import Globals, global_cache_dir, global_config_dir -from invokeai.backend import ModelManager +from ..model_management import ModelManager warnings.filterwarnings("ignore") diff --git a/ldm/generate.py b/invokeai/backend/generate.py similarity index 98% rename from ldm/generate.py rename to invokeai/backend/generate.py index 4bce177258..329e1b50bd 100644 --- a/ldm/generate.py +++ b/invokeai/backend/generate.py @@ -25,17 +25,18 @@ from omegaconf import OmegaConf from PIL import Image, ImageOps from pytorch_lightning import logging, seed_everything -from invokeai.backend import ModelManager -from invokeai.backend.prompting import get_uc_and_c_and_ec -from invokeai.backend.stable_diffusion import (DDIMSampler, KSampler, PLMSSampler) -from invokeai.backend.generator import infill_methods -from invokeai.backend.stable_diffusion.concepts_lib import HuggingFaceConceptsLibrary -from invokeai.backend.devices import choose_precision, choose_torch_device -from invokeai.backend.image_util import InitImageResizer, PngWriter, Txt2Mask +from . import ModelManager +from .prompting import get_uc_and_c_and_ec +from .stable_diffusion import (DDIMSampler, KSampler, PLMSSampler, HuggingFaceConceptsLibrary) +from .generator import infill_methods +from .util import choose_precision, choose_torch_device +from .image_util import (InitImageResizer, + PngWriter, + Txt2Mask, + configure_model_padding) -from ldm.invoke.globals import Globals, global_cache_dir -from ldm.invoke.args import metadata_from_png -from ldm.invoke.seamless import configure_model_padding +from .globals import Globals, global_cache_dir +from .args import metadata_from_png def fix_func(orig): if hasattr(torch.backends, "mps") and torch.backends.mps.is_available(): diff --git a/invokeai/backend/generator/base.py b/invokeai/backend/generator/base.py index c35cf58995..767b632103 100644 --- a/invokeai/backend/generator/base.py +++ b/invokeai/backend/generator/base.py @@ -23,7 +23,7 @@ from tqdm import trange import invokeai.assets.web as web_assets from ..stable_diffusion.diffusion.ddpm import DiffusionWrapper -from ..util import rand_perlin_2d +from ..util.util import rand_perlin_2d downsampling = 8 CAUTION_IMG = 'caution.png' diff --git a/ldm/invoke/globals.py b/invokeai/backend/globals.py similarity index 98% rename from ldm/invoke/globals.py rename to invokeai/backend/globals.py index c6ee0bbc54..f41160a39b 100644 --- a/ldm/invoke/globals.py +++ b/invokeai/backend/globals.py @@ -1,5 +1,5 @@ ''' -ldm.invoke.globals defines a small number of global variables that would +invokeai.backend.globals defines a small number of global variables that would otherwise have to be passed through long and complex call chains. It defines a Namespace object named "Globals" that contains diff --git a/invokeai/backend/image_util/__init__.py b/invokeai/backend/image_util/__init__.py index 8cb3199d2d..3b55f094d7 100644 --- a/invokeai/backend/image_util/__init__.py +++ b/invokeai/backend/image_util/__init__.py @@ -9,6 +9,7 @@ from .pngwriter import (PngWriter, retrieve_metadata, write_metadata, ) +from .seamless import configure_model_padding def debug_image( debug_image, debug_text, debug_show=True, debug_result=False, debug_status=False diff --git a/invokeai/backend/image_util/patchmatch.py b/invokeai/backend/image_util/patchmatch.py index 925fabe1bf..1c27a1d67d 100644 --- a/invokeai/backend/image_util/patchmatch.py +++ b/invokeai/backend/image_util/patchmatch.py @@ -4,7 +4,7 @@ wraps the actual patchmatch object. It respects the global "try_patchmatch" attribute, so that patchmatch loading can be suppressed or deferred ''' -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals import numpy as np class PatchMatch: diff --git a/ldm/invoke/seamless.py b/invokeai/backend/image_util/seamless.py similarity index 100% rename from ldm/invoke/seamless.py rename to invokeai/backend/image_util/seamless.py diff --git a/invokeai/backend/image_util/txt2mask.py b/invokeai/backend/image_util/txt2mask.py index ab9f94549b..6e64df3f31 100644 --- a/invokeai/backend/image_util/txt2mask.py +++ b/invokeai/backend/image_util/txt2mask.py @@ -32,7 +32,7 @@ import numpy as np from transformers import AutoProcessor, CLIPSegForImageSegmentation from PIL import Image, ImageOps from torchvision import transforms -from ldm.invoke.globals import global_cache_dir +from invokeai.backend.globals import global_cache_dir CLIPSEG_MODEL = 'CIDAS/clipseg-rd64-refined' CLIPSEG_SIZE = 352 diff --git a/invokeai/backend/model_management/__init__.py b/invokeai/backend/model_management/__init__.py new file mode 100644 index 0000000000..e83527123f --- /dev/null +++ b/invokeai/backend/model_management/__init__.py @@ -0,0 +1,8 @@ +''' +Initialization file for invokeai.backend.model_management +''' +from .model_manager import ModelManager +from .convert_ckpt_to_diffusers import (load_pipeline_from_original_stable_diffusion_ckpt, + convert_ckpt_to_diffusers) +from ...frontend.merge.merge_diffusers import (merge_diffusion_models, + merge_diffusion_models_and_commit) diff --git a/ldm/invoke/ckpt_to_diffuser.py b/invokeai/backend/model_management/convert_ckpt_to_diffusers.py similarity index 99% rename from ldm/invoke/ckpt_to_diffuser.py rename to invokeai/backend/model_management/convert_ckpt_to_diffusers.py index f6cac0b814..395432c1e6 100644 --- a/ldm/invoke/ckpt_to_diffuser.py +++ b/invokeai/backend/model_management/convert_ckpt_to_diffusers.py @@ -21,11 +21,11 @@ import re import torch import warnings from pathlib import Path -from ldm.invoke.globals import ( +from invokeai.backend.globals import ( global_cache_dir, global_config_dir, ) -from invokeai.models import ModelManager, SDLegacyType +from .model_manager import ModelManager, SDLegacyType from safetensors.torch import load_file from typing import Union @@ -56,7 +56,7 @@ from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionS from diffusers.utils import is_safetensors_available from transformers import AutoFeatureExtractor, BertTokenizerFast, CLIPTextModel, CLIPTokenizer, CLIPVisionConfig -from invokeai.generator import StableDiffusionGeneratorPipeline +from ..stable_diffusion import StableDiffusionGeneratorPipeline def shave_segments(path, n_shave_prefix_segments=1): """ @@ -1014,7 +1014,7 @@ def load_pipeline_from_original_stable_diffusion_ckpt( return pipe -def convert_ckpt_to_diffuser( +def convert_ckpt_to_diffusers( checkpoint_path:Union[str,Path], dump_path:Union[str,Path], **kwargs, diff --git a/invokeai/backend/model_manager.py b/invokeai/backend/model_management/model_manager.py similarity index 91% rename from invokeai/backend/model_manager.py rename to invokeai/backend/model_management/model_manager.py index 1f99654610..34a10969cd 100644 --- a/invokeai/backend/model_manager.py +++ b/invokeai/backend/model_management/model_manager.py @@ -31,14 +31,13 @@ from omegaconf import OmegaConf from omegaconf.dictconfig import DictConfig from picklescan.scanner import scan_file_path -from .devices import CPU_DEVICE -from ldm.invoke.globals import Globals, global_cache_dir -from .util import ( +from ..util import CPU_DEVICE +from invokeai.backend.globals import Globals, global_cache_dir +from ..util import ( ask_user, download_with_resume, - url_attachment_name, ) -from .stable_diffusion import StableDiffusionGeneratorPipeline +from ..stable_diffusion import StableDiffusionGeneratorPipeline class SDLegacyType(Enum): V1 = 1 @@ -416,6 +415,51 @@ class ModelManager(object): return pipeline, width, height, model_hash + def _load_ckpt_model(self, model_name, mconfig): + config = mconfig.config + weights = mconfig.weights + vae = mconfig.get("vae") + width = mconfig.width + height = mconfig.height + + if not os.path.isabs(config): + config = os.path.join(Globals.root, config) + if not os.path.isabs(weights): + weights = os.path.normpath(os.path.join(Globals.root, weights)) + + # Convert to diffusers and return a diffusers pipeline + print( + f">> Converting legacy checkpoint {model_name} into a diffusers model..." + ) + + from . import load_pipeline_from_original_stable_diffusion_ckpt + + self.offload_model(self.current_model) + if vae_config := self._choose_diffusers_vae(model_name): + vae = self._load_vae(vae_config) + if self._has_cuda(): + torch.cuda.empty_cache() + pipeline = load_pipeline_from_original_stable_diffusion_ckpt( + checkpoint_path=weights, + original_config_file=config, + vae=vae, + return_generator_pipeline=True, + precision=torch.float16 + if self.precision == "float16" + else torch.float32, + ) + if self.sequential_offload: + pipeline.enable_offload_submodels(self.device) + else: + pipeline.to(self.device) + + return ( + pipeline, + width, + height, + "NOHASH", + ) + def model_name_or_path(self, model_name: Union[str, DictConfig]) -> str | Path: if isinstance(model_name, DictConfig) or isinstance(model_name, dict): mconfig = model_name @@ -519,66 +563,6 @@ class ModelManager(object): self.commit(commit_to_conf) return model_name - def import_ckpt_model( - self, - weights: Union[str, Path], - config: Union[str, Path] = "configs/stable-diffusion/v1-inference.yaml", - vae: Union[str, Path] = None, - model_name: str = None, - model_description: str = None, - commit_to_conf: Path = None, - ) -> str: - """ - Attempts to install the indicated ckpt file and returns True if successful. - - "weights" can be either a path-like object corresponding to a local .ckpt file - or a http/https URL pointing to a remote model. - - "vae" is a Path or str object pointing to a ckpt or safetensors file to be used - as the VAE for this model. - - "config" is the model config file to use with this ckpt file. It defaults to - v1-inference.yaml. If a URL is provided, the config will be downloaded. - - You can optionally provide a model name and/or description. If not provided, - then these will be derived from the weight file name. If you provide a commit_to_conf - path to the configuration file, then the new entry will be committed to the - models.yaml file. - - Return value is the name of the imported file, or None if an error occurred. - """ - if str(weights).startswith(("http:", "https:")): - model_name = model_name or url_attachment_name(weights) - - weights_path = self._resolve_path(weights, "models/ldm/stable-diffusion-v1") - config_path = self._resolve_path(config, "configs/stable-diffusion") - - if weights_path is None or not weights_path.exists(): - return - if config_path is None or not config_path.exists(): - return - - model_name = ( - model_name or Path(weights).stem - ) # note this gives ugly pathnames if used on a URL without a Content-Disposition header - model_description = ( - model_description or f"Imported stable diffusion weights file {model_name}" - ) - new_config = dict( - weights=str(weights_path), - config=str(config_path), - description=model_description, - format="ckpt", - width=512, - height=512, - ) - if vae: - new_config["vae"] = vae - self.add_model(model_name, new_config, True) - if commit_to_conf: - self.commit(commit_to_conf) - return model_name - @classmethod def probe_model_type(self, checkpoint: dict) -> SDLegacyType: """ @@ -746,36 +730,18 @@ class ModelManager(object): ) return - if convert: - diffuser_path = Path( - Globals.root, "models", Globals.converted_ckpts_dir, model_path.stem - ) - model_name = self.convert_and_import( - model_path, - diffusers_path=diffuser_path, - vae=dict(repo_id="stabilityai/sd-vae-ft-mse"), - model_name=model_name, - model_description=description, - original_config_file=model_config_file, - commit_to_conf=commit_to_conf, - ) - else: - model_name = self.import_ckpt_model( - model_path, - config=model_config_file, - model_name=model_name, - model_description=description, - vae=str( - Path( - Globals.root, - "models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt", - ) - ), - commit_to_conf=commit_to_conf, - ) - - if commit_to_conf: - self.commit(commit_to_conf) + diffuser_path = Path( + Globals.root, "models", Globals.converted_ckpts_dir, model_path.stem + ) + model_name = self.convert_and_import( + model_path, + diffusers_path=diffuser_path, + vae=dict(repo_id="stabilityai/sd-vae-ft-mse"), + model_name=model_name, + model_description=description, + original_config_file=model_config_file, + commit_to_conf=commit_to_conf, + ) return model_name def convert_and_import( @@ -800,7 +766,7 @@ class ModelManager(object): new_config = None - from ldm.invoke.ckpt_to_diffuser import convert_ckpt_to_diffuser + from . import convert_ckpt_to_diffusers if diffusers_path.exists(): print( @@ -815,7 +781,7 @@ class ModelManager(object): # By passing the specified VAE to the conversion function, the autoencoder # will be built into the model rather than tacked on afterward via the config file vae_model = self._load_vae(vae) if vae else None - convert_ckpt_to_diffuser( + convert_ckpt_to_diffusers ( ckpt_path, diffusers_path, extract_ema=True, diff --git a/invokeai/backend/prompting/conditioning.py b/invokeai/backend/prompting/conditioning.py index 9ec8babf16..b9378cf5ed 100644 --- a/invokeai/backend/prompting/conditioning.py +++ b/invokeai/backend/prompting/conditioning.py @@ -13,9 +13,9 @@ from transformers import CLIPTokenizer, CLIPTextModel from compel import Compel from compel.prompt_parser import FlattenedPrompt, Blend, Fragment, CrossAttentionControlSubstitute, PromptParser -from ..devices import torch_dtype +from ..util import torch_dtype from ..stable_diffusion import InvokeAIDiffuserComponent -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals def get_tokenizer(model) -> CLIPTokenizer: # TODO remove legacy ckpt fallback handling diff --git a/ldm/invoke/restoration/__init__.py b/invokeai/backend/restoration/__init__.py similarity index 100% rename from ldm/invoke/restoration/__init__.py rename to invokeai/backend/restoration/__init__.py diff --git a/ldm/invoke/restoration/base.py b/invokeai/backend/restoration/base.py similarity index 84% rename from ldm/invoke/restoration/base.py rename to invokeai/backend/restoration/base.py index 5b4bc483c2..036d56a271 100644 --- a/ldm/invoke/restoration/base.py +++ b/invokeai/backend/restoration/base.py @@ -23,16 +23,16 @@ class Restoration(): # Face Restore Models def load_gfpgan(self, gfpgan_model_path): - from ldm.invoke.restoration.gfpgan import GFPGAN + from .gfpgan import GFPGAN return GFPGAN(gfpgan_model_path) def load_codeformer(self): - from ldm.invoke.restoration.codeformer import CodeFormerRestoration + from .codeformer import CodeFormerRestoration return CodeFormerRestoration() # Upscale Models def load_esrgan(self, esrgan_bg_tile=400): - from ldm.invoke.restoration.realesrgan import ESRGAN + from .realesrgan import ESRGAN esrgan = ESRGAN(esrgan_bg_tile) print('>> ESRGAN Initialized') return esrgan; diff --git a/ldm/invoke/restoration/codeformer.py b/invokeai/backend/restoration/codeformer.py similarity index 98% rename from ldm/invoke/restoration/codeformer.py rename to invokeai/backend/restoration/codeformer.py index cac0d839bc..ab4ce82376 100644 --- a/ldm/invoke/restoration/codeformer.py +++ b/invokeai/backend/restoration/codeformer.py @@ -3,7 +3,7 @@ import torch import numpy as np import warnings import sys -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals pretrained_model_url = 'https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth' diff --git a/ldm/invoke/restoration/codeformer_arch.py b/invokeai/backend/restoration/codeformer_arch.py similarity index 99% rename from ldm/invoke/restoration/codeformer_arch.py rename to invokeai/backend/restoration/codeformer_arch.py index eb7d122aad..dc71c86b33 100644 --- a/ldm/invoke/restoration/codeformer_arch.py +++ b/invokeai/backend/restoration/codeformer_arch.py @@ -5,7 +5,7 @@ from torch import nn, Tensor import torch.nn.functional as F from typing import Optional, List -from ldm.invoke.restoration.vqgan_arch import * +from .vqgan_arch import * from basicsr.utils import get_root_logger from basicsr.utils.registry import ARCH_REGISTRY @@ -25,7 +25,6 @@ def calc_mean_std(feat, eps=1e-5): feat_mean = feat.view(b, c, -1).mean(dim=2).view(b, c, 1, 1) return feat_mean, feat_std - def adaptive_instance_normalization(content_feat, style_feat): """Adaptive instance normalization. diff --git a/ldm/invoke/restoration/gfpgan.py b/invokeai/backend/restoration/gfpgan.py similarity index 98% rename from ldm/invoke/restoration/gfpgan.py rename to invokeai/backend/restoration/gfpgan.py index 748924937d..5fff52583f 100644 --- a/ldm/invoke/restoration/gfpgan.py +++ b/invokeai/backend/restoration/gfpgan.py @@ -3,7 +3,7 @@ import warnings import os import sys import numpy as np -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals from PIL import Image diff --git a/ldm/invoke/restoration/outcrop.py b/invokeai/backend/restoration/outcrop.py similarity index 100% rename from ldm/invoke/restoration/outcrop.py rename to invokeai/backend/restoration/outcrop.py diff --git a/ldm/invoke/restoration/outpaint.py b/invokeai/backend/restoration/outpaint.py similarity index 100% rename from ldm/invoke/restoration/outpaint.py rename to invokeai/backend/restoration/outpaint.py diff --git a/ldm/invoke/restoration/realesrgan.py b/invokeai/backend/restoration/realesrgan.py similarity index 98% rename from ldm/invoke/restoration/realesrgan.py rename to invokeai/backend/restoration/realesrgan.py index a8c64c2548..0b99f8bbb6 100644 --- a/ldm/invoke/restoration/realesrgan.py +++ b/invokeai/backend/restoration/realesrgan.py @@ -3,7 +3,7 @@ import warnings import numpy as np import os -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals from PIL import Image from PIL.Image import Image as ImageType diff --git a/ldm/invoke/restoration/vqgan_arch.py b/invokeai/backend/restoration/vqgan_arch.py similarity index 100% rename from ldm/invoke/restoration/vqgan_arch.py rename to invokeai/backend/restoration/vqgan_arch.py diff --git a/invokeai/backend/stable_diffusion/concepts_lib.py b/invokeai/backend/stable_diffusion/concepts_lib.py index c774f29674..63d0a660a0 100644 --- a/invokeai/backend/stable_diffusion/concepts_lib.py +++ b/invokeai/backend/stable_diffusion/concepts_lib.py @@ -10,7 +10,7 @@ import traceback from typing import Callable from urllib import request, error as ul_error from huggingface_hub import HfFolder, hf_hub_url, ModelSearchArguments, ModelFilter, HfApi -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals class HuggingFaceConceptsLibrary(object): def __init__(self, root=None): diff --git a/invokeai/backend/stable_diffusion/diffusers_pipeline.py b/invokeai/backend/stable_diffusion/diffusers_pipeline.py index fcc958d61b..c4ac77aaf6 100644 --- a/invokeai/backend/stable_diffusion/diffusers_pipeline.py +++ b/invokeai/backend/stable_diffusion/diffusers_pipeline.py @@ -26,11 +26,11 @@ from torchvision.transforms.functional import resize as tv_resize from transformers import CLIPFeatureExtractor, CLIPTextModel, CLIPTokenizer from typing_extensions import ParamSpec -from ldm.invoke.globals import Globals -from ..stable_diffusion.diffusion import InvokeAIDiffuserComponent, PostprocessingSettings, AttentionMapSaver -from ..stable_diffusion.textual_inversion_manager import TextualInversionManager -from ..stable_diffusion.offloading import LazilyLoadedModelGroup, FullyLoadedModelGroup, ModelGroup -from ..devices import normalize_device, CPU_DEVICE +from invokeai.backend.globals import Globals +from .diffusion import InvokeAIDiffuserComponent, PostprocessingSettings, AttentionMapSaver +from .textual_inversion_manager import TextualInversionManager +from .offloading import LazilyLoadedModelGroup, FullyLoadedModelGroup, ModelGroup +from ..util import normalize_device, CPU_DEVICE from compel import EmbeddingsProvider @dataclass diff --git a/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py b/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py index 6e91e5c868..3373bf0e61 100644 --- a/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py +++ b/invokeai/backend/stable_diffusion/diffusion/cross_attention_control.py @@ -15,7 +15,7 @@ from torch import nn from compel.cross_attention_control import Arguments from diffusers.models.unet_2d_condition import UNet2DConditionModel from diffusers.models.cross_attention import AttnProcessor -from ...devices import torch_dtype +from ...util import torch_dtype class CrossAttentionType(enum.Enum): diff --git a/invokeai/backend/stable_diffusion/diffusion/ddpm.py b/invokeai/backend/stable_diffusion/diffusion/ddpm.py index deba4ebaf1..36251a0940 100644 --- a/invokeai/backend/stable_diffusion/diffusion/ddpm.py +++ b/invokeai/backend/stable_diffusion/diffusion/ddpm.py @@ -23,7 +23,7 @@ from omegaconf import ListConfig import urllib from ..textual_inversion_manager import TextualInversionManager -from ...util import ( +from ...util.util import ( log_txt_as_img, exists, default, diff --git a/invokeai/backend/stable_diffusion/diffusion/plms.py b/invokeai/backend/stable_diffusion/diffusion/plms.py index 2dfead482b..f4aa9bb12d 100644 --- a/invokeai/backend/stable_diffusion/diffusion/plms.py +++ b/invokeai/backend/stable_diffusion/diffusion/plms.py @@ -4,7 +4,7 @@ import torch import numpy as np from tqdm import tqdm from functools import partial -from ...devices import choose_torch_device +from ...util import choose_torch_device from .shared_invokeai_diffusion import InvokeAIDiffuserComponent from .sampler import Sampler from ..diffusionmodules.util import noise_like diff --git a/invokeai/backend/stable_diffusion/diffusion/sampler.py b/invokeai/backend/stable_diffusion/diffusion/sampler.py index 656897ee31..5f9ee2da29 100644 --- a/invokeai/backend/stable_diffusion/diffusion/sampler.py +++ b/invokeai/backend/stable_diffusion/diffusion/sampler.py @@ -7,7 +7,7 @@ import torch import numpy as np from tqdm import tqdm from functools import partial -from ...devices import choose_torch_device +from ...util import choose_torch_device from .shared_invokeai_diffusion import InvokeAIDiffuserComponent from ..diffusionmodules.util import ( diff --git a/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py b/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py index 32b978f704..b02a381d70 100644 --- a/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py +++ b/invokeai/backend/stable_diffusion/diffusion/shared_invokeai_diffusion.py @@ -8,7 +8,7 @@ import torch from diffusers.models.cross_attention import AttnProcessor from typing_extensions import TypeAlias -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals from .cross_attention_control import Arguments, \ restore_default_cross_attention, override_cross_attention, Context, get_cross_attention_modules, \ CrossAttentionType, SwapCrossAttnContext diff --git a/invokeai/backend/stable_diffusion/diffusionmodules/util.py b/invokeai/backend/stable_diffusion/diffusionmodules/util.py index a943e51d9e..a23f1abba4 100644 --- a/invokeai/backend/stable_diffusion/diffusionmodules/util.py +++ b/invokeai/backend/stable_diffusion/diffusionmodules/util.py @@ -15,7 +15,7 @@ import torch.nn as nn import numpy as np from einops import repeat -from ...util import instantiate_from_config +from ...util.util import instantiate_from_config def make_beta_schedule( diff --git a/invokeai/backend/stable_diffusion/encoders/modules.py b/invokeai/backend/stable_diffusion/encoders/modules.py index 32ac0de7a1..3c20b8d119 100644 --- a/invokeai/backend/stable_diffusion/encoders/modules.py +++ b/invokeai/backend/stable_diffusion/encoders/modules.py @@ -10,7 +10,7 @@ from einops import repeat from transformers import CLIPTokenizer, CLIPTextModel from ldm.invoke.devices import choose_torch_device -from ldm.invoke.globals import global_cache_dir +from invokeai.backend.globals import global_cache_dir from ldm.modules.x_transformer import ( Encoder, TransformerWrapper, diff --git a/invokeai/backend/training/__init.py__ b/invokeai/backend/training/__init.py__ new file mode 100644 index 0000000000..16bde19390 --- /dev/null +++ b/invokeai/backend/training/__init.py__ @@ -0,0 +1,4 @@ +''' +Initialization file for invokeai.backend.training +''' +from .textual_inversion_training import do_textual_inversion_training, parse_args diff --git a/ldm/invoke/training/textual_inversion_training.py b/invokeai/backend/training/textual_inversion_training.py similarity index 99% rename from ldm/invoke/training/textual_inversion_training.py rename to invokeai/backend/training/textual_inversion_training.py index 58c67b2ca8..4e9bd36eef 100644 --- a/ldm/invoke/training/textual_inversion_training.py +++ b/invokeai/backend/training/textual_inversion_training.py @@ -48,7 +48,7 @@ from transformers import CLIPTextModel, CLIPTokenizer # invokeai stuff from ldm.invoke.args import ArgFormatter, PagingArgumentParser -from ldm.invoke.globals import Globals, global_cache_dir +from invokeai.backend.globals import Globals, global_cache_dir if version.parse(version.parse(PIL.__version__).base_version) >= version.parse("9.1.0"): PIL_INTERPOLATION = { diff --git a/invokeai/backend/util/__init__.py b/invokeai/backend/util/__init__.py new file mode 100644 index 0000000000..434e03c273 --- /dev/null +++ b/invokeai/backend/util/__init__.py @@ -0,0 +1,18 @@ +''' +Initialization file for invokeai.backend.util +''' +from .devices import (choose_torch_device, + choose_precision, + normalize_device, + torch_dtype, + CPU_DEVICE, + CUDA_DEVICE, + MPS_DEVICE, + ) +from .util import (ask_user, + download_with_resume, + instantiate_from_config, + url_attachment_name, + ) +from .log import write_log + diff --git a/invokeai/backend/devices.py b/invokeai/backend/util/devices.py similarity index 94% rename from invokeai/backend/devices.py rename to invokeai/backend/util/devices.py index 8d8132e878..167847eae0 100644 --- a/invokeai/backend/devices.py +++ b/invokeai/backend/util/devices.py @@ -5,9 +5,11 @@ from contextlib import nullcontext import torch from torch import autocast -from ldm.invoke.globals import Globals +from invokeai.backend.globals import Globals CPU_DEVICE = torch.device("cpu") +CUDA_DEVICE = torch.device("cuda") +MPS_DEVICE = torch.device("mps") def choose_torch_device() -> torch.device: '''Convenience routine for guessing which GPU device to run model on''' diff --git a/ldm/invoke/log.py b/invokeai/backend/util/log.py similarity index 100% rename from ldm/invoke/log.py rename to invokeai/backend/util/log.py diff --git a/invokeai/backend/util.py b/invokeai/backend/util/util.py similarity index 100% rename from invokeai/backend/util.py rename to invokeai/backend/util/util.py diff --git a/invokeai/backend/web/__init__.py b/invokeai/backend/web/__init__.py new file mode 100644 index 0000000000..ef771f61be --- /dev/null +++ b/invokeai/backend/web/__init__.py @@ -0,0 +1,4 @@ +''' +Initialization file for the web backend. +''' +from .invoke_ai_web_server import InvokeAIWebServer diff --git a/invokeai/backend/invoke_ai_web_server.py b/invokeai/backend/web/invoke_ai_web_server.py similarity index 98% rename from invokeai/backend/invoke_ai_web_server.py rename to invokeai/backend/web/invoke_ai_web_server.py index 7c6177803c..c05de2f831 100644 --- a/invokeai/backend/invoke_ai_web_server.py +++ b/invokeai/backend/web/invoke_ai_web_server.py @@ -12,7 +12,7 @@ from threading import Event from uuid import uuid4 import eventlet -import invokeai.frontend.dist as frontend +import invokeai.frontend.web.dist as frontend from PIL import Image from PIL.Image import Image as ImageType from compel.prompt_parser import Blend @@ -20,24 +20,24 @@ from flask import Flask, redirect, send_from_directory, request, make_response from flask_socketio import SocketIO from werkzeug.utils import secure_filename -from invokeai.backend.modules.get_canvas_generation_mode import ( +from .modules.get_canvas_generation_mode import ( get_canvas_generation_mode, ) from .modules.parameters import parameters_to_command -from .prompting import (get_tokens_for_prompt_object, - get_prompt_structure, - get_tokenizer - ) -from .image_util import PngWriter, retrieve_metadata -from .generator import infill_methods -from .stable_diffusion import PipelineIntermediateState +from ..prompting import (get_tokens_for_prompt_object, + get_prompt_structure, + get_tokenizer + ) +from ..image_util import PngWriter, retrieve_metadata +from ..generator import infill_methods +from ..stable_diffusion import PipelineIntermediateState -from ldm.generate import Generate -from ldm.invoke.args import Args, APP_ID, APP_VERSION, calculate_init_img_hash -from ldm.invoke.globals import ( Globals, global_converted_ckpts_dir, - global_models_dir - ) -from ldm.invoke.merge_diffusers import merge_diffusion_models +from .. import Generate +from ..args import Args, APP_ID, APP_VERSION, calculate_init_img_hash +from ..globals import ( Globals, global_converted_ckpts_dir, + global_models_dir + ) +from ..model_management import merge_diffusion_models # Loading Arguments opt = Args() @@ -236,7 +236,7 @@ class InvokeAIWebServer: sys.exit(0) else: useSSL = args.certfile or args.keyfile - print(">> Started Invoke AI Web Server!") + print(">> Started Invoke AI Web Server") if self.host == "0.0.0.0": print( f"Point your browser at http{'s' if useSSL else ''}://localhost:{self.port} or use the host's DNS name or IP address." diff --git a/ldm/invoke/app/services/__init__.py b/invokeai/backend/web/modules/__init__.py similarity index 100% rename from ldm/invoke/app/services/__init__.py rename to invokeai/backend/web/modules/__init__.py diff --git a/invokeai/backend/modules/create_cmd_parser.py b/invokeai/backend/web/modules/create_cmd_parser.py similarity index 100% rename from invokeai/backend/modules/create_cmd_parser.py rename to invokeai/backend/web/modules/create_cmd_parser.py diff --git a/invokeai/backend/modules/get_canvas_generation_mode.py b/invokeai/backend/web/modules/get_canvas_generation_mode.py similarity index 100% rename from invokeai/backend/modules/get_canvas_generation_mode.py rename to invokeai/backend/web/modules/get_canvas_generation_mode.py diff --git a/invokeai/backend/modules/parameters.py b/invokeai/backend/web/modules/parameters.py similarity index 97% rename from invokeai/backend/modules/parameters.py rename to invokeai/backend/web/modules/parameters.py index 98799c284b..a650fa37f9 100644 --- a/invokeai/backend/modules/parameters.py +++ b/invokeai/backend/web/modules/parameters.py @@ -1,4 +1,4 @@ -from invokeai.backend.modules.parse_seed_weights import parse_seed_weights +from .parse_seed_weights import parse_seed_weights import argparse SAMPLER_CHOICES = [ diff --git a/invokeai/backend/modules/parse_seed_weights.py b/invokeai/backend/web/modules/parse_seed_weights.py similarity index 100% rename from invokeai/backend/modules/parse_seed_weights.py rename to invokeai/backend/web/modules/parse_seed_weights.py diff --git a/invokeai/backend/modules/test_images/init-img_full_transparency.png b/invokeai/backend/web/modules/test_images/init-img_full_transparency.png similarity index 100% rename from invokeai/backend/modules/test_images/init-img_full_transparency.png rename to invokeai/backend/web/modules/test_images/init-img_full_transparency.png diff --git a/invokeai/backend/modules/test_images/init-img_opaque.png b/invokeai/backend/web/modules/test_images/init-img_opaque.png similarity index 100% rename from invokeai/backend/modules/test_images/init-img_opaque.png rename to invokeai/backend/web/modules/test_images/init-img_opaque.png diff --git a/invokeai/backend/modules/test_images/init-img_partial_transparency.png b/invokeai/backend/web/modules/test_images/init-img_partial_transparency.png similarity index 100% rename from invokeai/backend/modules/test_images/init-img_partial_transparency.png rename to invokeai/backend/web/modules/test_images/init-img_partial_transparency.png diff --git a/invokeai/backend/modules/test_images/init-mask_has_mask.png b/invokeai/backend/web/modules/test_images/init-mask_has_mask.png similarity index 100% rename from invokeai/backend/modules/test_images/init-mask_has_mask.png rename to invokeai/backend/web/modules/test_images/init-mask_has_mask.png diff --git a/invokeai/backend/modules/test_images/init-mask_no_mask.png b/invokeai/backend/web/modules/test_images/init-mask_no_mask.png similarity index 100% rename from invokeai/backend/modules/test_images/init-mask_no_mask.png rename to invokeai/backend/web/modules/test_images/init-mask_no_mask.png diff --git a/ldm/invoke/CLI.py b/invokeai/frontend/CLI/CLI.py similarity index 98% rename from ldm/invoke/CLI.py rename to invokeai/frontend/CLI/CLI.py index 80442cffd0..0e74e4bff5 100644 --- a/ldm/invoke/CLI.py +++ b/invokeai/frontend/CLI/CLI.py @@ -18,21 +18,22 @@ import pyparsing # type: ignore import invokeai.version -from ..generate import Generate -from .args import (Args, dream_cmd_from_png, metadata_dumps, +from ...backend import Generate +from ...backend.args import (Args, + dream_cmd_from_png, + metadata_dumps, metadata_from_png) -from invokeai.backend.stable_diffusion import PipelineIntermediateState -from invokeai.backend.image_util import make_grid, PngWriter, retrieve_metadata, write_metadata -from invokeai.backend import ModelManager -from .globals import Globals -from .log import write_log +from ...backend.stable_diffusion import PipelineIntermediateState +from ...backend.image_util import make_grid, PngWriter, retrieve_metadata, write_metadata +from ...backend import ModelManager +from ...backend.globals import Globals +from ...backend.util import write_log from .readline import Completer, get_completer -from invokeai.backend.util import url_attachment_name +from ...backend.util import url_attachment_name # global used in multiple functions (fix) infile = None - def main(): """Initialize command-line parsers and the diffusion model""" global infile @@ -82,8 +83,6 @@ def main(): # when the frozen CLIP tokenizer is imported import transformers # type: ignore - from ldm.generate import Generate - transformers.logging.set_verbosity_error() import diffusers @@ -1021,7 +1020,7 @@ def get_next_command(infile=None, model_name="no model") -> str: # command stri def invoke_ai_web_server_loop(gen: Generate, gfpgan, codeformer, esrgan): print("\n* --web was specified, starting web server...") - from invokeai.backend.invoke_ai_web_server import InvokeAIWebServer + from invokeai.backend.web import InvokeAIWebServer # Change working directory to the stable-diffusion directory os.chdir(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) @@ -1075,7 +1074,7 @@ def load_face_restoration(opt): try: gfpgan, codeformer, esrgan = None, None, None if opt.restore or opt.esrgan: - from ldm.invoke.restoration import Restoration + from invokeai.backend.restoration import Restoration restoration = Restoration() if opt.restore: diff --git a/invokeai/frontend/CLI/__init__.py b/invokeai/frontend/CLI/__init__.py new file mode 100644 index 0000000000..4db5e778ff --- /dev/null +++ b/invokeai/frontend/CLI/__init__.py @@ -0,0 +1,4 @@ +''' +Initialization file for invokeai.frontend.CLI +''' +from .CLI import main as invokeai_command_line_interface diff --git a/ldm/invoke/readline.py b/invokeai/frontend/CLI/readline.py similarity index 99% rename from ldm/invoke/readline.py rename to invokeai/frontend/CLI/readline.py index 7fe74fc953..21e064662b 100644 --- a/ldm/invoke/readline.py +++ b/invokeai/frontend/CLI/readline.py @@ -11,9 +11,9 @@ seeds: import os import re import atexit -from ldm.invoke.args import Args -from ldm.invoke.globals import Globals -from invokeai.backend.stable_diffusion import HuggingFaceConceptsLibrary +from ...backend.args import Args +from ...backend.globals import Globals +from ...backend.stable_diffusion import HuggingFaceConceptsLibrary # ---------------readline utilities--------------------- try: diff --git a/invokeai/frontend/__init__.py b/invokeai/frontend/__init__.py new file mode 100644 index 0000000000..98fdf870e9 --- /dev/null +++ b/invokeai/frontend/__init__.py @@ -0,0 +1,3 @@ +''' +Initialization file for invokeai.frontend +''' diff --git a/invokeai/frontend/config/__init__.py b/invokeai/frontend/config/__init__.py new file mode 100644 index 0000000000..0d1d2aec75 --- /dev/null +++ b/invokeai/frontend/config/__init__.py @@ -0,0 +1,7 @@ +''' +Initialization file for invokeai.frontend.config +''' +from .model_install import main as invokeai_model_install +from .invokeai_configure import main as invokeai_configure +from .invokeai_update import main as invokeai_update + diff --git a/invokeai/frontend/config/invokeai_configure.py b/invokeai/frontend/config/invokeai_configure.py new file mode 100644 index 0000000000..748d7bb8ca --- /dev/null +++ b/invokeai/frontend/config/invokeai_configure.py @@ -0,0 +1,4 @@ +''' +Wrapper for invokeai.backend.configure.invokeai_configure +''' +from ...backend.config.invokeai_configure import main diff --git a/ldm/invoke/config/invokeai_update.py b/invokeai/frontend/config/invokeai_update.py similarity index 98% rename from ldm/invoke/config/invokeai_update.py rename to invokeai/frontend/config/invokeai_update.py index 8ad7290136..d3a532c627 100644 --- a/ldm/invoke/config/invokeai_update.py +++ b/invokeai/frontend/config/invokeai_update.py @@ -13,7 +13,7 @@ from rich.style import Style from rich.syntax import Syntax from rich.text import Text -from ldm.invoke import __version__ +from invokeai.version import __version__ INVOKE_AI_SRC="https://github.com/invoke-ai/InvokeAI/archive" INVOKE_AI_REL="https://api.github.com/repos/invoke-ai/InvokeAI/releases" diff --git a/ldm/invoke/config/model_install.py b/invokeai/frontend/config/model_install.py similarity index 97% rename from ldm/invoke/config/model_install.py rename to invokeai/frontend/config/model_install.py index bdffe61a55..f64a656211 100644 --- a/ldm/invoke/config/model_install.py +++ b/invokeai/frontend/config/model_install.py @@ -22,13 +22,13 @@ from npyscreen import widget from omegaconf import OmegaConf from shutil import get_terminal_size -from invokeai.backend.devices import choose_precision, choose_torch_device -from ..globals import Globals, global_config_dir -from .model_install_backend import (Dataset_path, default_config_file, - default_dataset, get_root, - install_requested_models, - recommended_datasets, - ) +from ...backend.util import choose_precision, choose_torch_device +from invokeai.backend.globals import Globals, global_config_dir +from ...backend.config.model_install_backend import (Dataset_path, default_config_file, + default_dataset, get_root, + install_requested_models, + recommended_datasets, + ) from .widgets import (MultiSelectColumns, TextBox, OffsetButtonPress, CenteredTitleText, set_min_terminal_size, diff --git a/ldm/invoke/config/widgets.py b/invokeai/frontend/config/widgets.py similarity index 100% rename from ldm/invoke/config/widgets.py rename to invokeai/frontend/config/widgets.py diff --git a/invokeai/frontend/merge/__init__.py b/invokeai/frontend/merge/__init__.py new file mode 100644 index 0000000000..8e46a0621b --- /dev/null +++ b/invokeai/frontend/merge/__init__.py @@ -0,0 +1,4 @@ +''' +Initialization file for invokeai.frontend.merge +''' +from .merge_diffusers import main as invokeai_merge_diffusers diff --git a/ldm/invoke/merge_diffusers.py b/invokeai/frontend/merge/merge_diffusers.py similarity index 97% rename from ldm/invoke/merge_diffusers.py rename to invokeai/frontend/merge/merge_diffusers.py index 10496d5b57..82765af96d 100644 --- a/ldm/invoke/merge_diffusers.py +++ b/invokeai/frontend/merge/merge_diffusers.py @@ -20,10 +20,10 @@ from diffusers import logging as dlogging from npyscreen import widget from omegaconf import OmegaConf -from ldm.invoke.config.widgets import FloatTitleSlider -from ldm.invoke.globals import (Globals, global_cache_dir, global_config_file, +from ...frontend.config.widgets import FloatTitleSlider +from ...backend.globals import (Globals, global_cache_dir, global_config_file, global_models_dir, global_set_root) -from invokeai.backend import ModelManager +from ...backend.model_management import ModelManager DEST_MERGED_MODEL_DIR = "merged_models" @@ -199,13 +199,13 @@ class mergeModelsForm(npyscreen.FormMultiPageAction): self.add_widget_intelligent( npyscreen.FixedText, color="CONTROL", - value=f"Select two models to merge and optionally a third.", + value="Select two models to merge and optionally a third.", editable=False, ) self.add_widget_intelligent( npyscreen.FixedText, color="CONTROL", - value=f"Use up and down arrows to move, to select an item, and to move from one field to the next.", + value="Use up and down arrows to move, to select an item, and to move from one field to the next.", editable=False, ) self.add_widget_intelligent( @@ -453,9 +453,9 @@ def main(): "** You need to have at least two diffusers models defined in models.yaml in order to merge" ) else: - print(f"** Not enough room for the user interface. Try making this window larger.") + print("** Not enough room for the user interface. Try making this window larger.") sys.exit(-1) - except Exception as e: + except Exception: print(">> An error occurred:") traceback.print_exc() sys.exit(-1) diff --git a/invokeai/frontend/training/__init__.py b/invokeai/frontend/training/__init__.py new file mode 100644 index 0000000000..1aeece6b5f --- /dev/null +++ b/invokeai/frontend/training/__init__.py @@ -0,0 +1,5 @@ +''' +Initialization file for invokeai.frontend.training +''' +from .textual_inversion import main as invokeai_textual_inversion + diff --git a/ldm/invoke/training/textual_inversion.py b/invokeai/frontend/training/textual_inversion.py similarity index 99% rename from ldm/invoke/training/textual_inversion.py rename to invokeai/frontend/training/textual_inversion.py index 2961e4d99c..5cd5d71909 100755 --- a/ldm/invoke/training/textual_inversion.py +++ b/invokeai/frontend/training/textual_inversion.py @@ -20,8 +20,8 @@ import npyscreen from npyscreen import widget from omegaconf import OmegaConf -from ldm.invoke.globals import Globals, global_set_root -from ldm.invoke.training.textual_inversion_training import ( +from invokeai.backend.globals import Globals, global_set_root +from ...backend.training import ( do_textual_inversion_training, parse_args, ) diff --git a/invokeai/frontend/.babelrc b/invokeai/frontend/web/.babelrc similarity index 100% rename from invokeai/frontend/.babelrc rename to invokeai/frontend/web/.babelrc diff --git a/invokeai/frontend/.eslintignore b/invokeai/frontend/web/.eslintignore similarity index 100% rename from invokeai/frontend/.eslintignore rename to invokeai/frontend/web/.eslintignore diff --git a/invokeai/frontend/.eslintrc.js b/invokeai/frontend/web/.eslintrc.js similarity index 100% rename from invokeai/frontend/.eslintrc.js rename to invokeai/frontend/web/.eslintrc.js diff --git a/invokeai/frontend/.gitignore b/invokeai/frontend/web/.gitignore similarity index 100% rename from invokeai/frontend/.gitignore rename to invokeai/frontend/web/.gitignore diff --git a/invokeai/frontend/.husky/pre-commit b/invokeai/frontend/web/.husky/pre-commit similarity index 100% rename from invokeai/frontend/.husky/pre-commit rename to invokeai/frontend/web/.husky/pre-commit diff --git a/invokeai/frontend/.prettierignore b/invokeai/frontend/web/.prettierignore similarity index 100% rename from invokeai/frontend/.prettierignore rename to invokeai/frontend/web/.prettierignore diff --git a/invokeai/frontend/.prettierrc.js b/invokeai/frontend/web/.prettierrc.js similarity index 100% rename from invokeai/frontend/.prettierrc.js rename to invokeai/frontend/web/.prettierrc.js diff --git a/invokeai/frontend/.yarn/releases/yarn-1.22.19.cjs b/invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs similarity index 100% rename from invokeai/frontend/.yarn/releases/yarn-1.22.19.cjs rename to invokeai/frontend/web/.yarn/releases/yarn-1.22.19.cjs diff --git a/invokeai/frontend/.yarnrc b/invokeai/frontend/web/.yarnrc similarity index 100% rename from invokeai/frontend/.yarnrc rename to invokeai/frontend/web/.yarnrc diff --git a/invokeai/frontend/.yarnrc.yml b/invokeai/frontend/web/.yarnrc.yml similarity index 100% rename from invokeai/frontend/.yarnrc.yml rename to invokeai/frontend/web/.yarnrc.yml diff --git a/invokeai/frontend/README.md b/invokeai/frontend/web/README.md similarity index 100% rename from invokeai/frontend/README.md rename to invokeai/frontend/web/README.md diff --git a/invokeai/frontend/web/__init__.py b/invokeai/frontend/web/__init__.py new file mode 100644 index 0000000000..010129ece2 --- /dev/null +++ b/invokeai/frontend/web/__init__.py @@ -0,0 +1,3 @@ +''' +Initialization file for invokeai.frontend.web +''' diff --git a/invokeai/frontend/dist/assets/Inter-Bold-790c108b.ttf b/invokeai/frontend/web/dist/assets/Inter-Bold-790c108b.ttf similarity index 100% rename from invokeai/frontend/dist/assets/Inter-Bold-790c108b.ttf rename to invokeai/frontend/web/dist/assets/Inter-Bold-790c108b.ttf diff --git a/invokeai/frontend/dist/assets/Inter-b9a8e5e2.ttf b/invokeai/frontend/web/dist/assets/Inter-b9a8e5e2.ttf similarity index 100% rename from invokeai/frontend/dist/assets/Inter-b9a8e5e2.ttf rename to invokeai/frontend/web/dist/assets/Inter-b9a8e5e2.ttf diff --git a/invokeai/frontend/dist/assets/favicon-0d253ced.ico b/invokeai/frontend/web/dist/assets/favicon-0d253ced.ico similarity index 100% rename from invokeai/frontend/dist/assets/favicon-0d253ced.ico rename to invokeai/frontend/web/dist/assets/favicon-0d253ced.ico diff --git a/invokeai/frontend/dist/assets/index-0e39fbc4.js b/invokeai/frontend/web/dist/assets/index-0e39fbc4.js similarity index 100% rename from invokeai/frontend/dist/assets/index-0e39fbc4.js rename to invokeai/frontend/web/dist/assets/index-0e39fbc4.js diff --git a/invokeai/frontend/dist/assets/index-14cb2922.css b/invokeai/frontend/web/dist/assets/index-14cb2922.css similarity index 100% rename from invokeai/frontend/dist/assets/index-14cb2922.css rename to invokeai/frontend/web/dist/assets/index-14cb2922.css diff --git a/invokeai/frontend/dist/assets/logo-13003d72.png b/invokeai/frontend/web/dist/assets/logo-13003d72.png similarity index 100% rename from invokeai/frontend/dist/assets/logo-13003d72.png rename to invokeai/frontend/web/dist/assets/logo-13003d72.png diff --git a/invokeai/frontend/dist/index.html b/invokeai/frontend/web/dist/index.html similarity index 100% rename from invokeai/frontend/dist/index.html rename to invokeai/frontend/web/dist/index.html diff --git a/invokeai/frontend/dist/locales/ar.json b/invokeai/frontend/web/dist/locales/ar.json similarity index 100% rename from invokeai/frontend/dist/locales/ar.json rename to invokeai/frontend/web/dist/locales/ar.json diff --git a/invokeai/frontend/dist/locales/de.json b/invokeai/frontend/web/dist/locales/de.json similarity index 100% rename from invokeai/frontend/dist/locales/de.json rename to invokeai/frontend/web/dist/locales/de.json diff --git a/invokeai/frontend/dist/locales/en.json b/invokeai/frontend/web/dist/locales/en.json similarity index 100% rename from invokeai/frontend/dist/locales/en.json rename to invokeai/frontend/web/dist/locales/en.json diff --git a/invokeai/frontend/dist/locales/es.json b/invokeai/frontend/web/dist/locales/es.json similarity index 100% rename from invokeai/frontend/dist/locales/es.json rename to invokeai/frontend/web/dist/locales/es.json diff --git a/invokeai/frontend/dist/locales/fr.json b/invokeai/frontend/web/dist/locales/fr.json similarity index 100% rename from invokeai/frontend/dist/locales/fr.json rename to invokeai/frontend/web/dist/locales/fr.json diff --git a/invokeai/frontend/dist/locales/it.json b/invokeai/frontend/web/dist/locales/it.json similarity index 100% rename from invokeai/frontend/dist/locales/it.json rename to invokeai/frontend/web/dist/locales/it.json diff --git a/invokeai/frontend/dist/locales/ja.json b/invokeai/frontend/web/dist/locales/ja.json similarity index 100% rename from invokeai/frontend/dist/locales/ja.json rename to invokeai/frontend/web/dist/locales/ja.json diff --git a/invokeai/frontend/dist/locales/nl.json b/invokeai/frontend/web/dist/locales/nl.json similarity index 100% rename from invokeai/frontend/dist/locales/nl.json rename to invokeai/frontend/web/dist/locales/nl.json diff --git a/invokeai/frontend/dist/locales/pl.json b/invokeai/frontend/web/dist/locales/pl.json similarity index 100% rename from invokeai/frontend/dist/locales/pl.json rename to invokeai/frontend/web/dist/locales/pl.json diff --git a/invokeai/frontend/dist/locales/pt_BR.json b/invokeai/frontend/web/dist/locales/pt_BR.json similarity index 100% rename from invokeai/frontend/dist/locales/pt_BR.json rename to invokeai/frontend/web/dist/locales/pt_BR.json diff --git a/invokeai/frontend/dist/locales/ru.json b/invokeai/frontend/web/dist/locales/ru.json similarity index 100% rename from invokeai/frontend/dist/locales/ru.json rename to invokeai/frontend/web/dist/locales/ru.json diff --git a/invokeai/frontend/dist/locales/uk.json b/invokeai/frontend/web/dist/locales/uk.json similarity index 100% rename from invokeai/frontend/dist/locales/uk.json rename to invokeai/frontend/web/dist/locales/uk.json diff --git a/invokeai/frontend/dist/locales/zh_CN.json b/invokeai/frontend/web/dist/locales/zh_CN.json similarity index 100% rename from invokeai/frontend/dist/locales/zh_CN.json rename to invokeai/frontend/web/dist/locales/zh_CN.json diff --git a/invokeai/frontend/favicon.ico b/invokeai/frontend/web/favicon.ico similarity index 100% rename from invokeai/frontend/favicon.ico rename to invokeai/frontend/web/favicon.ico diff --git a/invokeai/frontend/index.d.ts b/invokeai/frontend/web/index.d.ts similarity index 100% rename from invokeai/frontend/index.d.ts rename to invokeai/frontend/web/index.d.ts diff --git a/invokeai/frontend/index.html b/invokeai/frontend/web/index.html similarity index 100% rename from invokeai/frontend/index.html rename to invokeai/frontend/web/index.html diff --git a/invokeai/frontend/package.json b/invokeai/frontend/web/package.json similarity index 100% rename from invokeai/frontend/package.json rename to invokeai/frontend/web/package.json diff --git a/invokeai/frontend/patches/redux-deep-persist+1.0.7.patch b/invokeai/frontend/web/patches/redux-deep-persist+1.0.7.patch similarity index 100% rename from invokeai/frontend/patches/redux-deep-persist+1.0.7.patch rename to invokeai/frontend/web/patches/redux-deep-persist+1.0.7.patch diff --git a/invokeai/frontend/patches/redux-persist+6.0.0.patch b/invokeai/frontend/web/patches/redux-persist+6.0.0.patch similarity index 100% rename from invokeai/frontend/patches/redux-persist+6.0.0.patch rename to invokeai/frontend/web/patches/redux-persist+6.0.0.patch diff --git a/invokeai/frontend/public/locales/ar.json b/invokeai/frontend/web/public/locales/ar.json similarity index 100% rename from invokeai/frontend/public/locales/ar.json rename to invokeai/frontend/web/public/locales/ar.json diff --git a/invokeai/frontend/public/locales/de.json b/invokeai/frontend/web/public/locales/de.json similarity index 100% rename from invokeai/frontend/public/locales/de.json rename to invokeai/frontend/web/public/locales/de.json diff --git a/invokeai/frontend/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json similarity index 100% rename from invokeai/frontend/public/locales/en.json rename to invokeai/frontend/web/public/locales/en.json diff --git a/invokeai/frontend/public/locales/es.json b/invokeai/frontend/web/public/locales/es.json similarity index 100% rename from invokeai/frontend/public/locales/es.json rename to invokeai/frontend/web/public/locales/es.json diff --git a/invokeai/frontend/public/locales/fr.json b/invokeai/frontend/web/public/locales/fr.json similarity index 100% rename from invokeai/frontend/public/locales/fr.json rename to invokeai/frontend/web/public/locales/fr.json diff --git a/invokeai/frontend/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json similarity index 100% rename from invokeai/frontend/public/locales/it.json rename to invokeai/frontend/web/public/locales/it.json diff --git a/invokeai/frontend/public/locales/ja.json b/invokeai/frontend/web/public/locales/ja.json similarity index 100% rename from invokeai/frontend/public/locales/ja.json rename to invokeai/frontend/web/public/locales/ja.json diff --git a/invokeai/frontend/public/locales/nl.json b/invokeai/frontend/web/public/locales/nl.json similarity index 100% rename from invokeai/frontend/public/locales/nl.json rename to invokeai/frontend/web/public/locales/nl.json diff --git a/invokeai/frontend/public/locales/pl.json b/invokeai/frontend/web/public/locales/pl.json similarity index 100% rename from invokeai/frontend/public/locales/pl.json rename to invokeai/frontend/web/public/locales/pl.json diff --git a/invokeai/frontend/public/locales/pt_BR.json b/invokeai/frontend/web/public/locales/pt_BR.json similarity index 100% rename from invokeai/frontend/public/locales/pt_BR.json rename to invokeai/frontend/web/public/locales/pt_BR.json diff --git a/invokeai/frontend/public/locales/ro.json b/invokeai/frontend/web/public/locales/ro.json similarity index 100% rename from invokeai/frontend/public/locales/ro.json rename to invokeai/frontend/web/public/locales/ro.json diff --git a/invokeai/frontend/public/locales/ru.json b/invokeai/frontend/web/public/locales/ru.json similarity index 100% rename from invokeai/frontend/public/locales/ru.json rename to invokeai/frontend/web/public/locales/ru.json diff --git a/invokeai/frontend/public/locales/uk.json b/invokeai/frontend/web/public/locales/uk.json similarity index 100% rename from invokeai/frontend/public/locales/uk.json rename to invokeai/frontend/web/public/locales/uk.json diff --git a/invokeai/frontend/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json similarity index 100% rename from invokeai/frontend/public/locales/zh_CN.json rename to invokeai/frontend/web/public/locales/zh_CN.json diff --git a/invokeai/frontend/src/Loading.tsx b/invokeai/frontend/web/src/Loading.tsx similarity index 100% rename from invokeai/frontend/src/Loading.tsx rename to invokeai/frontend/web/src/Loading.tsx diff --git a/invokeai/frontend/src/app/App.scss b/invokeai/frontend/web/src/app/App.scss similarity index 100% rename from invokeai/frontend/src/app/App.scss rename to invokeai/frontend/web/src/app/App.scss diff --git a/invokeai/frontend/src/app/App.tsx b/invokeai/frontend/web/src/app/App.tsx similarity index 100% rename from invokeai/frontend/src/app/App.tsx rename to invokeai/frontend/web/src/app/App.tsx diff --git a/invokeai/frontend/src/app/constants.ts b/invokeai/frontend/web/src/app/constants.ts similarity index 100% rename from invokeai/frontend/src/app/constants.ts rename to invokeai/frontend/web/src/app/constants.ts diff --git a/invokeai/frontend/src/app/contexts/ImageUploaderTriggerContext.ts b/invokeai/frontend/web/src/app/contexts/ImageUploaderTriggerContext.ts similarity index 100% rename from invokeai/frontend/src/app/contexts/ImageUploaderTriggerContext.ts rename to invokeai/frontend/web/src/app/contexts/ImageUploaderTriggerContext.ts diff --git a/invokeai/frontend/src/app/features.ts b/invokeai/frontend/web/src/app/features.ts similarity index 100% rename from invokeai/frontend/src/app/features.ts rename to invokeai/frontend/web/src/app/features.ts diff --git a/invokeai/frontend/src/app/invokeai.d.ts b/invokeai/frontend/web/src/app/invokeai.d.ts similarity index 100% rename from invokeai/frontend/src/app/invokeai.d.ts rename to invokeai/frontend/web/src/app/invokeai.d.ts diff --git a/invokeai/frontend/src/app/selectors/readinessSelector.ts b/invokeai/frontend/web/src/app/selectors/readinessSelector.ts similarity index 100% rename from invokeai/frontend/src/app/selectors/readinessSelector.ts rename to invokeai/frontend/web/src/app/selectors/readinessSelector.ts diff --git a/invokeai/frontend/src/app/socketio/actions.ts b/invokeai/frontend/web/src/app/socketio/actions.ts similarity index 100% rename from invokeai/frontend/src/app/socketio/actions.ts rename to invokeai/frontend/web/src/app/socketio/actions.ts diff --git a/invokeai/frontend/src/app/socketio/emitters.ts b/invokeai/frontend/web/src/app/socketio/emitters.ts similarity index 100% rename from invokeai/frontend/src/app/socketio/emitters.ts rename to invokeai/frontend/web/src/app/socketio/emitters.ts diff --git a/invokeai/frontend/src/app/socketio/listeners.ts b/invokeai/frontend/web/src/app/socketio/listeners.ts similarity index 100% rename from invokeai/frontend/src/app/socketio/listeners.ts rename to invokeai/frontend/web/src/app/socketio/listeners.ts diff --git a/invokeai/frontend/src/app/socketio/middleware.ts b/invokeai/frontend/web/src/app/socketio/middleware.ts similarity index 100% rename from invokeai/frontend/src/app/socketio/middleware.ts rename to invokeai/frontend/web/src/app/socketio/middleware.ts diff --git a/invokeai/frontend/src/app/store.ts b/invokeai/frontend/web/src/app/store.ts similarity index 100% rename from invokeai/frontend/src/app/store.ts rename to invokeai/frontend/web/src/app/store.ts diff --git a/invokeai/frontend/src/app/storeHooks.ts b/invokeai/frontend/web/src/app/storeHooks.ts similarity index 100% rename from invokeai/frontend/src/app/storeHooks.ts rename to invokeai/frontend/web/src/app/storeHooks.ts diff --git a/invokeai/frontend/src/app/theme.ts b/invokeai/frontend/web/src/app/theme.ts similarity index 100% rename from invokeai/frontend/src/app/theme.ts rename to invokeai/frontend/web/src/app/theme.ts diff --git a/invokeai/frontend/src/app/utils.ts b/invokeai/frontend/web/src/app/utils.ts similarity index 100% rename from invokeai/frontend/src/app/utils.ts rename to invokeai/frontend/web/src/app/utils.ts diff --git a/invokeai/frontend/src/assets/fonts/Inter/Inter-Bold.ttf b/invokeai/frontend/web/src/assets/fonts/Inter/Inter-Bold.ttf similarity index 100% rename from invokeai/frontend/src/assets/fonts/Inter/Inter-Bold.ttf rename to invokeai/frontend/web/src/assets/fonts/Inter/Inter-Bold.ttf diff --git a/invokeai/frontend/src/assets/fonts/Inter/Inter.ttf b/invokeai/frontend/web/src/assets/fonts/Inter/Inter.ttf similarity index 100% rename from invokeai/frontend/src/assets/fonts/Inter/Inter.ttf rename to invokeai/frontend/web/src/assets/fonts/Inter/Inter.ttf diff --git a/invokeai/frontend/src/assets/images/image2img.png b/invokeai/frontend/web/src/assets/images/image2img.png similarity index 100% rename from invokeai/frontend/src/assets/images/image2img.png rename to invokeai/frontend/web/src/assets/images/image2img.png diff --git a/invokeai/frontend/src/assets/images/logo.png b/invokeai/frontend/web/src/assets/images/logo.png similarity index 100% rename from invokeai/frontend/src/assets/images/logo.png rename to invokeai/frontend/web/src/assets/images/logo.png diff --git a/invokeai/frontend/src/assets/images/mask.afdesign b/invokeai/frontend/web/src/assets/images/mask.afdesign similarity index 100% rename from invokeai/frontend/src/assets/images/mask.afdesign rename to invokeai/frontend/web/src/assets/images/mask.afdesign diff --git a/invokeai/frontend/src/assets/images/mask.svg b/invokeai/frontend/web/src/assets/images/mask.svg similarity index 100% rename from invokeai/frontend/src/assets/images/mask.svg rename to invokeai/frontend/web/src/assets/images/mask.svg diff --git a/invokeai/frontend/src/common/components/GuideIcon.tsx b/invokeai/frontend/web/src/common/components/GuideIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/components/GuideIcon.tsx rename to invokeai/frontend/web/src/common/components/GuideIcon.tsx diff --git a/invokeai/frontend/src/common/components/GuidePopover.scss b/invokeai/frontend/web/src/common/components/GuidePopover.scss similarity index 100% rename from invokeai/frontend/src/common/components/GuidePopover.scss rename to invokeai/frontend/web/src/common/components/GuidePopover.scss diff --git a/invokeai/frontend/src/common/components/GuidePopover.tsx b/invokeai/frontend/web/src/common/components/GuidePopover.tsx similarity index 100% rename from invokeai/frontend/src/common/components/GuidePopover.tsx rename to invokeai/frontend/web/src/common/components/GuidePopover.tsx diff --git a/invokeai/frontend/src/common/components/IAIAlertDialog.tsx b/invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIAlertDialog.tsx rename to invokeai/frontend/web/src/common/components/IAIAlertDialog.tsx diff --git a/invokeai/frontend/src/common/components/IAIButton.scss b/invokeai/frontend/web/src/common/components/IAIButton.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAIButton.scss rename to invokeai/frontend/web/src/common/components/IAIButton.scss diff --git a/invokeai/frontend/src/common/components/IAIButton.tsx b/invokeai/frontend/web/src/common/components/IAIButton.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIButton.tsx rename to invokeai/frontend/web/src/common/components/IAIButton.tsx diff --git a/invokeai/frontend/src/common/components/IAICheckbox.scss b/invokeai/frontend/web/src/common/components/IAICheckbox.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAICheckbox.scss rename to invokeai/frontend/web/src/common/components/IAICheckbox.scss diff --git a/invokeai/frontend/src/common/components/IAICheckbox.tsx b/invokeai/frontend/web/src/common/components/IAICheckbox.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAICheckbox.tsx rename to invokeai/frontend/web/src/common/components/IAICheckbox.tsx diff --git a/invokeai/frontend/src/common/components/IAIColorPicker.scss b/invokeai/frontend/web/src/common/components/IAIColorPicker.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAIColorPicker.scss rename to invokeai/frontend/web/src/common/components/IAIColorPicker.scss diff --git a/invokeai/frontend/src/common/components/IAIColorPicker.tsx b/invokeai/frontend/web/src/common/components/IAIColorPicker.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIColorPicker.tsx rename to invokeai/frontend/web/src/common/components/IAIColorPicker.tsx diff --git a/invokeai/frontend/src/common/components/IAIIconButton.scss b/invokeai/frontend/web/src/common/components/IAIIconButton.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAIIconButton.scss rename to invokeai/frontend/web/src/common/components/IAIIconButton.scss diff --git a/invokeai/frontend/src/common/components/IAIIconButton.tsx b/invokeai/frontend/web/src/common/components/IAIIconButton.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIIconButton.tsx rename to invokeai/frontend/web/src/common/components/IAIIconButton.tsx diff --git a/invokeai/frontend/src/common/components/IAIInput.scss b/invokeai/frontend/web/src/common/components/IAIInput.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAIInput.scss rename to invokeai/frontend/web/src/common/components/IAIInput.scss diff --git a/invokeai/frontend/src/common/components/IAIInput.tsx b/invokeai/frontend/web/src/common/components/IAIInput.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIInput.tsx rename to invokeai/frontend/web/src/common/components/IAIInput.tsx diff --git a/invokeai/frontend/src/common/components/IAINumberInput.scss b/invokeai/frontend/web/src/common/components/IAINumberInput.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAINumberInput.scss rename to invokeai/frontend/web/src/common/components/IAINumberInput.scss diff --git a/invokeai/frontend/src/common/components/IAINumberInput.tsx b/invokeai/frontend/web/src/common/components/IAINumberInput.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAINumberInput.tsx rename to invokeai/frontend/web/src/common/components/IAINumberInput.tsx diff --git a/invokeai/frontend/src/common/components/IAIPopover.scss b/invokeai/frontend/web/src/common/components/IAIPopover.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAIPopover.scss rename to invokeai/frontend/web/src/common/components/IAIPopover.scss diff --git a/invokeai/frontend/src/common/components/IAIPopover.tsx b/invokeai/frontend/web/src/common/components/IAIPopover.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAIPopover.tsx rename to invokeai/frontend/web/src/common/components/IAIPopover.tsx diff --git a/invokeai/frontend/src/common/components/IAISelect.scss b/invokeai/frontend/web/src/common/components/IAISelect.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAISelect.scss rename to invokeai/frontend/web/src/common/components/IAISelect.scss diff --git a/invokeai/frontend/src/common/components/IAISelect.tsx b/invokeai/frontend/web/src/common/components/IAISelect.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAISelect.tsx rename to invokeai/frontend/web/src/common/components/IAISelect.tsx diff --git a/invokeai/frontend/src/common/components/IAISimpleMenu.tsx b/invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAISimpleMenu.tsx rename to invokeai/frontend/web/src/common/components/IAISimpleMenu.tsx diff --git a/invokeai/frontend/src/common/components/IAISlider.scss b/invokeai/frontend/web/src/common/components/IAISlider.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAISlider.scss rename to invokeai/frontend/web/src/common/components/IAISlider.scss diff --git a/invokeai/frontend/src/common/components/IAISlider.tsx b/invokeai/frontend/web/src/common/components/IAISlider.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAISlider.tsx rename to invokeai/frontend/web/src/common/components/IAISlider.tsx diff --git a/invokeai/frontend/src/common/components/IAISwitch.scss b/invokeai/frontend/web/src/common/components/IAISwitch.scss similarity index 100% rename from invokeai/frontend/src/common/components/IAISwitch.scss rename to invokeai/frontend/web/src/common/components/IAISwitch.scss diff --git a/invokeai/frontend/src/common/components/IAISwitch.tsx b/invokeai/frontend/web/src/common/components/IAISwitch.tsx similarity index 100% rename from invokeai/frontend/src/common/components/IAISwitch.tsx rename to invokeai/frontend/web/src/common/components/IAISwitch.tsx diff --git a/invokeai/frontend/src/common/components/ImageUploadOverlay.tsx b/invokeai/frontend/web/src/common/components/ImageUploadOverlay.tsx similarity index 100% rename from invokeai/frontend/src/common/components/ImageUploadOverlay.tsx rename to invokeai/frontend/web/src/common/components/ImageUploadOverlay.tsx diff --git a/invokeai/frontend/src/common/components/ImageUploader.scss b/invokeai/frontend/web/src/common/components/ImageUploader.scss similarity index 100% rename from invokeai/frontend/src/common/components/ImageUploader.scss rename to invokeai/frontend/web/src/common/components/ImageUploader.scss diff --git a/invokeai/frontend/src/common/components/ImageUploader.tsx b/invokeai/frontend/web/src/common/components/ImageUploader.tsx similarity index 100% rename from invokeai/frontend/src/common/components/ImageUploader.tsx rename to invokeai/frontend/web/src/common/components/ImageUploader.tsx diff --git a/invokeai/frontend/src/common/components/ImageUploaderButton.tsx b/invokeai/frontend/web/src/common/components/ImageUploaderButton.tsx similarity index 100% rename from invokeai/frontend/src/common/components/ImageUploaderButton.tsx rename to invokeai/frontend/web/src/common/components/ImageUploaderButton.tsx diff --git a/invokeai/frontend/src/common/components/ImageUploaderIconButton.tsx b/invokeai/frontend/web/src/common/components/ImageUploaderIconButton.tsx similarity index 100% rename from invokeai/frontend/src/common/components/ImageUploaderIconButton.tsx rename to invokeai/frontend/web/src/common/components/ImageUploaderIconButton.tsx diff --git a/invokeai/frontend/src/common/components/SubItemHook.tsx b/invokeai/frontend/web/src/common/components/SubItemHook.tsx similarity index 100% rename from invokeai/frontend/src/common/components/SubItemHook.tsx rename to invokeai/frontend/web/src/common/components/SubItemHook.tsx diff --git a/invokeai/frontend/src/common/components/WorkInProgress/NodesWIP.tsx b/invokeai/frontend/web/src/common/components/WorkInProgress/NodesWIP.tsx similarity index 100% rename from invokeai/frontend/src/common/components/WorkInProgress/NodesWIP.tsx rename to invokeai/frontend/web/src/common/components/WorkInProgress/NodesWIP.tsx diff --git a/invokeai/frontend/src/common/components/WorkInProgress/PostProcessingWIP.tsx b/invokeai/frontend/web/src/common/components/WorkInProgress/PostProcessingWIP.tsx similarity index 100% rename from invokeai/frontend/src/common/components/WorkInProgress/PostProcessingWIP.tsx rename to invokeai/frontend/web/src/common/components/WorkInProgress/PostProcessingWIP.tsx diff --git a/invokeai/frontend/src/common/components/WorkInProgress/Training.tsx b/invokeai/frontend/web/src/common/components/WorkInProgress/Training.tsx similarity index 100% rename from invokeai/frontend/src/common/components/WorkInProgress/Training.tsx rename to invokeai/frontend/web/src/common/components/WorkInProgress/Training.tsx diff --git a/invokeai/frontend/src/common/components/WorkInProgress/WorkInProgress.scss b/invokeai/frontend/web/src/common/components/WorkInProgress/WorkInProgress.scss similarity index 100% rename from invokeai/frontend/src/common/components/WorkInProgress/WorkInProgress.scss rename to invokeai/frontend/web/src/common/components/WorkInProgress/WorkInProgress.scss diff --git a/invokeai/frontend/src/common/components/radix-ui/IAISlider.scss b/invokeai/frontend/web/src/common/components/radix-ui/IAISlider.scss similarity index 100% rename from invokeai/frontend/src/common/components/radix-ui/IAISlider.scss rename to invokeai/frontend/web/src/common/components/radix-ui/IAISlider.scss diff --git a/invokeai/frontend/src/common/components/radix-ui/IAISlider.tsx b/invokeai/frontend/web/src/common/components/radix-ui/IAISlider.tsx similarity index 100% rename from invokeai/frontend/src/common/components/radix-ui/IAISlider.tsx rename to invokeai/frontend/web/src/common/components/radix-ui/IAISlider.tsx diff --git a/invokeai/frontend/src/common/components/radix-ui/IAITooltip.scss b/invokeai/frontend/web/src/common/components/radix-ui/IAITooltip.scss similarity index 100% rename from invokeai/frontend/src/common/components/radix-ui/IAITooltip.scss rename to invokeai/frontend/web/src/common/components/radix-ui/IAITooltip.scss diff --git a/invokeai/frontend/src/common/components/radix-ui/IAITooltip.tsx b/invokeai/frontend/web/src/common/components/radix-ui/IAITooltip.tsx similarity index 100% rename from invokeai/frontend/src/common/components/radix-ui/IAITooltip.tsx rename to invokeai/frontend/web/src/common/components/radix-ui/IAITooltip.tsx diff --git a/invokeai/frontend/src/common/hooks/useClickOutsideWatcher.ts b/invokeai/frontend/web/src/common/hooks/useClickOutsideWatcher.ts similarity index 100% rename from invokeai/frontend/src/common/hooks/useClickOutsideWatcher.ts rename to invokeai/frontend/web/src/common/hooks/useClickOutsideWatcher.ts diff --git a/invokeai/frontend/src/common/hooks/useImageUploader.ts b/invokeai/frontend/web/src/common/hooks/useImageUploader.ts similarity index 100% rename from invokeai/frontend/src/common/hooks/useImageUploader.ts rename to invokeai/frontend/web/src/common/hooks/useImageUploader.ts diff --git a/invokeai/frontend/src/common/hooks/useSingleAndDoubleClick.ts b/invokeai/frontend/web/src/common/hooks/useSingleAndDoubleClick.ts similarity index 100% rename from invokeai/frontend/src/common/hooks/useSingleAndDoubleClick.ts rename to invokeai/frontend/web/src/common/hooks/useSingleAndDoubleClick.ts diff --git a/invokeai/frontend/src/common/hooks/useUpdateTranslations.ts b/invokeai/frontend/web/src/common/hooks/useUpdateTranslations.ts similarity index 100% rename from invokeai/frontend/src/common/hooks/useUpdateTranslations.ts rename to invokeai/frontend/web/src/common/hooks/useUpdateTranslations.ts diff --git a/invokeai/frontend/src/common/icons/ImageToImageIcon.tsx b/invokeai/frontend/web/src/common/icons/ImageToImageIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/ImageToImageIcon.tsx rename to invokeai/frontend/web/src/common/icons/ImageToImageIcon.tsx diff --git a/invokeai/frontend/src/common/icons/InpaintIcon.tsx b/invokeai/frontend/web/src/common/icons/InpaintIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/InpaintIcon.tsx rename to invokeai/frontend/web/src/common/icons/InpaintIcon.tsx diff --git a/invokeai/frontend/src/common/icons/NodesIcon.tsx b/invokeai/frontend/web/src/common/icons/NodesIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/NodesIcon.tsx rename to invokeai/frontend/web/src/common/icons/NodesIcon.tsx diff --git a/invokeai/frontend/src/common/icons/OutpaintIcon.tsx b/invokeai/frontend/web/src/common/icons/OutpaintIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/OutpaintIcon.tsx rename to invokeai/frontend/web/src/common/icons/OutpaintIcon.tsx diff --git a/invokeai/frontend/src/common/icons/PostprocessingIcon.tsx b/invokeai/frontend/web/src/common/icons/PostprocessingIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/PostprocessingIcon.tsx rename to invokeai/frontend/web/src/common/icons/PostprocessingIcon.tsx diff --git a/invokeai/frontend/src/common/icons/TextToImageIcon.tsx b/invokeai/frontend/web/src/common/icons/TextToImageIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/TextToImageIcon.tsx rename to invokeai/frontend/web/src/common/icons/TextToImageIcon.tsx diff --git a/invokeai/frontend/src/common/icons/TrainingIcon.tsx b/invokeai/frontend/web/src/common/icons/TrainingIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/TrainingIcon.tsx rename to invokeai/frontend/web/src/common/icons/TrainingIcon.tsx diff --git a/invokeai/frontend/src/common/icons/UnifiedCanvas.afdesign b/invokeai/frontend/web/src/common/icons/UnifiedCanvas.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/UnifiedCanvas.afdesign rename to invokeai/frontend/web/src/common/icons/UnifiedCanvas.afdesign diff --git a/invokeai/frontend/src/common/icons/UnifiedCanvasIcon.tsx b/invokeai/frontend/web/src/common/icons/UnifiedCanvasIcon.tsx similarity index 100% rename from invokeai/frontend/src/common/icons/UnifiedCanvasIcon.tsx rename to invokeai/frontend/web/src/common/icons/UnifiedCanvasIcon.tsx diff --git a/invokeai/frontend/src/common/icons/design_files/BaseImage.afdesign b/invokeai/frontend/web/src/common/icons/design_files/BaseImage.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/BaseImage.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/BaseImage.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/ImageToImage.afdesign b/invokeai/frontend/web/src/common/icons/design_files/ImageToImage.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/ImageToImage.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/ImageToImage.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/ImageToImage.svg b/invokeai/frontend/web/src/common/icons/design_files/ImageToImage.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/ImageToImage.svg rename to invokeai/frontend/web/src/common/icons/design_files/ImageToImage.svg diff --git a/invokeai/frontend/src/common/icons/design_files/Inpaint.afdesign b/invokeai/frontend/web/src/common/icons/design_files/Inpaint.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Inpaint.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/Inpaint.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/Inpaint.svg b/invokeai/frontend/web/src/common/icons/design_files/Inpaint.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Inpaint.svg rename to invokeai/frontend/web/src/common/icons/design_files/Inpaint.svg diff --git a/invokeai/frontend/src/common/icons/design_files/Nodes.afdesign b/invokeai/frontend/web/src/common/icons/design_files/Nodes.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Nodes.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/Nodes.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/Nodes.svg b/invokeai/frontend/web/src/common/icons/design_files/Nodes.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Nodes.svg rename to invokeai/frontend/web/src/common/icons/design_files/Nodes.svg diff --git a/invokeai/frontend/src/common/icons/design_files/Outpaint.afdesign b/invokeai/frontend/web/src/common/icons/design_files/Outpaint.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Outpaint.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/Outpaint.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/Outpaint.svg b/invokeai/frontend/web/src/common/icons/design_files/Outpaint.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Outpaint.svg rename to invokeai/frontend/web/src/common/icons/design_files/Outpaint.svg diff --git a/invokeai/frontend/src/common/icons/design_files/Postprocessing.afdesign b/invokeai/frontend/web/src/common/icons/design_files/Postprocessing.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Postprocessing.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/Postprocessing.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/Postprocessing.svg b/invokeai/frontend/web/src/common/icons/design_files/Postprocessing.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Postprocessing.svg rename to invokeai/frontend/web/src/common/icons/design_files/Postprocessing.svg diff --git a/invokeai/frontend/src/common/icons/design_files/TextToImage.afdesign b/invokeai/frontend/web/src/common/icons/design_files/TextToImage.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/TextToImage.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/TextToImage.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/TextToImage.svg b/invokeai/frontend/web/src/common/icons/design_files/TextToImage.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/TextToImage.svg rename to invokeai/frontend/web/src/common/icons/design_files/TextToImage.svg diff --git a/invokeai/frontend/src/common/icons/design_files/Training.afdesign b/invokeai/frontend/web/src/common/icons/design_files/Training.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Training.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/Training.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/Training.svg b/invokeai/frontend/web/src/common/icons/design_files/Training.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/Training.svg rename to invokeai/frontend/web/src/common/icons/design_files/Training.svg diff --git a/invokeai/frontend/src/common/icons/design_files/UnifiedCanvas.afdesign b/invokeai/frontend/web/src/common/icons/design_files/UnifiedCanvas.afdesign similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/UnifiedCanvas.afdesign rename to invokeai/frontend/web/src/common/icons/design_files/UnifiedCanvas.afdesign diff --git a/invokeai/frontend/src/common/icons/design_files/UnifiedCanvas.svg b/invokeai/frontend/web/src/common/icons/design_files/UnifiedCanvas.svg similarity index 100% rename from invokeai/frontend/src/common/icons/design_files/UnifiedCanvas.svg rename to invokeai/frontend/web/src/common/icons/design_files/UnifiedCanvas.svg diff --git a/invokeai/frontend/src/common/util/getPromptAndNegative.ts b/invokeai/frontend/web/src/common/util/getPromptAndNegative.ts similarity index 100% rename from invokeai/frontend/src/common/util/getPromptAndNegative.ts rename to invokeai/frontend/web/src/common/util/getPromptAndNegative.ts diff --git a/invokeai/frontend/src/common/util/openBase64ImageInTab.ts b/invokeai/frontend/web/src/common/util/openBase64ImageInTab.ts similarity index 100% rename from invokeai/frontend/src/common/util/openBase64ImageInTab.ts rename to invokeai/frontend/web/src/common/util/openBase64ImageInTab.ts diff --git a/invokeai/frontend/src/common/util/parameterTranslation.ts b/invokeai/frontend/web/src/common/util/parameterTranslation.ts similarity index 100% rename from invokeai/frontend/src/common/util/parameterTranslation.ts rename to invokeai/frontend/web/src/common/util/parameterTranslation.ts diff --git a/invokeai/frontend/src/common/util/promptToString.ts b/invokeai/frontend/web/src/common/util/promptToString.ts similarity index 100% rename from invokeai/frontend/src/common/util/promptToString.ts rename to invokeai/frontend/web/src/common/util/promptToString.ts diff --git a/invokeai/frontend/src/common/util/randomInt.ts b/invokeai/frontend/web/src/common/util/randomInt.ts similarity index 100% rename from invokeai/frontend/src/common/util/randomInt.ts rename to invokeai/frontend/web/src/common/util/randomInt.ts diff --git a/invokeai/frontend/src/common/util/roundDownToMultiple.ts b/invokeai/frontend/web/src/common/util/roundDownToMultiple.ts similarity index 100% rename from invokeai/frontend/src/common/util/roundDownToMultiple.ts rename to invokeai/frontend/web/src/common/util/roundDownToMultiple.ts diff --git a/invokeai/frontend/src/common/util/seedWeightPairs.ts b/invokeai/frontend/web/src/common/util/seedWeightPairs.ts similarity index 100% rename from invokeai/frontend/src/common/util/seedWeightPairs.ts rename to invokeai/frontend/web/src/common/util/seedWeightPairs.ts diff --git a/invokeai/frontend/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx b/invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx rename to invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvas.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvas.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvas.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvas.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasBoundingBoxOverlay.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasBoundingBoxOverlay.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasBoundingBoxOverlay.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasBoundingBoxOverlay.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasGrid.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasGrid.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasGrid.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasGrid.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasImage.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasImage.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasImage.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasImage.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasIntermediateImage.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasIntermediateImage.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasIntermediateImage.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasIntermediateImage.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasMaskCompositer.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasMaskCompositer.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasMaskCompositer.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasMaskCompositer.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasMaskLines.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasMaskLines.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasMaskLines.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasMaskLines.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasObjectRenderer.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasObjectRenderer.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasObjectRenderer.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasObjectRenderer.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasResizer.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasResizer.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasResizer.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasResizer.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasStagingArea.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingArea.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasStagingArea.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingArea.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasStatusText.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStatusText.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasStatusText.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasStatusText.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasStatusText/IAICanvasStatusTextCursorPos.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStatusText/IAICanvasStatusTextCursorPos.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasStatusText/IAICanvasStatusTextCursorPos.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasStatusText/IAICanvasStatusTextCursorPos.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolPreview.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolPreview.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolPreview.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolPreview.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasBoundingBox.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasBoundingBox.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasBoundingBox.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasBoundingBox.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx diff --git a/invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx similarity index 100% rename from invokeai/frontend/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx rename to invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasDragMove.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasDragMove.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasDragMove.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasDragMove.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasHotkeys.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasHotkeys.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasHotkeys.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasHotkeys.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasMouseDown.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseDown.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasMouseDown.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseDown.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasMouseMove.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseMove.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasMouseMove.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseMove.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasMouseOut.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseOut.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasMouseOut.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseOut.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasMouseUp.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseUp.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasMouseUp.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasMouseUp.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useCanvasZoom.ts b/invokeai/frontend/web/src/features/canvas/hooks/useCanvasZoom.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useCanvasZoom.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useCanvasZoom.ts diff --git a/invokeai/frontend/src/features/canvas/hooks/useColorUnderCursor.ts b/invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/hooks/useColorUnderCursor.ts rename to invokeai/frontend/web/src/features/canvas/hooks/useColorUnderCursor.ts diff --git a/invokeai/frontend/src/features/canvas/store/canvasSelectors.ts b/invokeai/frontend/web/src/features/canvas/store/canvasSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/store/canvasSelectors.ts rename to invokeai/frontend/web/src/features/canvas/store/canvasSelectors.ts diff --git a/invokeai/frontend/src/features/canvas/store/canvasSlice.ts b/invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/store/canvasSlice.ts rename to invokeai/frontend/web/src/features/canvas/store/canvasSlice.ts diff --git a/invokeai/frontend/src/features/canvas/store/canvasTypes.ts b/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/store/canvasTypes.ts rename to invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts diff --git a/invokeai/frontend/src/features/canvas/store/thunks/mergeAndUploadCanvas.ts b/invokeai/frontend/web/src/features/canvas/store/thunks/mergeAndUploadCanvas.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/store/thunks/mergeAndUploadCanvas.ts rename to invokeai/frontend/web/src/features/canvas/store/thunks/mergeAndUploadCanvas.ts diff --git a/invokeai/frontend/src/features/canvas/util/calculateCoordinates.ts b/invokeai/frontend/web/src/features/canvas/util/calculateCoordinates.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/calculateCoordinates.ts rename to invokeai/frontend/web/src/features/canvas/util/calculateCoordinates.ts diff --git a/invokeai/frontend/src/features/canvas/util/calculateScale.ts b/invokeai/frontend/web/src/features/canvas/util/calculateScale.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/calculateScale.ts rename to invokeai/frontend/web/src/features/canvas/util/calculateScale.ts diff --git a/invokeai/frontend/src/features/canvas/util/colorToString.ts b/invokeai/frontend/web/src/features/canvas/util/colorToString.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/colorToString.ts rename to invokeai/frontend/web/src/features/canvas/util/colorToString.ts diff --git a/invokeai/frontend/src/features/canvas/util/constants.ts b/invokeai/frontend/web/src/features/canvas/util/constants.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/constants.ts rename to invokeai/frontend/web/src/features/canvas/util/constants.ts diff --git a/invokeai/frontend/src/features/canvas/util/copyImage.ts b/invokeai/frontend/web/src/features/canvas/util/copyImage.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/copyImage.ts rename to invokeai/frontend/web/src/features/canvas/util/copyImage.ts diff --git a/invokeai/frontend/src/features/canvas/util/downloadFile.ts b/invokeai/frontend/web/src/features/canvas/util/downloadFile.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/downloadFile.ts rename to invokeai/frontend/web/src/features/canvas/util/downloadFile.ts diff --git a/invokeai/frontend/src/features/canvas/util/floorCoordinates.ts b/invokeai/frontend/web/src/features/canvas/util/floorCoordinates.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/floorCoordinates.ts rename to invokeai/frontend/web/src/features/canvas/util/floorCoordinates.ts diff --git a/invokeai/frontend/src/features/canvas/util/generateMask.ts b/invokeai/frontend/web/src/features/canvas/util/generateMask.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/generateMask.ts rename to invokeai/frontend/web/src/features/canvas/util/generateMask.ts diff --git a/invokeai/frontend/src/features/canvas/util/getScaledBoundingBoxDimensions.ts b/invokeai/frontend/web/src/features/canvas/util/getScaledBoundingBoxDimensions.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/getScaledBoundingBoxDimensions.ts rename to invokeai/frontend/web/src/features/canvas/util/getScaledBoundingBoxDimensions.ts diff --git a/invokeai/frontend/src/features/canvas/util/getScaledCursorPosition.ts b/invokeai/frontend/web/src/features/canvas/util/getScaledCursorPosition.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/getScaledCursorPosition.ts rename to invokeai/frontend/web/src/features/canvas/util/getScaledCursorPosition.ts diff --git a/invokeai/frontend/src/features/canvas/util/konvaInstanceProvider.ts b/invokeai/frontend/web/src/features/canvas/util/konvaInstanceProvider.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/konvaInstanceProvider.ts rename to invokeai/frontend/web/src/features/canvas/util/konvaInstanceProvider.ts diff --git a/invokeai/frontend/src/features/canvas/util/layerToDataURL.ts b/invokeai/frontend/web/src/features/canvas/util/layerToDataURL.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/layerToDataURL.ts rename to invokeai/frontend/web/src/features/canvas/util/layerToDataURL.ts diff --git a/invokeai/frontend/src/features/canvas/util/roundDimensionsTo64.ts b/invokeai/frontend/web/src/features/canvas/util/roundDimensionsTo64.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/roundDimensionsTo64.ts rename to invokeai/frontend/web/src/features/canvas/util/roundDimensionsTo64.ts diff --git a/invokeai/frontend/src/features/canvas/util/roundToHundreth.ts b/invokeai/frontend/web/src/features/canvas/util/roundToHundreth.ts similarity index 100% rename from invokeai/frontend/src/features/canvas/util/roundToHundreth.ts rename to invokeai/frontend/web/src/features/canvas/util/roundToHundreth.ts diff --git a/invokeai/frontend/src/features/gallery/components/CurrentImageButtons.scss b/invokeai/frontend/web/src/features/gallery/components/CurrentImageButtons.scss similarity index 100% rename from invokeai/frontend/src/features/gallery/components/CurrentImageButtons.scss rename to invokeai/frontend/web/src/features/gallery/components/CurrentImageButtons.scss diff --git a/invokeai/frontend/src/features/gallery/components/CurrentImageButtons.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImageButtons.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/CurrentImageButtons.tsx rename to invokeai/frontend/web/src/features/gallery/components/CurrentImageButtons.tsx diff --git a/invokeai/frontend/src/features/gallery/components/CurrentImageDisplay.scss b/invokeai/frontend/web/src/features/gallery/components/CurrentImageDisplay.scss similarity index 100% rename from invokeai/frontend/src/features/gallery/components/CurrentImageDisplay.scss rename to invokeai/frontend/web/src/features/gallery/components/CurrentImageDisplay.scss diff --git a/invokeai/frontend/src/features/gallery/components/CurrentImageDisplay.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImageDisplay.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/CurrentImageDisplay.tsx rename to invokeai/frontend/web/src/features/gallery/components/CurrentImageDisplay.tsx diff --git a/invokeai/frontend/src/features/gallery/components/CurrentImagePreview.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/CurrentImagePreview.tsx rename to invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx diff --git a/invokeai/frontend/src/features/gallery/components/DeleteImageModal.tsx b/invokeai/frontend/web/src/features/gallery/components/DeleteImageModal.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/DeleteImageModal.tsx rename to invokeai/frontend/web/src/features/gallery/components/DeleteImageModal.tsx diff --git a/invokeai/frontend/src/features/gallery/components/HoverableImage.scss b/invokeai/frontend/web/src/features/gallery/components/HoverableImage.scss similarity index 100% rename from invokeai/frontend/src/features/gallery/components/HoverableImage.scss rename to invokeai/frontend/web/src/features/gallery/components/HoverableImage.scss diff --git a/invokeai/frontend/src/features/gallery/components/HoverableImage.tsx b/invokeai/frontend/web/src/features/gallery/components/HoverableImage.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/HoverableImage.tsx rename to invokeai/frontend/web/src/features/gallery/components/HoverableImage.tsx diff --git a/invokeai/frontend/src/features/gallery/components/ImageGallery.scss b/invokeai/frontend/web/src/features/gallery/components/ImageGallery.scss similarity index 100% rename from invokeai/frontend/src/features/gallery/components/ImageGallery.scss rename to invokeai/frontend/web/src/features/gallery/components/ImageGallery.scss diff --git a/invokeai/frontend/src/features/gallery/components/ImageGallery.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGallery.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/ImageGallery.tsx rename to invokeai/frontend/web/src/features/gallery/components/ImageGallery.tsx diff --git a/invokeai/frontend/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.scss b/invokeai/frontend/web/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.scss similarity index 100% rename from invokeai/frontend/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.scss rename to invokeai/frontend/web/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.scss diff --git a/invokeai/frontend/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.tsx similarity index 100% rename from invokeai/frontend/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.tsx rename to invokeai/frontend/web/src/features/gallery/components/ImageMetaDataViewer/ImageMetadataViewer.tsx diff --git a/invokeai/frontend/src/features/gallery/hooks/useGetImageByUuid.ts b/invokeai/frontend/web/src/features/gallery/hooks/useGetImageByUuid.ts similarity index 100% rename from invokeai/frontend/src/features/gallery/hooks/useGetImageByUuid.ts rename to invokeai/frontend/web/src/features/gallery/hooks/useGetImageByUuid.ts diff --git a/invokeai/frontend/src/features/gallery/store/gallerySelectors.ts b/invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts similarity index 100% rename from invokeai/frontend/src/features/gallery/store/gallerySelectors.ts rename to invokeai/frontend/web/src/features/gallery/store/gallerySelectors.ts diff --git a/invokeai/frontend/src/features/gallery/store/gallerySlice.ts b/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts similarity index 100% rename from invokeai/frontend/src/features/gallery/store/gallerySlice.ts rename to invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts diff --git a/invokeai/frontend/src/features/gallery/store/thunks/uploadImage.ts b/invokeai/frontend/web/src/features/gallery/store/thunks/uploadImage.ts similarity index 100% rename from invokeai/frontend/src/features/gallery/store/thunks/uploadImage.ts rename to invokeai/frontend/web/src/features/gallery/store/thunks/uploadImage.ts diff --git a/invokeai/frontend/src/features/lightbox/components/Lightbox.scss b/invokeai/frontend/web/src/features/lightbox/components/Lightbox.scss similarity index 100% rename from invokeai/frontend/src/features/lightbox/components/Lightbox.scss rename to invokeai/frontend/web/src/features/lightbox/components/Lightbox.scss diff --git a/invokeai/frontend/src/features/lightbox/components/Lightbox.tsx b/invokeai/frontend/web/src/features/lightbox/components/Lightbox.tsx similarity index 100% rename from invokeai/frontend/src/features/lightbox/components/Lightbox.tsx rename to invokeai/frontend/web/src/features/lightbox/components/Lightbox.tsx diff --git a/invokeai/frontend/src/features/lightbox/components/ReactPanZoom.tsx b/invokeai/frontend/web/src/features/lightbox/components/ReactPanZoom.tsx similarity index 100% rename from invokeai/frontend/src/features/lightbox/components/ReactPanZoom.tsx rename to invokeai/frontend/web/src/features/lightbox/components/ReactPanZoom.tsx diff --git a/invokeai/frontend/src/features/lightbox/store/lightboxSelectors.ts b/invokeai/frontend/web/src/features/lightbox/store/lightboxSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/lightbox/store/lightboxSelectors.ts rename to invokeai/frontend/web/src/features/lightbox/store/lightboxSelectors.ts diff --git a/invokeai/frontend/src/features/lightbox/store/lightboxSlice.ts b/invokeai/frontend/web/src/features/lightbox/store/lightboxSlice.ts similarity index 100% rename from invokeai/frontend/src/features/lightbox/store/lightboxSlice.ts rename to invokeai/frontend/web/src/features/lightbox/store/lightboxSlice.ts diff --git a/invokeai/frontend/src/features/parameters/components/AccordionItems/AdvancedSettings.scss b/invokeai/frontend/web/src/features/parameters/components/AccordionItems/AdvancedSettings.scss similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AccordionItems/AdvancedSettings.scss rename to invokeai/frontend/web/src/features/parameters/components/AccordionItems/AdvancedSettings.scss diff --git a/invokeai/frontend/src/features/parameters/components/AccordionItems/InvokeAccordionItem.tsx b/invokeai/frontend/web/src/features/parameters/components/AccordionItems/InvokeAccordionItem.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AccordionItems/InvokeAccordionItem.tsx rename to invokeai/frontend/web/src/features/parameters/components/AccordionItems/InvokeAccordionItem.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.scss b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.scss similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.scss rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.scss diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/BoundingBox/BoundingBoxSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/InfillAndScalingSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/InfillAndScalingSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/InfillAndScalingSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/InfillAndScalingSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamBlur.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamBlur.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamBlur.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamBlur.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamCorrectionSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamCorrectionSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamCorrectionSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamCorrectionSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSize.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSize.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSize.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSize.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSteps.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSteps.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSteps.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamSteps.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamStrength.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamStrength.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamStrength.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Canvas/SeamCorrection/SeamStrength.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/CodeformerFidelity.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/CodeformerFidelity.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/CodeformerFidelity.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/CodeformerFidelity.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreStrength.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreStrength.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreStrength.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreStrength.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreToggle.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreToggle.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreToggle.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreToggle.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreType.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreType.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreType.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/FaceRestore/FaceRestoreType.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageFit.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageFit.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageFit.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageFit.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageStrength.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageStrength.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageStrength.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageStrength.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/HiresSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/HiresSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/HiresSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/HiresSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/ImageToImageOutputSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/ImageToImageOutputSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/ImageToImageOutputSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/ImageToImageOutputSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/OutputSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/OutputSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/OutputSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/OutputSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SeamlessSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SeamlessSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SeamlessSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SeamlessSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SymmetrySettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SymmetrySettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SymmetrySettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SymmetrySettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SymmetryToggle.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SymmetryToggle.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Output/SymmetryToggle.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Output/SymmetryToggle.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Perlin.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Perlin.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Perlin.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Perlin.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/RandomizeSeed.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/RandomizeSeed.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/RandomizeSeed.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/RandomizeSeed.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Seed.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Seed.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Seed.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Seed.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/SeedSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/SeedSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/SeedSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/SeedSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/ShuffleSeed.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/ShuffleSeed.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/ShuffleSeed.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/ShuffleSeed.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Threshold.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Threshold.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Seed/Threshold.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Seed/Threshold.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleDenoisingStrength.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleDenoisingStrength.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleDenoisingStrength.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleDenoisingStrength.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleScale.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleScale.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleScale.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleScale.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleStrength.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleStrength.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleStrength.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleStrength.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleToggle.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleToggle.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleToggle.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Upscale/UpscaleToggle.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/GenerateVariations.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/GenerateVariations.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/GenerateVariations.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/GenerateVariations.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/SeedWeights.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/SeedWeights.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/SeedWeights.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/SeedWeights.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/VariationAmount.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/VariationAmount.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/VariationAmount.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/VariationAmount.tsx diff --git a/invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/VariationsSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/VariationsSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/AdvancedParameters/Variations/VariationsSettings.tsx rename to invokeai/frontend/web/src/features/parameters/components/AdvancedParameters/Variations/VariationsSettings.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainCFGScale.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainCFGScale.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainCFGScale.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainCFGScale.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainHeight.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainHeight.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainHeight.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainHeight.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainIterations.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainIterations.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainIterations.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainIterations.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainParameters.scss b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainParameters.scss similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainParameters.scss rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainParameters.scss diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainParameters.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainParameters.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainParameters.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainParameters.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainSampler.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainSampler.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainSampler.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainSampler.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainSteps.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainSteps.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainSteps.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainSteps.tsx diff --git a/invokeai/frontend/src/features/parameters/components/MainParameters/MainWidth.tsx b/invokeai/frontend/web/src/features/parameters/components/MainParameters/MainWidth.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/MainParameters/MainWidth.tsx rename to invokeai/frontend/web/src/features/parameters/components/MainParameters/MainWidth.tsx diff --git a/invokeai/frontend/src/features/parameters/components/ParametersAccordion.tsx b/invokeai/frontend/web/src/features/parameters/components/ParametersAccordion.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ParametersAccordion.tsx rename to invokeai/frontend/web/src/features/parameters/components/ParametersAccordion.tsx diff --git a/invokeai/frontend/src/features/parameters/components/ProcessButtons/CancelButton.tsx b/invokeai/frontend/web/src/features/parameters/components/ProcessButtons/CancelButton.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ProcessButtons/CancelButton.tsx rename to invokeai/frontend/web/src/features/parameters/components/ProcessButtons/CancelButton.tsx diff --git a/invokeai/frontend/src/features/parameters/components/ProcessButtons/InvokeButton.tsx b/invokeai/frontend/web/src/features/parameters/components/ProcessButtons/InvokeButton.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ProcessButtons/InvokeButton.tsx rename to invokeai/frontend/web/src/features/parameters/components/ProcessButtons/InvokeButton.tsx diff --git a/invokeai/frontend/src/features/parameters/components/ProcessButtons/Loopback.tsx b/invokeai/frontend/web/src/features/parameters/components/ProcessButtons/Loopback.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ProcessButtons/Loopback.tsx rename to invokeai/frontend/web/src/features/parameters/components/ProcessButtons/Loopback.tsx diff --git a/invokeai/frontend/src/features/parameters/components/ProcessButtons/ProcessButtons.scss b/invokeai/frontend/web/src/features/parameters/components/ProcessButtons/ProcessButtons.scss similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ProcessButtons/ProcessButtons.scss rename to invokeai/frontend/web/src/features/parameters/components/ProcessButtons/ProcessButtons.scss diff --git a/invokeai/frontend/src/features/parameters/components/ProcessButtons/ProcessButtons.tsx b/invokeai/frontend/web/src/features/parameters/components/ProcessButtons/ProcessButtons.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/ProcessButtons/ProcessButtons.tsx rename to invokeai/frontend/web/src/features/parameters/components/ProcessButtons/ProcessButtons.tsx diff --git a/invokeai/frontend/src/features/parameters/components/PromptInput/NegativePromptInput.tsx b/invokeai/frontend/web/src/features/parameters/components/PromptInput/NegativePromptInput.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/PromptInput/NegativePromptInput.tsx rename to invokeai/frontend/web/src/features/parameters/components/PromptInput/NegativePromptInput.tsx diff --git a/invokeai/frontend/src/features/parameters/components/PromptInput/PromptInput.scss b/invokeai/frontend/web/src/features/parameters/components/PromptInput/PromptInput.scss similarity index 100% rename from invokeai/frontend/src/features/parameters/components/PromptInput/PromptInput.scss rename to invokeai/frontend/web/src/features/parameters/components/PromptInput/PromptInput.scss diff --git a/invokeai/frontend/src/features/parameters/components/PromptInput/PromptInput.tsx b/invokeai/frontend/web/src/features/parameters/components/PromptInput/PromptInput.tsx similarity index 100% rename from invokeai/frontend/src/features/parameters/components/PromptInput/PromptInput.tsx rename to invokeai/frontend/web/src/features/parameters/components/PromptInput/PromptInput.tsx diff --git a/invokeai/frontend/src/features/parameters/hooks/usePrompt.ts b/invokeai/frontend/web/src/features/parameters/hooks/usePrompt.ts similarity index 100% rename from invokeai/frontend/src/features/parameters/hooks/usePrompt.ts rename to invokeai/frontend/web/src/features/parameters/hooks/usePrompt.ts diff --git a/invokeai/frontend/src/features/parameters/store/generationSelectors.ts b/invokeai/frontend/web/src/features/parameters/store/generationSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/parameters/store/generationSelectors.ts rename to invokeai/frontend/web/src/features/parameters/store/generationSelectors.ts diff --git a/invokeai/frontend/src/features/parameters/store/generationSlice.ts b/invokeai/frontend/web/src/features/parameters/store/generationSlice.ts similarity index 100% rename from invokeai/frontend/src/features/parameters/store/generationSlice.ts rename to invokeai/frontend/web/src/features/parameters/store/generationSlice.ts diff --git a/invokeai/frontend/src/features/parameters/store/postprocessingSelectors.ts b/invokeai/frontend/web/src/features/parameters/store/postprocessingSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/parameters/store/postprocessingSelectors.ts rename to invokeai/frontend/web/src/features/parameters/store/postprocessingSelectors.ts diff --git a/invokeai/frontend/src/features/parameters/store/postprocessingSlice.ts b/invokeai/frontend/web/src/features/parameters/store/postprocessingSlice.ts similarity index 100% rename from invokeai/frontend/src/features/parameters/store/postprocessingSlice.ts rename to invokeai/frontend/web/src/features/parameters/store/postprocessingSlice.ts diff --git a/invokeai/frontend/src/features/system/components/ClearTempFolderButtonModal.tsx b/invokeai/frontend/web/src/features/system/components/ClearTempFolderButtonModal.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ClearTempFolderButtonModal.tsx rename to invokeai/frontend/web/src/features/system/components/ClearTempFolderButtonModal.tsx diff --git a/invokeai/frontend/src/features/system/components/Console.scss b/invokeai/frontend/web/src/features/system/components/Console.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/Console.scss rename to invokeai/frontend/web/src/features/system/components/Console.scss diff --git a/invokeai/frontend/src/features/system/components/Console.tsx b/invokeai/frontend/web/src/features/system/components/Console.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/Console.tsx rename to invokeai/frontend/web/src/features/system/components/Console.tsx diff --git a/invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModal.scss b/invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModal.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModal.scss rename to invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModal.scss diff --git a/invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModal.tsx b/invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModal.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModal.tsx rename to invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModal.tsx diff --git a/invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModalItem.tsx b/invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModalItem.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/HotkeysModal/HotkeysModalItem.tsx rename to invokeai/frontend/web/src/features/system/components/HotkeysModal/HotkeysModalItem.tsx diff --git a/invokeai/frontend/src/features/system/components/LanguagePicker.tsx b/invokeai/frontend/web/src/features/system/components/LanguagePicker.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/LanguagePicker.tsx rename to invokeai/frontend/web/src/features/system/components/LanguagePicker.tsx diff --git a/invokeai/frontend/src/features/system/components/Modal.scss b/invokeai/frontend/web/src/features/system/components/Modal.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/Modal.scss rename to invokeai/frontend/web/src/features/system/components/Modal.scss diff --git a/invokeai/frontend/src/features/system/components/ModelManager/AddCheckpointModel.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/AddCheckpointModel.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/AddCheckpointModel.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/AddCheckpointModel.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/AddDiffusersModel.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/AddDiffusersModel.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/AddDiffusersModel.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/AddDiffusersModel.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/AddModel.scss b/invokeai/frontend/web/src/features/system/components/ModelManager/AddModel.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/AddModel.scss rename to invokeai/frontend/web/src/features/system/components/ModelManager/AddModel.scss diff --git a/invokeai/frontend/src/features/system/components/ModelManager/AddModel.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/AddModel.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/AddModel.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/AddModel.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/CheckpointModelEdit.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/CheckpointModelEdit.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/CheckpointModelEdit.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/CheckpointModelEdit.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/DiffusersModelEdit.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/DiffusersModelEdit.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/DiffusersModelEdit.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/DiffusersModelEdit.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/MergeModels.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/MergeModels.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/MergeModels.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/MergeModels.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/ModelConvert.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/ModelConvert.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/ModelList.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/ModelList.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/ModelList.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/ModelList.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/ModelListItem.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/ModelListItem.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/ModelListItem.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/ModelListItem.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/ModelManagerModal.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/ModelManagerModal.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/ModelManagerModal.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/ModelManagerModal.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelManager/SearchModels.tsx b/invokeai/frontend/web/src/features/system/components/ModelManager/SearchModels.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelManager/SearchModels.tsx rename to invokeai/frontend/web/src/features/system/components/ModelManager/SearchModels.tsx diff --git a/invokeai/frontend/src/features/system/components/ModelSelect.tsx b/invokeai/frontend/web/src/features/system/components/ModelSelect.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ModelSelect.tsx rename to invokeai/frontend/web/src/features/system/components/ModelSelect.tsx diff --git a/invokeai/frontend/src/features/system/components/ProgressBar.scss b/invokeai/frontend/web/src/features/system/components/ProgressBar.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/ProgressBar.scss rename to invokeai/frontend/web/src/features/system/components/ProgressBar.scss diff --git a/invokeai/frontend/src/features/system/components/ProgressBar.tsx b/invokeai/frontend/web/src/features/system/components/ProgressBar.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ProgressBar.tsx rename to invokeai/frontend/web/src/features/system/components/ProgressBar.tsx diff --git a/invokeai/frontend/src/features/system/components/SettingsModal/SettingsModal.scss b/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsModal.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/SettingsModal/SettingsModal.scss rename to invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsModal.scss diff --git a/invokeai/frontend/src/features/system/components/SettingsModal/SettingsModal.tsx b/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsModal.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/SettingsModal/SettingsModal.tsx rename to invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsModal.tsx diff --git a/invokeai/frontend/src/features/system/components/SiteHeader.scss b/invokeai/frontend/web/src/features/system/components/SiteHeader.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/SiteHeader.scss rename to invokeai/frontend/web/src/features/system/components/SiteHeader.scss diff --git a/invokeai/frontend/src/features/system/components/SiteHeader.tsx b/invokeai/frontend/web/src/features/system/components/SiteHeader.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/SiteHeader.tsx rename to invokeai/frontend/web/src/features/system/components/SiteHeader.tsx diff --git a/invokeai/frontend/src/features/system/components/StatusIndicator.scss b/invokeai/frontend/web/src/features/system/components/StatusIndicator.scss similarity index 100% rename from invokeai/frontend/src/features/system/components/StatusIndicator.scss rename to invokeai/frontend/web/src/features/system/components/StatusIndicator.scss diff --git a/invokeai/frontend/src/features/system/components/StatusIndicator.tsx b/invokeai/frontend/web/src/features/system/components/StatusIndicator.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/StatusIndicator.tsx rename to invokeai/frontend/web/src/features/system/components/StatusIndicator.tsx diff --git a/invokeai/frontend/src/features/system/components/ThemeChanger.tsx b/invokeai/frontend/web/src/features/system/components/ThemeChanger.tsx similarity index 100% rename from invokeai/frontend/src/features/system/components/ThemeChanger.tsx rename to invokeai/frontend/web/src/features/system/components/ThemeChanger.tsx diff --git a/invokeai/frontend/src/features/system/hooks/useToastWatcher.ts b/invokeai/frontend/web/src/features/system/hooks/useToastWatcher.ts similarity index 100% rename from invokeai/frontend/src/features/system/hooks/useToastWatcher.ts rename to invokeai/frontend/web/src/features/system/hooks/useToastWatcher.ts diff --git a/invokeai/frontend/src/features/system/store/systemSelectors.ts b/invokeai/frontend/web/src/features/system/store/systemSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/system/store/systemSelectors.ts rename to invokeai/frontend/web/src/features/system/store/systemSelectors.ts diff --git a/invokeai/frontend/src/features/system/store/systemSlice.ts b/invokeai/frontend/web/src/features/system/store/systemSlice.ts similarity index 100% rename from invokeai/frontend/src/features/system/store/systemSlice.ts rename to invokeai/frontend/web/src/features/system/store/systemSlice.ts diff --git a/invokeai/frontend/src/features/ui/components/FloatingButton.scss b/invokeai/frontend/web/src/features/ui/components/FloatingButton.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/FloatingButton.scss rename to invokeai/frontend/web/src/features/ui/components/FloatingButton.scss diff --git a/invokeai/frontend/src/features/ui/components/FloatingGalleryButton.tsx b/invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/FloatingGalleryButton.tsx rename to invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx diff --git a/invokeai/frontend/src/features/ui/components/FloatingParametersPanelButtons.tsx b/invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/FloatingParametersPanelButtons.tsx rename to invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImage.scss b/invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImage.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImage.scss rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImage.scss diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImageDisplay.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImageDisplay.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImageDisplay.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImageDisplay.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImageOptions.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImageOptions.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImageOptions.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImageOptions.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImagePanel.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImagePanel.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/ImageToImagePanel.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/ImageToImagePanel.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/InitImagePreview.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/InitImagePreview.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/InitImagePreview.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/InitImagePreview.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/InitialImageOverlay.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/InitialImageOverlay.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/InitialImageOverlay.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/InitialImageOverlay.tsx diff --git a/invokeai/frontend/src/features/ui/components/ImageToImage/index.tsx b/invokeai/frontend/web/src/features/ui/components/ImageToImage/index.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/ImageToImage/index.tsx rename to invokeai/frontend/web/src/features/ui/components/ImageToImage/index.tsx diff --git a/invokeai/frontend/src/features/ui/components/InvokeParametersPanel.scss b/invokeai/frontend/web/src/features/ui/components/InvokeParametersPanel.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeParametersPanel.scss rename to invokeai/frontend/web/src/features/ui/components/InvokeParametersPanel.scss diff --git a/invokeai/frontend/src/features/ui/components/InvokeParametersPanel.tsx b/invokeai/frontend/web/src/features/ui/components/InvokeParametersPanel.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeParametersPanel.tsx rename to invokeai/frontend/web/src/features/ui/components/InvokeParametersPanel.tsx diff --git a/invokeai/frontend/src/features/ui/components/InvokeTabs.scss b/invokeai/frontend/web/src/features/ui/components/InvokeTabs.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeTabs.scss rename to invokeai/frontend/web/src/features/ui/components/InvokeTabs.scss diff --git a/invokeai/frontend/src/features/ui/components/InvokeTabs.tsx b/invokeai/frontend/web/src/features/ui/components/InvokeTabs.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeTabs.tsx rename to invokeai/frontend/web/src/features/ui/components/InvokeTabs.tsx diff --git a/invokeai/frontend/src/features/ui/components/InvokeWorkarea.scss b/invokeai/frontend/web/src/features/ui/components/InvokeWorkarea.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeWorkarea.scss rename to invokeai/frontend/web/src/features/ui/components/InvokeWorkarea.scss diff --git a/invokeai/frontend/src/features/ui/components/InvokeWorkarea.tsx b/invokeai/frontend/web/src/features/ui/components/InvokeWorkarea.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/InvokeWorkarea.tsx rename to invokeai/frontend/web/src/features/ui/components/InvokeWorkarea.tsx diff --git a/invokeai/frontend/src/features/ui/components/TextToImage/TextToImage.scss b/invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImage.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/TextToImage/TextToImage.scss rename to invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImage.scss diff --git a/invokeai/frontend/src/features/ui/components/TextToImage/TextToImageDisplay.tsx b/invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImageDisplay.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/TextToImage/TextToImageDisplay.tsx rename to invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImageDisplay.tsx diff --git a/invokeai/frontend/src/features/ui/components/TextToImage/TextToImagePanel.tsx b/invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImagePanel.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/TextToImage/TextToImagePanel.tsx rename to invokeai/frontend/web/src/features/ui/components/TextToImage/TextToImagePanel.tsx diff --git a/invokeai/frontend/src/features/ui/components/TextToImage/index.tsx b/invokeai/frontend/web/src/features/ui/components/TextToImage/index.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/TextToImage/index.tsx rename to invokeai/frontend/web/src/features/ui/components/TextToImage/index.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/CanvasWorkarea.scss b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/CanvasWorkarea.scss similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/CanvasWorkarea.scss rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/CanvasWorkarea.scss diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasDisplayBeta.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasDisplayBeta.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasDisplayBeta.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasDisplayBeta.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBaseBrushSettings.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBaseBrushSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBaseBrushSettings.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBaseBrushSettings.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSettings.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSettings.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSettings.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSize.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSize.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSize.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasBrushSize.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasClearMask.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasClearMask.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasClearMask.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasClearMask.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasColorPicker.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasColorPicker.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasColorPicker.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasColorPicker.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasDarkenOutsideSelection.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasDarkenOutsideSelection.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasDarkenOutsideSelection.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasDarkenOutsideSelection.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasEnableMask.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasEnableMask.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasEnableMask.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasEnableMask.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasLimitStrokesToBox.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasLimitStrokesToBox.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasLimitStrokesToBox.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasLimitStrokesToBox.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMaskBrushSettings.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMaskBrushSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMaskBrushSettings.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMaskBrushSettings.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMoveSettings.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMoveSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMoveSettings.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasMoveSettings.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasPreserveMask.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasPreserveMask.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasPreserveMask.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasPreserveMask.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSettings.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSettings.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSettings.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSettings.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasShowGrid.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasShowGrid.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasShowGrid.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasShowGrid.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSnapToGrid.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSnapToGrid.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSnapToGrid.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettings/UnifiedCanvasSnapToGrid.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettingsBeta.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettingsBeta.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettingsBeta.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolSettingsBeta.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasCopyToClipboard.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasCopyToClipboard.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasCopyToClipboard.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasCopyToClipboard.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasDownloadImage.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasDownloadImage.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasDownloadImage.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasDownloadImage.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasFileUploader.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasFileUploader.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasFileUploader.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasFileUploader.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasLayerSelect.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasLayerSelect.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasLayerSelect.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasLayerSelect.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMergeVisible.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMergeVisible.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMergeVisible.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMergeVisible.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMoveTool.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMoveTool.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMoveTool.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasMoveTool.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasProcessingButtons.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasProcessingButtons.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasProcessingButtons.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasProcessingButtons.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetCanvas.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetCanvas.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetCanvas.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetCanvas.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetView.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetView.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetView.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasResetView.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasSaveToGallery.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasSaveToGallery.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasSaveToGallery.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasSaveToGallery.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasToolSelect.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasToolSelect.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasToolSelect.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbar/UnifiedCanvasToolSelect.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbarBeta.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbarBeta.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbarBeta.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasBeta/UnifiedCanvasToolbarBeta.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasDisplay.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasDisplay.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasDisplay.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasDisplay.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasPanel.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasPanel.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasPanel.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasPanel.tsx diff --git a/invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasWorkarea.tsx b/invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasWorkarea.tsx similarity index 100% rename from invokeai/frontend/src/features/ui/components/UnifiedCanvas/UnifiedCanvasWorkarea.tsx rename to invokeai/frontend/web/src/features/ui/components/UnifiedCanvas/UnifiedCanvasWorkarea.tsx diff --git a/invokeai/frontend/src/features/ui/store/tabMap.ts b/invokeai/frontend/web/src/features/ui/store/tabMap.ts similarity index 100% rename from invokeai/frontend/src/features/ui/store/tabMap.ts rename to invokeai/frontend/web/src/features/ui/store/tabMap.ts diff --git a/invokeai/frontend/src/features/ui/store/uiSelectors.ts b/invokeai/frontend/web/src/features/ui/store/uiSelectors.ts similarity index 100% rename from invokeai/frontend/src/features/ui/store/uiSelectors.ts rename to invokeai/frontend/web/src/features/ui/store/uiSelectors.ts diff --git a/invokeai/frontend/src/features/ui/store/uiSlice.ts b/invokeai/frontend/web/src/features/ui/store/uiSlice.ts similarity index 100% rename from invokeai/frontend/src/features/ui/store/uiSlice.ts rename to invokeai/frontend/web/src/features/ui/store/uiSlice.ts diff --git a/invokeai/frontend/src/features/ui/store/uiTypes.ts b/invokeai/frontend/web/src/features/ui/store/uiTypes.ts similarity index 100% rename from invokeai/frontend/src/features/ui/store/uiTypes.ts rename to invokeai/frontend/web/src/features/ui/store/uiTypes.ts diff --git a/invokeai/frontend/src/i18.d.ts b/invokeai/frontend/web/src/i18.d.ts similarity index 100% rename from invokeai/frontend/src/i18.d.ts rename to invokeai/frontend/web/src/i18.d.ts diff --git a/invokeai/frontend/src/i18n.ts b/invokeai/frontend/web/src/i18n.ts similarity index 100% rename from invokeai/frontend/src/i18n.ts rename to invokeai/frontend/web/src/i18n.ts diff --git a/invokeai/frontend/src/main.tsx b/invokeai/frontend/web/src/main.tsx similarity index 100% rename from invokeai/frontend/src/main.tsx rename to invokeai/frontend/web/src/main.tsx diff --git a/invokeai/frontend/src/persistor.ts b/invokeai/frontend/web/src/persistor.ts similarity index 100% rename from invokeai/frontend/src/persistor.ts rename to invokeai/frontend/web/src/persistor.ts diff --git a/invokeai/frontend/src/styles/Mixins/Buttons.scss b/invokeai/frontend/web/src/styles/Mixins/Buttons.scss similarity index 100% rename from invokeai/frontend/src/styles/Mixins/Buttons.scss rename to invokeai/frontend/web/src/styles/Mixins/Buttons.scss diff --git a/invokeai/frontend/src/styles/Mixins/_Responsive.scss b/invokeai/frontend/web/src/styles/Mixins/_Responsive.scss similarity index 100% rename from invokeai/frontend/src/styles/Mixins/_Responsive.scss rename to invokeai/frontend/web/src/styles/Mixins/_Responsive.scss diff --git a/invokeai/frontend/src/styles/Mixins/_Shared.scss b/invokeai/frontend/web/src/styles/Mixins/_Shared.scss similarity index 100% rename from invokeai/frontend/src/styles/Mixins/_Shared.scss rename to invokeai/frontend/web/src/styles/Mixins/_Shared.scss diff --git a/invokeai/frontend/src/styles/Mixins/_Variables.scss b/invokeai/frontend/web/src/styles/Mixins/_Variables.scss similarity index 100% rename from invokeai/frontend/src/styles/Mixins/_Variables.scss rename to invokeai/frontend/web/src/styles/Mixins/_Variables.scss diff --git a/invokeai/frontend/src/styles/Mixins/index.scss b/invokeai/frontend/web/src/styles/Mixins/index.scss similarity index 100% rename from invokeai/frontend/src/styles/Mixins/index.scss rename to invokeai/frontend/web/src/styles/Mixins/index.scss diff --git a/invokeai/frontend/src/styles/Themes/_Colors_Dark.scss b/invokeai/frontend/web/src/styles/Themes/_Colors_Dark.scss similarity index 100% rename from invokeai/frontend/src/styles/Themes/_Colors_Dark.scss rename to invokeai/frontend/web/src/styles/Themes/_Colors_Dark.scss diff --git a/invokeai/frontend/src/styles/Themes/_Colors_Green.scss b/invokeai/frontend/web/src/styles/Themes/_Colors_Green.scss similarity index 100% rename from invokeai/frontend/src/styles/Themes/_Colors_Green.scss rename to invokeai/frontend/web/src/styles/Themes/_Colors_Green.scss diff --git a/invokeai/frontend/src/styles/Themes/_Colors_Light.scss b/invokeai/frontend/web/src/styles/Themes/_Colors_Light.scss similarity index 100% rename from invokeai/frontend/src/styles/Themes/_Colors_Light.scss rename to invokeai/frontend/web/src/styles/Themes/_Colors_Light.scss diff --git a/invokeai/frontend/src/styles/_Animations.scss b/invokeai/frontend/web/src/styles/_Animations.scss similarity index 100% rename from invokeai/frontend/src/styles/_Animations.scss rename to invokeai/frontend/web/src/styles/_Animations.scss diff --git a/invokeai/frontend/src/styles/_Fonts.scss b/invokeai/frontend/web/src/styles/_Fonts.scss similarity index 100% rename from invokeai/frontend/src/styles/_Fonts.scss rename to invokeai/frontend/web/src/styles/_Fonts.scss diff --git a/invokeai/frontend/src/styles/_Misc.scss b/invokeai/frontend/web/src/styles/_Misc.scss similarity index 100% rename from invokeai/frontend/src/styles/_Misc.scss rename to invokeai/frontend/web/src/styles/_Misc.scss diff --git a/invokeai/frontend/src/styles/index.scss b/invokeai/frontend/web/src/styles/index.scss similarity index 100% rename from invokeai/frontend/src/styles/index.scss rename to invokeai/frontend/web/src/styles/index.scss diff --git a/invokeai/frontend/src/vite-env.d.ts b/invokeai/frontend/web/src/vite-env.d.ts similarity index 100% rename from invokeai/frontend/src/vite-env.d.ts rename to invokeai/frontend/web/src/vite-env.d.ts diff --git a/invokeai/frontend/stats.html b/invokeai/frontend/web/stats.html similarity index 100% rename from invokeai/frontend/stats.html rename to invokeai/frontend/web/stats.html diff --git a/invokeai/frontend/tsconfig.json b/invokeai/frontend/web/tsconfig.json similarity index 100% rename from invokeai/frontend/tsconfig.json rename to invokeai/frontend/web/tsconfig.json diff --git a/invokeai/frontend/tsconfig.node.json b/invokeai/frontend/web/tsconfig.node.json similarity index 100% rename from invokeai/frontend/tsconfig.node.json rename to invokeai/frontend/web/tsconfig.node.json diff --git a/invokeai/frontend/vite.config.ts b/invokeai/frontend/web/vite.config.ts similarity index 100% rename from invokeai/frontend/vite.config.ts rename to invokeai/frontend/web/vite.config.ts diff --git a/invokeai/frontend/yarn.lock b/invokeai/frontend/web/yarn.lock similarity index 100% rename from invokeai/frontend/yarn.lock rename to invokeai/frontend/web/yarn.lock diff --git a/ldm/invoke/config/__init__.py b/ldm/invoke/config/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ldm/invoke/restoration/codeformer/weights/README b/ldm/invoke/restoration/codeformer/weights/README deleted file mode 100644 index 1cc40dc026..0000000000 --- a/ldm/invoke/restoration/codeformer/weights/README +++ /dev/null @@ -1,3 +0,0 @@ -To use codeformer face reconstruction, you will need to copy -https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth -into this directory. diff --git a/ldm/invoke/server.py b/ldm/invoke/server.py deleted file mode 100644 index 9bcf056477..0000000000 --- a/ldm/invoke/server.py +++ /dev/null @@ -1,282 +0,0 @@ -import argparse -import json -import copy -import base64 -import mimetypes -import os -from ldm.invoke.args import Args, metadata_dumps -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from ldm.invoke.pngwriter import PngWriter -from threading import Event - -def build_opt(post_data, seed, gfpgan_model_exists): - opt = Args() - opt.parse_args() # initialize defaults - setattr(opt, 'prompt', post_data['prompt']) - setattr(opt, 'init_img', post_data['initimg']) - setattr(opt, 'strength', float(post_data['strength'])) - setattr(opt, 'iterations', int(post_data['iterations'])) - setattr(opt, 'steps', int(post_data['steps'])) - setattr(opt, 'width', int(post_data['width'])) - setattr(opt, 'height', int(post_data['height'])) - setattr(opt, 'seamless', 'seamless' in post_data) - setattr(opt, 'fit', 'fit' in post_data) - setattr(opt, 'mask', 'mask' in post_data) - setattr(opt, 'invert_mask', 'invert_mask' in post_data) - setattr(opt, 'cfg_scale', float(post_data['cfg_scale'])) - setattr(opt, 'sampler_name', post_data['sampler_name']) - - # embiggen not practical at this point because we have no way of feeding images back into img2img - # however, this code is here against that eventuality - setattr(opt, 'embiggen', None) - setattr(opt, 'embiggen_tiles', None) - setattr(opt, 'embiggen_strength', None) - - setattr(opt, 'facetool_strength', float(post_data['facetool_strength']) if gfpgan_model_exists else 0) - setattr(opt, 'upscale', [int(post_data['upscale_level']), float(post_data['upscale_strength'])] if post_data['upscale_level'] != '' else None) - setattr(opt, 'progress_images', 'progress_images' in post_data) - setattr(opt, 'progress_latents', 'progress_latents' in post_data) - setattr(opt, 'seed', None if int(post_data['seed']) == -1 else int(post_data['seed'])) - setattr(opt, 'threshold', float(post_data['threshold'])) - setattr(opt, 'perlin', float(post_data['perlin'])) - setattr(opt, 'hires_fix', 'hires_fix' in post_data) - setattr(opt, 'variation_amount', float(post_data['variation_amount']) if int(post_data['seed']) != -1 else 0) - setattr(opt, 'with_variations', []) - setattr(opt, 'embiggen', None) - setattr(opt, 'embiggen_tiles', None) - - broken = False - if int(post_data['seed']) != -1 and post_data['with_variations'] != '': - for part in post_data['with_variations'].split(','): - seed_and_weight = part.split(':') - if len(seed_and_weight) != 2: - print(f'could not parse WITH_variation part "{part}"') - broken = True - break - try: - seed = int(seed_and_weight[0]) - weight = float(seed_and_weight[1]) - except ValueError: - print(f'could not parse with_variation part "{part}"') - broken = True - break - opt.with_variations.append([seed, weight]) - - if broken: - raise CanceledException - - if len(opt.with_variations) == 0: - opt.with_variations = None - - return opt - -class CanceledException(Exception): - pass - -class DreamServer(BaseHTTPRequestHandler): - model = None - outdir = None - canceled = Event() - - def do_GET(self): - if self.path == "/": - self.send_response(200) - self.send_header("Content-type", "text/html") - self.end_headers() - with open("./static/legacy_web/index.html", "rb") as content: - self.wfile.write(content.read()) - elif self.path == "/config.js": - # unfortunately this import can't be at the top level, since that would cause a circular import - self.send_response(200) - self.send_header("Content-type", "application/javascript") - self.end_headers() - config = { - 'gfpgan_model_exists': self.gfpgan_model_exists - } - self.wfile.write(bytes("let config = " + json.dumps(config) + ";\n", "utf-8")) - elif self.path == "/run_log.json": - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - output = [] - - log_file = os.path.join(self.outdir, "legacy_web_log.txt") - if os.path.exists(log_file): - with open(log_file, "r") as log: - for line in log: - url, config = line.split(": {", maxsplit=1) - config = json.loads("{" + config) - config["url"] = url.lstrip(".") - if os.path.exists(url): - output.append(config) - - self.wfile.write(bytes(json.dumps({"run_log": output}), "utf-8")) - elif self.path == "/cancel": - self.canceled.set() - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - self.wfile.write(bytes('{}', 'utf8')) - else: - path_dir = os.path.dirname(self.path) - out_dir = os.path.realpath(self.outdir.rstrip('/')) - if self.path.startswith('/static/legacy_web/'): - path = '.' + self.path - elif out_dir.replace('\\', '/').endswith(path_dir): - file = os.path.basename(self.path) - path = os.path.join(self.outdir,file) - else: - self.send_response(404) - return - mime_type = mimetypes.guess_type(path)[0] - if mime_type is not None: - self.send_response(200) - self.send_header("Content-type", mime_type) - self.end_headers() - with open(path, "rb") as content: - self.wfile.write(content.read()) - else: - self.send_response(404) - - def do_POST(self): - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - - # unfortunately this import can't be at the top level, since that would cause a circular import - - content_length = int(self.headers['Content-Length']) - post_data = json.loads(self.rfile.read(content_length)) - opt = build_opt(post_data, self.model.seed, self.gfpgan_model_exists) - - self.canceled.clear() - # In order to handle upscaled images, the PngWriter needs to maintain state - # across images generated by each call to prompt2img(), so we define it in - # the outer scope of image_done() - config = post_data.copy() # Shallow copy - config['initimg'] = config.pop('initimg_name', '') - - images_generated = 0 # helps keep track of when upscaling is started - images_upscaled = 0 # helps keep track of when upscaling is completed - pngwriter = PngWriter(self.outdir) - - prefix = pngwriter.unique_prefix() - # if upscaling is requested, then this will be called twice, once when - # the images are first generated, and then again when after upscaling - # is complete. The upscaling replaces the original file, so the second - # entry should not be inserted into the image list. - # LS: This repeats code in dream.py - def image_done(image, seed, upscaled=False, first_seed=None): - name = f'{prefix}.{seed}.png' - iter_opt = copy.copy(opt) - if opt.variation_amount > 0: - this_variation = [[seed, opt.variation_amount]] - if opt.with_variations is None: - iter_opt.with_variations = this_variation - else: - iter_opt.with_variations = opt.with_variations + this_variation - iter_opt.variation_amount = 0 - formatted_prompt = opt.dream_prompt_str(seed=seed) - path = pngwriter.save_image_and_prompt_to_png( - image, - dream_prompt = formatted_prompt, - metadata = metadata_dumps(iter_opt, - seeds = [seed], - model_hash = self.model.model_hash - ), - name = name, - ) - - if int(config['seed']) == -1: - config['seed'] = seed - # Append post_data to log, but only once! - if not upscaled: - with open(os.path.join(self.outdir, "legacy_web_log.txt"), "a") as log: - log.write(f"{path}: {json.dumps(config)}\n") - - self.wfile.write(bytes(json.dumps( - {'event': 'result', 'url': path, 'seed': seed, 'config': config} - ) + '\n',"utf-8")) - - # control state of the "postprocessing..." message - upscaling_requested = opt.upscale or opt.facetool_strength > 0 - nonlocal images_generated # NB: Is this bad python style? It is typical usage in a perl closure. - nonlocal images_upscaled # NB: Is this bad python style? It is typical usage in a perl closure. - if upscaled: - images_upscaled += 1 - else: - images_generated += 1 - if upscaling_requested: - action = None - if images_generated >= opt.iterations: - if images_upscaled < opt.iterations: - action = 'upscaling-started' - else: - action = 'upscaling-done' - if action: - x = images_upscaled + 1 - self.wfile.write(bytes(json.dumps( - {'event': action, 'processed_file_cnt': f'{x}/{opt.iterations}'} - ) + '\n',"utf-8")) - - step_writer = PngWriter(os.path.join(self.outdir, "intermediates")) - step_index = 1 - def image_progress(sample, step): - if self.canceled.is_set(): - self.wfile.write(bytes(json.dumps({'event':'canceled'}) + '\n', 'utf-8')) - raise CanceledException - path = None - # since rendering images is moderately expensive, only render every 5th image - # and don't bother with the last one, since it'll render anyway - nonlocal step_index - - wants_progress_latents = opt.progress_latents - wants_progress_image = opt.progress_image and step % 5 == 0 - - if (wants_progress_image | wants_progress_latents) and step < opt.steps - 1: - image = self.model.sample_to_image(sample) if wants_progress_image \ - else self.model.sample_to_lowres_estimated_image(sample) - step_index_padded = str(step_index).rjust(len(str(opt.steps)), '0') - name = f'{prefix}.{opt.seed}.{step_index_padded}.png' - metadata = f'{opt.prompt} -S{opt.seed} [intermediate]' - path = step_writer.save_image_and_prompt_to_png(image, dream_prompt=metadata, name=name) - step_index += 1 - self.wfile.write(bytes(json.dumps( - {'event': 'step', 'step': step + 1, 'url': path} - ) + '\n',"utf-8")) - - try: - if opt.init_img is None: - # Run txt2img - self.model.prompt2image(**vars(opt), step_callback=image_progress, image_callback=image_done) - else: - # Decode initimg as base64 to temp file - with open("./img2img-tmp.png", "wb") as f: - initimg = opt.init_img.split(",")[1] # Ignore mime type - f.write(base64.b64decode(initimg)) - opt1 = argparse.Namespace(**vars(opt)) - opt1.init_img = "./img2img-tmp.png" - - try: - # Run img2img - self.model.prompt2image(**vars(opt1), step_callback=image_progress, image_callback=image_done) - finally: - # Remove the temp file - os.remove("./img2img-tmp.png") - except CanceledException: - print(f"Canceled.") - return - except Exception as e: - print("Error happened") - print(e) - self.wfile.write(bytes(json.dumps( - {'event': 'error', - 'message': str(e), - 'type': e.__class__.__name__} - ) + '\n',"utf-8")) - raise e - - -class ThreadingDreamServer(ThreadingHTTPServer): - def __init__(self, server_address): - super(ThreadingDreamServer, self).__init__(server_address, DreamServer) diff --git a/ldm/invoke/server_legacy.py b/ldm/invoke/server_legacy.py deleted file mode 100644 index 7497d64519..0000000000 --- a/ldm/invoke/server_legacy.py +++ /dev/null @@ -1,246 +0,0 @@ -import argparse -import json -import base64 -import mimetypes -import os -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from ldm.invoke.pngwriter import PngWriter, PromptFormatter -from threading import Event - -def build_opt(post_data, seed, gfpgan_model_exists): - opt = argparse.Namespace() - setattr(opt, 'prompt', post_data['prompt']) - setattr(opt, 'init_img', post_data['initimg']) - setattr(opt, 'strength', float(post_data['strength'])) - setattr(opt, 'iterations', int(post_data['iterations'])) - setattr(opt, 'steps', int(post_data['steps'])) - setattr(opt, 'width', int(post_data['width'])) - setattr(opt, 'height', int(post_data['height'])) - setattr(opt, 'seamless', 'seamless' in post_data) - setattr(opt, 'fit', 'fit' in post_data) - setattr(opt, 'mask', 'mask' in post_data) - setattr(opt, 'invert_mask', 'invert_mask' in post_data) - setattr(opt, 'cfg_scale', float(post_data['cfg_scale'])) - setattr(opt, 'sampler_name', post_data['sampler_name']) - setattr(opt, 'gfpgan_strength', float(post_data['gfpgan_strength']) if gfpgan_model_exists else 0) - setattr(opt, 'upscale', [int(post_data['upscale_level']), float(post_data['upscale_strength'])] if post_data['upscale_level'] != '' else None) - setattr(opt, 'progress_images', 'progress_images' in post_data) - setattr(opt, 'seed', None if int(post_data['seed']) == -1 else int(post_data['seed'])) - setattr(opt, 'variation_amount', float(post_data['variation_amount']) if int(post_data['seed']) != -1 else 0) - setattr(opt, 'with_variations', []) - - broken = False - if int(post_data['seed']) != -1 and post_data['with_variations'] != '': - for part in post_data['with_variations'].split(','): - seed_and_weight = part.split(':') - if len(seed_and_weight) != 2: - print(f'could not parse with_variation part "{part}"') - broken = True - break - try: - seed = int(seed_and_weight[0]) - weight = float(seed_and_weight[1]) - except ValueError: - print(f'could not parse with_variation part "{part}"') - broken = True - break - opt.with_variations.append([seed, weight]) - - if broken: - raise CanceledException - - if len(opt.with_variations) == 0: - opt.with_variations = None - - return opt - -class CanceledException(Exception): - pass - -class DreamServer(BaseHTTPRequestHandler): - model = None - outdir = None - canceled = Event() - - def do_GET(self): - if self.path == "/": - self.send_response(200) - self.send_header("Content-type", "text/html") - self.end_headers() - with open("./static/dream_web/index.html", "rb") as content: - self.wfile.write(content.read()) - elif self.path == "/config.js": - # unfortunately this import can't be at the top level, since that would cause a circular import - from ldm.gfpgan.gfpgan_tools import gfpgan_model_exists - self.send_response(200) - self.send_header("Content-type", "application/javascript") - self.end_headers() - config = { - 'gfpgan_model_exists': gfpgan_model_exists - } - self.wfile.write(bytes("let config = " + json.dumps(config) + ";\n", "utf-8")) - elif self.path == "/run_log.json": - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - output = [] - - log_file = os.path.join(self.outdir, "dream_web_log.txt") - if os.path.exists(log_file): - with open(log_file, "r") as log: - for line in log: - url, config = line.split(": {", maxsplit=1) - config = json.loads("{" + config) - config["url"] = url.lstrip(".") - if os.path.exists(url): - output.append(config) - - self.wfile.write(bytes(json.dumps({"run_log": output}), "utf-8")) - elif self.path == "/cancel": - self.canceled.set() - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - self.wfile.write(bytes('{}', 'utf8')) - else: - path = "." + self.path - cwd = os.path.realpath(os.getcwd()) - is_in_cwd = os.path.commonprefix((os.path.realpath(path), cwd)) == cwd - if not (is_in_cwd and os.path.exists(path)): - self.send_response(404) - return - mime_type = mimetypes.guess_type(path)[0] - if mime_type is not None: - self.send_response(200) - self.send_header("Content-type", mime_type) - self.end_headers() - with open("." + self.path, "rb") as content: - self.wfile.write(content.read()) - else: - self.send_response(404) - - def do_POST(self): - self.send_response(200) - self.send_header("Content-type", "application/json") - self.end_headers() - - # unfortunately this import can't be at the top level, since that would cause a circular import - # TODO temporarily commented out, import fails for some reason - # from ldm.gfpgan.gfpgan_tools import gfpgan_model_exists - gfpgan_model_exists = False - - content_length = int(self.headers['Content-Length']) - post_data = json.loads(self.rfile.read(content_length)) - opt = build_opt(post_data, self.model.seed, gfpgan_model_exists) - - self.canceled.clear() - print(f">> Request to generate with prompt: {opt.prompt}") - # In order to handle upscaled images, the PngWriter needs to maintain state - # across images generated by each call to prompt2img(), so we define it in - # the outer scope of image_done() - config = post_data.copy() # Shallow copy - config['initimg'] = config.pop('initimg_name', '') - - images_generated = 0 # helps keep track of when upscaling is started - images_upscaled = 0 # helps keep track of when upscaling is completed - pngwriter = PngWriter(self.outdir) - - prefix = pngwriter.unique_prefix() - # if upscaling is requested, then this will be called twice, once when - # the images are first generated, and then again when after upscaling - # is complete. The upscaling replaces the original file, so the second - # entry should not be inserted into the image list. - def image_done(image, seed, upscaled=False, first_seed=-1, use_prefix=None): - print(f'First seed: {first_seed}') - name = f'{prefix}.{seed}.png' - iter_opt = argparse.Namespace(**vars(opt)) # copy - if opt.variation_amount > 0: - this_variation = [[seed, opt.variation_amount]] - if opt.with_variations is None: - iter_opt.with_variations = this_variation - else: - iter_opt.with_variations = opt.with_variations + this_variation - iter_opt.variation_amount = 0 - elif opt.with_variations is None: - iter_opt.seed = seed - normalized_prompt = PromptFormatter(self.model, iter_opt).normalize_prompt() - path = pngwriter.save_image_and_prompt_to_png(image, f'{normalized_prompt} -S{iter_opt.seed}', name) - - if int(config['seed']) == -1: - config['seed'] = seed - # Append post_data to log, but only once! - if not upscaled: - with open(os.path.join(self.outdir, "dream_web_log.txt"), "a") as log: - log.write(f"{path}: {json.dumps(config)}\n") - - self.wfile.write(bytes(json.dumps( - {'event': 'result', 'url': path, 'seed': seed, 'config': config} - ) + '\n',"utf-8")) - - # control state of the "postprocessing..." message - upscaling_requested = opt.upscale or opt.gfpgan_strength > 0 - nonlocal images_generated # NB: Is this bad python style? It is typical usage in a perl closure. - nonlocal images_upscaled # NB: Is this bad python style? It is typical usage in a perl closure. - if upscaled: - images_upscaled += 1 - else: - images_generated += 1 - if upscaling_requested: - action = None - if images_generated >= opt.iterations: - if images_upscaled < opt.iterations: - action = 'upscaling-started' - else: - action = 'upscaling-done' - if action: - x = images_upscaled + 1 - self.wfile.write(bytes(json.dumps( - {'event': action, 'processed_file_cnt': f'{x}/{opt.iterations}'} - ) + '\n',"utf-8")) - - step_writer = PngWriter(os.path.join(self.outdir, "intermediates")) - step_index = 1 - def image_progress(sample, step): - if self.canceled.is_set(): - self.wfile.write(bytes(json.dumps({'event':'canceled'}) + '\n', 'utf-8')) - raise CanceledException - path = None - # since rendering images is moderately expensive, only render every 5th image - # and don't bother with the last one, since it'll render anyway - nonlocal step_index - if opt.progress_images and step % 5 == 0 and step < opt.steps - 1: - image = self.model.sample_to_image(sample) - name = f'{prefix}.{opt.seed}.{step_index}.png' - metadata = f'{opt.prompt} -S{opt.seed} [intermediate]' - path = step_writer.save_image_and_prompt_to_png(image, metadata, name) - step_index += 1 - self.wfile.write(bytes(json.dumps( - {'event': 'step', 'step': step + 1, 'url': path} - ) + '\n',"utf-8")) - - try: - if opt.init_img is None: - # Run txt2img - self.model.prompt2image(**vars(opt), step_callback=image_progress, image_callback=image_done) - else: - # Decode initimg as base64 to temp file - with open("./img2img-tmp.png", "wb") as f: - initimg = opt.init_img.split(",")[1] # Ignore mime type - f.write(base64.b64decode(initimg)) - opt1 = argparse.Namespace(**vars(opt)) - opt1.init_img = "./img2img-tmp.png" - - try: - # Run img2img - self.model.prompt2image(**vars(opt1), step_callback=image_progress, image_callback=image_done) - finally: - # Remove the temp file - os.remove("./img2img-tmp.png") - except CanceledException: - print(f"Canceled.") - return - - -class ThreadingDreamServer(ThreadingHTTPServer): - def __init__(self, server_address): - super(ThreadingDreamServer, self).__init__(server_address, DreamServer) diff --git a/ldm/lr_scheduler.py b/ldm/lr_scheduler.py deleted file mode 100644 index 79c1d1978e..0000000000 --- a/ldm/lr_scheduler.py +++ /dev/null @@ -1,143 +0,0 @@ -import numpy as np - - -class LambdaWarmUpCosineScheduler: - """ - note: use with a base_lr of 1.0 - """ - - def __init__( - self, - warm_up_steps, - lr_min, - lr_max, - lr_start, - max_decay_steps, - verbosity_interval=0, - ): - self.lr_warm_up_steps = warm_up_steps - self.lr_start = lr_start - self.lr_min = lr_min - self.lr_max = lr_max - self.lr_max_decay_steps = max_decay_steps - self.last_lr = 0.0 - self.verbosity_interval = verbosity_interval - - def schedule(self, n, **kwargs): - if self.verbosity_interval > 0: - if n % self.verbosity_interval == 0: - print( - f'current step: {n}, recent lr-multiplier: {self.last_lr}' - ) - if n < self.lr_warm_up_steps: - lr = ( - self.lr_max - self.lr_start - ) / self.lr_warm_up_steps * n + self.lr_start - self.last_lr = lr - return lr - else: - t = (n - self.lr_warm_up_steps) / ( - self.lr_max_decay_steps - self.lr_warm_up_steps - ) - t = min(t, 1.0) - lr = self.lr_min + 0.5 * (self.lr_max - self.lr_min) * ( - 1 + np.cos(t * np.pi) - ) - self.last_lr = lr - return lr - - def __call__(self, n, **kwargs): - return self.schedule(n, **kwargs) - - -class LambdaWarmUpCosineScheduler2: - """ - supports repeated iterations, configurable via lists - note: use with a base_lr of 1.0. - """ - - def __init__( - self, - warm_up_steps, - f_min, - f_max, - f_start, - cycle_lengths, - verbosity_interval=0, - ): - assert ( - len(warm_up_steps) - == len(f_min) - == len(f_max) - == len(f_start) - == len(cycle_lengths) - ) - self.lr_warm_up_steps = warm_up_steps - self.f_start = f_start - self.f_min = f_min - self.f_max = f_max - self.cycle_lengths = cycle_lengths - self.cum_cycles = np.cumsum([0] + list(self.cycle_lengths)) - self.last_f = 0.0 - self.verbosity_interval = verbosity_interval - - def find_in_interval(self, n): - interval = 0 - for cl in self.cum_cycles[1:]: - if n <= cl: - return interval - interval += 1 - - def schedule(self, n, **kwargs): - cycle = self.find_in_interval(n) - n = n - self.cum_cycles[cycle] - if self.verbosity_interval > 0: - if n % self.verbosity_interval == 0: - print( - f'current step: {n}, recent lr-multiplier: {self.last_f}, ' - f'current cycle {cycle}' - ) - if n < self.lr_warm_up_steps[cycle]: - f = ( - self.f_max[cycle] - self.f_start[cycle] - ) / self.lr_warm_up_steps[cycle] * n + self.f_start[cycle] - self.last_f = f - return f - else: - t = (n - self.lr_warm_up_steps[cycle]) / ( - self.cycle_lengths[cycle] - self.lr_warm_up_steps[cycle] - ) - t = min(t, 1.0) - f = self.f_min[cycle] + 0.5 * ( - self.f_max[cycle] - self.f_min[cycle] - ) * (1 + np.cos(t * np.pi)) - self.last_f = f - return f - - def __call__(self, n, **kwargs): - return self.schedule(n, **kwargs) - - -class LambdaLinearScheduler(LambdaWarmUpCosineScheduler2): - def schedule(self, n, **kwargs): - cycle = self.find_in_interval(n) - n = n - self.cum_cycles[cycle] - if self.verbosity_interval > 0: - if n % self.verbosity_interval == 0: - print( - f'current step: {n}, recent lr-multiplier: {self.last_f}, ' - f'current cycle {cycle}' - ) - - if n < self.lr_warm_up_steps[cycle]: - f = ( - self.f_max[cycle] - self.f_start[cycle] - ) / self.lr_warm_up_steps[cycle] * n + self.f_start[cycle] - self.last_f = f - return f - else: - f = self.f_min[cycle] + (self.f_max[cycle] - self.f_min[cycle]) * ( - self.cycle_lengths[cycle] - n - ) / (self.cycle_lengths[cycle]) - self.last_f = f - return f diff --git a/ldm/models/__init__.py b/ldm/models/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ldm/simplet2i.py b/ldm/simplet2i.py deleted file mode 100644 index 548c44fa49..0000000000 --- a/ldm/simplet2i.py +++ /dev/null @@ -1,13 +0,0 @@ -''' -This module is provided for backward compatibility with the -original (hasty) API. - -Please use ldm.generate instead. -''' - -from ldm.generate import Generate - -class T2I(Generate): - def __init__(self,**kwargs): - print(f'>> The ldm.simplet2i module is deprecated. Use ldm.generate instead. It is a drop-in replacement.') - super().__init__(kwargs) diff --git a/pyproject.toml b/pyproject.toml index 3e219172cc..45fe8ef327 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,18 +104,17 @@ dependencies = [ [project.scripts] # legacy entrypoints; provided for backwards compatibility -"invoke.py" = "ldm.invoke.CLI:main" -"configure_invokeai.py" = "ldm.invoke.config.invokeai_configure:main" -"textual_inversion.py" = "ldm.invoke.training.textual_inversion:main" -"merge_embeddings.py" = "ldm.invoke.merge_diffusers:main" +"invoke.py" = "invokeai.frontend.CLI:command_line_interface" +"configure_invokeai.py" = "invokeai.frontend.config:invokeai_configure" +"textual_inversion.py" = "invokeai.frontend.training:textual_inversion" # modern entrypoints -"invokeai" = "ldm.invoke.CLI:main" -"invokeai-configure" = "ldm.invoke.config.invokeai_configure:main" -"invokeai-merge" = "ldm.invoke.merge_diffusers:main" # note name munging -"invokeai-ti" = "ldm.invoke.training.textual_inversion:main" -"invokeai-model-install" = "ldm.invoke.config.model_install:main" -"invokeai-update" = "ldm.invoke.config.invokeai_update:main" +"invokeai" = "invokeai.frontend.CLI:invokeai_command_line_interface" +"invokeai-configure" = "invokeai.frontend.config:invokeai_configure" +"invokeai-merge" = "invokeai.frontend.merge:invokeai_merge_diffusers" +"invokeai-ti" = "invokeai.frontend.training:invokeai_textual_inversion" +"invokeai-model-install" = "invokeai.frontend.config:invokeai_model_install" +"invokeai-update" = "invokeai.frontend.config:invokeai_update" [project.urls] "Homepage" = "https://invoke-ai.github.io/InvokeAI/" @@ -132,15 +131,16 @@ version = { attr = "invokeai.version.__version__" } "include" = [ "invokeai.assets.web*","invokeai.version*", "invokeai.generator*","invokeai.backend*", - "invokeai.frontend.dist*", "invokeai.configs*", - "ldm*", + "invokeai.frontend*", "invokeai.frontend.web.dist*", + "invokeai.configs*", + "invokeai.app*","ldm*", ] [tool.setuptools.package-data] "invokeai.assets.web" = ["**.png"] "invokeai.backend" = ["**.png"] "invokeai.configs" = ["*.example", "**/*.yaml", "*.txt"] -"invokeai.frontend.dist" = ["**"] +"invokeai.frontend.web.dist" = ["**"] [tool.pytest.ini_options] addopts = "-p pytest_cov --junitxml=junit/test-results.xml --cov-report=term:skip-covered --cov=ldm/invoke --cov=backend --cov-branch" diff --git a/tests/nodes/test_graph_execution_state.py b/tests/nodes/test_graph_execution_state.py index 980c262501..4c22507098 100644 --- a/tests/nodes/test_graph_execution_state.py +++ b/tests/nodes/test_graph_execution_state.py @@ -1,11 +1,11 @@ from .test_invoker import create_edge from .test_nodes import ImageTestInvocation, ListPassThroughInvocation, PromptTestInvocation, PromptCollectionTestInvocation -from ldm.invoke.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext -from ldm.invoke.app.services.processor import DefaultInvocationProcessor -from ldm.invoke.app.services.sqlite import SqliteItemStorage, sqlite_memory -from ldm.invoke.app.services.invocation_queue import MemoryInvocationQueue -from ldm.invoke.app.services.invocation_services import InvocationServices -from ldm.invoke.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation, GraphExecutionState +from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext +from invokeai.app.services.processor import DefaultInvocationProcessor +from invokeai.app.services.sqlite import SqliteItemStorage, sqlite_memory +from invokeai.app.services.invocation_queue import MemoryInvocationQueue +from invokeai.app.services.invocation_services import InvocationServices +from invokeai.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation, GraphExecutionState import pytest diff --git a/tests/nodes/test_invoker.py b/tests/nodes/test_invoker.py index 8ca2931841..6a7867bffe 100644 --- a/tests/nodes/test_invoker.py +++ b/tests/nodes/test_invoker.py @@ -1,11 +1,11 @@ from .test_nodes import ErrorInvocation, ImageTestInvocation, ListPassThroughInvocation, PromptTestInvocation, PromptCollectionTestInvocation, TestEventService, create_edge, wait_until -from ldm.invoke.app.services.processor import DefaultInvocationProcessor -from ldm.invoke.app.services.sqlite import SqliteItemStorage, sqlite_memory -from ldm.invoke.app.services.invocation_queue import MemoryInvocationQueue -from ldm.invoke.app.services.invoker import Invoker -from ldm.invoke.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext -from ldm.invoke.app.services.invocation_services import InvocationServices -from ldm.invoke.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation, GraphExecutionState +from invokeai.app.services.processor import DefaultInvocationProcessor +from invokeai.app.services.sqlite import SqliteItemStorage, sqlite_memory +from invokeai.app.services.invocation_queue import MemoryInvocationQueue +from invokeai.app.services.invoker import Invoker +from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext +from invokeai.app.services.invocation_services import InvocationServices +from invokeai.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation, GraphExecutionState import pytest diff --git a/tests/nodes/test_node_graph.py b/tests/nodes/test_node_graph.py index 1b5b341192..d432234aec 100644 --- a/tests/nodes/test_node_graph.py +++ b/tests/nodes/test_node_graph.py @@ -1,9 +1,9 @@ -from ldm.invoke.app.invocations.image import * +from invokeai.app.invocations.image import * from .test_nodes import ListPassThroughInvocation, PromptTestInvocation -from ldm.invoke.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation -from ldm.invoke.app.invocations.generate import ImageToImageInvocation, TextToImageInvocation -from ldm.invoke.app.invocations.upscale import UpscaleInvocation +from invokeai.app.services.graph import Graph, GraphInvocation, InvalidEdgeError, NodeAlreadyInGraphError, NodeNotFoundError, are_connections_compatible, EdgeConnection, CollectInvocation, IterateInvocation +from invokeai.app.invocations.generate import ImageToImageInvocation, TextToImageInvocation +from invokeai.app.invocations.upscale import UpscaleInvocation import pytest diff --git a/tests/nodes/test_nodes.py b/tests/nodes/test_nodes.py index e07dcb8594..c3427ac03b 100644 --- a/tests/nodes/test_nodes.py +++ b/tests/nodes/test_nodes.py @@ -1,7 +1,7 @@ from typing import Any, Callable, Literal -from ldm.invoke.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext -from ldm.invoke.app.invocations.image import ImageField -from ldm.invoke.app.services.invocation_services import InvocationServices +from invokeai.app.invocations.baseinvocation import BaseInvocation, BaseInvocationOutput, InvocationContext +from invokeai.app.invocations.image import ImageField +from invokeai.app.services.invocation_services import InvocationServices from pydantic import Field import pytest @@ -63,8 +63,8 @@ class PromptCollectionTestInvocation(BaseInvocation): return PromptCollectionTestInvocationOutput(collection=self.collection.copy()) -from ldm.invoke.app.services.events import EventServiceBase -from ldm.invoke.app.services.graph import EdgeConnection +from invokeai.app.services.events import EventServiceBase +from invokeai.app.services.graph import EdgeConnection def create_edge(from_id: str, from_field: str, to_id: str, to_field: str) -> tuple[EdgeConnection, EdgeConnection]: return (EdgeConnection(node_id = from_id, field = from_field), EdgeConnection(node_id = to_id, field = to_field)) @@ -95,4 +95,4 @@ def wait_until(condition: Callable[[], bool], timeout: int = 10, interval: float if condition(): return time.sleep(interval) - raise TimeoutError("Condition not met") \ No newline at end of file + raise TimeoutError("Condition not met") diff --git a/tests/nodes/test_sqlite.py b/tests/nodes/test_sqlite.py index e499bbce12..a803af5635 100644 --- a/tests/nodes/test_sqlite.py +++ b/tests/nodes/test_sqlite.py @@ -1,4 +1,4 @@ -from ldm.invoke.app.services.sqlite import SqliteItemStorage, sqlite_memory +from invokeai.app.services.sqlite import SqliteItemStorage, sqlite_memory from pydantic import BaseModel, Field diff --git a/tests/test_path.py b/tests/test_path.py index e99420d8ee..6076c6554f 100644 --- a/tests/test_path.py +++ b/tests/test_path.py @@ -7,11 +7,10 @@ import pathlib from os import path as osp from PIL import Image -import invokeai.frontend.dist as frontend +import invokeai.frontend.web.dist as frontend import invokeai.configs as configs import invokeai.assets.web as assets_web - class ConfigsTestCase(unittest.TestCase): """Test the configuration related imports and objects""" @@ -32,7 +31,7 @@ class ConfigsTestCase(unittest.TestCase): def test_frontend_path(self): """Test that the frontend path is correct""" FRONTEND_PATH = str(self.get_frontend_path()) - assert FRONTEND_PATH.endswith(osp.join("invokeai", "frontend", "dist")) + assert FRONTEND_PATH.endswith(osp.join("invokeai", "frontend", "web", "dist")) def test_caution_img(self): """Verify the caution image"""