diff --git a/Makefile b/Makefile
index e858a89e2b3..8621d16d48e 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,7 @@ help:
@echo "installer-zip Build the installer .zip file for the current version"
@echo "tag-release Tag the GitHub repository with the current version (use at release time only!)"
@echo "openapi Generate the OpenAPI schema for the app, outputting to stdout"
+ @echo "docs Serve the mkdocs site with live reload"
# Runs ruff, fixing any safely-fixable errors and formatting
ruff:
@@ -74,3 +75,8 @@ tag-release:
# Generate the OpenAPI Schema for the app
openapi:
python scripts/generate_openapi_schema.py
+
+# Serve the mkdocs site w/ live reload
+.PHONY: docs
+docs:
+ mkdocs serve
\ No newline at end of file
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
deleted file mode 100644
index 24bd5ad7dd2..00000000000
--- a/docs/CHANGELOG.md
+++ /dev/null
@@ -1,815 +0,0 @@
----
-title: Changelog
----
-
-# :octicons-log-16: **Changelog**
-
-## v2.3.5 (22 May 2023)
-
-This release (along with the post1 and post2 follow-on releases) expands support for additional LoRA and LyCORIS models, upgrades diffusers versions, and fixes a few bugs.
-
-### LoRA and LyCORIS Support Improvement
-
- A number of LoRA/LyCORIS fine-tune files (those which alter the text encoder as well as the unet model) were not having the desired effect in InvokeAI. This bug has now been fixed. Full documentation of LoRA support is available at InvokeAI LoRA Support.
- Previously, InvokeAI did not distinguish between LoRA/LyCORIS models based on Stable Diffusion v1.5 vs those based on v2.0 and 2.1, leading to a crash when an incompatible model was loaded. This has now been fixed. In addition, the web pulldown menus for LoRA and Textual Inversion selection have been enhanced to show only those files that are compatible with the currently-selected Stable Diffusion model.
- Support for the newer LoKR LyCORIS files has been added.
-
-### Library Updates and Speed/Reproducibility Advancements
-The major enhancement in this version is that NVIDIA users no longer need to decide between speed and reproducibility. Previously, if you activated the Xformers library, you would see improvements in speed and memory usage, but multiple images generated with the same seed and other parameters would be slightly different from each other. This is no longer the case. Relative to 2.3.5 you will see improved performance when running without Xformers, and even better performance when Xformers is activated. In both cases, images generated with the same settings will be identical.
-
-Here are the new library versions:
-Library Version
-Torch 2.0.0
-Diffusers 0.16.1
-Xformers 0.0.19
-Compel 1.1.5
-Other Improvements
-
-### Performance Improvements
-
- When a model is loaded for the first time, InvokeAI calculates its checksum for incorporation into the PNG metadata. This process could take up to a minute on network-mounted disks and WSL mounts. This release noticeably speeds up the process.
-
-### Bug Fixes
-
- The "import models from directory" and "import from URL" functionality in the console-based model installer has now been fixed.
- When running the WebUI, we have reduced the number of times that InvokeAI reaches out to HuggingFace to fetch the list of embeddable Textual Inversion models. We have also caught and fixed a problem with the updater not correctly detecting when another instance of the updater is running
-
-
-## v2.3.4 (7 April 2023)
-
-What's New in 2.3.4
-
-This features release adds support for LoRA (Low-Rank Adaptation) and LyCORIS (Lora beYond Conventional) models, as well as some minor bug fixes.
-### LoRA and LyCORIS Support
-
-LoRA files contain fine-tuning weights that enable particular styles, subjects or concepts to be applied to generated images. LyCORIS files are an extended variant of LoRA. InvokeAI supports the most common LoRA/LyCORIS format, which ends in the suffix .safetensors. You will find numerous LoRA and LyCORIS models for download at Civitai, and a small but growing number at Hugging Face. Full documentation of LoRA support is available at InvokeAI LoRA Support.( Pre-release note: this page will only be available after release)
-
-To use LoRA/LyCORIS models in InvokeAI:
-
- Download the .safetensors files of your choice and place in /path/to/invokeai/loras. This directory was not present in earlier version of InvokeAI but will be created for you the first time you run the command-line or web client. You can also create the directory manually.
-
- Add withLora(lora-file,weight) to your prompts. The weight is optional and will default to 1.0. A few examples, assuming that a LoRA file named loras/sushi.safetensors is present:
-
-family sitting at dinner table eating sushi withLora(sushi,0.9)
-family sitting at dinner table eating sushi withLora(sushi, 0.75)
-family sitting at dinner table eating sushi withLora(sushi)
-
-Multiple withLora() prompt fragments are allowed. The weight can be arbitrarily large, but the useful range is roughly 0.5 to 1.0. Higher weights make the LoRA's influence stronger. Negative weights are also allowed, which can lead to some interesting effects.
-
- Generate as you usually would! If you find that the image is too "crisp" try reducing the overall CFG value or reducing individual LoRA weights. As is the case with all fine-tunes, you'll get the best results when running the LoRA on top of the model similar to, or identical with, the one that was used during the LoRA's training. Don't try to load a SD 1.x-trained LoRA into a SD 2.x model, and vice versa. This will trigger a non-fatal error message and generation will not proceed.
-
- You can change the location of the loras directory by passing the --lora_directory option to `invokeai.
-
-### New WebUI LoRA and Textual Inversion Buttons
-
-This version adds two new web interface buttons for inserting LoRA and Textual Inversion triggers into the prompt as shown in the screenshot below.
-
-Clicking on one or the other of the buttons will bring up a menu of available LoRA/LyCORIS or Textual Inversion trigger terms. Select a menu item to insert the properly-formatted withLora() or prompt fragment into the positive prompt. The number in parentheses indicates the number of trigger terms currently in the prompt. You may click the button again and deselect the LoRA or trigger to remove it from the prompt, or simply edit the prompt directly.
-
-Currently terms are inserted into the positive prompt textbox only. However, some textual inversion embeddings are designed to be used with negative prompts. To move a textual inversion trigger into the negative prompt, simply cut and paste it.
-
-By default the Textual Inversion menu only shows locally installed models found at startup time in /path/to/invokeai/embeddings. However, InvokeAI has the ability to dynamically download and install additional Textual Inversion embeddings from the HuggingFace Concepts Library. You may choose to display the most popular of these (with five or more likes) in the Textual Inversion menu by going to Settings and turning on "Show Textual Inversions from HF Concepts Library." When this option is activated, the locally-installed TI embeddings will be shown first, followed by uninstalled terms from Hugging Face. See The Hugging Face Concepts Library and Importing Textual Inversion files for more information.
-### Minor features and fixes
-
-This release changes model switching behavior so that the command-line and Web UIs save the last model used and restore it the next time they are launched. It also improves the behavior of the installer so that the pip utility is kept up to date.
-
-### Known Bugs in 2.3.4
-
-These are known bugs in the release.
-
- The Ancestral DPMSolverMultistepScheduler (k_dpmpp_2a) sampler is not yet implemented for diffusers models and will disappear from the WebUI Sampler menu when a diffusers model is selected.
- Windows Defender will sometimes raise Trojan or backdoor alerts for the codeformer.pth face restoration model, as well as the CIDAS/clipseg and runwayml/stable-diffusion-v1.5 models. These are false positives and can be safely ignored. InvokeAI performs a malware scan on all models as they are loaded. For additional security, you should use safetensors models whenever they are available.
-
-
-## v2.3.3 (28 March 2023)
-
-This is a bugfix and minor feature release.
-### Bugfixes
-
-Since version 2.3.2 the following bugs have been fixed:
-Bugs
-
- When using legacy checkpoints with an external VAE, the VAE file is now scanned for malware prior to loading. Previously only the main model weights file was scanned.
- Textual inversion will select an appropriate batchsize based on whether xformers is active, and will default to xformers enabled if the library is detected.
- The batch script log file names have been fixed to be compatible with Windows.
- Occasional corruption of the .next_prefix file (which stores the next output file name in sequence) on Windows systems is now detected and corrected.
- Support loading of legacy config files that have no personalization (textual inversion) section.
- An infinite loop when opening the developer's console from within the invoke.sh script has been corrected.
- Documentation fixes, including a recipe for detecting and fixing problems with the AMD GPU ROCm driver.
-
-Enhancements
-
- It is now possible to load and run several community-contributed SD-2.0 based models, including the often-requested "Illuminati" model.
- The "NegativePrompts" embedding file, and others like it, can now be loaded by placing it in the InvokeAI embeddings directory.
- If no --model is specified at launch time, InvokeAI will remember the last model used and restore it the next time it is launched.
- On Linux systems, the invoke.sh launcher now uses a prettier console-based interface. To take advantage of it, install the dialog package using your package manager (e.g. sudo apt install dialog).
- When loading legacy models (safetensors/ckpt) you can specify a custom config file and/or a VAE by placing like-named files in the same directory as the model following this example:
-
-my-favorite-model.ckpt
-my-favorite-model.yaml
-my-favorite-model.vae.pt # or my-favorite-model.vae.safetensors
-
-### Known Bugs in 2.3.3
-
-These are known bugs in the release.
-
- The Ancestral DPMSolverMultistepScheduler (k_dpmpp_2a) sampler is not yet implemented for diffusers models and will disappear from the WebUI Sampler menu when a diffusers model is selected.
- Windows Defender will sometimes raise Trojan or backdoor alerts for the codeformer.pth face restoration model, as well as the CIDAS/clipseg and runwayml/stable-diffusion-v1.5 models. These are false positives and can be safely ignored. InvokeAI performs a malware scan on all models as they are loaded. For additional security, you should use safetensors models whenever they are available.
-
-
-## v2.3.2 (11 March 2023)
-This is a bugfix and minor feature release.
-
-### Bugfixes
-
-Since version 2.3.1 the following bugs have been fixed:
-
- Black images appearing for potential NSFW images when generating with legacy checkpoint models and both --no-nsfw_checker and --ckpt_convert turned on.
- Black images appearing when generating from models fine-tuned on Stable-Diffusion-2-1-base. When importing V2-derived models, you may be asked to select whether the model was derived from a "base" model (512 pixels) or the 768-pixel SD-2.1 model.
- The "Use All" button was not restoring the Hi-Res Fix setting on the WebUI
- When using the model installer console app, models failed to import correctly when importing from directories with spaces in their names. A similar issue with the output directory was also fixed.
- Crashes that occurred during model merging.
- Restore previous naming of Stable Diffusion base and 768 models.
- Upgraded to latest versions of diffusers, transformers, safetensors and accelerate libraries upstream. We hope that this will fix the assertion NDArray > 2**32 issue that MacOS users have had when generating images larger than 768x768 pixels. Please report back.
-
-As part of the upgrade to diffusers, the location of the diffusers-based models has changed from models/diffusers to models/hub. When you launch InvokeAI for the first time, it will prompt you to OK a one-time move. This should be quick and harmless, but if you have modified your models/diffusers directory in some way, for example using symlinks, you may wish to cancel the migration and make appropriate adjustments.
-New "Invokeai-batch" script
-
-### Invoke AI Batch
-2.3.2 introduces a new command-line only script called invokeai-batch that can be used to generate hundreds of images from prompts and settings that vary systematically. This can be used to try the same prompt across multiple combinations of models, steps, CFG settings and so forth. It also allows you to template prompts and generate a combinatorial list like:
-
-a shack in the mountains, photograph
-a shack in the mountains, watercolor
-a shack in the mountains, oil painting
-a chalet in the mountains, photograph
-a chalet in the mountains, watercolor
-a chalet in the mountains, oil painting
-a shack in the desert, photograph
-...
-
-If you have a system with multiple GPUs, or a single GPU with lots of VRAM, you can parallelize generation across the combinatorial set, reducing wait times and using your system's resources efficiently (make sure you have good GPU cooling).
-
-To try invokeai-batch out. Launch the "developer's console" using the invoke launcher script, or activate the invokeai virtual environment manually. From the console, give the command invokeai-batch --help in order to learn how the script works and create your first template file for dynamic prompt generation.
-
-
-### Known Bugs in 2.3.2
-
-These are known bugs in the release.
-
- The Ancestral DPMSolverMultistepScheduler (k_dpmpp_2a) sampler is not yet implemented for diffusers models and will disappear from the WebUI Sampler menu when a diffusers model is selected.
- Windows Defender will sometimes raise a Trojan alert for the codeformer.pth face restoration model. As far as we have been able to determine, this is a false positive and can be safely whitelisted.
-
-
-## v2.3.1 (22 February 2023)
-This is primarily a bugfix release, but it does provide several new features that will improve the user experience.
-
-### Enhanced support for model management
-
-InvokeAI now makes it convenient to add, remove and modify models. You can individually import models that are stored on your local system, scan an entire folder and its subfolders for models and import them automatically, and even directly import models from the internet by providing their download URLs. You also have the option of designating a local folder to scan for new models each time InvokeAI is restarted.
-
-There are three ways of accessing the model management features:
-
- From the WebUI, click on the cube to the right of the model selection menu. This will bring up a form that allows you to import models individually from your local disk or scan a directory for models to import.
-
- Using the Model Installer App
-
-Choose option (5) download and install models from the invoke launcher script to start a new console-based application for model management. You can use this to select from a curated set of starter models, or import checkpoint, safetensors, and diffusers models from a local disk or the internet. The example below shows importing two checkpoint URLs from popular SD sites and a HuggingFace diffusers model using its Repository ID. It also shows how to designate a folder to be scanned at startup time for new models to import.
-
-Command-line users can start this app using the command invokeai-model-install.
-
- Using the Command Line Client (CLI)
-
-The !install_model and !convert_model commands have been enhanced to allow entering of URLs and local directories to scan and import. The first command installs .ckpt and .safetensors files as-is. The second one converts them into the faster diffusers format before installation.
-
-Internally InvokeAI is able to probe the contents of a .ckpt or .safetensors file to distinguish among v1.x, v2.x and inpainting models. This means that you do not need to include "inpaint" in your model names to use an inpainting model. Note that Stable Diffusion v2.x models will be autoconverted into a diffusers model the first time you use it.
-
-Please see INSTALLING MODELS for more information on model management.
-
-### An Improved Installer Experience
-
-The installer now launches a console-based UI for setting and changing commonly-used startup options:
-
-After selecting the desired options, the installer installs several support models needed by InvokeAI's face reconstruction and upscaling features and then launches the interface for selecting and installing models shown earlier. At any time, you can edit the startup options by launching invoke.sh/invoke.bat and entering option (6) change InvokeAI startup options
-
-Command-line users can launch the new configure app using invokeai-configure.
-
-This release also comes with a renewed updater. To do an update without going through a whole reinstallation, launch invoke.sh or invoke.bat and choose option (9) update InvokeAI . This will bring you to a screen that prompts you to update to the latest released version, to the most current development version, or any released or unreleased version you choose by selecting the tag or branch of the desired version.
-
-Command-line users can run this interface by typing invokeai-configure
-
-### Image Symmetry Options
-
-There are now features to generate horizontal and vertical symmetry during generation. The way these work is to wait until a selected step in the generation process and then to turn on a mirror image effect. In addition to generating some cool images, you can also use this to make side-by-side comparisons of how an image will look with more or fewer steps. Access this option from the WebUI by selecting Symmetry from the image generation settings, or within the CLI by using the options --h_symmetry_time_pct and --v_symmetry_time_pct (these can be abbreviated to --h_sym and --v_sym like all other options).
-
-### A New Unified Canvas Look
-
-This release introduces a beta version of the WebUI Unified Canvas. To try it out, open up the settings dialogue in the WebUI (gear icon) and select Use Canvas Beta Layout:
-
-Refresh the screen and go to to Unified Canvas (left side of screen, third icon from the top). The new layout is designed to provide more space to work in and to keep the image controls close to the image itself:
-
-Model conversion and merging within the WebUI
-
-The WebUI now has an intuitive interface for model merging, as well as for permanent conversion of models from legacy .ckpt/.safetensors formats into diffusers format. These options are also available directly from the invoke.sh/invoke.bat scripts.
-An easier way to contribute translations to the WebUI
-
-We have migrated our translation efforts to Weblate, a FOSS translation product. Maintaining the growing project's translations is now far simpler for the maintainers and community. Please review our brief translation guide for more information on how to contribute.
-Numerous internal bugfixes and performance issues
-
-### Bug Fixes
-This releases quashes multiple bugs that were reported in 2.3.0. Major internal changes include upgrading to diffusers 0.13.0, and using the compel library for prompt parsing. See Detailed Change Log for a detailed list of bugs caught and squished.
-Summary of InvokeAI command line scripts (all accessible via the launcher menu)
-Command Description
-invokeai Command line interface
-invokeai --web Web interface
-invokeai-model-install Model installer with console forms-based front end
-invokeai-ti --gui Textual inversion, with a console forms-based front end
-invokeai-merge --gui Model merging, with a console forms-based front end
-invokeai-configure Startup configuration; can also be used to reinstall support models
-invokeai-update InvokeAI software updater
-
-### Known Bugs in 2.3.1
-
-These are known bugs in the release.
- MacOS users generating 768x768 pixel images or greater using diffusers models may experience a hard crash with assertion NDArray > 2**32 This appears to be an issu...
-
-
-
-## v2.3.0 (15 January 2023)
-
-**Transition to diffusers
-
-Version 2.3 provides support for both the traditional `.ckpt` weight
-checkpoint files as well as the HuggingFace `diffusers` format. This
-introduces several changes you should know about.
-
-1. The models.yaml format has been updated. There are now two
- different type of configuration stanza. The traditional ckpt
- one will look like this, with a `format` of `ckpt` and a
- `weights` field that points to the absolute or ROOTDIR-relative
- location of the ckpt file.
-
- ```
- inpainting-1.5:
- description: RunwayML SD 1.5 model optimized for inpainting (4.27 GB)
- repo_id: runwayml/stable-diffusion-inpainting
- format: ckpt
- width: 512
- height: 512
- weights: models/ldm/stable-diffusion-v1/sd-v1-5-inpainting.ckpt
- config: configs/stable-diffusion/v1-inpainting-inference.yaml
- vae: models/ldm/stable-diffusion-v1/vae-ft-mse-840000-ema-pruned.ckpt
- ```
-
- A configuration stanza for a diffusers model hosted at HuggingFace will look like this,
- with a `format` of `diffusers` and a `repo_id` that points to the
- repository ID of the model on HuggingFace:
-
- ```
- stable-diffusion-2.1:
- description: Stable Diffusion version 2.1 diffusers model (5.21 GB)
- repo_id: stabilityai/stable-diffusion-2-1
- format: diffusers
- ```
-
- A configuration stanza for a diffuers model stored locally should
- look like this, with a `format` of `diffusers`, but a `path` field
- that points at the directory that contains `model_index.json`:
-
- ```
- waifu-diffusion:
- description: Latest waifu diffusion 1.4
- format: diffusers
- path: models/diffusers/hakurei-haifu-diffusion-1.4
- ```
-
-2. In order of precedence, InvokeAI will now use HF_HOME, then
- XDG_CACHE_HOME, then finally default to `ROOTDIR/models` to
- store HuggingFace diffusers models.
-
- Consequently, the format of the models directory has changed to
- mimic the HuggingFace cache directory. When HF_HOME and XDG_HOME
- are not set, diffusers models are now automatically downloaded
- and retrieved from the directory `ROOTDIR/models/diffusers`,
- while other models are stored in the directory
- `ROOTDIR/models/hub`. This organization is the same as that used
- by HuggingFace for its cache management.
-
- This allows you to share diffusers and ckpt model files easily with
- other machine learning applications that use the HuggingFace
- libraries. To do this, set the environment variable HF_HOME
- before starting up InvokeAI to tell it what directory to
- cache models in. To tell InvokeAI to use the standard HuggingFace
- cache directory, you would set HF_HOME like this (Linux/Mac):
-
- `export HF_HOME=~/.cache/huggingface`
-
- Both HuggingFace and InvokeAI will fall back to the XDG_CACHE_HOME
- environment variable if HF_HOME is not set; this path
- takes precedence over `ROOTDIR/models` to allow for the same sharing
- with other machine learning applications that use HuggingFace
- libraries.
-
-3. If you upgrade to InvokeAI 2.3.* from an earlier version, there
- will be a one-time migration from the old models directory format
- to the new one. You will see a message about this the first time
- you start `invoke.py`.
-
-4. Both the front end back ends of the model manager have been
- rewritten to accommodate diffusers. You can import models using
- their local file path, using their URLs, or their HuggingFace
- repo_ids. On the command line, all these syntaxes work:
-
- ```
- !import_model stabilityai/stable-diffusion-2-1-base
- !import_model /opt/sd-models/sd-1.4.ckpt
- !import_model https://huggingface.co/Fictiverse/Stable_Diffusion_PaperCut_Model/blob/main/PaperCut_v1.ckpt
- ```
-
-**KNOWN BUGS (15 January 2023)
-
-1. On CUDA systems, the 768 pixel stable-diffusion-2.0 and
- stable-diffusion-2.1 models can only be run as `diffusers` models
- when the `xformer` library is installed and configured. Without
- `xformers`, InvokeAI returns black images.
-
-2. Inpainting and outpainting have regressed in quality.
-
-Both these issues are being actively worked on.
-
-## v2.2.4 (11 December 2022)
-
-**the `invokeai` directory**
-
-Previously there were two directories to worry about, the directory that
-contained the InvokeAI source code and the launcher scripts, and the `invokeai`
-directory that contained the models files, embeddings, configuration and
-outputs. With the 2.2.4 release, this dual system is done away with, and
-everything, including the `invoke.bat` and `invoke.sh` launcher scripts, now
-live in a directory named `invokeai`. By default this directory is located in
-your home directory (e.g. `\Users\yourname` on Windows), but you can select
-where it goes at install time.
-
-After installation, you can delete the install directory (the one that the zip
-file creates when it unpacks). Do **not** delete or move the `invokeai`
-directory!
-
-**Initialization file `invokeai/invokeai.init`**
-
-You can place frequently-used startup options in this file, such as the default
-number of steps or your preferred sampler. To keep everything in one place, this
-file has now been moved into the `invokeai` directory and is named
-`invokeai.init`.
-
-**To update from Version 2.2.3**
-
-The easiest route is to download and unpack one of the 2.2.4 installer files.
-When it asks you for the location of the `invokeai` runtime directory, respond
-with the path to the directory that contains your 2.2.3 `invokeai`. That is, if
-`invokeai` lives at `C:\Users\fred\invokeai`, then answer with `C:\Users\fred`
-and answer "Y" when asked if you want to reuse the directory.
-
-The `update.sh` (`update.bat`) script that came with the 2.2.3 source installer
-does not know about the new directory layout and won't be fully functional.
-
-**To update to 2.2.5 (and beyond) there's now an update path**
-
-As they become available, you can update to more recent versions of InvokeAI
-using an `update.sh` (`update.bat`) script located in the `invokeai` directory.
-Running it without any arguments will install the most recent version of
-InvokeAI. Alternatively, you can get set releases by running the `update.sh`
-script with an argument in the command shell. This syntax accepts the path to
-the desired release's zip file, which you can find by clicking on the green
-"Code" button on this repository's home page.
-
-**Other 2.2.4 Improvements**
-
-- Fix InvokeAI GUI initialization by @addianto in #1687
-- fix link in documentation by @lstein in #1728
-- Fix broken link by @ShawnZhong in #1736
-- Remove reference to binary installer by @lstein in #1731
-- documentation fixes for 2.2.3 by @lstein in #1740
-- Modify installer links to point closer to the source installer by @ebr in
- #1745
-- add documentation warning about 1650/60 cards by @lstein in #1753
-- Fix Linux source URL in installation docs by @andybearman in #1756
-- Make install instructions discoverable in readme by @damian0815 in #1752
-- typo fix by @ofirkris in #1755
-- Non-interactive model download (support HUGGINGFACE_TOKEN) by @ebr in #1578
-- fix(srcinstall): shell installer - cp scripts instead of linking by @tildebyte
- in #1765
-- stability and usage improvements to binary & source installers by @lstein in
- #1760
-- fix off-by-one bug in cross-attention-control by @damian0815 in #1774
-- Eventually update APP_VERSION to 2.2.3 by @spezialspezial in #1768
-- invoke script cds to its location before running by @lstein in #1805
-- Make PaperCut and VoxelArt models load again by @lstein in #1730
-- Fix --embedding_directory / --embedding_path not working by @blessedcoolant in
- #1817
-- Clean up readme by @hipsterusername in #1820
-- Optimized Docker build with support for external working directory by @ebr in
- #1544
-- disable pushing the cloud container by @mauwii in #1831
-- Fix docker push github action and expand with additional metadata by @ebr in
- #1837
-- Fix Broken Link To Notebook by @VedantMadane in #1821
-- Account for flat models by @spezialspezial in #1766
-- Update invoke.bat.in isolate environment variables by @lynnewu in #1833
-- Arch Linux Specific PatchMatch Instructions & fixing conda install on linux by
- @SammCheese in #1848
-- Make force free GPU memory work in img2img by @addianto in #1844
-- New installer by @lstein
-
-## v2.2.3 (2 December 2022)
-
-!!! Note
-
- This point release removes references to the binary installer from the
- installation guide. The binary installer is not stable at the current
- time. First time users are encouraged to use the "source" installer as
- described in [Installing InvokeAI with the Source Installer](installation/deprecated_documentation/INSTALL_SOURCE.md)
-
-With InvokeAI 2.2, this project now provides enthusiasts and professionals a
-robust workflow solution for creating AI-generated and human facilitated
-compositions. Additional enhancements have been made as well, improving safety,
-ease of use, and installation.
-
-Optimized for efficiency, InvokeAI needs only ~3.5GB of VRAM to generate a
-512x768 image (and less for smaller images), and is compatible with
-Windows/Linux/Mac (M1 & M2).
-
-You can see the [release video](https://youtu.be/hIYBfDtKaus) here, which
-introduces the main WebUI enhancement for version 2.2 -
-[The Unified Canvas](features/UNIFIED_CANVAS.md). This new workflow is the
-biggest enhancement added to the WebUI to date, and unlocks a stunning amount of
-potential for users to create and iterate on their creations. The following
-sections describe what's new for InvokeAI.
-
-## v2.2.2 (30 November 2022)
-
-!!! note
-
- The binary installer is not ready for prime time. First time users are recommended to install via the "source" installer accessible through the links at the bottom of this page.****
-
-With InvokeAI 2.2, this project now provides enthusiasts and professionals a
-robust workflow solution for creating AI-generated and human facilitated
-compositions. Additional enhancements have been made as well, improving safety,
-ease of use, and installation.
-
-Optimized for efficiency, InvokeAI needs only ~3.5GB of VRAM to generate a
-512x768 image (and less for smaller images), and is compatible with
-Windows/Linux/Mac (M1 & M2).
-
-You can see the [release video](https://youtu.be/hIYBfDtKaus) here, which
-introduces the main WebUI enhancement for version 2.2 -
-[The Unified Canvas](https://invoke-ai.github.io/InvokeAI/features/UNIFIED_CANVAS/).
-This new workflow is the biggest enhancement added to the WebUI to date, and
-unlocks a stunning amount of potential for users to create and iterate on their
-creations. The following sections describe what's new for InvokeAI.
-
-## v2.2.0 (2 December 2022)
-
-With InvokeAI 2.2, this project now provides enthusiasts and professionals a
-robust workflow solution for creating AI-generated and human facilitated
-compositions. Additional enhancements have been made as well, improving safety,
-ease of use, and installation.
-
-Optimized for efficiency, InvokeAI needs only ~3.5GB of VRAM to generate a
-512x768 image (and less for smaller images), and is compatible with
-Windows/Linux/Mac (M1 & M2).
-
-You can see the [release video](https://youtu.be/hIYBfDtKaus) here, which
-introduces the main WebUI enhancement for version 2.2 -
-[The Unified Canvas](features/UNIFIED_CANVAS.md). This new workflow is the
-biggest enhancement added to the WebUI to date, and unlocks a stunning amount of
-potential for users to create and iterate on their creations. The following
-sections describe what's new for InvokeAI.
-
-## v2.1.3 (13 November 2022)
-
-- A choice of installer scripts that automate installation and configuration.
- See
- [Installation](installation/INSTALLATION.md).
-- A streamlined manual installation process that works for both Conda and
- PIP-only installs. See
- [Manual Installation](installation/020_INSTALL_MANUAL.md).
-- The ability to save frequently-used startup options (model to load, steps,
- sampler, etc) in a `.invokeai` file. See
- [Client](deprecated/CLI.md)
-- Support for AMD GPU cards (non-CUDA) on Linux machines.
-- Multiple bugs and edge cases squashed.
-
-## v2.1.0 (2 November 2022)
-
-- update mac instructions to use invokeai for env name by @willwillems in #1030
-- Update .gitignore by @blessedcoolant in #1040
-- reintroduce fix for m1 from #579 missing after merge by @skurovec in #1056
-- Update Stable_Diffusion_AI_Notebook.ipynb (Take 2) by @ChloeL19 in #1060
-- Print out the device type which is used by @manzke in #1073
-- Hires Addition by @hipsterusername in #1063
-- fix for "1 leaked semaphore objects to clean up at shutdown" on M1 by
- @skurovec in #1081
-- Forward dream.py to invoke.py using the same interpreter, add deprecation
- warning by @db3000 in #1077
-- fix noisy images at high step counts by @lstein in #1086
-- Generalize facetool strength argument by @db3000 in #1078
-- Enable fast switching among models at the invoke> command line by @lstein in
- #1066
-- Fix Typo, committed changing ldm environment to invokeai by @jdries3 in #1095
-- Update generate.py by @unreleased in #1109
-- Update 'ldm' env to 'invokeai' in troubleshooting steps by @19wolf in #1125
-- Fixed documentation typos and resolved merge conflicts by @rupeshs in #1123
-- Fix broken doc links, fix malaprop in the project subtitle by @majick in #1131
-- Only output facetool parameters if enhancing faces by @db3000 in #1119
-- Update gitignore to ignore codeformer weights at new location by
- @spezialspezial in #1136
-- fix links to point to invoke-ai.github.io #1117 by @mauwii in #1143
-- Rework-mkdocs by @mauwii in #1144
-- add option to CLI and pngwriter that allows user to set PNG compression level
- by @lstein in #1127
-- Fix img2img DDIM index out of bound by @wfng92 in #1137
-- Fix gh actions by @mauwii in #1128
-- update mac instructions to use invokeai for env name by @willwillems in #1030
-- Update .gitignore by @blessedcoolant in #1040
-- reintroduce fix for m1 from #579 missing after merge by @skurovec in #1056
-- Update Stable_Diffusion_AI_Notebook.ipynb (Take 2) by @ChloeL19 in #1060
-- Print out the device type which is used by @manzke in #1073
-- Hires Addition by @hipsterusername in #1063
-- fix for "1 leaked semaphore objects to clean up at shutdown" on M1 by
- @skurovec in #1081
-- Forward dream.py to invoke.py using the same interpreter, add deprecation
- warning by @db3000 in #1077
-- fix noisy images at high step counts by @lstein in #1086
-- Generalize facetool strength argument by @db3000 in #1078
-- Enable fast switching among models at the invoke> command line by @lstein in
- #1066
-- Fix Typo, committed changing ldm environment to invokeai by @jdries3 in #1095
-- Fixed documentation typos and resolved merge conflicts by @rupeshs in #1123
-- Only output facetool parameters if enhancing faces by @db3000 in #1119
-- add option to CLI and pngwriter that allows user to set PNG compression level
- by @lstein in #1127
-- Fix img2img DDIM index out of bound by @wfng92 in #1137
-- Add text prompt to inpaint mask support by @lstein in #1133
-- Respect http[s] protocol when making socket.io middleware by @damian0815 in
- #976
-- WebUI: Adds Codeformer support by @psychedelicious in #1151
-- Skips normalizing prompts for web UI metadata by @psychedelicious in #1165
-- Add Asymmetric Tiling by @carson-katri in #1132
-- Web UI: Increases max CFG Scale to 200 by @psychedelicious in #1172
-- Corrects color channels in face restoration; Fixes #1167 by @psychedelicious
- in #1175
-- Flips channels using array slicing instead of using OpenCV by @psychedelicious
- in #1178
-- Fix typo in docs: s/Formally/Formerly by @noodlebox in #1176
-- fix clipseg loading problems by @lstein in #1177
-- Correct color channels in upscale using array slicing by @wfng92 in #1181
-- Web UI: Filters existing images when adding new images; Fixes #1085 by
- @psychedelicious in #1171
-- fix a number of bugs in textual inversion by @lstein in #1190
-- Improve !fetch, add !replay command by @ArDiouscuros in #882
-- Fix generation of image with s>1000 by @holstvoogd in #951
-- Web UI: Gallery improvements by @psychedelicious in #1198
-- Update CLI.md by @krummrey in #1211
-- outcropping improvements by @lstein in #1207
-- add support for loading VAE autoencoders by @lstein in #1216
-- remove duplicate fix_func for MPS by @wfng92 in #1210
-- Metadata storage and retrieval fixes by @lstein in #1204
-- nix: add shell.nix file by @Cloudef in #1170
-- Web UI: Changes vite dist asset paths to relative by @psychedelicious in #1185
-- Web UI: Removes isDisabled from PromptInput by @psychedelicious in #1187
-- Allow user to generate images with initial noise as on M1 / mps system by
- @ArDiouscuros in #981
-- feat: adding filename format template by @plucked in #968
-- Web UI: Fixes broken bundle by @psychedelicious in #1242
-- Support runwayML custom inpainting model by @lstein in #1243
-- Update IMG2IMG.md by @talitore in #1262
-- New dockerfile - including a build- and a run- script as well as a GH-Action
- by @mauwii in #1233
-- cut over from karras to model noise schedule for higher steps by @lstein in
- #1222
-- Prompt tweaks by @lstein in #1268
-- Outpainting implementation by @Kyle0654 in #1251
-- fixing aspect ratio on hires by @tjennings in #1249
-- Fix-build-container-action by @mauwii in #1274
-- handle all unicode characters by @damian0815 in #1276
-- adds models.user.yml to .gitignore by @JakeHL in #1281
-- remove debug branch, set fail-fast to false by @mauwii in #1284
-- Protect-secrets-on-pr by @mauwii in #1285
-- Web UI: Adds initial inpainting implementation by @psychedelicious in #1225
-- fix environment-mac.yml - tested on x64 and arm64 by @mauwii in #1289
-- Use proper authentication to download model by @mauwii in #1287
-- Prevent indexing error for mode RGB by @spezialspezial in #1294
-- Integrate sd-v1-5 model into test matrix (easily expandable), remove
- unecesarry caches by @mauwii in #1293
-- add --no-interactive to configure_invokeai step by @mauwii in #1302
-- 1-click installer and updater. Uses micromamba to install git and conda into a
- contained environment (if necessary) before running the normal installation
- script by @cmdr2 in #1253
-- configure_invokeai.py script downloads the weight files by @lstein in #1290
-
-## v2.0.1 (13 October 2022)
-
-- fix noisy images at high step count when using k\* samplers
-- dream.py script now calls invoke.py module directly rather than via a new
- python process (which could break the environment)
-
-## v2.0.0 (9 October 2022)
-
-- `dream.py` script renamed `invoke.py`. A `dream.py` script wrapper remains for
- backward compatibility.
-- Completely new WebGUI - launch with `python3 scripts/invoke.py --web`
-- img2img runs on all k\* samplers
-- Support for
- [negative prompts](features/PROMPTS.md#negative-and-unconditioned-prompts)
-- Support for CodeFormer face reconstruction
-- Support for Textual Inversion on Macintoshes
-- Support in both WebGUI and CLI for
- [post-processing of previously-generated images](features/POSTPROCESS.md)
- using facial reconstruction, ESRGAN upscaling, outcropping (similar to DALL-E
- infinite canvas), and "embiggen" upscaling. See the `!fix` command.
-- New `--hires` option on `invoke>` line allows
- [larger images to be created without duplicating elements](deprecated/CLI.md#this-is-an-example-of-txt2img),
- at the cost of some performance.
-- New `--perlin` and `--threshold` options allow you to add and control
- variation during image generation (see
- [Thresholding and Perlin Noise Initialization](features/OTHER.md#thresholding-and-perlin-noise-initialization-options))
-- Extensive metadata now written into PNG files, allowing reliable regeneration
- of images and tweaking of previous settings.
-- Command-line completion in `invoke.py` now works on Windows, Linux and Mac
- platforms.
-- Improved [command-line completion behavior](deprecated/CLI.md) New commands
- added:
- - List command-line history with `!history`
- - Search command-line history with `!search`
- - Clear history with `!clear`
-- Deprecated `--full_precision` / `-F`. Simply omit it and `invoke.py` will auto
- configure. To switch away from auto use the new flag like
- `--precision=float32`.
-
-## v1.14 (11 September 2022)
-
-- Memory optimizations for small-RAM cards. 512x512 now possible on 4 GB GPUs.
-- Full support for Apple hardware with M1 or M2 chips.
-- Add "seamless mode" for circular tiling of image. Generates beautiful effects.
- ([prixt](https://github.com/prixt)).
-- Inpainting support.
-- Improved web server GUI.
-- Lots of code and documentation cleanups.
-
-## v1.13 (3 September 2022)
-
-- Support image variations (see [VARIATIONS](deprecated/VARIATIONS.md)
- ([Kevin Gibbons](https://github.com/bakkot) and many contributors and
- reviewers)
-- Supports a Google Colab notebook for a standalone server running on Google
- hardware [Arturo Mendivil](https://github.com/artmen1516)
-- WebUI supports GFPGAN/ESRGAN facial reconstruction and upscaling
- [Kevin Gibbons](https://github.com/bakkot)
-- WebUI supports incremental display of in-progress images during generation
- [Kevin Gibbons](https://github.com/bakkot)
-- A new configuration file scheme that allows new models (including upcoming
- stable-diffusion-v1.5) to be added without altering the code.
- ([David Wager](https://github.com/maddavid12))
-- Can specify --grid on invoke.py command line as the default.
-- Miscellaneous internal bug and stability fixes.
-- Works on M1 Apple hardware.
-- Multiple bug fixes.
-
----
-
-## v1.12 (28 August 2022)
-
-- Improved file handling, including ability to read prompts from standard input.
- (kudos to [Yunsaki](https://github.com/yunsaki)
-- The web server is now integrated with the invoke.py script. Invoke by adding
- --web to the invoke.py command arguments.
-- Face restoration and upscaling via GFPGAN and Real-ESGAN are now automatically
- enabled if the GFPGAN directory is located as a sibling to Stable Diffusion.
- VRAM requirements are modestly reduced. Thanks to both
- [Blessedcoolant](https://github.com/blessedcoolant) and
- [Oceanswave](https://github.com/oceanswave) for their work on this.
-- You can now swap samplers on the invoke> command line.
- [Blessedcoolant](https://github.com/blessedcoolant)
-
----
-
-## v1.11 (26 August 2022)
-
-- NEW FEATURE: Support upscaling and face enhancement using the GFPGAN module.
- (kudos to [Oceanswave](https://github.com/Oceanswave)
-- You now can specify a seed of -1 to use the previous image's seed, -2 to use
- the seed for the image generated before that, etc. Seed memory only extends
- back to the previous command, but will work on all images generated with the
- -n# switch.
-- Variant generation support temporarily disabled pending more general solution.
-- Created a feature branch named **yunsaki-morphing-invoke** which adds
- experimental support for iteratively modifying the prompt and its parameters.
- Please
- see[Pull Request #86](https://github.com/lstein/stable-diffusion/pull/86) for
- a synopsis of how this works. Note that when this feature is eventually added
- to the main branch, it will may be modified significantly.
-
----
-
-## v1.10 (25 August 2022)
-
-- A barebones but fully functional interactive web server for online generation
- of txt2img and img2img.
-
----
-
-## v1.09 (24 August 2022)
-
-- A new -v option allows you to generate multiple variants of an initial image
- in img2img mode. (kudos to [Oceanswave](https://github.com/Oceanswave).
- [ See this discussion in the PR for examples and details on use](https://github.com/lstein/stable-diffusion/pull/71#issuecomment-1226700810))
-- Added ability to personalize text to image generation (kudos to
- [Oceanswave](https://github.com/Oceanswave) and
- [nicolai256](https://github.com/nicolai256))
-- Enabled all of the samplers from k_diffusion
-
----
-
-## v1.08 (24 August 2022)
-
-- Escape single quotes on the invoke> command before trying to parse. This
- avoids parse errors.
-- Removed instruction to get Python3.8 as first step in Windows install.
- Anaconda3 does it for you.
-- Added bounds checks for numeric arguments that could cause crashes.
-- Cleaned up the copyright and license agreement files.
-
----
-
-## v1.07 (23 August 2022)
-
-- Image filenames will now never fill gaps in the sequence, but will be assigned
- the next higher name in the chosen directory. This ensures that the alphabetic
- and chronological sort orders are the same.
-
----
-
-## v1.06 (23 August 2022)
-
-- Added weighted prompt support contributed by
- [xraxra](https://github.com/xraxra)
-- Example of using weighted prompts to tweak a demonic figure contributed by
- [bmaltais](https://github.com/bmaltais)
-
----
-
-## v1.05 (22 August 2022 - after the drop)
-
-- Filenames now use the following formats: 000010.95183149.png -- Two files
- produced by the same command (e.g. -n2), 000010.26742632.png -- distinguished
- by a different seed.
-
- 000011.455191342.01.png -- Two files produced by the same command using
- 000011.455191342.02.png -- a batch size>1 (e.g. -b2). They have the same seed.
-
- 000011.4160627868.grid#1-4.png -- a grid of four images (-g); the whole grid
- can be regenerated with the indicated key
-
-- It should no longer be possible for one image to overwrite another
-- You can use the "cd" and "pwd" commands at the invoke> prompt to set and
- retrieve the path of the output directory.
-
----
-
-## v1.04 (22 August 2022 - after the drop)
-
-- Updated README to reflect installation of the released weights.
-- Suppressed very noisy and inconsequential warning when loading the frozen CLIP
- tokenizer.
-
----
-
-## v1.03 (22 August 2022)
-
-- The original txt2img and img2img scripts from the CompViz repository have been
- moved into a subfolder named "orig_scripts", to reduce confusion.
-
----
-
-## v1.02 (21 August 2022)
-
-- A copy of the prompt and all of its switches and options is now stored in the
- corresponding image in a tEXt metadata field named "Dream". You can read the
- prompt using scripts/images2prompt.py, or an image editor that allows you to
- explore the full metadata. **Please run "conda env update" to load the k_lms
- dependencies!!**
-
----
-
-## v1.01 (21 August 2022)
-
-- added k_lms sampling. **Please run "conda env update" to load the k_lms
- dependencies!!**
-- use half precision arithmetic by default, resulting in faster execution and
- lower memory requirements Pass argument --full_precision to invoke.py to get
- slower but more accurate image generation
-
----
-
-## Links
-
-- **[Read Me](index.md)**
diff --git a/docs/features/CONFIGURATION.md b/docs/configuration.md
similarity index 92%
rename from docs/features/CONFIGURATION.md
rename to docs/configuration.md
index d6bfe44901c..3d0378bc965 100644
--- a/docs/features/CONFIGURATION.md
+++ b/docs/configuration.md
@@ -90,10 +90,9 @@ Following the table are additional explanations for certain settings.
::: invokeai.app.services.config.config_default.InvokeAIAppConfig
options:
- heading_level: 4
+ show_root_heading: false
members: false
show_docstring_description: false
- group_by_category: true
show_category_heading: false
@@ -155,12 +154,12 @@ log_handlers:
locally or to a remote logging machine. `syslog` offers a variety
of configuration options:
-```
- syslog=/dev/log` - log to the /dev/log device
- syslog=localhost` - log to the network logger running on the local machine
- syslog=localhost:512` - same as above, but using a non-standard port
- syslog=fredserver,facility=LOG_USER,socktype=SOCK_DRAM`
- - Log to LAN-connected server "fredserver" using the facility LOG_USER and datagram packets.
+```yaml
+syslog=/dev/log` - log to the /dev/log device
+syslog=localhost` - log to the network logger running on the local machine
+syslog=localhost:512` - same as above, but using a non-standard port
+syslog=fredserver,facility=LOG_USER,socktype=SOCK_DRAM`
+- Log to LAN-connected server "fredserver" using the facility LOG_USER and datagram packets.
```
- `http` can be used to log to a remote web server. The server must be
@@ -169,8 +168,8 @@ log_handlers:
indicating whether the message should be submitted using the GET or
POST method.
-```
- http=http://my.server/path/to/logger,method=POST
+```yaml
+http=http://my.server/path/to/logger,method=POST
```
The `log_format` option provides several alternative formats:
diff --git a/docs/contributing/LOCAL_DEVELOPMENT.md b/docs/contributing/LOCAL_DEVELOPMENT.md
index 0136fbfcd08..ef6d6573ecf 100644
--- a/docs/contributing/LOCAL_DEVELOPMENT.md
+++ b/docs/contributing/LOCAL_DEVELOPMENT.md
@@ -1,21 +1,10 @@
# Local Development
-If you are looking to contribute you will need to have a local development
-environment. See the
-[Developer Install](../installation/020_INSTALL_MANUAL.md#developer-install) for
-full details.
-
-Broadly this involves cloning the repository, installing the pre-reqs, and
-InvokeAI (in editable form). Assuming this is working, choose your area of
-focus.
+If you want to contribute, you will need to set up a [local development environment](./dev-environment.md).
## Documentation
-We use [mkdocs](https://www.mkdocs.org) for our documentation with the
-[material theme](https://squidfunk.github.io/mkdocs-material/). Documentation is
-written in markdown files under the `./docs` folder and then built into a static
-website for hosting with GitHub Pages at
-[invoke-ai.github.io/InvokeAI](https://invoke-ai.github.io/InvokeAI).
+We use [mkdocs](https://www.mkdocs.org) for our documentation with the [material theme](https://squidfunk.github.io/mkdocs-material/). Documentation is written in markdown files under the `./docs` folder and then built into a static website for hosting with GitHub Pages at [invoke-ai.github.io/InvokeAI](https://invoke-ai.github.io/InvokeAI).
To contribute to the documentation you'll need to install the dependencies. Note
the use of `"`.
@@ -50,6 +39,7 @@ and will be required for testing the changes you make to the code.
### Tests
See the [tests documentation](./TESTS.md) for information about running and writing tests.
+
### Reloading Changes
Experimenting with changes to the Python source code is a drag if you have to re-start the server —
@@ -63,7 +53,6 @@ running server on the fly.
This will allow you to avoid restarting the server (and reloading models) in most cases, but there are some caveats; see
the [jurigged documentation](https://github.com/breuleux/jurigged#caveats) for details.
-
## Front End
diff --git a/docs/contributing/contribution_guides/documentation.md b/docs/contributing/contribution_guides/documentation.md
index 1b5b93f9ba9..36720a8dfab 100644
--- a/docs/contributing/contribution_guides/documentation.md
+++ b/docs/contributing/contribution_guides/documentation.md
@@ -1,13 +1,13 @@
# Documentation
-Documentation is an important part of any open source project. It provides a clear and concise way to communicate how the software works, how to use it, and how to troubleshoot issues. Without proper documentation, it can be difficult for users to understand the purpose and functionality of the project.
+Documentation is an important part of any open source project. It provides a clear and concise way to communicate how the software works, how to use it, and how to troubleshoot issues. Without proper documentation, it can be difficult for users to understand the purpose and functionality of the project.
## Contributing
-All documentation is maintained in the InvokeAI GitHub repository. If you come across documentation that is out of date or incorrect, please submit a pull request with the necessary changes.
+All documentation is maintained in our [GitHub repository](https://github.com/invoke-ai/InvokeAI). If you come across documentation that is out of date or incorrect, please submit a pull request with the necessary changes.
-When updating or creating documentation, please keep in mind InvokeAI is a tool for everyone, not just those who have familiarity with generative art.
+When updating or creating documentation, please keep in mind Invoke is a tool for everyone, not just those who have familiarity with generative art.
## Help & Questions
-Please ping @imic or @hipsterusername in the [Discord](https://discord.com/channels/1020123559063990373/1049495067846524939) if you have any questions.
\ No newline at end of file
+Please ping @hipsterusername on [Discord](https://discord.gg/ZmtBAhwWhy) if you have any questions.
diff --git a/docs/contributing/contribution_guides/newContributorChecklist.md b/docs/contributing/contribution_guides/newContributorChecklist.md
index 90725f99ab1..4efcd06f376 100644
--- a/docs/contributing/contribution_guides/newContributorChecklist.md
+++ b/docs/contributing/contribution_guides/newContributorChecklist.md
@@ -1,47 +1,56 @@
# New Contributor Guide
-If you're a new contributor to InvokeAI or Open Source Projects, this is the guide for you.
+If you're a new contributor to InvokeAI or Open Source Projects, this is the guide for you.
## New Contributor Checklist
-- [x] Set up your local development environment & fork of InvokAI by following [the steps outlined here](../../installation/020_INSTALL_MANUAL.md#developer-install)
-- [x] Set up your local tooling with [this guide](InvokeAI/contributing/LOCAL_DEVELOPMENT/#developing-invokeai-in-vscode). Feel free to skip this step if you already have tooling you're comfortable with.
+
+- [x] Set up your local development environment & fork of InvokAI by following [the steps outlined here](../dev-environment.md)
+- [x] Set up your local tooling with [this guide](InvokeAI/contributing/LOCAL_DEVELOPMENT/#developing-invokeai-in-vscode). Feel free to skip this step if you already have tooling you're comfortable with.
- [x] Familiarize yourself with [Git](https://www.atlassian.com/git) & our project structure by reading through the [development documentation](development.md)
- [x] Join the [#dev-chat](https://discord.com/channels/1020123559063990373/1049495067846524939) channel of the Discord
-- [x] Choose an issue to work on! This can be achieved by asking in the #dev-chat channel, tackling a [good first issue](https://github.com/invoke-ai/InvokeAI/contribute) or finding an item on the [roadmap](https://github.com/orgs/invoke-ai/projects/7). If nothing in any of those places catches your eye, feel free to work on something of interest to you!
+- [x] Choose an issue to work on! This can be achieved by asking in the #dev-chat channel, tackling a [good first issue](https://github.com/invoke-ai/InvokeAI/contribute) or finding an item on the [roadmap](https://github.com/orgs/invoke-ai/projects/7). If nothing in any of those places catches your eye, feel free to work on something of interest to you!
- [x] Make your first Pull Request with the guide below
- [x] Happy development! Don't be afraid to ask for help - we're happy to help you contribute!
-
## How do I make a contribution?
Never made an open source contribution before? Wondering how contributions work in our project? Here's a quick rundown!
Before starting these steps, ensure you have your local environment [configured for development](../LOCAL_DEVELOPMENT.md).
-1. Find a [good first issue](https://github.com/invoke-ai/InvokeAI/contribute) that you are interested in addressing or a feature that you would like to add. Then, reach out to our team in the [#dev-chat](https://discord.com/channels/1020123559063990373/1049495067846524939) channel of the Discord to ensure you are setup for success.
+1. Find a [good first issue](https://github.com/invoke-ai/InvokeAI/contribute) that you are interested in addressing or a feature that you would like to add. Then, reach out to our team in the [#dev-chat](https://discord.com/channels/1020123559063990373/1049495067846524939) channel of the Discord to ensure you are setup for success.
2. Fork the [InvokeAI](https://github.com/invoke-ai/InvokeAI) repository to your GitHub profile. This means that you will have a copy of the repository under **your-GitHub-username/InvokeAI**.
3. Clone the repository to your local machine using:
-```bash
-git clone https://github.com/your-GitHub-username/InvokeAI.git
-```
-If you're unfamiliar with using Git through the commandline, [GitHub Desktop](https://desktop.github.com) is a easy-to-use alternative with a UI. You can do all the same steps listed here, but through the interface.
-4. Create a new branch for your fix using:
-```bash
-git checkout -b branch-name-here
-```
+
+ ```bash
+ git clone https://github.com/your-GitHub-username/InvokeAI.git
+ ```
+
+If you're unfamiliar with using Git through the commandline, [GitHub Desktop](https://desktop.github.com) is a easy-to-use alternative with a UI. You can do all the same steps listed here, but through the interface. 4. Create a new branch for your fix using:
+
+ ```bash
+ git checkout -b branch-name-here
+ ```
+
5. Make the appropriate changes for the issue you are trying to address or the feature that you want to add.
6. Add the file contents of the changed files to the "snapshot" git uses to manage the state of the project, also known as the index:
-```bash
-git add -A
-```
+
+ ```bash
+ git add -A
+ ```
+
7. Store the contents of the index with a descriptive message.
-```bash
-git commit -m "Insert a short message of the changes made here"
-```
+
+ ```bash
+ git commit -m "Insert a short message of the changes made here"
+ ```
+
8. Push the changes to the remote repository using
-```bash
-git push origin branch-name-here
-```
+
+ ```bash
+ git push origin branch-name-here
+ ```
+
9. Submit a pull request to the **main** branch of the InvokeAI repository. If you're not sure how to, [follow this guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
10. Title the pull request with a short description of the changes made and the issue or bug number associated with your change. For example, you can title an issue like so "Added more log outputting to resolve #1234".
11. In the description of the pull request, explain the changes that you made, any issues you think exist with the pull request you made, and any questions you have for the maintainer. It's OK if your pull request is not perfect (no pull request is), the reviewer will be able to help you fix any problems and improve it!
@@ -49,20 +58,20 @@ git push origin branch-name-here
13. Make changes to the pull request if the reviewer(s) recommend them.
14. Celebrate your success after your pull request is merged!
-If you’d like to learn more about contributing to Open Source projects, here is a [Getting Started Guide](https://opensource.com/article/19/7/create-pull-request-github).
+If you’d like to learn more about contributing to Open Source projects, here is a [Getting Started Guide](https://opensource.com/article/19/7/create-pull-request-github).
+## Best Practices
-## Best Practices:
-* Keep your pull requests small. Smaller pull requests are more likely to be accepted and merged
-* Comments! Commenting your code helps reviewers easily understand your contribution
-* Use Python and Typescript’s typing systems, and consider using an editor with [LSP](https://microsoft.github.io/language-server-protocol/) support to streamline development
-* Make all communications public. This ensure knowledge is shared with the whole community
+- Keep your pull requests small. Smaller pull requests are more likely to be accepted and merged
+- Comments! Commenting your code helps reviewers easily understand your contribution
+- Use Python and Typescript’s typing systems, and consider using an editor with [LSP](https://microsoft.github.io/language-server-protocol/) support to streamline development
+- Make all communications public. This ensure knowledge is shared with the whole community
## **Where can I go for help?**
If you need help, you can ask questions in the [#dev-chat](https://discord.com/channels/1020123559063990373/1049495067846524939) channel of the Discord.
-For frontend related work, **@pyschedelicious** is the best person to reach out to.
+For frontend related work, **@pyschedelicious** is the best person to reach out to.
For backend related work, please reach out to **@blessedcoolant**, **@lstein**, **@StAlKeR7779** or **@pyschedelicious**.
diff --git a/docs/contributing/contribution_guides/translation.md b/docs/contributing/contribution_guides/translation.md
index 669e4033467..5fe60f7af71 100644
--- a/docs/contributing/contribution_guides/translation.md
+++ b/docs/contributing/contribution_guides/translation.md
@@ -16,4 +16,4 @@ Please check Weblate's [documentation](https://docs.weblate.org/en/latest/index
## Thanks
-Thanks to the InvokeAI community for their efforts to translate the project!
\ No newline at end of file
+Thanks to the InvokeAI community for their efforts to translate the project!
diff --git a/docs/contributing/contributors.md b/docs/contributing/contributors.md
new file mode 100644
index 00000000000..5df11933cba
--- /dev/null
+++ b/docs/contributing/contributors.md
@@ -0,0 +1,54 @@
+---
+title: Contributors
+---
+
+We thank [all contributors](https://github.com/invoke-ai/InvokeAI/graphs/contributors) for their time and hard work!
+
+## **Original Author**
+
+- [Lincoln D. Stein](mailto:lincoln.stein@gmail.com)
+
+## **Current Core Team**
+
+- @lstein (Lincoln Stein) - Co-maintainer
+- @blessedcoolant - Co-maintainer
+- @hipsterusername (Kent Keirsey) - Co-maintainer, CEO, Positive Vibes
+- @psychedelicious (Spencer Mabrito) - Web Team Leader
+- @joshistoast (Josh Corbett) - Web Development
+- @cheerio (Mary Rogers) - Lead Engineer & Web App Development
+- @ebr (Eugene Brodsky) - Cloud/DevOps/Sofware engineer; your friendly neighbourhood cluster-autoscaler
+- @sunija - Standalone version
+- @brandon (Brandon Rising) - Platform, Infrastructure, Backend Systems
+- @ryanjdick (Ryan Dick) - Machine Learning & Training
+- @JPPhoto - Core image generation nodes
+- @dunkeroni - Image generation backend
+- @SkunkWorxDark - Image generation backend
+- @glimmerleaf (Devon Hopkins) - Community Wizard
+- @gogurt enjoyer - Discord moderator and end user support
+- @whosawhatsis - Discord moderator and end user support
+- @dwringer - Discord moderator and end user support
+- @526christian - Discord moderator and end user support
+- @harvester62 - Discord moderator and end user support
+
+## **Honored Team Alumni**
+
+- @StAlKeR7779 (Sergey Borisov) - Torch stack, ONNX, model management, optimization
+- @damian0815 - Attention Systems and Compel Maintainer
+- @netsvetaev (Artur) - Localization support
+- @Kyle0654 (Kyle Schouviller) - Node Architect and General Backend Wizard
+- @tildebyte - Installation and configuration
+- @mauwii (Matthias Wilde) - Installation, release, continuous integration
+- @chainchompa (Jennifer Player) - Web Development & Chain-Chomping
+- @millu (Millun Atluri) - Community Wizard, Documentation, Node-wrangler,
+- @genomancer (Gregg Helt) - Controlnet support
+- @keturn (Kevin Turner) - Diffusers
+
+## **Original CompVis (Stable Diffusion) Authors**
+
+- [Robin Rombach](https://github.com/rromb)
+- [Patrick von Platen](https://github.com/patrickvonplaten)
+- [ablattmann](https://github.com/ablattmann)
+- [Patrick Esser](https://github.com/pesser)
+- [owenvincent](https://github.com/owenvincent)
+- [apolinario](https://github.com/apolinario)
+- [Charles Packer](https://github.com/cpacker)
diff --git a/docs/contributing/dev-environment.md b/docs/contributing/dev-environment.md
new file mode 100644
index 00000000000..4c1d5db1d96
--- /dev/null
+++ b/docs/contributing/dev-environment.md
@@ -0,0 +1,99 @@
+# Dev Environment
+
+To make changes to Invoke's backend, frontend, or documentation, you'll need to set up a dev environment.
+
+If you just want to use Invoke, you should use the [installer][installer link].
+
+!!! info "Why do I need the frontend toolchain?"
+
+ The repo doesn't contain a build of the frontend. You'll be responsible for rebuilding it every time you pull in new changes, or run it in dev mode (which incurs a substantial performance penalty).
+
+!!! warning
+
+ Invoke uses a SQLite database. When you run the application as a dev install, you accept responsibility for your database. This means making regular backups (especially before pulling) and/or fixing it yourself in the event that a PR introduces a schema change.
+
+ If you don't need to persist your db, you can use an ephemeral in-memory database by setting `use_memory_db: true` in your `invokeai.yaml` file. You'll also want to set `scan_models_on_startup: true` so that your models are registered on startup.
+
+## Setup
+
+1. Run through the [requirements][requirements link].
+1. [Fork and clone][forking link] the [InvokeAI repo][repo link].
+1. Create an directory for user data (images, models, db, etc). This is typically at `~/invokeai`, but if you already have a non-dev install, you may want to create a separate directory for the dev install.
+1. Create a python virtual environment inside the directory you just created:
+
+ ```sh
+ python3 -m venv .venv --prompt InvokeAI-Dev
+ ```
+
+1. Activate the venv (you'll need to do this every time you want to run the app):
+
+ ```sh
+ source .venv/bin/activate
+ ```
+
+1. Install the repo as an [editable install][editable install link]:
+
+ ```sh
+ pip install -e ".[dev,test,xformers]" --use-pep517 --extra-index-url https://download.pytorch.org/whl/cu121
+ ```
+
+ Refer to the [manual installation][manual install link]] instructions for more determining the correct install options. `xformers` is optional, but `dev` and `test` are not.
+
+1. Install the frontend dev toolchain:
+
+ - [`nodejs`](https://nodejs.org/) (recommend v20 LTS)
+ - [`pnpm`](https://pnpm.io/installation#installing-a-specific-version) (must be v8 - not v9!)
+
+1. Do a production build of the frontend:
+
+ ```sh
+ pnpm build
+ ```
+
+1. Start the application:
+
+ ```sh
+ python scripts/invokeai-web.py
+ ```
+
+1. Access the UI at `localhost:9090`.
+
+## Updating the UI
+
+You'll need to run `pnpm build` every time you pull in new changes. Another option is to skip the build and instead run the app in dev mode:
+
+```sh
+pnpm dev
+```
+
+This starts a dev server at `localhost:5173`, which you will use instead of `localhost:9090`.
+
+The dev mode is substantially slower than the production build but may be more convenient if you just need to test things out.
+
+## Documentation
+
+The documentation is built with `mkdocs`. To preview it locally, you need a additional set of packages installed.
+
+```sh
+# after activating the venv
+pip install -e ".[docs]"
+```
+
+Then, you can start a live docs dev server, which will auto-refresh when you edit the docs:
+
+```sh
+mkdocs serve
+```
+
+On macOS and Linux, there is a `make` target for this:
+
+```sh
+make docs
+```
+
+[installer link]: ../installation/installer.md
+[forking link]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo
+[requirements link]: ../installation/requirements.md
+[repo link]: https://github.com/invoke-ai/InvokeAI
+[manual install link]: ../installation/manual.md
+[editable install link]: https://pip.pypa.io/en/latest/cli/pip_install/#cmdoption-e
diff --git a/docs/contributing/frontend/OVERVIEW.md b/docs/contributing/frontend/index.md
similarity index 66%
rename from docs/contributing/frontend/OVERVIEW.md
rename to docs/contributing/frontend/index.md
index 486e75ea9f9..0e0ff55f3db 100644
--- a/docs/contributing/frontend/OVERVIEW.md
+++ b/docs/contributing/frontend/index.md
@@ -4,52 +4,42 @@ Invoke's UI is made possible by many contributors and open-source libraries. Tha
## Dev environment
-### Setup
+Follow the [dev environment](../dev-environment.md) guide to get set up. Run the UI using `pnpm dev`.
-1. Install [node] and [pnpm].
-1. Run `pnpm i` to install all packages.
-
-#### Run in dev mode
-
-1. From `invokeai/frontend/web/`, run `pnpm dev`.
-1. From repo root, run `python scripts/invokeai-web.py`.
-1. Point your browser to the dev server address, e.g.
-
-### Package scripts
+## Package scripts
- `dev`: run the frontend in dev mode, enabling hot reloading
-- `build`: run all checks (madge, eslint, prettier, tsc) and then build the frontend
-- `typegen`: generate types from the OpenAPI schema (see [Type generation])
+- `build`: run all checks (dpdm, eslint, prettier, tsc, knip) and then build the frontend
- `lint:dpdm`: check circular dependencies
- `lint:eslint`: check code quality
- `lint:prettier`: check code formatting
- `lint:tsc`: check type issues
-- `lint:knip`: check for unused exports or objects (failures here are just suggestions, not hard fails)
+- `lint:knip`: check for unused exports or objects
- `lint`: run all checks concurrently
- `fix`: run `eslint` and `prettier`, fixing fixable issues
+- `test:ui`: run `vitest` with the fancy web UI
-### Type generation
+## Type generation
-We use [openapi-typescript] to generate types from the app's OpenAPI schema.
+We use [openapi-typescript] to generate types from the app's OpenAPI schema. The generated types are committed to the repo in [schema.ts].
-The generated types are committed to the repo in [schema.ts].
+If you make backend changes, it's important to regenerate the frontend types:
```sh
-# from the repo root, start the server
-python scripts/invokeai-web.py
-# from invokeai/frontend/web/, run the script
-pnpm typegen
+cd invokeai/frontend/web && python ../../../scripts/generate_openapi_schema.py | pnpm typegen
```
-### Localization
+On macOS and Linux, you can run `make frontend-typegen` as a shortcut for the above snippet.
+
+## Localization
We use [i18next] for localization, but translation to languages other than English happens on our [Weblate] project.
-Only the English source strings should be changed on this repo.
+Only the English source strings (i.e. `en.json`) should be changed on this repo.
-### VSCode
+## VSCode
-#### Example debugger config
+### Example debugger config
```jsonc
{
@@ -66,7 +56,7 @@ Only the English source strings should be changed on this repo.
}
```
-#### Remote dev
+### Remote dev
We've noticed an intermittent timeout issue with the VSCode remote dev port forwarding.
@@ -82,7 +72,7 @@ Thanks for your interest in contributing to the Invoke Web UI!
Please follow these guidelines when contributing.
-### Check in before investing your time
+## Check in before investing your time
Please check in before you invest your time on anything besides a trivial fix, in case it conflicts with ongoing work or isn't aligned with the vision for the app.
@@ -90,7 +80,7 @@ If a feature request or issue doesn't already exist for the thing you want to wo
Ping `@psychedelicious` on [discord] in the `#frontend-dev` channel or in the feature request / issue you want to work on - we're happy to chat.
-### Code conventions
+## Code conventions
- This is a fairly complex app with a deep component tree. Please use memoization (`useCallback`, `useMemo`, `memo`) with enthusiasm.
- If you need to add some global, ephemeral state, please use [nanostores] if possible.
@@ -98,7 +88,7 @@ Ping `@psychedelicious` on [discord] in the `#frontend-dev` channel or in the fe
- Feel free to use `lodash` (via `lodash-es`) to make the intent of your code clear.
- Please add comments describing the "why", not the "how" (unless it is really arcane).
-### Commit format
+## Commit format
Please use the [conventional commits] spec for the web UI, with a scope of "ui":
@@ -107,27 +97,32 @@ Please use the [conventional commits] spec for the web UI, with a scope of "ui":
- `feat(ui): add some cool new feature`
- `fix(ui): fix some bug`
-### Submitting a PR
+## Tests
+
+We don't do any UI testing at this time, but consider adding tests for sensitive logic.
+
+We use `vitest`, and tests should be next to the file they are testing. If the logic is in `something.ts`, the tests should be in `something.test.ts`.
+
+In some situations, we may want to test types. For example, if you use `zod` to create a schema that should match a generated type, it's best to add a test to confirm that the types match. Use `tsafe`'s assert for this.
+
+## Submitting a PR
- Ensure your branch is tidy. Use an interactive rebase to clean up the commit history and reword the commit messages if they are not descriptive.
- Run `pnpm lint`. Some issues are auto-fixable with `pnpm fix`.
- Fill out the PR form when creating the PR.
- It doesn't need to be super detailed, but a screenshot or video is nice if you changed something visually.
- - If a section isn't relevant, delete it. There are no UI tests at this time.
+ - If a section isn't relevant, delete it.
## Other docs
- [Workflows - Design and Implementation]
- [State Management]
-[node]: https://nodejs.org/en/download/
-[pnpm]: https://github.com/pnpm/pnpm
[discord]: https://discord.gg/ZmtBAhwWhy
[i18next]: https://github.com/i18next/react-i18next
[Weblate]: https://hosted.weblate.org/engage/invokeai/
-[openapi-typescript]: https://github.com/drwpow/openapi-typescript
-[Type generation]: #type-generation
+[openapi-typescript]: https://github.com/openapi-ts/openapi-typescript
[schema.ts]: https://github.com/invoke-ai/InvokeAI/blob/main/invokeai/frontend/web/src/services/api/schema.ts
[conventional commits]: https://www.conventionalcommits.org/en/v1.0.0/
-[Workflows - Design and Implementation]: ./WORKFLOWS.md
-[State Management]: ./STATE_MGMT.md
+[Workflows - Design and Implementation]: ./workflows.md
+[State Management]: ./state-management.md
diff --git a/docs/contributing/frontend/STATE_MGMT.md b/docs/contributing/frontend/state-management.md
similarity index 90%
rename from docs/contributing/frontend/STATE_MGMT.md
rename to docs/contributing/frontend/state-management.md
index 443446c01c6..0990a0489f7 100644
--- a/docs/contributing/frontend/STATE_MGMT.md
+++ b/docs/contributing/frontend/state-management.md
@@ -4,7 +4,7 @@ The app makes heavy use of Redux Toolkit, its Query library, and `nanostores`.
## Redux
-TODO
+We use RTK extensively - slices, entity adapters, queries, reselect, the whole 9 yards. Their [docs](https://redux-toolkit.js.org/) are excellent.
## `nanostores`
diff --git a/docs/contributing/frontend/WORKFLOWS.md b/docs/contributing/frontend/workflows.md
similarity index 100%
rename from docs/contributing/frontend/WORKFLOWS.md
rename to docs/contributing/frontend/workflows.md
diff --git a/docs/contributing/CONTRIBUTING.md b/docs/contributing/index.md
similarity index 69%
rename from docs/contributing/CONTRIBUTING.md
rename to docs/contributing/index.md
index ccaf4f25610..c5d677d9c87 100644
--- a/docs/contributing/CONTRIBUTING.md
+++ b/docs/contributing/index.md
@@ -1,41 +1,42 @@
# Contributing
-Invoke AI originated as a project built by the community, and that vision carries forward today as we aim to build the best pro-grade tools available. We work together to incorporate the latest in AI/ML research, making these tools available in over 20 languages to artists and creatives around the world as part of our fully permissive OSS project designed for individual users to self-host and use.
+Invoke originated as a project built by the community, and that vision carries forward today as we aim to build the best pro-grade tools available. We work together to incorporate the latest in AI/ML research, making these tools available in over 20 languages to artists and creatives around the world as part of our fully permissive OSS project designed for individual users to self-host and use.
-
-# Methods of Contributing to Invoke AI
-Anyone who wishes to contribute to InvokeAI, whether features, bug fixes, code cleanup, testing, code reviews, documentation or translation is very much encouraged to do so.
+We welcome contributions, whether features, bug fixes, code cleanup, testing, code reviews, documentation or translation. Please check in with us before diving in to code to ensure your work aligns with our vision.
## Development
-If you’d like to help with development, please see our [development guide](contribution_guides/development.md).
+
+If you’d like to help with development, please see our [development guide](contribution_guides/development.md).
**New Contributors:** If you’re unfamiliar with contributing to open source projects, take a look at our [new contributor guide](contribution_guides/newContributorChecklist.md).
## Nodes
+
If you’d like to add a Node, please see our [nodes contribution guide](../nodes/contributingNodes.md).
## Support and Triaging
-Helping support other users in [Discord](https://discord.gg/ZmtBAhwWhy) and on Github are valuable forms of contribution that we greatly appreciate.
-We receive many issues and requests for help from users. We're limited in bandwidth relative to our the user base, so providing answers to questions or helping identify causes of issues is very helpful. By doing this, you enable us to spend time on the highest priority work.
+Helping support other users in [Discord](https://discord.gg/ZmtBAhwWhy) and on Github are valuable forms of contribution that we greatly appreciate.
+
+We receive many issues and requests for help from users. We're limited in bandwidth relative to our the user base, so providing answers to questions or helping identify causes of issues is very helpful. By doing this, you enable us to spend time on the highest priority work.
## Documentation
+
If you’d like to help with documentation, please see our [documentation guide](contribution_guides/documentation.md).
## Translation
-If you'd like to help with translation, please see our [translation guide](contribution_guides/translation.md).
-## Tutorials
-Please reach out to @imic or @hipsterusername on [Discord](https://discord.gg/ZmtBAhwWhy) to help create tutorials for InvokeAI.
+If you'd like to help with translation, please see our [translation guide](contribution_guides/translation.md).
-We hope you enjoy using our software as much as we enjoy creating it, and we hope that some of those of you who are reading this will elect to become part of our contributor community.
+## Tutorials
+Please reach out to @hipsterusername on [Discord](https://discord.gg/ZmtBAhwWhy) to help create tutorials for InvokeAI.
-# Contributors
+## Contributors
This project is a combined effort of dedicated people from across the world. [Check out the list of all these amazing people](https://invoke-ai.github.io/InvokeAI/other/CONTRIBUTORS/). We thank them for their time, hard work and effort.
-# Code of Conduct
+## Code of Conduct
The InvokeAI community is a welcoming place, and we want your help in maintaining that. Please review our [Code of Conduct](https://github.com/invoke-ai/InvokeAI/blob/main/CODE_OF_CONDUCT.md) to learn more - it's essential to maintaining a respectful and inclusive environment.
@@ -49,12 +50,3 @@ By making a contribution to this project, you certify that:
This disclaimer is not a license and does not grant any rights or permissions. You must obtain necessary permissions and licenses, including from third parties, before contributing to this project.
This disclaimer is provided "as is" without warranty of any kind, whether expressed or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, or non-infringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the contribution or the use or other dealings in the contribution.
-# Support
-
-For support, please use this repository's [GitHub Issues](https://github.com/invoke-ai/InvokeAI/issues), or join the [Discord](https://discord.gg/ZmtBAhwWhy).
-
-Original portions of the software are Copyright (c) 2023 by respective contributors.
-
----
-
-Remember, your contributions help make this project great. We're excited to see what you'll bring to our community!
diff --git a/docs/help/FAQ.md b/docs/faq.md
similarity index 96%
rename from docs/help/FAQ.md
rename to docs/faq.md
index 8ef3a70777f..08edf2e9449 100644
--- a/docs/help/FAQ.md
+++ b/docs/faq.md
@@ -2,7 +2,7 @@
!!! info "How to Reinstall"
- Many issues can be resolved by re-installing the application. You won't lose any data by re-installing. We suggest downloading the [latest release](https://github.com/invoke-ai/InvokeAI/releases/latest) and using it to re-install the application. Consult the [installer guide](../installation/010_INSTALL_AUTOMATED.md) for more information.
+ Many issues can be resolved by re-installing the application. You won't lose any data by re-installing. We suggest downloading the [latest release](https://github.com/invoke-ai/InvokeAI/releases/latest) and using it to re-install the application. Consult the [installer guide](./installation/installer.md) for more information.
When you run the installer, you'll have an option to select the version to install. If you aren't ready to upgrade, you choose the current version to fix a broken install.
@@ -92,7 +92,7 @@ Most example images with prompts that you'll find on the internet have been gene
During a zip file installation or an update, installation stops with an error like this:
-![broken-dependency-screenshot](../assets/troubleshooting/broken-dependency.png){:width="800px"}
+![broken-dependency-screenshot](./assets/troubleshooting/broken-dependency.png){:width="800px"}
To resolve this, re-install the application as described above.
@@ -164,7 +164,7 @@ If you encounter this error, the solution is to remove the package from the `pip
- Choose the developer console option
- Run this command: `pip cache remove controlnet_aux`
- Close the terminal window
-- Download and run the [installer](https://github.com/invoke-ai/InvokeAI/releases/latest), selecting your current install location
+- Download and run the [installer][latest release], selecting your current install location
## Out of Memory Issues
@@ -196,7 +196,7 @@ tips to reduce the problem:
=== "12GB VRAM GPU"
This should be sufficient to generate larger images up to about 1280x1280.
-
+
## Checkpoint Models Load Slowly or Use Too Much RAM
The difference between diffusers models (a folder containing multiple
@@ -251,10 +251,10 @@ To better understand how the `glibc` memory allocator works, see these reference
Note the differences between memory allocated as chunks in an arena vs. memory allocated with `mmap`. Under `glibc`'s default configuration, most model tensors get allocated as chunks in an arena making them vulnerable to the problem of fragmentation.
-[model install docs]: ../installation/050_INSTALLING_MODELS.md
-[system requirements]: ../installation/INSTALL_REQUIREMENTS.md
+[model install docs]: ./installation/models.md
+[system requirements]: ./installation/requirements.md
[latest release]: https://github.com/invoke-ai/InvokeAI/releases/latest
[create an issue]: https://github.com/invoke-ai/InvokeAI/issues
[discord]: https://discord.gg/ZmtBAhwWhy
-[configuration docs]: ../features/CONFIGURATION.md
+[configuration docs]: ./configuration.md
[access token]: https://huggingface.co/docs/hub/security-tokens#how-to-manage-user-access-tokens
diff --git a/docs/features/CONTROLNET.md b/docs/features/CONTROLNET.md
deleted file mode 100644
index ce7a4d2898e..00000000000
--- a/docs/features/CONTROLNET.md
+++ /dev/null
@@ -1,181 +0,0 @@
----
-title: Control Adapters
----
-
-# :material-loupe: Control Adapters
-
-## ControlNet
-
-ControlNet is a powerful set of features developed by the open-source
-community (notably, Stanford researcher
-[**@ilyasviel**](https://github.com/lllyasviel)) that allows you to
-apply a secondary neural network model to your image generation
-process in Invoke.
-
-With ControlNet, you can get more control over the output of your
-image generation, providing you with a way to direct the network
-towards generating images that better fit your desired style or
-outcome.
-
-ControlNet works by analyzing an input image, pre-processing that
-image to identify relevant information that can be interpreted by each
-specific ControlNet model, and then inserting that control information
-into the generation process. This can be used to adjust the style,
-composition, or other aspects of the image to better achieve a
-specific result.
-
-#### Installation
-
-InvokeAI provides access to a series of ControlNet models that provide
-different effects or styles in your generated images.
-
-To install ControlNet Models:
-
-1. The easiest way to install them is
-to use the InvokeAI model installer application. Use the
-`invoke.sh`/`invoke.bat` launcher to select item [4] and then navigate
-to the CONTROLNETS section. Select the models you wish to install and
-press "APPLY CHANGES". You may also enter additional HuggingFace
-repo_ids in the "Additional models" textbox.
-2. Using the "Add Model" function of the model manager, enter the HuggingFace Repo ID of the ControlNet. The ID is in the format "author/repoName"
-
-
-_Be aware that some ControlNet models require additional code
-functionality in order to work properly, so just installing a
-third-party ControlNet model may not have the desired effect._ Please
-read and follow the documentation for installing a third party model
-not currently included among InvokeAI's default list.
-
-Currently InvokeAI **only** supports 🤗 Diffusers-format ControlNet models. These are
-folders that contain the files `config.json` and/or
-`diffusion_pytorch_model.safetensors` and
-`diffusion_pytorch_model.fp16.safetensors`. The name of the folder is
-the name of the model.
-
-🤗 Diffusers-format ControlNet models are available at HuggingFace
-(http://huggingface.co) and accessed via their repo IDs (identifiers
-in the format "author/modelname").
-
-#### ControlNet Models
-The models currently supported include:
-
-**Canny**:
-
-When the Canny model is used in ControlNet, Invoke will attempt to generate images that match the edges detected.
-
-Canny edge detection works by detecting the edges in an image by looking for abrupt changes in intensity. It is known for its ability to detect edges accurately while reducing noise and false edges, and the preprocessor can identify more information by decreasing the thresholds.
-
-**M-LSD**:
-
-M-LSD is another edge detection algorithm used in ControlNet. It stands for Multi-Scale Line Segment Detector.
-
-It detects straight line segments in an image by analyzing the local structure of the image at multiple scales. It can be useful for architectural imagery, or anything where straight-line structural information is needed for the resulting output.
-
-**Lineart**:
-
-The Lineart model in ControlNet generates line drawings from an input image. The resulting pre-processed image is a simplified version of the original, with only the outlines of objects visible.The Lineart model in ControlNet is known for its ability to accurately capture the contours of the objects in an input sketch.
-
-**Lineart Anime**:
-
-A variant of the Lineart model that generates line drawings with a distinct style inspired by anime and manga art styles.
-
-**Depth**:
-A model that generates depth maps of images, allowing you to create more realistic 3D models or to simulate depth effects in post-processing.
-
-**Normal Map (BAE):**
-A model that generates normal maps from input images, allowing for more realistic lighting effects in 3D rendering.
-
-**Image Segmentation**:
-A model that divides input images into segments or regions, each of which corresponds to a different object or part of the image. (More details coming soon)
-
-**QR Code Monster**:
-A model that helps generate creative QR codes that still scan. Can also be used to create images with text, logos or shapes within them.
-
-**Openpose**:
-The OpenPose control model allows for the identification of the general pose of a character by pre-processing an existing image with a clear human structure. With advanced options, Openpose can also detect the face or hands in the image.
-
-*Note:* The DWPose Processor has replaced the OpenPose processor in Invoke. Workflows and generations that relied on the OpenPose Processor will need to be updated to use the DWPose Processor instead.
-
-**Mediapipe Face**:
-
-The MediaPipe Face identification processor is able to clearly identify facial features in order to capture vivid expressions of human faces.
-
-**Tile**:
-
-The Tile model fills out details in the image to match the image, rather than the prompt. The Tile Model is a versatile tool that offers a range of functionalities. Its primary capabilities can be boiled down to two main behaviors:
-
-- It can reinterpret specific details within an image and create fresh, new elements.
-- It has the ability to disregard global instructions if there's a discrepancy between them and the local context or specific parts of the image. In such cases, it uses the local context to guide the process.
-
-The Tile Model can be a powerful tool in your arsenal for enhancing image quality and details. If there are undesirable elements in your images, such as blurriness caused by resizing, this model can effectively eliminate these issues, resulting in cleaner, crisper images. Moreover, it can generate and add refined details to your images, improving their overall quality and appeal.
-
-**Pix2Pix (experimental)**
-
-With Pix2Pix, you can input an image into the controlnet, and then "instruct" the model to change it using your prompt. For example, you can say "Make it winter" to add more wintry elements to a scene.
-
-Each of these models can be adjusted and combined with other ControlNet models to achieve different results, giving you even more control over your image generation process.
-
-
-### Using ControlNet
-
-To use ControlNet, you can simply select the desired model and adjust both the ControlNet and Pre-processor settings to achieve the desired result. You can also use multiple ControlNet models at the same time, allowing you to achieve even more complex effects or styles in your generated images.
-
-
-Each ControlNet has two settings that are applied to the ControlNet.
-
-Weight - Strength of the Controlnet model applied to the generation for the section, defined by start/end.
-
-Start/End - 0 represents the start of the generation, 1 represents the end. The Start/end setting controls what steps during the generation process have the ControlNet applied.
-
-Additionally, each ControlNet section can be expanded in order to manipulate settings for the image pre-processor that adjusts your uploaded image before using it in when you Invoke.
-
-## T2I-Adapter
-[T2I-Adapter](https://github.com/TencentARC/T2I-Adapter) is a tool similar to ControlNet that allows for control over the generation process by providing control information during the generation process. T2I-Adapter models tend to be smaller and more efficient than ControlNets.
-
-##### Installation
-To install T2I-Adapter Models:
-
-1. The easiest way to install models is
-to use the InvokeAI model installer application. Use the
-`invoke.sh`/`invoke.bat` launcher to select item [5] and then navigate
-to the T2I-Adapters section. Select the models you wish to install and
-press "APPLY CHANGES". You may also enter additional HuggingFace
-repo_ids in the "Additional models" textbox.
-2. Using the "Add Model" function of the model manager, enter the HuggingFace Repo ID of the T2I-Adapter. The ID is in the format "author/repoName"
-
-#### Usage
-Each T2I Adapter has two settings that are applied.
-
-Weight - Strength of the model applied to the generation for the section, defined by start/end.
-
-Start/End - 0 represents the start of the generation, 1 represents the end. The Start/end setting controls what steps during the generation process have the ControlNet applied.
-
-Additionally, each section can be expanded with the "Show Advanced" button in order to manipulate settings for the image pre-processor that adjusts your uploaded image before using it in during the generation process.
-
-
-## IP-Adapter
-
-[IP-Adapter](https://ip-adapter.github.io) is a tooling that allows for image prompt capabilities with text-to-image diffusion models. IP-Adapter works by analyzing the given image prompt to extract features, then passing those features to the UNet along with any other conditioning provided.
-
-![IP-Adapter + T2I](https://github.com/tencent-ailab/IP-Adapter/raw/main/assets/demo/ip_adpter_plus_multi.jpg)
-
-![IP-Adapter + IMG2IMG](https://raw.githubusercontent.com/tencent-ailab/IP-Adapter/main/assets/demo/image-to-image.jpg)
-
-#### Installation
-There are several ways to install IP-Adapter models with an existing InvokeAI installation:
-
-1. Through the command line interface launched from the invoke.sh / invoke.bat scripts, option [4] to download models.
-2. Through the Model Manager UI with models from the *Tools* section of [models.invoke.ai](https://models.invoke.ai). To do this, copy the repo ID from the desired model page, and paste it in the Add Model field of the model manager. **Note** Both the IP-Adapter and the Image Encoder must be installed for IP-Adapter to work. For example, the [SD 1.5 IP-Adapter](https://models.invoke.ai/InvokeAI/ip_adapter_plus_sd15) and [SD1.5 Image Encoder](https://models.invoke.ai/InvokeAI/ip_adapter_sd_image_encoder) must be installed to use IP-Adapter with SD1.5 based models.
-3. **Advanced -- Not recommended ** Manually downloading the IP-Adapter and Image Encoder files - Image Encoder folders should be placed in the `models\any\clip_vision` folders. IP Adapter Model folders should be placed in the relevant `ip-adapter` folder of relevant base model folder of Invoke root directory. For example, for the SDXL IP-Adapter, files should be added to the `model/sdxl/ip_adapter/` folder.
-
-#### Using IP-Adapter
-
-IP-Adapter can be used by navigating to the *Control Adapters* options and enabling IP-Adapter.
-
-IP-Adapter requires an image to be used as the Image Prompt. It can also be used in conjunction with text prompts, Image-to-Image, Inpainting, Outpainting, ControlNets and LoRAs.
-
-
-Each IP-Adapter has two settings that are applied to the IP-Adapter:
-
-* Weight - Strength of the IP-Adapter model applied to the generation for the section, defined by start/end
-* Start/End - 0 represents the start of the generation, 1 represents the end. The Start/end setting controls what steps during the generation process have the IP-Adapter applied.
diff --git a/docs/features/IMG2IMG.md b/docs/features/IMG2IMG.md
deleted file mode 100644
index 046a25fdca0..00000000000
--- a/docs/features/IMG2IMG.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-title: Image-to-Image
----
-
-# :material-image-multiple: Image-to-Image
-
-InvokeAI provides an "img2img" feature that lets you seed your
-creations with an initial drawing or photo. This is a really cool
-feature that tells stable diffusion to build the prompt on top of the
-image you provide, preserving the original's basic shape and layout.
-
-For a walkthrough of using Image-to-Image in the Web UI, see [InvokeAI
-Web Server](./WEB.md#image-to-image).
-
-The main difference between `img2img` and `prompt2img` is the starting point.
-While `prompt2img` always starts with pure gaussian noise and progressively
-refines it over the requested number of steps, `img2img` skips some of these
-earlier steps (how many it skips is indirectly controlled by the `--strength`
-parameter), and uses instead your initial image mixed with gaussian noise as the
-starting image.
-
-**Let's start** by thinking about vanilla `prompt2img`, just generating an image
-from a prompt. If the step count is 10, then the "latent space" (Stable
-Diffusion's internal representation of the image) for the prompt "fire" with
-seed `1592514025` develops something like this:
-
-!!! example ""
-
-
-
-Put simply: starting from a frame of fuzz/static, SD finds details in each frame
-that it thinks look like "fire" and brings them a little bit more into focus,
-gradually scrubbing out the fuzz until a clear image remains.
-
-**When you use `img2img`** some of the earlier steps are cut, and instead an
-initial image of your choice is used. But because of how the maths behind Stable
-Diffusion works, this image needs to be mixed with just the right amount of
-noise (fuzz/static) for where it is being inserted. This is where the strength
-parameter comes in. Depending on the set strength, your image will be inserted
-into the sequence at the appropriate point, with just the right amount of noise.
-
-### A concrete example
-
-!!! example "I want SD to draw a fire based on this hand-drawn image"
-
- ![drawing of a fireplace](../assets/img2img/fire-drawing.png){ align=left }
-
- Let's only do 10 steps, to make it easier to see what's happening. If strength
- is `0.7`, this is what the internal steps the algorithm has to take will look
- like:
-
-
-
- With strength `0.4`, the steps look more like this:
-
-
-
-Notice how much more fuzzy the starting image is for strength `0.7` compared to
-`0.4`, and notice also how much longer the sequence is with `0.7`:
-
-| | strength = 0.7 | strength = 0.4 |
-| --------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- |
-| initial image that SD sees | ![step-0](../assets/img2img/000032.step-0.png) | ![step-0](../assets/img2img/000030.step-0.png) |
-| steps argument to `invoke>` | `-S10` | `-S10` |
-| steps actually taken | `7` | `4` |
-| latent space at each step | ![gravity32](../assets/img2img/000032.steps.gravity.png) | ![gravity30](../assets/img2img/000030.steps.gravity.png) |
-| output | ![000032.1592514025](../assets/img2img/000032.1592514025.png) | ![000030.1592514025](../assets/img2img/000030.1592514025.png) |
-
-Both of the outputs look kind of like what I was thinking of. With the strength
-higher, my input becomes more vague, _and_ Stable Diffusion has more steps to
-refine its output. But it's not really making what I want, which is a picture of
-cheery open fire. With the strength lower, my input is more clear, _but_ Stable
-Diffusion has less chance to refine itself, so the result ends up inheriting all
-the problems of my bad drawing.
-
-If you want to try this out yourself, all of these are using a seed of
-`1592514025` with a width/height of `384`, step count `10`, the
-`k_lms` sampler, and the single-word prompt `"fire"`.
-
-### Compensating for the reduced step count
-
-After putting this guide together I was curious to see how the difference would
-be if I increased the step count to compensate, so that SD could have the same
-amount of steps to develop the image regardless of the strength. So I ran the
-generation again using the same seed, but this time adapting the step count to
-give each generation 20 steps.
-
-Here's strength `0.4` (note step count `50`, which is `20 ÷ 0.4` to make sure SD
-does `20` steps from my image):
-
-
-
-and here is strength `0.7` (note step count `30`, which is roughly `20 ÷ 0.7` to
-make sure SD does `20` steps from my image):
-
-
-
-In both cases the image is nice and clean and "finished", but because at
-strength `0.7` Stable Diffusion has been give so much more freedom to improve on
-my badly-drawn flames, they've come out looking much better. You can really see
-the difference when looking at the latent steps. There's more noise on the first
-image with strength `0.7`:
-
-
-
-than there is for strength `0.4`:
-
-
-
-and that extra noise gives the algorithm more choices when it is evaluating how
-to denoise any particular pixel in the image.
-
-Unfortunately, it seems that `img2img` is very sensitive to the step count.
-Here's strength `0.7` with a step count of `29` (SD did 19 steps from my image):
-
-
-
-By comparing the latents we can sort of see that something got interpreted
-differently enough on the third or fourth step to lead to a rather different
-interpretation of the flames.
-
-
-
-
-
-This is the result of a difference in the de-noising "schedule" - basically the
-noise has to be cleaned by a certain degree each step or the model won't
-"converge" on the image properly (see
-[stable diffusion blog](https://huggingface.co/blog/stable_diffusion) for more
-about that). A different step count means a different schedule, which means
-things get interpreted slightly differently at every step.
diff --git a/docs/features/LOGGING.md b/docs/features/LOGGING.md
deleted file mode 100644
index bda968140b3..00000000000
--- a/docs/features/LOGGING.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-title: Controlling Logging
----
-
-# :material-image-off: Controlling Logging
-
-## Controlling How InvokeAI Logs Status Messages
-
-InvokeAI logs status messages using a configurable logging system. You
-can log to the terminal window, to a designated file on the local
-machine, to the syslog facility on a Linux or Mac, or to a properly
-configured web server. You can configure several logs at the same
-time, and control the level of message logged and the logging format
-(to a limited extent).
-
-Three command-line options control logging:
-
-### `--log_handlers ...`
-
-This option activates one or more log handlers. Options are "console",
-"file", "syslog" and "http". To specify more than one, separate them
-by spaces:
-
-```bash
-invokeai-web --log_handlers console syslog=/dev/log file=C:\Users\fred\invokeai.log
-```
-
-The format of these options is described below.
-
-### `--log_format {plain|color|legacy|syslog}`
-
-This controls the format of log messages written to the console. Only
-the "console" log handler is currently affected by this setting.
-
-* "plain" provides formatted messages like this:
-
-```bash
-
-[2023-05-24 23:18:2[2023-05-24 23:18:50,352]::[InvokeAI]::DEBUG --> this is a debug message
-[2023-05-24 23:18:50,352]::[InvokeAI]::INFO --> this is an informational messages
-[2023-05-24 23:18:50,352]::[InvokeAI]::WARNING --> this is a warning
-[2023-05-24 23:18:50,352]::[InvokeAI]::ERROR --> this is an error
-[2023-05-24 23:18:50,352]::[InvokeAI]::CRITICAL --> this is a critical error
-```
-
-* "color" produces similar output, but the text will be color coded to
-indicate the severity of the message.
-
-* "legacy" produces output similar to InvokeAI versions 2.3 and earlier:
-
-```bash
-### this is a critical error
-*** this is an error
-** this is a warning
->> this is an informational messages
- | this is a debug message
-```
-
-* "syslog" produces messages suitable for syslog entries:
-
-```bash
-InvokeAI [2691178] this is a critical error
-InvokeAI [2691178] this is an error
-InvokeAI [2691178] this is a warning
-InvokeAI [2691178] this is an informational messages
-InvokeAI [2691178] this is a debug message
-```
-
-(note that the date, time and hostname will be added by the syslog
-system)
-
-### `--log_level {debug|info|warning|error|critical}`
-
-Providing this command-line option will cause only messages at the
-specified level or above to be emitted.
-
-## Console logging
-
-When "console" is provided to `--log_handlers`, messages will be
-written to the command line window in which InvokeAI was launched. By
-default, the color formatter will be used unless overridden by
-`--log_format`.
-
-## File logging
-
-When "file" is provided to `--log_handlers`, entries will be written
-to the file indicated in the path argument. By default, the "plain"
-format will be used:
-
-```bash
-invokeai-web --log_handlers file=/var/log/invokeai.log
-```
-
-## Syslog logging
-
-When "syslog" is requested, entries will be sent to the syslog
-system. There are a variety of ways to control where the log message
-is sent:
-
-* Send to the local machine using the `/dev/log` socket:
-
-```
-invokeai-web --log_handlers syslog=/dev/log
-```
-
-* Send to the local machine using a UDP message:
-
-```
-invokeai-web --log_handlers syslog=localhost
-```
-
-* Send to the local machine using a UDP message on a nonstandard
- port:
-
-```
-invokeai-web --log_handlers syslog=localhost:512
-```
-
-* Send to a remote machine named "loghost" on the local LAN using
- facility LOG_USER and UDP packets:
-
-```
-invokeai-web --log_handlers syslog=loghost,facility=LOG_USER,socktype=SOCK_DGRAM
-```
-
-This can be abbreviated `syslog=loghost`, as LOG_USER and SOCK_DGRAM
-are defaults.
-
-* Send to a remote machine named "loghost" using the facility LOCAL0
- and using a TCP socket:
-
-```
-invokeai-web --log_handlers syslog=loghost,facility=LOG_LOCAL0,socktype=SOCK_STREAM
-```
-
-If no arguments are specified (just a bare "syslog"), then the logging
-system will look for a UNIX socket named `/dev/log`, and if not found
-try to send a UDP message to `localhost`. The Macintosh OS used to
-support logging to a socket named `/var/run/syslog`, but this feature
-has since been disabled.
-
-## Web logging
-
-If you have access to a web server that is configured to log messages
-when a particular URL is requested, you can log using the "http"
-method:
-
-```
-invokeai-web --log_handlers http=http://my.server/path/to/logger,method=POST
-```
-
-The optional [,method=] part can be used to specify whether the URL
-accepts GET (default) or POST messages.
-
-Currently password authentication and SSL are not supported.
-
-## Using the configuration file
-
-You can set and forget logging options by adding a "Logging" section
-to `invokeai.yaml`:
-
-```
-InvokeAI:
- [... other settings...]
- Logging:
- log_handlers:
- - console
- - syslog=/dev/log
- log_level: info
- log_format: color
-```
diff --git a/docs/features/LORAS.md b/docs/features/LORAS.md
deleted file mode 100644
index 5dcfc8bf21b..00000000000
--- a/docs/features/LORAS.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: LoRAs & LCM-LoRAs
----
-
-# :material-library-shelves: LoRAs & LCM-LoRAs
-
-With the advances in research, many new capabilities are available to customize the knowledge and understanding of novel concepts not originally contained in the base model.
-
-## LoRAs
-
-Low-Rank Adaptation (LoRA) files are models that customize the output of Stable Diffusion
-image generation. Larger than embeddings, but much smaller than full
-models, they augment SD with improved understanding of subjects and
-artistic styles.
-
-Unlike TI files, LoRAs do not introduce novel vocabulary into the
-model's known tokens. Instead, LoRAs augment the model's weights that
-are applied to generate imagery. LoRAs may be supplied with a
-"trigger" word that they have been explicitly trained on, or may
-simply apply their effect without being triggered.
-
-LoRAs are typically stored in .safetensors files, which are the most
-secure way to store and transmit these types of weights.
-
-To use these when generating, open the LoRA menu item in the options
-panel, select the LoRAs you want to apply and ensure that they have
-the appropriate weight recommended by the model provider. Typically,
-most LoRAs perform best at a weight of .75-1.
-
-
-## LCM-LoRAs
-Latent Consistency Models (LCMs) allowed a reduced number of steps to be used to generate images with Stable Diffusion. These are created by distilling base models, creating models that only require a small number of steps to generate images. However, LCMs require that any fine-tune of a base model be distilled to be used as an LCM.
-
-LCM-LoRAs are models that provide the benefit of LCMs but are able to be used as LoRAs and applied to any fine tune of a base model. LCM-LoRAs are created by training a small number of adapters, rather than distilling the entire fine-tuned base model. The resulting LoRA can be used the same way as a standard LoRA, but with a greatly reduced step count. This enables SDXL images to be generated up to 10x faster than without the use of LCM-LoRAs.
-
-
-**Using LCM-LoRAs**
-
-LCM-LoRAs are natively supported in InvokeAI throughout the application. To get started, install any diffusers format LCM-LoRAs using the model manager and select it in the LoRA field.
-
-There are a number parameter differences when using LCM-LoRAs and standard generation:
-
-- When using LCM-LoRAs, the LoRA strength should be lower than if using a standard LoRA, with 0.35 recommended as a starting point.
-- The LCM scheduler should be used for generation
-- CFG-Scale should be reduced to ~1
-- Steps should be reduced in the range of 4-8
-
-Standard LoRAs can also be used alongside LCM-LoRAs, but will also require a lower strength, with 0.45 being recommended as a starting point.
-
-More information can be found here: https://huggingface.co/blog/lcm_lora#fast-inference-with-sdxl-lcm-loras
diff --git a/docs/features/MODEL_MERGING.md b/docs/features/MODEL_MERGING.md
deleted file mode 100644
index 1aea9472c0c..00000000000
--- a/docs/features/MODEL_MERGING.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Model Merging
----
-
-InvokeAI provides the ability to merge two or three diffusers-type models into a new merged model. The
-resulting model will combine characteristics of the original, and can
-be used to teach an old model new tricks.
-
-## How to Merge Models
-
-Model Merging can be done by navigating to the Model Manager and clicking the "Merge Models" tab. From there, you can select the models and settings you want to use to merge the models.
-
-## Settings
-
-* Model Selection: there are three multiple choice fields that
- display all the diffusers-style models that InvokeAI knows about.
- If you do not see the model you are looking for, then it is probably
- a legacy checkpoint model and needs to be converted using the
- "Convert" option in the Web-based Model Manager tab.
-
- You must select at least two models to merge. The third can be left
- at "None" if you desire.
-
-* Alpha: This is the ratio to use when combining models. It ranges
- from 0 to 1. The higher the value, the more weight is given to the
- 2d and (optionally) 3d models. So if you have two models named "A"
- and "B", an alpha value of 0.25 will give you a merged model that is
- 25% A and 75% B.
-
-* Interpolation Method: This is the method used to combine
- weights. The options are "weighted_sum" (the default), "sigmoid",
- "inv_sigmoid" and "add_difference". Each produces slightly different
- results. When three models are in use, only "add_difference" is
- available.
-
-* Save Location: The location you want the merged model to be saved in. Default is in the InvokeAI root folder
-
-* Name for merged model: This is the name for the new model. Please
- use InvokeAI conventions - only alphanumeric letters and the
- characters ".+-".
-
-* Ignore Mismatches / Force: Not all models are compatible with each other. The merge
- script will check for compatibility and refuse to merge ones that
- are incompatible. Set this checkbox to try merging anyway.
-
-
-
-You may run the merge script by starting the invoke launcher
-(`invoke.sh` or `invoke.bat`) and choosing the option (4) for _merge
-models_. This will launch a text-based interactive user interface that
-prompts you to select the models to merge, how to merge them, and the
-merged model name.
-
-Alternatively you may activate InvokeAI's virtual environment from the
-command line, and call the script via `merge_models --gui` to open up
-a version that has a nice graphical front end. To get the commandline-
-only version, omit `--gui`.
-
-The user interface for the text-based interactive script is
-straightforward. It shows you a series of setting fields. Use control-N (^N)
-to move to the next field, and control-P (^P) to move to the previous
-one. You can also use TAB and shift-TAB to move forward and
-backward. Once you are in a multiple choice field, use the up and down
-cursor arrows to move to your desired selection, and press or
- to select it. Change text fields by typing in them, and adjust
-scrollbars using the left and right arrow keys.
-
-Once you are happy with your settings, press the OK button. Note that
-there may be two pages of settings, depending on the height of your
-screen, and the OK button may be on the second page. Advance past the
-last field of the first page to get to the second page, and reverse
-this to get back.
-
-If the merge runs successfully, it will create a new diffusers model
-under the selected name and register it with InvokeAI.
-
-
diff --git a/docs/features/OTHER.md b/docs/features/OTHER.md
deleted file mode 100644
index 00bfd05e146..00000000000
--- a/docs/features/OTHER.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Others
----
-
-# :fontawesome-regular-share-from-square: Others
-
-## **Google Colab**
-
-[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg){ align="right" }](https://colab.research.google.com/github/lstein/stable-diffusion/blob/main/notebooks/Stable_Diffusion_AI_Notebook.ipynb)
-
-Open and follow instructions to use an isolated environment running Dream.
-
-Output Example:
-
-![Colab Notebook](../assets/colab_notebook.png)
-
----
-
-## **Invisible Watermark**
-
-In keeping with the principles for responsible AI generation, and to
-help AI researchers avoid synthetic images contaminating their
-training sets, InvokeAI adds an invisible watermark to each of the
-final images it generates. The watermark consists of the text
-"InvokeAI" and can be viewed using the
-[invisible-watermarks](https://github.com/ShieldMnt/invisible-watermark)
-tool.
-
-Watermarking is controlled using the `invisible-watermark` setting in
-`invokeai.yaml`. To turn it off, add the following line under the `Features`
-category.
-
-```
-invisible_watermark: false
-```
-
-
-## **Weighted Prompts**
-
-You may weight different sections of the prompt to tell the sampler to attach different levels of
-priority to them, by adding `:` to the end of the section you wish to up- or downweight. For
-example consider this prompt:
-
-```bash
-(tabby cat):0.25 (white duck):0.75 hybrid
-```
-
-This will tell the sampler to invest 25% of its effort on the tabby cat aspect of the image and 75%
-on the white duck aspect (surprisingly, this example actually works). The prompt weights can use any
-combination of integers and floating point numbers, and they do not need to add up to 1.
-
diff --git a/docs/features/POSTPROCESS.md b/docs/features/POSTPROCESS.md
deleted file mode 100644
index 33a2d194124..00000000000
--- a/docs/features/POSTPROCESS.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: Postprocessing
----
-
-# :material-image-edit: Postprocessing
-
-This sections details the ability to improve faces and upscale images.
-
-## Face Fixing
-
-As of InvokeAI 3.0, the easiest way to improve faces created during image generation is through the Inpainting functionality of the Unified Canvas. Simply add the image containing the faces that you would like to improve to the canvas, mask the face to be improved and run the invocation. For best results, make sure to use an inpainting specific model; these are usually identified by the "-inpainting" term in the model name.
-
-## Upscaling
-
-Open the upscaling dialog by clicking on the "expand" icon located
-above the image display area in the Web UI:
-
-
-
-The default upscaling option is Real-ESRGAN x2 Plus, which will scale your image by a factor of two. This means upscaling a 512x512 image will result in a new 1024x1024 image.
-
-Other options are the x4 upscalers, which will scale your image by a factor of 4.
-
-
-!!! note
-
- Real-ESRGAN is memory intensive. In order to avoid crashes and memory overloads
- during the Stable Diffusion process, these effects are applied after Stable Diffusion has completed
- its work.
-
- In single image generations, you will see the output right away but when you are using multiple
- iterations, the images will first be generated and then upscaled after that
- process is complete. While the image generation is taking place, you will still be able to preview
- the base images.
-
-## How to disable
-
-If, for some reason, you do not wish to load the ESRGAN libraries,
-you can disable them on the invoke.py command line with the `--no_esrgan` options.
diff --git a/docs/features/PROMPTS.md b/docs/features/PROMPTS.md
deleted file mode 100644
index 5eff1aa2a5f..00000000000
--- a/docs/features/PROMPTS.md
+++ /dev/null
@@ -1,274 +0,0 @@
----
-title: Prompting-Features
----
-
-# :octicons-command-palette-24: Prompting-Features
-
-## **Prompt Syntax Features**
-
-The InvokeAI prompting language has the following features:
-
-### Attention weighting
-
-Append a word or phrase with `-` or `+`, or a weight between `0` and `2`
-(`1`=default), to decrease or increase "attention" (= a mix of per-token CFG
-weighting multiplier and, for `-`, a weighted blend with the prompt without the
-term).
-
-The following syntax is recognised:
-
-- single words without parentheses: `a tall thin man picking apricots+`
-- single or multiple words with parentheses:
- `a tall thin man picking (apricots)+` `a tall thin man picking (apricots)-`
- `a tall thin man (picking apricots)+` `a tall thin man (picking apricots)-`
-- more effect with more symbols `a tall thin man (picking apricots)++`
-- nesting `a tall thin man (picking apricots+)++` (`apricots` effectively gets
- `+++`)
-- all of the above with explicit numbers `a tall thin man picking (apricots)1.1`
- `a tall thin man (picking (apricots)1.3)1.1`. (`+` is equivalent to 1.1, `++`
- is pow(1.1,2), `+++` is pow(1.1,3), etc; `-` means 0.9, `--` means pow(0.9,2),
- etc.)
-
-You can use this to increase or decrease the amount of something. Starting from
-this prompt of `a man picking apricots from a tree`, let's see what happens if
-we increase and decrease how much attention we want Stable Diffusion to pay to
-the word `apricots`:
-
-
-
-Using `-` to reduce apricot-ness:
-
-| `a man picking apricots- from a tree` | `a man picking apricots-- from a tree` | `a man picking apricots--- from a tree` |
-| ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
-| ![an AI generated image of a man picking apricots from a tree, with smaller apricots](../assets/prompt_syntax/apricots--1.png) | ![an AI generated image of a man picking apricots from a tree, with even smaller and fewer apricots](../assets/prompt_syntax/apricots--2.png) | ![an AI generated image of a man picking apricots from a tree, with very few very small apricots](../assets/prompt_syntax/apricots--3.png) |
-
-Using `+` to increase apricot-ness:
-
-| `a man picking apricots+ from a tree` | `a man picking apricots++ from a tree` | `a man picking apricots+++ from a tree` | `a man picking apricots++++ from a tree` | `a man picking apricots+++++ from a tree` |
-| ------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| ![an AI generated image of a man picking apricots from a tree, with larger, more vibrant apricots](../assets/prompt_syntax/apricots-1.png) | ![an AI generated image of a man picking apricots from a tree with even larger, even more vibrant apricots](../assets/prompt_syntax/apricots-2.png) | ![an AI generated image of a man picking apricots from a tree, but the man has been replaced by a pile of apricots](../assets/prompt_syntax/apricots-3.png) | ![an AI generated image of a man picking apricots from a tree, but the man has been replaced by a mound of giant melting-looking apricots](../assets/prompt_syntax/apricots-4.png) | ![an AI generated image of a man picking apricots from a tree, but the man and the leaves and parts of the ground have all been replaced by giant melting-looking apricots](../assets/prompt_syntax/apricots-5.png) |
-
-You can also change the balance between different parts of a prompt. For
-example, below is a `mountain man`:
-
-
-
-And here he is with more mountain:
-
-| `mountain+ man` | `mountain++ man` | `mountain+++ man` |
-| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
-| ![](../assets/prompt_syntax/mountain1-man.png) | ![](../assets/prompt_syntax/mountain2-man.png) | ![](../assets/prompt_syntax/mountain3-man.png) |
-
-Or, alternatively, with more man:
-
-| `mountain man+` | `mountain man++` | `mountain man+++` | `mountain man++++` |
-| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
-| ![](../assets/prompt_syntax/mountain-man1.png) | ![](../assets/prompt_syntax/mountain-man2.png) | ![](../assets/prompt_syntax/mountain-man3.png) | ![](../assets/prompt_syntax/mountain-man4.png) |
-
-### Prompt Blending
-
-- `("a tall thin man picking apricots", "a tall thin man picking pears").blend(1,1)`
-- The existing prompt blending using `:` will continue to be supported -
- `("a tall thin man picking apricots", "a tall thin man picking pears").blend(1,1)`
- is equivalent to
- `a tall thin man picking apricots:1 a tall thin man picking pears:1` in the
- old syntax.
-- Attention weights can be nested inside blends.
-- Non-normalized blends are supported by passing `no_normalize` as an additional
- argument to the blend weights, eg
- `("a tall thin man picking apricots", "a tall thin man picking pears").blend(1,-1,no_normalize)`.
- very fun to explore local maxima in the feature space, but also easy to
- produce garbage output.
-
-See the section below on "Prompt Blending" for more information about how this
-works.
-
-### Prompt Conjunction
-Join multiple clauses together to create a conjoined prompt. Each clause will be passed to CLIP separately.
-
-For example, the prompt:
-
-```bash
-"A mystical valley surround by towering granite cliffs, watercolor, warm"
-```
-
-Can be used with .and():
-```bash
-("A mystical valley", "surround by towering granite cliffs", "watercolor", "warm").and()
-```
-
-Each will give you different results - try them out and see what you prefer!
-
-
-### Escaping parentheses and speech marks
-
-If the model you are using has parentheses () or speech marks "" as part of its
-syntax, you will need to "escape" these using a backslash, so that`(my_keyword)`
-becomes `\(my_keyword\)`. Otherwise, the prompt parser will attempt to interpret
-the parentheses as part of the prompt syntax and it will get confused.
-
----
-
-## **Prompt Blending**
-
-You may blend together prompts to explore the AI's
-latent semantic space and generate interesting (and often surprising!)
-variations. The syntax is:
-
-```bash
-("prompt #1", "prompt #2").blend(0.25, 0.75)
-```
-
-This will tell the sampler to blend 25% of the concept of prompt #1 with 75%
-of the concept of prompt #2. It is recommended to keep the sum of the weights to around 1.0, but interesting things might happen if you go outside of this range.
-
-Because you are exploring the "mind" of the AI, the AI's way of mixing two
-concepts may not match yours, leading to surprising effects. To illustrate, here
-are three images generated using various combinations of blend weights. As
-usual, unless you fix the seed, the prompts will give you different results each
-time you run them.
-
-Let's examine how this affects image generation results:
-
-
-```bash
-"blue sphere, red cube, hybrid"
-```
-
-This example doesn't use blending at all and represents the default way of mixing
-concepts.
-
-
-
-It's interesting to see how the AI expressed the concept of "cube" within the sphere. If you look closely, there is depth there, so the enclosing frame is actually a cube.
-
-
-
-Now that's interesting. We get an image with a resemblance of a red cube, with a hint of blue shadows which represents a melding of concepts within the AI's "latent space" of semantic representations.
-
-
-
-Definitely more blue-spherey.
-
-
-
-
-
-
-Whoa...! I see blue and red, and if I squint, spheres and cubes.
-
-
-
-## Dynamic Prompts
-
-Dynamic Prompts are a powerful feature designed to produce a variety of prompts based on user-defined options. Using a special syntax, you can construct a prompt with multiple possibilities, and the system will automatically generate a series of permutations based on your settings. This is extremely beneficial for ideation, exploring various scenarios, or testing different concepts swiftly and efficiently.
-
-### Structure of a Dynamic Prompt
-
-A Dynamic Prompt comprises of regular text, supplemented with alternatives enclosed within curly braces {} and separated by a vertical bar |. For example: {option1|option2|option3}. The system will then select one of the options to include in the final prompt. This flexible system allows for options to be placed throughout the text as needed.
-
-Furthermore, Dynamic Prompts can designate multiple selections from a single group of options. This feature is triggered by prefixing the options with a numerical value followed by $$. For example, in {2$$option1|option2|option3}, the system will select two distinct options from the set.
-### Creating Dynamic Prompts
-
-To create a Dynamic Prompt, follow these steps:
-
- Draft your sentence or phrase, identifying words or phrases with multiple possible options.
- Encapsulate the different options within curly braces {}.
- Within the braces, separate each option using a vertical bar |.
- If you want to include multiple options from a single group, prefix with the desired number and $$.
-
-For instance: A {house|apartment|lodge|cottage} in {summer|winter|autumn|spring} designed in {style1|style2|style3}.
-### How Dynamic Prompts Work
-
-Once a Dynamic Prompt is configured, the system generates an array of combinations using the options provided. Each group of options in curly braces is treated independently, with the system selecting one option from each group. For a prefixed set (e.g., 2$$), the system will select two distinct options.
-
-For example, the following prompts could be generated from the above Dynamic Prompt:
-
- A house in summer designed in style1, style2
- A lodge in autumn designed in style3, style1
- A cottage in winter designed in style2, style3
- And many more!
-
-When the `Combinatorial` setting is on, Invoke will disable the "Images" selection, and generate every combination up until the setting for Max Prompts is reached.
-When the `Combinatorial` setting is off, Invoke will randomly generate combinations up until the setting for Images has been reached.
-
-
-
-### Tips and Tricks for Using Dynamic Prompts
-
-Below are some useful strategies for creating Dynamic Prompts:
-
- Utilize Dynamic Prompts to generate a wide spectrum of prompts, perfect for brainstorming and exploring diverse ideas.
- Ensure that the options within a group are contextually relevant to the part of the sentence where they are used. For instance, group building types together, and seasons together.
- Apply the 2$$ prefix when you want to incorporate more than one option from a single group. This becomes quite handy when mixing and matching different elements.
- Experiment with different quantities for the prefix. For example, 3$$ will select three distinct options.
- Be aware of coherence in your prompts. Although the system can generate all possible combinations, not all may semantically make sense. Therefore, carefully choose the options for each group.
- Always review and fine-tune the generated prompts as needed. While Dynamic Prompts can help you generate a multitude of combinations, the final polishing and refining remain in your hands.
-
-
-## SDXL Prompting
-
-Prompting with SDXL is slightly different than prompting with SD1.5 or SD2.1 models - SDXL expects a prompt _and_ a style.
-
-
-### Prompting
-
-
-In the prompt box, enter a positive or negative prompt as you normally would.
-
-For the style box you can enter a style that you want the image to be generated in. You can use styles from this example list, or any other style you wish: anime, photographic, digital art, comic book, fantasy art, analog film, neon punk, isometric, low poly, origami, line art, cinematic, 3d model, pixel art, etc.
-
-
-### Concatenated Prompts
-
-
-InvokeAI also has the option to concatenate the prompt and style inputs, by pressing the "link" button in the Positive Prompt box.
-
-This concatenates the prompt & style inputs, and passes the joined prompt and style to the SDXL model.
-![SDXL concatenated prompt boxes in InvokeAI](../assets/prompt_syntax/sdxl-prompt-concatenated.png)
-
-
-
-
-
-
-
diff --git a/docs/features/TEXTUAL_INVERSIONS.md b/docs/features/TEXTUAL_INVERSIONS.md
deleted file mode 100644
index a3ede80d1fd..00000000000
--- a/docs/features/TEXTUAL_INVERSIONS.md
+++ /dev/null
@@ -1,55 +0,0 @@
-## Using Textual Inversion Files
-
-Textual inversion (TI) files are small models that customize the output of
-Stable Diffusion image generation. They can augment SD with specialized subjects
-and artistic styles. They are also known as "embeds" in the machine learning
-world.
-
-Each TI file introduces one or more vocabulary terms to the SD model. These are
-known in InvokeAI as "triggers." Triggers are denoted using angle brackets
-as in "<trigger-phrase>". The two most common type of
-TI files that you'll encounter are `.pt` and `.bin` files, which are produced by
-different TI training packages. InvokeAI supports both formats, but its
-[built-in TI training system](TRAINING.md) produces `.pt`.
-
-[Hugging Face](https://huggingface.co/sd-concepts-library) has
-amassed a large library of >800 community-contributed TI files covering a
-broad range of subjects and styles. You can also install your own or others' TI files
-by placing them in the designated directory for the compatible model type
-
-### An Example
-
-Here are a few examples to illustrate how it works. All these images
-were generated using the legacy command-line client and the Stable
-Diffusion 1.5 model:
-
-| Japanese gardener | Japanese gardener <ghibli-face> | Japanese gardener <hoi4-leaders> | Japanese gardener <cartoona-animals> |
-| :--------------------------------: | :-----------------------------------: | :------------------------------------: | :----------------------------------------: |
-| ![](../assets/concepts/image1.png) | ![](../assets/concepts/image2.png) | ![](../assets/concepts/image3.png) | ![](../assets/concepts/image4.png) |
-
-You can also combine styles and concepts:
-
-
-
-
-## Installing your Own TI Files
-
-You may install any number of `.pt` and `.bin` files simply by copying them into
-the `embedding` directory of the corresponding InvokeAI models directory (usually `invokeai`
-in your home directory). For example, you can simply move a Stable Diffusion 1.5 embedding file to
-the `sd-1/embedding` folder. Be careful not to overwrite one file with another.
-For example, TI files generated by the Hugging Face toolkit share the named
-`learned_embedding.bin`. You can rename these, or use subdirectories to keep them distinct.
-
-At startup time, InvokeAI will scan the various `embedding` directories and load any TI
-files it finds there for compatible models. At startup you will see a message similar to this one:
-
-```bash
->> Current embedding manager terms: ,
-```
-To use these when generating, simply type the `<` key in your prompt to open the Textual Inversion WebUI and
-select the embedding you'd like to use. This UI has type-ahead support, so you can easily find supported embeddings.
\ No newline at end of file
diff --git a/docs/features/TRAINING.md b/docs/features/TRAINING.md
deleted file mode 100644
index 47f8557889e..00000000000
--- a/docs/features/TRAINING.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: Training
----
-
-# :material-file-document: Training
-
-Invoke Training has moved to its own repository, with a dedicated UI for accessing common scripts like Textual Inversion and LoRA training.
-
-You can find more by visiting the repo at https://github.com/invoke-ai/invoke-training
diff --git a/docs/features/UNIFIED_CANVAS.md b/docs/features/UNIFIED_CANVAS.md
deleted file mode 100644
index f0aaa61e22e..00000000000
--- a/docs/features/UNIFIED_CANVAS.md
+++ /dev/null
@@ -1,283 +0,0 @@
----
-title: Unified Canvas
----
-
-The Unified Canvas is a tool designed to streamline and simplify the process of
-composing an image using Stable Diffusion. It offers artists all of the
-available Stable Diffusion generation modes (Text To Image, Image To Image,
-Inpainting, and Outpainting) as a single unified workflow. The flexibility of
-the tool allows you to tweak and edit image generations, extend images beyond
-their initial size, and to create new content in a freeform way both inside and
-outside of existing images.
-
-This document explains the basics of using the Unified Canvas, introducing you
-to its features and tools one by one. It also describes some of the more
-advanced tools available to power users of the Canvas.
-
-## Basics
-
-The Unified Canvas consists of two layers: the **Base Layer** and the **Mask
-Layer**. You can swap from one layer to the other by selecting the layer you
-want in the drop-down menu on the top left corner of the Unified Canvas, or by
-pressing the (Q) hotkey.
-
-### Base Layer
-
-The **Base Layer** is the image content currently managed by the Canvas, and can
-be exported at any time to the gallery by using the **Save to Gallery** option.
-When the Base Layer is selected, the Brush (B) and Eraser (E) tools will
-directly manipulate the base layer. Any images uploaded to the Canvas, or sent
-to the Unified Canvas from the gallery, will clear out all existing content and
-set the Base layer to the new image.
-
-### Staging Area
-
-When you generate images, they will display in the Canvas's **Staging Area**,
-alongside the Staging Area toolbar buttons. While the Staging Area is active,
-you cannot interact with the Canvas itself.
-
-
-
-Accepting generations will commit the new generation to the **Base Layer**. You
-can review all generated images using the Prev/Next arrows, save any individual
-generations to your gallery (without committing to the Base layer) or discard
-generations. While you can Undo a discard in an individual Canvas session, any
-generations that are not saved will be lost when the Canvas resets.
-
-### Mask Layer
-
-The **Mask Layer** consists of any masked sections that have been created to
-inform Inpainting generations. You can paint a new mask, or edit an existing
-mask, using the Brush tool and the Eraser with the Mask layer set as your Active
-layer. Any masked areas will only affect generation inside of the current
-bounding box.
-
-### Bounding Box
-
-When generating a new image, Invoke will process and apply new images within the
-area denoted by the **Bounding Box**. The Width & Height settings of the
-Bounding Box, as well as its location within the Unified Canvas and pixels or
-empty space that it encloses, determine how new invocations are generated - see
-[Inpainting & Outpainting](#inpainting-and-outpainting) below. The Bounding Box
-can be moved and resized using the Move (V) tool. It can also be resized using
-the Bounding Box options in the Options Panel. By using these controls you can
-generate larger or smaller images, control which sections of the image are being
-processed, as well as control Bounding Box tools like the Bounding Box
-fill/erase.
-
-### Inpainting & Outpainting
-
-"Inpainting" means asking the AI to refine part of an image while leaving the
-rest alone. For example, updating a portrait of your grandmother to have her
-wear a biker's jacket.
-
-| masked original | inpaint result |
-| :-------------------------------------------------------------: | :----------------------------------------------------------------------------------------: |
-| ![granny with a mask applied](../assets/canvas/mask_granny.png) | ![just like magic, granny with a biker's jacket](../assets/canvas/biker_jacket_granny.png) |
-
-"Outpainting" means asking the AI to expand the original image beyond its
-original borders, making a bigger image that's still based on the original. For
-example, extending the above image of your Grandmother in a biker's jacket to
-include her wearing jeans (and while we're at it, a motorcycle!)
-
-
-
-When you are using the Unified Canvas, Invoke decides automatically whether to
-do Inpainting, Outpainting, ImageToImage, or TextToImage by looking inside the
-area enclosed by the Bounding Box. It chooses the appropriate type of generation
-based on whether the Bounding Box contains empty (transparent) areas on the Base
-layer, or whether it contains colored areas from previous generations (or from
-painted brushstrokes) on the Base layer, and/or whether the Mask layer contains
-any brushstrokes. See [Generation Methods](#generation-methods) below for more
-information.
-
-## Getting Started
-
-To get started with the Unified Canvas, you will want to generate a new base
-layer using Txt2Img or importing an initial image. We'll refer to either of
-these methods as the "initial image" in the below guide.
-
-From there, you can consider the following techniques to augment your image:
-
-- **New Images**: Move the bounding box to an empty area of the Canvas, type in
- your prompt, and Invoke, to generate a new image using the Text to Image
- function.
-- **Image Correction**: Use the color picker and brush tool to paint corrections
- on the image, switch to the Mask layer, and brush a mask over your painted
- area to use **Inpainting**. You can also use the **ImageToImage** generation
- method to invoke new interpretations of the image.
-- **Image Expansion**: Move the bounding box to include a portion of your
- initial image, and a portion of transparent/empty pixels, then Invoke using a
- prompt that describes what you'd like to see in that area. This will Outpaint
- the image. You'll typically find more coherent results if you keep about
- 50-60% of the original image in the bounding box. Make sure that the Image To
- Image Strength slider is set to a high value - you may need to set it higher
- than you are used to.
-- **New Content on Existing Images**: If you want to add new details or objects
- into your image, use the brush tool to paint a sketch of what you'd like to
- see on the image, switch to the Mask layer, and brush a mask over your painted
- area to use **Inpainting**. If the masked area is small, consider using a
- smaller bounding box to take advantage of Invoke's automatic Scaling features,
- which can help to produce better details.
-- **And more**: There are a number of creative ways to use the Canvas, and the
- above are just starting points. We're excited to see what you come up with!
-
-## Generation Methods
-
-The Canvas can use all generation methods available (Txt2Img, Img2Img,
-Inpainting, and Outpainting), and these will be automatically selected and used
-based on the current selection area within the Bounding Box.
-
-### Text to Image
-
-If the Bounding Box is placed over an area of Canvas with an **empty Base
-Layer**, invoking a new image will use **TextToImage**. This generates an
-entirely new image based on your prompt.
-
-### Image to Image
-
-If the Bounding Box is placed over an area of Canvas with an **existing Base
-Layer area with no transparent pixels or masks**, invoking a new image will use
-**ImageToImage**. This uses the image within the bounding box and your prompt to
-interpret a new image. The image will be closer to your original image at lower
-Image to Image strengths.
-
-### Inpainting
-
-If the Bounding Box is placed over an area of Canvas with an **existing Base
-Layer and any pixels selected using the Mask layer**, invoking a new image will
-use **Inpainting**. Inpainting uses the existing colors/forms in the masked area
-in order to generate a new image for the masked area only. The unmasked portion
-of the image will remain the same. Image to Image strength applies to the
-inpainted area.
-
-If you desire something completely different from the original image in your new
-generation (i.e., if you want Invoke to ignore existing colors/forms), consider
-toggling the Inpaint Replace setting on, and use high values for both Inpaint
-Replace and Image To Image Strength.
-
-!!! note
-
- By default, the **Scale Before Processing** option — which
- inpaints more coherent details by generating at a larger resolution and then
- scaling — is only activated when the Bounding Box is relatively small.
- To get the best inpainting results you should therefore resize your Bounding
- Box to the smallest area that contains your mask and enough surrounding detail
- to help Stable Diffusion understand the context of what you want it to draw.
- You should also update your prompt so that it describes _just_ the area within
- the Bounding Box.
-
-### Outpainting
-
-If the Bounding Box is placed over an area of Canvas partially filled by an
-existing Base Layer area and partially by transparent pixels or masks, invoking
-a new image will use **Outpainting**, as well as **Inpainting** any masked
-areas.
-
----
-
-## Advanced Features
-
-Features with non-obvious behavior are detailed below, in order to provide
-clarity on the intent and common use cases we expect for utilizing them.
-
-### Toolbar
-
-#### Mask Options
-
-- **Enable Mask** - This flag can be used to Enable or Disable the currently
- painted mask. If you have painted a mask, but you don't want it affect the
- next invocation, but you _also_ don't want to delete it, then you can set this
- option to Disable. When you want the mask back, set this back to Enable.
-- **Preserve Masked Area** - When enabled, Preserve Masked Area inverts the
- effect of the Mask on the Inpainting process. Pixels in masked areas will be
- kept unchanged, and unmasked areas will be regenerated.
-
-#### Creative Tools
-
-- **Brush - Base/Mask Modes** - The Brush tool switches automatically between
- different modes of operation for the Base and Mask layers respectively.
- - On the Base layer, the brush will directly paint on the Canvas using the
- color selected on the Brush Options menu.
- - On the Mask layer, the brush will create a new mask. If you're finding the
- mask difficult to see over the existing content of the Unified Canvas, you
- can change the color it is drawn with using the color selector on the Mask
- Options dropdown.
-- **Erase Bounding Box** - On the Base layer, erases all pixels within the
- Bounding Box.
-- **Fill Bounding Box** - On the Base layer, fills all pixels within the
- Bounding Box with the currently selected color.
-
-#### Canvas Tools
-
-- **Move Tool** - Allows for manipulation of the Canvas view (by dragging on the
- Canvas, outside the bounding box), the Bounding Box (by dragging the edges of
- the box), or the Width/Height of the Bounding Box (by dragging one of the 9
- directional handles).
-- **Reset View** - Click to re-orients the view to the center of the Bounding
- Box.
-- **Merge Visible** - If your browser is having performance problems drawing the
- image in the Unified Canvas, click this to consolidate all of the information
- currently being rendered by your browser into a merged copy of the image. This
- lowers the resource requirements and should improve performance.
-
-### Compositing / Seam Correction
-
-When doing Inpainting or Outpainting, Invoke needs to merge the pixels generated
-by Stable Diffusion into your existing image. This is achieved through compositing - the area around the boundary between your image and the new generation is
-automatically blended to produce a seamless output. In a fully automatic
-process, a mask is generated to cover the boundary, and then the area of the boundary is
-Inpainted.
-
-Although the default options should work well most of the time, sometimes it can
-help to alter the parameters that control the Compositing. A larger blur and
-a blur setting have been noted as producing
-consistently strong results . Strength of 0.7 is best for reducing hard seams.
-
-- **Mode** - What part of the image will have the Compositing applied to it.
- - **Mask edge** will apply Compositing to the edge of the masked area
- - **Mask** will apply Compositing to the entire masked area
- - **Unmasked** will apply Compositing to the entire image
-- **Steps** - Number of generation steps that will occur during the Coherence Pass, similar to Denoising Steps. Higher step counts will generally have better results.
-- **Strength** - How much noise is added for the Coherence Pass, similar to Denoising Strength. A strength of 0 will result in an unchanged image, while a strength of 1 will result in an image with a completely new area as defined by the Mode setting.
-- **Blur** - Adjusts the pixel radius of the mask. A larger blur radius will cause the mask to extend past the visibly masked area, while too small of a blur radius will result in a mask that is smaller than the visibly masked area.
-- **Blur Method** - The method of blur applied to the masked area.
-
-
-### Infill & Scaling
-
-- **Scale Before Processing & W/H**: When generating images with a bounding box
- smaller than the optimized W/H of the model (e.g., 512x512 for SD1.5), this
- feature first generates at a larger size with the same aspect ratio, and then
- scales that image down to fill the selected area. This is particularly useful
- when inpainting very small details. Scaling is optional but is enabled by
- default.
-- **Inpaint Replace**: When Inpainting, the default method is to utilize the
- existing RGB values of the Base layer to inform the generation process. If
- Inpaint Replace is enabled, noise is generated and blended with the existing
- pixels (completely replacing the original RGB values at an Inpaint Replace
- value of 1). This can help generate more variation from the pixels on the Base
- layers.
- - When using Inpaint Replace you should use a higher Image To Image Strength
- value, especially at higher Inpaint Replace values
-- **Infill Method**: Invoke currently supports two methods for producing RGB
- values for use in the Outpainting process: Patchmatch and Tile. We believe
- that Patchmatch is the superior method, however we provide support for Tile in
- case Patchmatch cannot be installed or is unavailable on your computer.
-- **Tile Size**: The Tile method for Outpainting sources small portions of the
- original image and randomly place these into the areas being Outpainted. This
- value sets the size of those tiles.
-
-## Hot Keys
-
-The Unified Canvas is a tool that excels when you use hotkeys. You can view the
-full list of keyboard shortcuts, updated with all new features, by clicking the
-Keyboard Shortcuts icon at the top right of the InvokeAI WebUI.
diff --git a/docs/features/UTILITIES.md b/docs/features/UTILITIES.md
deleted file mode 100644
index ba0573ed98d..00000000000
--- a/docs/features/UTILITIES.md
+++ /dev/null
@@ -1,336 +0,0 @@
----
-title: Command-line Utilities
----
-
-# :material-file-document: Utilities
-
-# Command-line Utilities
-
-InvokeAI comes with several scripts that are accessible via the
-command line. To access these commands, start the "developer's
-console" from the launcher (`invoke.bat` menu item [7]). Users who are
-familiar with Python can alternatively activate InvokeAI's virtual
-environment (typically, but not necessarily `invokeai/.venv`).
-
-In the developer's console, type the script's name to run it. To get a
-synopsis of what a utility does and the command-line arguments it
-accepts, pass it the `-h` argument, e.g.
-
-```bash
-invokeai-merge -h
-```
-## **invokeai-web**
-
-This script launches the web server and is effectively identical to
-selecting option [1] in the launcher. An advantage of launching the
-server from the command line is that you can override any setting
-configuration option in `invokeai.yaml` using like-named command-line
-arguments. For example, to temporarily change the size of the RAM
-cache to 7 GB, you can launch as follows:
-
-```bash
-invokeai-web --ram 7
-```
-
-## **invokeai-merge**
-
-This is the model merge script, the same as launcher option [3]. Call
-it with the `--gui` command-line argument to start the interactive
-console-based GUI. Alternatively, you can run it non-interactively
-using command-line arguments as illustrated in the example below which
-merges models named `stable-diffusion-1.5` and `inkdiffusion` into a new model named
-`my_new_model`:
-
-```bash
-invokeai-merge --force --base-model sd-1 --models stable-diffusion-1.5 inkdiffusion --merged_model_name my_new_model
-```
-
-## **invokeai-ti**
-
-This is the textual inversion training script that is run by launcher
-option [2]. Call it with `--gui` to run the interactive console-based
-front end. It can also be run non-interactively. It has about a
-zillion arguments, but a typical training session can be launched
-with:
-
-```bash
-invokeai-ti --model stable-diffusion-1.5 \
- --placeholder_token 'jello' \
- --learnable_property object \
- --num_train_epochs 50 \
- --train_data_dir /path/to/training/images \
- --output_dir /path/to/trained/model
-```
-
-(Note that \\ is the Linux/Mac long-line continuation character. Use ^
-in Windows).
-
-## **invokeai-install**
-
-This is the console-based model install script that is run by launcher
-option [4]. If called without arguments, it will launch the
-interactive console-based interface. It can also be used
-non-interactively to list, add and remove models as shown by these
-examples:
-
-* This will download and install three models from CivitAI, HuggingFace,
-and local disk:
-
-```bash
-invokeai-install --add https://civitai.com/api/download/models/161302 ^
- gsdf/Counterfeit-V3.0 ^
- D:\Models\merge_model_two.safetensors
-```
-(Note that ^ is the Windows long-line continuation character. Use \\ on
-Linux/Mac).
-
-* This will list installed models of type `main`:
-
-```bash
-invokeai-model-install --list-models main
-```
-
-* This will delete the models named `voxel-ish` and `realisticVision`:
-
-```bash
-invokeai-model-install --delete voxel-ish realisticVision
-```
-
-## **invokeai-configure**
-
-This is the console-based configure script that ran when InvokeAI was
-first installed. You can run it again at any time to change the
-configuration, repair a broken install.
-
-Called without any arguments, `invokeai-configure` enters interactive
-mode with two screens. The first screen is a form that provides access
-to most of InvokeAI's configuration options. The second screen lets
-you download, add, and delete models interactively. When you exit the
-second screen, the script will add any missing "support models"
-needed for core functionality, and any selected "sd weights" which are
-the model checkpoint/diffusers files.
-
-This behavior can be changed via a series of command-line
-arguments. Here are some of the useful ones:
-
-* `invokeai-configure --skip-sd-weights --skip-support-models`
-This will run just the configuration part of the utility, skipping
-downloading of support models and stable diffusion weights.
-
-* `invokeai-configure --yes`
-This will run the configure script non-interactively. It will set the
-configuration options to their default values, install/repair support
-models, and download the "recommended" set of SD models.
-
-* `invokeai-configure --yes --default_only`
-This will run the configure script non-interactively. In contrast to
-the previous command, it will only download the default SD model,
-Stable Diffusion v1.5
-
-* `invokeai-configure --yes --default_only --skip-sd-weights`
-This is similar to the previous command, but will not download any
-SD models at all. It is usually used to repair a broken install.
-
-By default, `invokeai-configure` runs on the currently active InvokeAI
-root folder. To run it against a different root, pass it the `--root
-` argument.
-
-Lastly, you can use `invokeai-configure` to create a working root
-directory entirely from scratch. Assuming you wish to make a root directory
-named `InvokeAI-New`, run this command:
-
-```bash
-invokeai-configure --root InvokeAI-New --yes --default_only
-```
-This will create a minimally functional root directory. You can now
-launch the web server against it with `invokeai-web --root InvokeAI-New`.
-
-## **invokeai-update**
-
-This is the interactive console-based script that is run by launcher
-menu item [8] to update to a new version of InvokeAI. It takes no
-command-line arguments.
-
-## **invokeai-metadata**
-
-This is a script which takes a list of InvokeAI-generated images and
-outputs their metadata in the same JSON format that you get from the
-`>` button in the Web GUI. For example:
-
-```bash
-$ invokeai-metadata ffe2a115-b492-493c-afff-7679aa034b50.png
-ffe2a115-b492-493c-afff-7679aa034b50.png:
-{
- "app_version": "3.1.0",
- "cfg_scale": 8.0,
- "clip_skip": 0,
- "controlnets": [],
- "generation_mode": "sdxl_txt2img",
- "height": 1024,
- "loras": [],
- "model": {
- "base_model": "sdxl",
- "model_name": "stable-diffusion-xl-base-1.0",
- "model_type": "main"
- },
- "negative_prompt": "",
- "negative_style_prompt": "",
- "positive_prompt": "military grade sushi dinner for shock troopers",
- "positive_style_prompt": "",
- "rand_device": "cpu",
- "refiner_cfg_scale": 7.5,
- "refiner_model": {
- "base_model": "sdxl-refiner",
- "model_name": "sd_xl_refiner_1.0",
- "model_type": "main"
- },
- "refiner_negative_aesthetic_score": 2.5,
- "refiner_positive_aesthetic_score": 6.0,
- "refiner_scheduler": "euler",
- "refiner_start": 0.8,
- "refiner_steps": 20,
- "scheduler": "euler",
- "seed": 387129902,
- "steps": 25,
- "width": 1024
-}
-```
-
-You may list multiple files on the command line.
-
-## **invokeai-import-images**
-
-InvokeAI uses a database to store information about images it
-generated, and just copying the image files from one InvokeAI root
-directory to another does not automatically import those images into
-the destination's gallery. This script allows you to bulk import
-images generated by one instance of InvokeAI into a gallery maintained
-by another. It also works on images generated by older versions of
-InvokeAI, going way back to version 1.
-
-This script has an interactive mode only. The following example shows
-it in action:
-
-```bash
-$ invokeai-import-images
-===============================================================================
-This script will import images generated by earlier versions of
-InvokeAI into the currently installed root directory:
- /home/XXXX/invokeai-main
-If this is not what you want to do, type ctrl-C now to cancel.
-===============================================================================
-= Configuration & Settings
-Found invokeai.yaml file at /home/XXXX/invokeai-main/invokeai.yaml:
- Database : /home/XXXX/invokeai-main/databases/invokeai.db
- Outputs : /home/XXXX/invokeai-main/outputs/images
-
-Use these paths for import (yes) or choose different ones (no) [Yn]:
-Inputs: Specify absolute path containing InvokeAI .png images to import: /home/XXXX/invokeai-2.3/outputs/images/
-Include files from subfolders recursively [yN]?
-
-Options for board selection for imported images:
-1) Select an existing board name. (found 4)
-2) Specify a board name to create/add to.
-3) Create/add to board named 'IMPORT'.
-4) Create/add to board named 'IMPORT' with the current datetime string appended (.e.g IMPORT_20230919T203519Z).
-5) Create/add to board named 'IMPORT' with a the original file app_version appended (.e.g IMPORT_2.2.5).
-Specify desired board option: 3
-
-===============================================================================
-= Import Settings Confirmation
-
-Database File Path : /home/XXXX/invokeai-main/databases/invokeai.db
-Outputs/Images Directory : /home/XXXX/invokeai-main/outputs/images
-Import Image Source Directory : /home/XXXX/invokeai-2.3/outputs/images/
- Recurse Source SubDirectories : No
-Count of .png file(s) found : 5785
-Board name option specified : IMPORT
-Database backup will be taken at : /home/XXXX/invokeai-main/databases/backup
-
-Notes about the import process:
-- Source image files will not be modified, only copied to the outputs directory.
-- If the same file name already exists in the destination, the file will be skipped.
-- If the same file name already has a record in the database, the file will be skipped.
-- Invoke AI metadata tags will be updated/written into the imported copy only.
-- On the imported copy, only Invoke AI known tags (latest and legacy) will be retained (dream, sd-metadata, invokeai, invokeai_metadata)
-- A property 'imported_app_version' will be added to metadata that can be viewed in the UI's metadata viewer.
-- The new 3.x InvokeAI outputs folder structure is flat so recursively found source imges will all be placed into the single outputs/images folder.
-
-Do you wish to continue with the import [Yn] ?
-
-Making DB Backup at /home/lstein/invokeai-main/databases/backup/backup-20230919T203519Z-invokeai.db...Done!
-
-===============================================================================
-Importing /home/XXXX/invokeai-2.3/outputs/images/17d09907-297d-4db3-a18a-60b337feac66.png
-... (5785 more lines) ...
-===============================================================================
-= Import Complete - Elpased Time: 0.28 second(s)
-
-Source File(s) : 5785
-Total Imported : 5783
-Skipped b/c file already exists on disk : 1
-Skipped b/c file already exists in db : 0
-Errors during import : 1
-```
-## **invokeai-db-maintenance**
-
-This script helps maintain the integrity of your InvokeAI database by
-finding and fixing three problems that can arise over time:
-
-1. An image was manually deleted from the outputs directory, leaving a
- dangling image record in the InvokeAI database. This will cause a
- black image to appear in the gallery. This is an "orphaned database
- image record." The script can fix this by running a "clean"
- operation on the database, removing the orphaned entries.
-
-2. An image is present in the outputs directory but there is no
- corresponding entry in the database. This can happen when the image
- is added manually to the outputs directory, or if a crash occurred
- after the image was generated but before the database was
- completely updated. The symptom is that the image is present in the
- outputs folder but doesn't appear in the InvokeAI gallery. This is
- called an "orphaned image file." The script can fix this problem by
- running an "archive" operation in which orphaned files are moved
- into a directory named `outputs/images-archive`. If you wish, you
- can then run `invokeai-image-import` to reimport these images back
- into the database.
-
-3. The thumbnail for an image is missing, again causing a black
- gallery thumbnail. This is fixed by running the "thumbnails"
- operation, which simply regenerates and re-registers the missing
- thumbnail.
-
-You can find and fix all three of these problems in a single go by
-executing this command:
-
-```bash
-invokeai-db-maintenance --operation all
-```
-
-Or you can run just the clean and thumbnail operations like this:
-
-```bash
-invokeai-db-maintenance -operation clean, thumbnail
-```
-
-If called without any arguments, the script will ask you which
-operations you wish to perform.
-
-## **invokeai-migrate3**
-
-This script will migrate settings and models (but not images!) from an
-InvokeAI v2.3 root folder to an InvokeAI 3.X folder. Call it with the
-source and destination root folders like this:
-
-```bash
-invokeai-migrate3 --from ~/invokeai-2.3 --to invokeai-3.1.1
-```
-
-Both directories must previously have been properly created and
-initialized by `invokeai-configure`. If you wish to migrate the images
-contained in the older root as well, you can use the
-`invokeai-image-migrate` script described earlier.
-
----
-
-Copyright (c) 2023, Lincoln Stein and the InvokeAI Development Team
diff --git a/docs/features/WATERMARK+NSFW.md b/docs/features/WATERMARK+NSFW.md
deleted file mode 100644
index c837d66b57b..00000000000
--- a/docs/features/WATERMARK+NSFW.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Watermarking, NSFW Image Checking
----
-
-# :material-image-off: Invisible Watermark and the NSFW Checker
-
-## Watermarking
-
-InvokeAI does not apply watermarking to images by default. However,
-many computer scientists working in the field of generative AI worry
-that a flood of computer-generated imagery will contaminate the image
-data sets needed to train future generations of generative models.
-
-InvokeAI offers an optional watermarking mode that writes a small bit
-of text, **InvokeAI**, into each image that it generates using an
-"invisible" watermarking library that spreads the information
-throughout the image in a way that is not perceptible to the human
-eye. If you are planning to share your generated images on
-internet-accessible services, we encourage you to activate the
-invisible watermark mode in order to help preserve the digital image
-environment.
-
-The downside of watermarking is that it increases the size of the
-image moderately, and has been reported by some individuals to degrade
-image quality. Your mileage may vary.
-
-To read the watermark in an image, activate the InvokeAI virtual
-environment (called the "developer's console" in the launcher) and run
-the command:
-
-```
-invisible-watermark -a decode -t bytes -m dwtDct -l 64 /path/to/image.png
-```
-
-## The NSFW ("Safety") Checker
-
-Stable Diffusion 1.5-based image generation models will produce sexual
-imagery if deliberately prompted, and will occasionally produce such
-images when this is not intended. Such images are colloquially known
-as "Not Safe for Work" (NSFW). This behavior is due to the nature of
-the training set that Stable Diffusion was trained on, which culled
-millions of "aesthetic" images from the Internet.
-
-You may not wish to be exposed to these images, and in some
-jurisdictions it may be illegal to publicly distribute such imagery,
-including mounting a publicly-available server that provides
-unfiltered images to the public. Furthermore, the [Stable Diffusion
-weights
-License](https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE-SD1+SD2.txt),
-and the [Stable Diffusion XL
-License][https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE-SDXL.txt]
-both forbid the models from being used to "exploit any of the
-vulnerabilities of a specific group of persons."
-
-For these reasons Stable Diffusion offers a "safety checker," a
-machine learning model trained to recognize potentially disturbing
-imagery. When a potentially NSFW image is detected, the checker will
-blur the image and paste a warning icon on top. The checker can be
-turned on and off in the Web interface under Settings.
-
-## Caveats
-
-There are a number of caveats that you need to be aware of.
-
-### Accuracy
-
-The checker is [not perfect](https://arxiv.org/abs/2210.04610).It will
-occasionally flag innocuous images (false positives), and will
-frequently miss violent and gory imagery (false negatives). It rarely
-fails to flag sexual imagery, but this has been known to happen. For
-these reasons, the InvokeAI team prefers to refer to the software as a
-"NSFW Checker" rather than "safety checker."
-
-### Memory Usage and Performance
-
-The NSFW checker consumes an additional 1.2G of GPU VRAM on top of the
-3.4G of VRAM used by Stable Diffusion v1.5 (this is with
-half-precision arithmetic). This means that the checker will not run
-successfully on GPU cards with less than 6GB VRAM, and will reduce the
-size of the images that you can produce.
-
-The checker also introduces a slight performance penalty. Images will
-take ~1 second longer to generate when the checker is
-activated. Generally this is not noticeable.
-
-### Intermediate Images in the Web UI
-
-The checker only operates on the final image produced by the Stable
-Diffusion algorithm. If you are using the Web UI and have enabled the
-display of intermediate images, you will briefly be exposed to a
-low-resolution (mosaicized) version of the final image before it is
-flagged by the checker and replaced by a fully blurred version. You
-are encouraged to turn **off** intermediate image rendering when you
-are using the checker. Future versions of InvokeAI will apply
-additional blurring to intermediate images when the checker is active.
-
diff --git a/docs/features/WEB.md b/docs/features/WEB.md
deleted file mode 100644
index 15a489b932b..00000000000
--- a/docs/features/WEB.md
+++ /dev/null
@@ -1,325 +0,0 @@
----
-title: InvokeAI Web Server
----
-
-# :material-web: InvokeAI Web Server
-
-## Quick guided walkthrough of the WebUI's features
-
-While most of the WebUI's features are intuitive, here is a guided walkthrough
-through its various components.
-
-### Launching the WebUI
-
-To run the InvokeAI web server, start the `invoke.sh`/`invoke.bat`
-script and select option (1). Alternatively, with the InvokeAI
-environment active, run `invokeai-web`:
-
-```bash
-invokeai-web
-```
-
-You can then connect to the server by pointing your web browser at
-http://localhost:9090. To reach the server from a different machine on your LAN,
-you may launch the web server with the `--host` argument and either the IP
-address of the host you are running it on, or the wildcard `0.0.0.0`. For
-example:
-
-```bash
-invoke.sh --host 0.0.0.0
-```
-
-or
-
-```bash
-invokeai-web --host 0.0.0.0
-```
-
-### The InvokeAI Web Interface
-
-![Invoke Web Server - Major Components](../assets/invoke-web-server-1.png){:width="640px"}
-
-The screenshot above shows the Text to Image tab of the WebUI. There are three
-main sections:
-
-1. A **control panel** on the left, which contains various settings
- for text to image generation. The most important part is the text
- field (currently showing `fantasy painting, horned demon`) for
- entering the positive text prompt, another text field right below it for an
- optional negative text prompt (concepts to exclude), and a _Invoke_ button
- to begin the image rendering process.
-
-2. The **current image** section in the middle, which shows a large
- format version of the image you are currently working on. A series
- of buttons at the top lets you modify and manipulate the image in
- various ways.
-
-3. A **gallery** section on the right that contains a history of the images you
- have generated. These images are read and written to the directory specified
- in the `INVOKEAIROOT/invokeai.yaml` initialization file, usually a directory
- named `outputs` in `INVOKEAIROOT`.
-
-In addition to these three elements, there are a series of icons for changing
-global settings, reporting bugs, and changing the theme on the upper right.
-
-There are also a series of icons to the left of the control panel (see
-highlighted area in the screenshot below) which select among a series of tabs
-for performing different types of operations.
-
-
-
-From top to bottom, these are:
-
-1. Text to Image - generate images from text
-2. Image to Image - from an uploaded starting image (drawing or photograph)
- generate a new one, modified by the text prompt
-3. Unified Canvas - Interactively combine multiple images, extend them
- with outpainting,and modify interior portions of the image with
- inpainting, erase portions of a starting image and have the AI fill in
- the erased region from a text prompt.
-4. Node Editor - (experimental) this panel allows you to create
- pipelines of common operations and combine them into workflows.
-5. Model Manager - this panel allows you to import and configure new
- models using URLs, local paths, or HuggingFace diffusers repo_ids.
-
-## Walkthrough
-
-The following walkthrough will exercise most (but not all) of the WebUI's
-feature set.
-
-### Text to Image
-
-1. Launch the WebUI using launcher option [1] and connect to it with
- your browser by accessing `http://localhost:9090`. If the browser
- and server are running on different machines on your LAN, add the
- option `--host 0.0.0.0` to the `invoke.sh` launch command line and connect to
- the machine hosting the web server using its IP address or domain
- name.
-
-2. If all goes well, the WebUI should come up and you'll see a green dot
- meaning `connected` on the upper right.
-
-![Invoke Web Server - Control Panel](../assets/invoke-control-panel-1.png){ align=right width=300px }
-
-#### Basics
-
-1. Generate an image by typing _bluebird_ into the large prompt field
- on the upper left and then clicking on the Invoke button or pressing
- the return button.
- After a short wait, you'll see a large image of a bluebird in the
- image panel, and a new thumbnail in the gallery on the right.
-
- If you need more room on the screen, you can turn the gallery off
- by typing the **g** hotkey. You can turn it back on later by clicking the
- image icon that appears in the gallery's place. The list of hotkeys can
- be found by clicking on the keyboard icon above the image gallery.
-
-2. Generate a bunch of bluebird images by increasing the number of
- requested images by adjusting the Images counter just below the Invoke
- button. As each is generated, it will be added to the gallery. You can
- switch the active image by clicking on the gallery thumbnails.
-
- If you'd like to watch the image generation progress, click the hourglass
- icon above the main image area. As generation progresses, you'll see
- increasingly detailed versions of the ultimate image.
-
-3. Try playing with different settings, including changing the main
- model, the image width and height, the Scheduler, the Steps and
- the CFG scale.
-
- The _Model_ changes the main model. Thousands of custom models are
- now available, which generate a variety of image styles and
- subjects. While InvokeAI comes with a few starter models, it is
- easy to import new models into the application. See [Installing
- Models](../installation/050_INSTALLING_MODELS.md) for more details.
-
- Image _Width_ and _Height_ do what you'd expect. However, be aware that
- larger images consume more VRAM memory and take longer to generate.
-
- The _Scheduler_ controls how the AI selects the image to display. Some
- samplers are more "creative" than others and will produce a wider range of
- variations (see next section). Some samplers run faster than others.
-
- _Steps_ controls how many noising/denoising/sampling steps the AI will take.
- The higher this value, the more refined the image will be, but the longer
- the image will take to generate. A typical strategy is to generate images
- with a low number of steps in order to select one to work on further, and
- then regenerate it using a higher number of steps.
-
- The _CFG Scale_ controls how hard the AI tries to match the generated image
- to the input prompt. You can go as high or low as you like, but generally
- values greater than 20 won't improve things much, and values lower than 5
- will produce unexpected images. There are complex interactions between
- _Steps_, _CFG Scale_ and the _Scheduler_, so experiment to find out what works
- for you.
-
- The _Seed_ controls the series of values returned by InvokeAI's
- random number generator. Each unique seed value will generate a different
- image. To regenerate a previous image, simply use the original image's
- seed value. A slider to the right of the _Seed_ field will change the
- seed each time an image is generated.
-
-![Invoke Web Server - Control Panel 2](../assets/control-panel-2.png){ align=right width=400px }
-
-4. To regenerate a previously-generated image, select the image you
- want and click the asterisk ("*") button at the top of the
- image. This loads the text prompt and other original settings into
- the control panel. If you then press _Invoke_ it will regenerate
- the image exactly. You can also selectively modify the prompt or
- other settings to tweak the image.
-
- Alternatively, you may click on the "sprouting plant icon" to load
- just the image's seed, and leave other settings unchanged or the
- quote icon to load just the positive and negative prompts.
-
-5. To regenerate a Stable Diffusion image that was generated by another SD
- package, you need to know its text prompt and its _Seed_. Copy-paste the
- prompt into the prompt box, unset the _Randomize Seed_ control in the
- control panel, and copy-paste the desired _Seed_ into its text field. When
- you Invoke, you will get something similar to the original image. It will
- not be exact unless you also set the correct values for the original
- sampler, CFG, steps and dimensions, but it will (usually) be close.
-
-6. To save an image, right click on it to bring up a menu that will
- let you download the image, save it to a named image gallery, and
- copy it to the clipboard, among other things.
-
-#### Upscaling
-
-![Invoke Web Server - Upscaling](../assets/upscaling.png){ align=right width=400px }
-
-"Upscaling" is the process of increasing the size of an image while
- retaining the sharpness. InvokeAI uses an external library called
- "ESRGAN" to do this. To invoke upscaling, simply select an image
- and press the "expanding arrows" button above it. You can select
- between 2X and 4X upscaling, and adjust the upscaling strength,
- which has much the same meaning as in facial reconstruction. Try
- running this on one of your previously-generated images.
-
-### Image to Image
-
-InvokeAI lets you take an existing image and use it as the basis for a new
-creation. You can use any sort of image, including a photograph, a scanned
-sketch, or a digital drawing, as long as it is in PNG or JPEG format.
-
-For this tutorial, we'll use the file named
-[Lincoln-and-Parrot-512.png](../assets/Lincoln-and-Parrot-512.png).
-
-1. Click on the _Image to Image_ tab icon, which is the second icon
- from the top on the left-hand side of the screen. This will bring
- you to a screen similar to the one shown here:
-
- ![Invoke Web Server - Image to Image Tab](../assets/invoke-web-server-6.png){ width="640px" }
-
-2. Drag-and-drop the Lincoln-and-Parrot image into the Image panel, or click
- the blank area to get an upload dialog. The image will load into an area
- marked _Initial Image_. (The WebUI will also load the most
- recently-generated image from the gallery into a section on the left, but
- this image will be replaced in the next step.)
-
-3. Go to the prompt box and type _old sea captain with raven on shoulder_ and
- press Invoke. A derived image will appear to the right of the original one:
-
- ![Invoke Web Server - Image to Image example](../assets/invoke-web-server-7.png){:width="640px"}
-
-4. Experiment with the different settings. The most influential one in Image to
- Image is _Denoising Strength_ located about midway down the control
- panel. By default it is set to 0.75, but can range from 0.0 to 0.99. The
- higher the value, the more of the original image the AI will replace. A
- value of 0 will leave the initial image completely unchanged, while 0.99
- will replace it completely. However, the _Scheduler_ and _CFG Scale_ also
- influence the final result. You can also generate variations in the same way
- as described in Text to Image.
-
-5. What if we only want to change certain part(s) of the image and
- leave the rest intact? This is called Inpainting, and you can do
- it in the [Unified Canvas](UNIFIED_CANVAS.md). The Unified Canvas
- also allows you to extend borders of the image and fill in the
- blank areas, a process called outpainting.
-
-6. Would you like to modify a previously-generated image using the Image to
- Image facility? Easy! While in the Image to Image panel, drag and drop any
- image in the gallery into the Initial Image area, and it will be ready for
- use. You can do the same thing with the main image display. Click on the
- _Send to_ icon to get a menu of
- commands and choose "Send to Image to Image".
-
- ![Send To Icon](../assets/send-to-icon.png)
-
-### Textual Inversion, LoRA and ControlNet
-
-InvokeAI supports several different types of model files that
-extending the capabilities of the main model by adding artistic
-styles, special effects, or subjects. By mixing and matching textual
-inversion, LoRA and ControlNet models, you can achieve many
-interesting and beautiful effects.
-
-We will give an example using a LoRA model named "Ink Scenery". This
-LoRA, which can be downloaded from Civitai (civitai.com), is
-specialized to paint landscapes that look like they were made with
-dripping india ink. To install this LoRA, we first download it and
-put it into the `autoimport/lora` folder located inside the
-`invokeai` root directory. After restarting the web server, the
-LoRA will now become available for use.
-
-To see this LoRA at work, we'll first generate an image without it
-using the standard `stable-diffusion-v1-5` model. Choose this
-model and enter the prompt "mountains, ink". Here is a typical
-generated image, a mountain range rendered in ink and watercolor
-wash:
-
-![Ink Scenery without LoRA](../assets/lora-example-0.png){ width=512px }
-
-Now let's install and activate the Ink Scenery LoRA. Go to
-https://civitai.com/models/78605/ink-scenery-or and download the LoRA
-model file to `invokeai/autoimport/lora` and restart the web
-server. (Alternatively, you can use [InvokeAI's Web Model
-Manager](../installation/050_INSTALLING_MODELS.md) to download and
-install the LoRA directly by typing its URL into the _Import
-Models_->_Location_ field).
-
-Scroll down the control panel until you get to the LoRA accordion
-section, and open it:
-
-![LoRA Section](../assets/lora-example-1.png){ width=512px }
-
-Click the popup menu and select "Ink scenery". (If it isn't there, then
-the model wasn't installed to the right place, or perhaps you forgot
-to restart the web server.) The LoRA section will change to look like this:
-
-![LoRA Section Loaded](../assets/lora-example-2.png){ width=512px }
-
-Note that there is now a slider control for _Ink scenery_. The slider
-controls how much influence the LoRA model will have on the generated
-image.
-
-Run the "mountains, ink" prompt again and observe the change in style:
-
-![Ink Scenery](../assets/lora-example-3.png){ width=512px }
-
-Try adjusting the weight slider for larger and smaller weights and
-generate the image after each adjustment. The higher the weight, the
-more influence the LoRA will have.
-
-To remove the LoRA completely, just click on its trash can icon.
-
-Multiple LoRAs can be added simultaneously and combined with textual
-inversions and ControlNet models. Please see [Textual Inversions and
-LoRAs](CONCEPTS.md) and [Using ControlNet](CONTROLNET.md) for details.
-
-## Summary
-
-This walkthrough just skims the surface of the many things InvokeAI
-can do. Please see [Features](index.md) for more detailed reference
-guides.
-
-## Acknowledgements
-
-A huge shout-out to the core team working to make the Web GUI a reality,
-including [psychedelicious](https://github.com/psychedelicious),
-[Kyle0654](https://github.com/Kyle0654) and
-[blessedcoolant](https://github.com/blessedcoolant).
-[hipsterusername](https://github.com/hipsterusername) was the team's unofficial
-cheerleader and added tooltips/docs.
diff --git a/docs/features/WEBUIHOTKEYS.md b/docs/features/WEBUIHOTKEYS.md
deleted file mode 100644
index 4aa3d385fe7..00000000000
--- a/docs/features/WEBUIHOTKEYS.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: WebUI Hotkey List
----
-
-# :material-keyboard: **WebUI Hotkey List**
-
-## App Hotkeys
-
-| Setting | Hotkey |
-| --------------- | ------------------ |
-| ++ctrl+enter++ | Invoke |
-| ++shift+x++ | Cancel |
-| ++alt+a++ | Focus Prompt |
-| ++o++ | Toggle Options |
-| ++shift+o++ | Pin Options |
-| ++z++ | Toggle Viewer |
-| ++g++ | Toggle Gallery |
-| ++f++ | Maximize Workspace |
-| ++1++ - ++5++ | Change Tabs |
-| ++"`"++ | Toggle Console |
-
-## General Hotkeys
-
-| Setting | Hotkey |
-| -------------- | ---------------------- |
-| ++p++ | Set Prompt |
-| ++s++ | Set Seed |
-| ++a++ | Set Parameters |
-| ++shift+r++ | Restore Faces |
-| ++shift+u++ | Upscale |
-| ++i++ | Show Info |
-| ++shift+i++ | Send To Image To Image |
-| ++del++ | Delete Image |
-| ++esc++ | Close Panels |
-
-## Gallery Hotkeys
-
-| Setting | Hotkey |
-| ----------------------| --------------------------- |
-| ++arrow-left++ | Previous Image |
-| ++arrow-right++ | Next Image |
-| ++shift+g++ | Toggle Gallery Pin |
-| ++shift+arrow-up++ | Increase Gallery Image Size |
-| ++shift+arrow-down++ | Decrease Gallery Image Size |
-
-## Unified Canvas Hotkeys
-
-| Setting | Hotkey |
-| --------------------------------- | ---------------------- |
-| ++b++ | Select Brush |
-| ++e++ | Select Eraser |
-| ++bracket-left++ | Decrease Brush Size |
-| ++bracket-right++ | Increase Brush Size |
-| ++shift+bracket-left++ | Decrease Brush Opacity |
-| ++shift+bracket-right++ | Increase Brush Opacity |
-| ++v++ | Move Tool |
-| ++shift+f++ | Fill Bounding Box |
-| ++del++ / ++backspace++ | Erase Bounding Box |
-| ++c++ | Select Color Picker |
-| ++n++ | Toggle Snap |
-| ++"Hold Space"++ | Quick Toggle Move |
-| ++q++ | Toggle Layer |
-| ++shift+c++ | Clear Mask |
-| ++h++ | Hide Mask |
-| ++shift+h++ | Show/Hide Bounding Box |
-| ++shift+m++ | Merge Visible |
-| ++shift+s++ | Save To Gallery |
-| ++ctrl+c++ | Copy To Clipboard |
-| ++shift+d++ | Download Image |
-| ++ctrl+z++ | Undo |
-| ++ctrl+y++ / ++ctrl+shift+z++ | Redo |
-| ++r++ | Reset View |
-| ++arrow-left++ | Previous Staging Image |
-| ++arrow-right++ | Next Staging Image |
-| ++enter++ | Accept Staging Image |
\ No newline at end of file
diff --git a/docs/features/DATABASE.md b/docs/features/database.md
similarity index 90%
rename from docs/features/DATABASE.md
rename to docs/features/database.md
index 2d44dda595f..ad2f0e105c1 100644
--- a/docs/features/DATABASE.md
+++ b/docs/features/database.md
@@ -2,8 +2,6 @@
title: Database
---
-# Invoke's SQLite Database
-
Invoke uses a SQLite database to store image, workflow, model, and execution data.
We take great care to ensure your data is safe, by utilizing transactions and a database migration system.
@@ -24,12 +22,10 @@ SQLite can run on an in-memory database. Your existing database is untouched whe
This is very useful for testing, as there is no chance of a database change modifying your "physical" database.
-To run Invoke with a memory database, edit your `invokeai.yaml` file, and add `use_memory_db: true` to the `Paths:` stanza:
+To run Invoke with a memory database, edit your `invokeai.yaml` file and add `use_memory_db: true`:
```yaml
-InvokeAI:
- Development:
- use_memory_db: true
+use_memory_db: true
```
Delete this line (or set it to `false`) to use your main database.
diff --git a/docs/features/GALLERY.md b/docs/features/gallery.md
similarity index 100%
rename from docs/features/GALLERY.md
rename to docs/features/gallery.md
diff --git a/docs/features/index.md b/docs/features/index.md
deleted file mode 100644
index 7d0c0c25e5d..00000000000
--- a/docs/features/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: Overview
----
-
-Here you can find the documentation for InvokeAI's various features.
-
-## The [Getting Started Guide](../help/gettingStartedWithAI)
-A getting started guide for those new to AI image generation.
-
-## The Basics
-### * The [Web User Interface](WEB.md)
-Guide to the Web interface. Also see the [WebUI Hotkeys Reference Guide](WEBUIHOTKEYS.md)
-
-### * The [Unified Canvas](UNIFIED_CANVAS.md)
-Build complex scenes by combine and modifying multiple images in a stepwise
-fashion. This feature combines img2img, inpainting and outpainting in
-a single convenient digital artist-optimized user interface.
-
-## Image Generation
-### * [Prompt Engineering](PROMPTS.md)
-Get the images you want with the InvokeAI prompt engineering language.
-
-### * The [LoRA, LyCORIS, LCM-LoRA Models](CONCEPTS.md)
-Add custom subjects and styles using a variety of fine-tuned models.
-
-### * [ControlNet](CONTROLNET.md)
-Learn how to install and use ControlNet models for fine control over
-image output.
-
-### * [Image-to-Image Guide](IMG2IMG.md)
-Use a seed image to build new creations.
-
-## Model Management
-
-### * [Model Installation](../installation/050_INSTALLING_MODELS.md)
-Learn how to import third-party models and switch among them. This
-guide also covers optimizing models to load quickly.
-
-### * [Merging Models](MODEL_MERGING.md)
-Teach an old model new tricks. Merge 2-3 models together to create a
-new model that combines characteristics of the originals.
-
-### * [Textual Inversion](TEXTUAL_INVERSIONS.md)
-Personalize models by adding your own style or subjects.
-
-## Other Features
-
-### * [The NSFW Checker](WATERMARK+NSFW.md)
-Prevent InvokeAI from displaying unwanted racy images.
-
-### * [Controlling Logging](LOGGING.md)
-Control how InvokeAI logs status messages.
-
-### * [Command-line Utilities](UTILITIES.md)
-A list of the command-line utilities available with InvokeAI.
-
-
diff --git a/docs/img/invoke-symbol-wht-lrg.svg b/docs/img/invoke-symbol-wht-lrg.svg
new file mode 100755
index 00000000000..17cfdc77da7
--- /dev/null
+++ b/docs/img/invoke-symbol-wht-lrg.svg
@@ -0,0 +1,3 @@
+
diff --git a/docs/index.md b/docs/index.md
index d55d6a14f8f..b1520ba4fba 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,181 +1,75 @@
---
-title: Home
+title: Invoke
---
-
-
-
-
-
[![project logo](https://github.com/invoke-ai/InvokeAI/assets/31807370/6e3728c7-e90e-4711-905c-3b55844ff5be)](https://github.com/invoke-ai/InvokeAI)
[![discord badge]][discord link]
-
[![latest release badge]][latest release link]
[![github stars badge]][github stars link]
[![github forks badge]][github forks link]
-
-
-
+[![latest commit to main badge]][latest commit to main link]
[![github open issues badge]][github open issues link]
[![github open prs badge]][github open prs link]
-[ci checks on dev badge]:
- https://flat.badgen.net/github/checks/invoke-ai/InvokeAI/development?label=CI%20status%20on%20dev&cache=900&icon=github
-[ci checks on dev link]:
- https://github.com/invoke-ai/InvokeAI/actions?query=branch%3Adevelopment
-[ci checks on main badge]:
- https://flat.badgen.net/github/checks/invoke-ai/InvokeAI/main?label=CI%20status%20on%20main&cache=900&icon=github
-[ci checks on main link]:
- https://github.com/invoke-ai/InvokeAI/actions/workflows/test-invoke-conda.yml
[discord badge]: https://flat.badgen.net/discord/members/ZmtBAhwWhy?icon=discord
[discord link]: https://discord.gg/ZmtBAhwWhy
-[github forks badge]:
- https://flat.badgen.net/github/forks/invoke-ai/InvokeAI?icon=github
-[github forks link]:
- https://useful-forks.github.io/?repo=lstein%2Fstable-diffusion
-[github open issues badge]:
- https://flat.badgen.net/github/open-issues/invoke-ai/InvokeAI?icon=github
-[github open issues link]:
- https://github.com/invoke-ai/InvokeAI/issues?q=is%3Aissue+is%3Aopen
-[github open prs badge]:
- https://flat.badgen.net/github/open-prs/invoke-ai/InvokeAI?icon=github
-[github open prs link]:
- https://github.com/invoke-ai/InvokeAI/pulls?q=is%3Apr+is%3Aopen
-[github stars badge]:
- https://flat.badgen.net/github/stars/invoke-ai/InvokeAI?icon=github
+[github forks badge]: https://flat.badgen.net/github/forks/invoke-ai/InvokeAI?icon=github
+[github forks link]: https://useful-forks.github.io/?repo=lstein%2Fstable-diffusion
+[github open issues badge]: https://flat.badgen.net/github/open-issues/invoke-ai/InvokeAI?icon=github
+[github open issues link]: https://github.com/invoke-ai/InvokeAI/issues?q=is%3Aissue+is%3Aopen
+[github open prs badge]: https://flat.badgen.net/github/open-prs/invoke-ai/InvokeAI?icon=github
+[github open prs link]: https://github.com/invoke-ai/InvokeAI/pulls?q=is%3Apr+is%3Aopen
+[github stars badge]: https://flat.badgen.net/github/stars/invoke-ai/InvokeAI?icon=github
[github stars link]: https://github.com/invoke-ai/InvokeAI/stargazers
-
-[latest release badge]:
- https://flat.badgen.net/github/release/invoke-ai/InvokeAI/development?icon=github
+[latest commit to main badge]: https://flat.badgen.net/github/last-commit/invoke-ai/InvokeAI/main?icon=github&color=yellow&label=last%20commit&cache=900
+[latest commit to main link]: https://github.com/invoke-ai/InvokeAI/commits/main
+[latest release badge]: https://flat.badgen.net/github/release/invoke-ai/InvokeAI/development?icon=github
[latest release link]: https://github.com/invoke-ai/InvokeAI/releases
-InvokeAI is an
-implementation of Stable Diffusion, the open source text-to-image and
-image-to-image generator. It provides a streamlined process with various new
-features and options to aid the image generation process. It runs on Windows,
-Mac and Linux machines, and runs on GPU cards with as little as 4 GB of RAM.
+Invoke is a leading creative engine built to empower professionals and enthusiasts alike. Generate and create stunning visual media using the latest AI-driven technologies. Invoke offers an industry leading web-based UI, and serves as the foundation for multiple commercial products.
-## :octicons-link-24: Quick Links
-
-
-
-
-
-
-
-
-
-
-
-
-
-## :octicons-gift-24: InvokeAI Features
-
-### Installation
- - [Automated Installer](installation/010_INSTALL_AUTOMATED.md)
- - [Manual Installation](installation/020_INSTALL_MANUAL.md)
- - [Docker Installation](installation/040_INSTALL_DOCKER.md)
-
-### The InvokeAI Web Interface
-- [WebUI overview](features/WEB.md)
-- [WebUI hotkey reference guide](features/WEBUIHOTKEYS.md)
-- [WebUI Unified Canvas for Img2Img, inpainting and outpainting](features/UNIFIED_CANVAS.md)
-
-
-
-### Image Management
-- [Image2Image](features/IMG2IMG.md)
-- [Adding custom styles and subjects](features/CONCEPTS.md)
-- [Upscaling and Face Reconstruction](features/POSTPROCESS.md)
-- [Other Features](features/OTHER.md)
-
-
-### Model Management
-- [Installing](installation/050_INSTALLING_MODELS.md)
-- [Model Merging](features/MODEL_MERGING.md)
-- [ControlNet Models](features/CONTROLNET.md)
-- [Style/Subject Concepts and Embeddings](features/CONCEPTS.md)
-- [Watermarking and the Not Safe for Work (NSFW) Checker](features/WATERMARK+NSFW.md)
-
-### Prompt Engineering
-- [Prompt Syntax](features/PROMPTS.md)
+## Installation
-### InvokeAI Configuration
-- [Guide to InvokeAI Runtime Settings](features/CONFIGURATION.md)
-- [Database Maintenance and other Command Line Utilities](features/UTILITIES.md)
+The [installer script](installation/installer.md) is the easiest way to install and update the application.
-## :material-target: Troubleshooting
+You can also install Invoke as python package [via PyPI](installation/manual.md) or [docker](installation/docker.md).
-Please check out our **[:material-frequently-asked-questions:
-FAQ](help/FAQ/)** to
-get solutions for common installation problems and other issues.
+See the [installation section](./installation/index.md) for more information.
-## :octicons-repo-push-24: Contributing
+## Help
-Anyone who wishes to contribute to this project, whether documentation,
-features, bug fixes, code cleanup, testing, or code reviews, is very much
-encouraged to do so.
+Please first check the [FAQ](./faq.md) to see if there is a fix for your issue or answer to your question.
-[Please take a look at our Contribution documentation to learn more about contributing to InvokeAI.
-](contributing/CONTRIBUTING.md)
+If you still have a problem, [create an issue](https://github.com/invoke-ai/InvokeAI/issues) or ask for help on [Discord](https://discord.gg/ZmtBAhwWhy).
-## :octicons-person-24: Contributors
+## Training
-This software is a combined effort of various people from across the world.
-[Check out the list of all these amazing people](other/CONTRIBUTORS.md). We
-thank them for their time, hard work and effort.
+Invoke Training has moved to its own repository, with a dedicated UI for accessing common scripts like Textual Inversion and LoRA training.
-## :octicons-question-24: Support
+You can find more by visiting the repo at .
-For support, please use this repository's GitHub Issues tracking service. Feel
-free to send me an email if you use and like the script.
+## Contributing
-Original portions of the software are Copyright (c) 2022-23
-by [The InvokeAI Team](https://github.com/invoke-ai).
+We welcome contributions, big and small. Please review our [contributing guide](contributing/index.md) if you'd like make a contribution.
+This software is a combined effort of [people across the world](contributing/contributors.md). We thank them for their time, hard work and effort!
diff --git a/docs/installation/060_INSTALL_PATCHMATCH.md b/docs/installation/060_INSTALL_PATCHMATCH.md
deleted file mode 100644
index a9646f8b607..00000000000
--- a/docs/installation/060_INSTALL_PATCHMATCH.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: Installing PyPatchMatch
----
-
-# :material-image-size-select-large: Installing PyPatchMatch
-
-pypatchmatch is a Python module for inpainting images. It is not needed to run
-InvokeAI, but it greatly improves the quality of inpainting and outpainting and
-is recommended.
-
-Unfortunately, it is a C++ optimized module and installation can be somewhat
-challenging. This guide leads you through the steps.
-
-## Windows
-
-You're in luck! On Windows platforms PyPatchMatch will install automatically on
-Windows systems with no extra intervention.
-
-## Macintosh
-
-You need to have opencv installed so that pypatchmatch can be built:
-
-```bash
-brew install opencv
-```
-
-The next time you start `invoke`, after successfully installing opencv, pypatchmatch will be built.
-
-## Linux
-
-Prior to installing PyPatchMatch, you need to take the following steps:
-
-### Debian Based Distros
-
-1. Install the `build-essential` tools:
-
- ```sh
- sudo apt update
- sudo apt install build-essential
- ```
-
-2. Install `opencv`:
-
- ```sh
- sudo apt install python3-opencv libopencv-dev
- ```
-
-3. Activate the environment you use for invokeai, either with `conda` or with a
- virtual environment.
-
-4. Install pypatchmatch:
-
- ```sh
- pip install pypatchmatch
- ```
-
-5. Confirm that pypatchmatch is installed. At the command-line prompt enter
- `python`, and then at the `>>>` line type
- `from patchmatch import patch_match`: It should look like the following:
-
- ```py
- Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
- Type "help", "copyright", "credits" or "license" for more information.
- >>> from patchmatch import patch_match
- Compiling and loading c extensions from "/home/lstein/Projects/InvokeAI/.invokeai-env/src/pypatchmatch/patchmatch".
- rm -rf build/obj libpatchmatch.so
- mkdir: created directory 'build/obj'
- mkdir: created directory 'build/obj/csrc/'
- [dep] csrc/masked_image.cpp ...
- [dep] csrc/nnf.cpp ...
- [dep] csrc/inpaint.cpp ...
- [dep] csrc/pyinterface.cpp ...
- [CC] csrc/pyinterface.cpp ...
- [CC] csrc/inpaint.cpp ...
- [CC] csrc/nnf.cpp ...
- [CC] csrc/masked_image.cpp ...
- [link] libpatchmatch.so ...
- ```
-
-### Arch Based Distros
-
-1. Install the `base-devel` package:
-
- ```sh
- sudo pacman -Syu
- sudo pacman -S --needed base-devel
- ```
-
-2. Install `opencv` and `blas`:
-
- ```sh
- sudo pacman -S opencv blas
- ```
-
- or for CUDA support
-
- ```sh
- sudo pacman -S opencv-cuda blas
- ```
-
-3. Fix the naming of the `opencv` package configuration file:
-
- ```sh
- cd /usr/lib/pkgconfig/
- ln -sf opencv4.pc opencv.pc
- ```
-
-[**Next, Follow Steps 4-6 from the Debian Section above**](#linux)
-
-If you see no errors you're ready to go!
diff --git a/docs/installation/INSTALLATION.md b/docs/installation/INSTALLATION.md
deleted file mode 100644
index 267376f197c..00000000000
--- a/docs/installation/INSTALLATION.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Installation and Updating Overview
-
-Before installing, review the [installation requirements] to ensure your system is set up properly.
-
-See the [FAQ] for frequently-encountered installation issues.
-
-If you need more help, join our [discord] or [create an issue].
-
-
Automatic Install & Updates
-
-✅ The automatic install is the best way to run InvokeAI. Check out the [installation guide] to get started.
-
-⬆️ The same installer is also the best way to update InvokeAI - Simply rerun it for the same folder you installed to.
-
-The installation process simply manages installation for the core libraries & application dependencies that run Invoke.
-Any models, images, or other assets in the Invoke root folder won't be affected by the installation process.
-
-
Manual Install
-
-If you are familiar with python and want more control over the packages that are installed, you can [install InvokeAI manually via PyPI].
-
-Updates are managed by reinstalling the latest version through PyPi.
-
-
Developer Install
-
-If you want to contribute to InvokeAI, consult the [developer install guide].
-
-
Docker Install
-
-This method is recommended for those familiar with running Docker containers.
-
-We offer a method for creating Docker containers containing InvokeAI and its dependencies. This method is recommended for individuals with experience with Docker containers and understand the pluses and minuses of a container-based install.
-
-See the [docker installation guide].
-
-
Other Installation Guides
-
-- [PyPatchMatch](060_INSTALL_PATCHMATCH.md)
-- [Installing Models](050_INSTALLING_MODELS.md)
-
-[install InvokeAI manually via PyPI]: 020_INSTALL_MANUAL.md
-[developer install guide]: INSTALL_DEVELOPMENT.md
-[docker installation guide]: 040_INSTALL_DOCKER.md
-[installation guide]: 010_INSTALL_AUTOMATED.md
-[FAQ]: ../help/FAQ.md
-[discord]: discord.gg/invoke-ai
-[create an issue]: https://github.com/invoke-ai/InvokeAI/issues
-[installation requirements]: INSTALL_REQUIREMENTS.md
diff --git a/docs/installation/INSTALL_DEVELOPMENT.md b/docs/installation/INSTALL_DEVELOPMENT.md
deleted file mode 100644
index ead6b3bc8d6..00000000000
--- a/docs/installation/INSTALL_DEVELOPMENT.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Developer Install
-
-!!! warning
-
- InvokeAI uses a SQLite database. By running on `main`, you accept responsibility for your database. This
- means making regular backups (especially before pulling) and/or fixing it yourself in the event that a
- PR introduces a schema change.
-
- If you don't need persistent backend storage, you can use an ephemeral in-memory database by setting
- `use_memory_db: true` in your `invokeai.yaml` file. You'll also want to set `scan_models_on_startup: true`
- so that your models are registered on startup.
-
- If this is untenable, you should run the application via the official installer or a manual install of the
- python package from PyPI. These releases will not break your database.
-
-If you have an interest in how InvokeAI works, or you would like to add features or bugfixes, you are encouraged to install the source code for InvokeAI.
-
-!!! info "Why do I need the frontend toolchain?"
-
- The repo doesn't contain a build of the frontend. You'll be responsible for rebuilding it (or running it in dev mode) to use the app, as described in the [frontend dev toolchain] docs.
-
-