* configure the NSFW checker at install time with default on
1. Changes the --safety_checker argument to --nsfw_checker and
--no-nsfw_checker. The original argument is recognized for backward
compatibility.
2. The configure script asks users whether to enable the checker
(default yes). Also offers users ability to select default sampler and
number of generation steps.
3.Enables the pasting of the caution icon on blurred images when
InvokeAI is installed into the package directory.
4. Adds documentation for the NSFW checker, including caveats about
accuracy, memory requirements, and intermediate image dispaly.
* use better fitting icon
* NSFW defaults false for testing
* set default back to nsfw active
Co-authored-by: Matthias Wild <40327258+mauwii@users.noreply.github.com>
Co-authored-by: mauwii <Mauwii@outlook.de>
* disable NSFW checker loading during the CI tests
The NSFW filter apparently causes invoke.py to crash during CI testing,
possibly due to out of memory errors. This workaround disables NSFW
model loading.
* doc change
* fix formatting errors in yml files
* Fixes bug preventing multiple images from being generated
* Fixes valid seam strength value range
* Update Delete Alert Text
Indicates to the user that images are not permanently deleted.
* Fixes left/right arrows not working on gallery
* Fixes initial image on load erroneously set to a user uploaded image
Should be a result gallery image.
* Lightbox Fixes
- Lightbox is now a button in the current image buttons
- Lightbox is also now available in the gallery context menu
- Lightbox zoom issues fixed
- Lightbox has a fade in animation.
* Fix image display wrapper in current preview not overflow bounds
* Revert "Fix image display wrapper in current preview not overflow bounds"
This reverts commit 5511c82714dbf1d1999d64e8bc357bafa34ddf37.
* Change Staging Area discard icon from Bin to X
* Expose Snap Threshold and Move Snap Settings to BBox Panel
* Changes img2img strength default to 0.75
* Fixes drawing triggering when mouse enters canvas w/ button down
When we only supported inpainting and no zoom, this was useful. It allowed the cursor to leave the canvas (which was easy to do given the limited canvas dimensions) and without losing the "I am drawing" state.
With a zoomable canvas this is no longer as useful.
Additionally, we have more popovers and tools (like the color pickers) which result in unexpected brush strokes. This fixes that issue.
* Revert "Expose Snap Threshold and Move Snap Settings to BBox Panel"
We will handle this a bit differently - by allowing the grid origin to be moved. I will dig in at some point.
This reverts commit 33c92ecf4da724c2f17d9d91c7ea31a43a2f6deb.
* Adds Limit Strokes to Box
* Adds fill bounding box button
* Adds erase bounding box button
* Changes Staging area discard icon to match others
* Fixes right click breaking move tool
* Fixes brush preview visibility issue with "darken outside box"
* Fixes history bugs with addFillRect, addEraseRect, and other actions
* Adds missing `key`
* Fixes postprocessing being applied to canvas generations
* Fixes bbox not getting scaled in various situations
* Fixes staging area show image toggle not resetting on accept/discard
* Locks down canvas while generating/staging
* Fixes move tool breaking when canvas loses focus during move/transform
* Hides cursor when restrict strokes is on and mouse outside bbox
* Lints
* Builds fresh bundle
* Fix overlapping hotkey for Fill Bounding Box
* Build Fresh Bundle
* Fixes bug with mask and bbox overlay
* Builds fresh bundle
Co-authored-by: blessedcoolant <54517381+blessedcoolant@users.noreply.github.com>
Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
* refer to the platform as 'osx' instead of 'mac', otherwise the
composed URL to micromamba is wrong.
* move the `-O` option to `tar` to be grouped with the other tar flags
to avoid the `-O` being interpreted as something to unarchive.
* test linux install
* try removing http from parsed requirements
* pip install confirmed working on linux
* ready for linux testing
- rebuilt py3.10-linux-x86_64-cuda-reqs.txt to include pypatchmatch
dependency.
- point install.sh and install.bat to test-installer branch.
* Updates MPS reqs
* detect broken readline history files
* fix download.pytorch.org URL
* Test installer (Win 11) (#1620)
Co-authored-by: Cyrus Chan <cyruswkc@hku.hk>
* Test installer (MacOS 13.0.1 w/ torch==1.12.0) (#1621)
* Test installer (Win 11)
* Test installer (MacOS 13.0.1 w/ torch==1.12.0)
Co-authored-by: Cyrus Chan <cyruswkc@hku.hk>
* change sourceball to development for testing
* Test installer (MacOS 13.0.1 w/ torch==1.12.1 & torchvision==1.13.1) (#1622)
* Test installer (Win 11)
* Test installer (MacOS 13.0.1 w/ torch==1.12.0)
* Test installer (MacOS 13.0.1 w/ torch==1.12.1 & torchvision==1.13.1)
Co-authored-by: Cyrus Chan <cyruswkc@hku.hk>
Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
Co-authored-by: Cyrus Chan <82143712+cyruschan360@users.noreply.github.com>
Co-authored-by: Cyrus Chan <cyruswkc@hku.hk>
* debloat Dockerfile
- less options more but more userfriendly
- better Entrypoint to simulate CLI usage
- without command the container still starts the web-host
* debloat build.sh
* better syntax in run.sh
* update Docker docs
- fix description of VOLUMENAME
- update run script example to reflect new entrypoint
* Converts ESRGAN image input to RGB
- Also adds typing for image input.
- Partially resolves#1604
* ensure there are unmasked pixels before color matching
Co-authored-by: Kyle Schouviller <kyle0654@hotmail.com>
This restores the correct behavior of list_models() and quenches
the bug of list_models() returning a single model entry named "name".
I have not investigated what was wrong with the new version, but I
think it may have to do with changes to the behavior in dict.update()
## The concepts library now works with the Web UI
This PR makes it possible to include a Hugging Face concepts library
<style-or-subject-trigger> in the WebUI prompts. The metadata seems to
be correctly handled.
* tweak setup and environment files for linux & pypatchmatch
- Downgrade python requirements to 3.9 because 3.10 is not supported
on Ubuntu 20.04 LTS (widely-used distro)
- Use our github pypatchmatch 0.1.3 in order to install Makefile
where it needs to be.
- Restored "-e ." as the last install step on pip installs. Hopefully
this will not trigger the high-CPU hang we've previously experienced.
* keep windows on basicsr 1.4.1
* keep windows on basicsr 1.4.1
* bump pypatchmatch requirement to 0.1.4
- This brings in a version of pypatchmatch that will gracefully
handle internet connection not available at startup time.
- Also refactors and simplifies the handling of gfpgan's basicsr requirement
across various platforms.
- Add documentation for the Hugging Face concepts library and TI embedding.
- Fixup index.md to point to each of the feature documentation files,
including ones that are pending.
This PR makes it possible to include a Hugging Face concepts library
<style-or-subject-trigger> in the WebUI prompt. The metadata seems
to be correctly handled.
This feature was added to prevent the CI Macintosh tests from erroring
out when patchmatch is unable to retrieve its shared library from
github assets.
* update dockerfile
* remove not existing file from .dockerignore
* remove bloat and unecesary step
also use --no-cache-dir for pip install
image is now close to 2GB
* make Dockerfile a variable
* set base image to `ubuntu:22.10`
* add build-essential
* link outputs folder for persistence
* update tag variable
* update docs
* fix not customizeable build args, add reqs output
* this adds the Statement of Values
Google doc source = https://docs.google.com/document/d/1-PrUKDJcxy8OyNGc8CyiHhv2VgLvjt7LRGlEpbg1nmQ/edit?usp=sharing
* Fix heading
* Update InvokeAI_Statement_of_Values.md
* Update InvokeAI_Statement_of_Values.md
* Update InvokeAI_Statement_of_Values.md
* Update InvokeAI_Statement_of_Values.md
* Update InvokeAI_Statement_of_Values.md
* add keturn and mauwii to the team member list
* Fix punctuation
* this adds the Statement of Values
Google doc source = https://docs.google.com/document/d/1-PrUKDJcxy8OyNGc8CyiHhv2VgLvjt7LRGlEpbg1nmQ/edit?usp=sharing
* add keturn and mauwii to the team member list
* fix formating
- make sub bullets use * (decide to all use - or *)
- indent sub bullets
Sorry, first only looked at the code version and found this only after
looking at the markdown rendered version
* use multiparagraph numbered sections
* Break up Statement Of Values as per comments on #1584
* remove duplicated word, reduce vagueness
it's important not to overstate how many artists we are consulting.
* fix typo (sorry blessedcoolant)
Co-authored-by: mauwii <Mauwii@outlook.de>
Co-authored-by: damian <git@damianstewart.com>
* add whole <style token> to vocab for concept library embeddings
* add ability to load multiple concept .bin files
* make --log_tokenization respect custom tokens
* start working on concept downloading system
* preliminary support for dynamic loading and merging of multiple embedded models
- The embedding_manager is now enhanced with ldm.invoke.concepts_lib,
which handles dynamic downloading and caching of embedded models from
the Hugging Face concepts library (https://huggingface.co/sd-concepts-library)
- Downloading of a embedded model is triggered by the presence of one or more
<concept> tags in the prompt.
- Once the embedded model is downloaded, its trigger phrase will be loaded
into the embedding manager and the prompt's <concept> tag will be replaced
with the <trigger_phrase>
- The downloaded model stays on disk for fast loading later.
- The CLI autocomplete will complete partial <concept> tags for you. Type a
'<' and hit tab to get all ~700 concepts.
BUGS AND LIMITATIONS:
- MODEL NAME VS TRIGGER PHRASE
You must use the name of the concept embed model from the SD
library, and not the trigger phrase itself. Usually these are the
same, but not always. For example, the model named "hoi4-leaders"
corresponds to the trigger "<HOI4-Leader>"
One reason for this design choice is that there is no apparent
constraint on the uniqueness of the trigger phrases and one trigger
phrase may map onto multiple models. So we use the model name
instead.
The second reason is that there is no way I know of to search
Hugging Face for models with certain trigger phrases. So we'd have
to download all 700 models to index the phrases.
The problem this presents is that this may confuse users, who will
want to reuse prompts from distributions that use the trigger phrase
directly. Usually this will work, but not always.
- WON'T WORK ON A FIREWALLED SYSTEM
If the host running IAI has no internet connection, it can't
download the concept libraries. I will add a script that allows
users to preload a list of concept models.
- BUG IN PROMPT REPLACEMENT WHEN MODEL NOT FOUND
There's a small bug that occurs when the user provides an invalid
model name. The <concept> gets replaced with <None> in the prompt.
* fix loading .pt embeddings; allow multi-vector embeddings; warn on dupes
* simplify replacement logic and remove cuda assumption
* download list of concepts from hugging face
* remove misleading customization of '*' placeholder
the existing code as-is did not do anything; unclear what it was supposed to do.
the obvious alternative -- setting using 'placeholder_strings' instead of
'placeholder_tokens' to match model.params.personalization_config.params.placeholder_strings --
caused a crash. i think this is because the passed string also needed to be handed over
on init of the PersonalizedBase as the 'placeholder_token' argument.
this is weird config dict magic and i don't want to touch it. put a
breakpoint in personalzied.py line 116 (top of PersonalizedBase.__init__) if
you want to have a crack at it yourself.
* address all the issues raised by damian0815 in review of PR #1526
* actually resize the token_embeddings
* multiple improvements to the concept loader based on code reviews
1. Activated the --embedding_directory option (alias --embedding_path)
to load a single embedding or an entire directory of embeddings at
startup time.
2. Can turn off automatic loading of embeddings using --no-embeddings.
3. Embedding checkpoints are scanned with the pickle scanner.
4. More informative error messages when a concept can't be loaded due
either to a 404 not found error or a network error.
* autocomplete terms end with ">" now
* fix startup error and network unreachable
1. If the .invokeai file does not contain the --root and --outdir options,
invoke.py will now fix it.
2. Catch and handle network problems when downloading hugging face textual
inversion concepts.
* fix misformatted error string
Co-authored-by: Damian Stewart <d@damianstewart.com>
* Update scripts/configure_invokeai.py
prevent crash if output exists
Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
* implement changes requested by reviews
* default to correct root and output directory on Windows systems
- Previously the script was relying on the readline buffer editing
feature to set up the correct default. But this feature doesn't
exist on windows.
- This commit detects when user typed return with an empty directory
value and replaces with the default directory.
* improved readability of directory choices
* Update scripts/configure_invokeai.py
Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
* better error reporting at startup
- If user tries to run the script outside of the repo or runtime directory,
a more informative message will appear explaining the problem.
Co-authored-by: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
- When invokeai installed with `pip install .`, the frontend will be in
the venv directory under invokeai.
- When invokeai installed with `pip install -e .`, the frontend will be
in the source repo. -invoke_ai_web_sever.py will look in both places
using relative
addressing.
- If !switch were to fail on a particular model, then generate got
confused and wouldn't try again until you switch to a different working
model and back again.
- This commit fixes and closes#1547
- When doing long-running canvas image exporting actions, display indeterminate progress bar
- Fix staging area image outline not displaying after committing/discarding results
- Thumbnails are saved whenever an image is saved, and when gallery requests images from server
- Thumbnails saved at original image aspect ratio with width of 128px as WEBP
- If the thumbnail property of an image is unavailable for whatever reason, the image's full size URL is used instead
- Dispatch an `addToast` action with standard Chakra toast options object to add a toast to the toastQueue
- The hook is called in App.tsx and just useEffect's w/ toastQueue as dependency to create the toasts
- So now you can add toasts anywhere you have access to `dispatch`, which includes middleware and thunks
- Adds first usage of this for the save image buttons in canvas
Adds hotkeys to canvas. As part of this change, the access to konva instance objects was refactored:
Previously closure'd refs were used to indirectly get access to the konva instances outside of react components.
Now, a getter and setter function are used to provide access directly to the konva objects.
When drawing with the locked canvas, if a brush stroke gets too close to the edge of the canvas and its stroke would extend past the edge of the canvas, the edge of that stroke will be seen after unlocking the canvas.
This could cause a problem if you unlock the canvas and now have a bunch of strokes just outside the init image area, which are far back in undo history and you cannot easily erase.
With this change, lines drawn while the canvas is locked get clipped to the initial image bbox, fixing this issue.
Additionally, the merge and save to gallery functions have been updated to respect the initial image bbox so they function how you'd expect.
Our app changes redux state very, very often. As our undo/redo history grows, the calls to persist state start to take in the 100ms range, due to a the deep cloning of the history. This causes very noticeable performance lag.
The deep cloning is required because we need to blacklist certain items in redux from being persisted (e.g. the app's connection status).
Debouncing the whole process of persistence is a simple and effective solution. Unfortunately, `redux-persist` dropped `debounce` between v4 and v5, replacing it with `throttle`. `throttle`, instead of delaying the expensive action until a period of X ms of inactivity, simply ensures the action is executed at least every X ms. Of course, this does not fix our performance issue.
The patch is very simple. It adds a `debounce` argument - a number of milliseconds - and debounces `redux-persist`'s `update()` method (provided by `createPersistoid`) by that many ms.
Before this, I also tried writing a custom storage adapter for `redux-persist` to debounce the calls to `localStorage.setItem()`. While this worked and was far less invasive, it doesn't actually address the issue. It turns out `setItem()` is a very fast part of the process.
We use `redux-deep-persist` to simplify the `redux-persist` configuration, which can get complicated when you need to blacklist or whitelist deeply nested state. There is also a patch here for that library because it uses the same types as `redux-persist`.
Unfortunately, the last release of `redux-persist` used a package `flat-stream` which was malicious and has been removed from npm. The latest commits to `redux-persist` (about 1 year ago) do not build; we cannot use the master branch. And between the last release and last commit, the changes have all been breaking.
Patching this last release (about 3 years old at this point) directly is far simpler than attempting to fix the upstream library's master branch or figuring out an alternative to the malicious and now non-existent dependency.
The new mask is only visible properly at max opacity but at max opacity the brush preview becomes fully opaque blocking the view. So the mask brush preview no remains at 0.5 no matter what the Brush opacity is.
This is the same as PR #1537 except that it removes a redundant
`scripts` argument from `setup.py` that appeared at some point.
I also had to unpin the github dependencies in `requirements.in` in
order to get conda CI tests to pass. However, dependencies are still
pinned in `requirements-base.txt` and the environment files, and install
itself is working. So I think we are good.
- When invokeai installed with `pip install .`, the frontend
will be in the venv directory under invokeai.
- When invokeai installed with `pip install -e .`, the frontend
will be in the source repo.
-invoke_ai_web_sever.py will look in both places using relative
addressing.
1. removed redundant `data_files` argument from setup.py
2. upped requirement to Python >= 3.9. This is due to a feature
used in `argparse` that is only available in 3.9 or higher.
* add test-invoke-pip.yml
* update requirements-base.txt to fix tests
* install requirements-base.txt separate
since it requires to have torch already installed
also restore origin requirements-base.txt after suc. test in my fork
* restore origin requirements
add `basicsr>=1.4.2` to requirements-base.txt
remove second installation step
* re-add previously overseen req in lin-cuda
* fix typo in setup.py - `scripts/preload_models.py`
* use GFBGAN from branch `basicsr-1.4.2`
* remove `basicsr>=1.4.2` from base reqs
* add INVOKEAI_ROOT to env
* disable upgrade of `pip`, `setuptools` and `wheel`
* try to use a venv which should not contain `wheel`
* add relative path to pip command
* use `configure_invokeai.py --no-interactive --yes`
* set grpcio to `<1.51.0`
* revert changes to use venv
* remove `--prefer-binary`
* disable step to create models.yaml
since this will not be used anymore with new `configure_invokeai.py`
* use `pip install --no-binary=":all:"`
* another try to use venv
* try uninstalling wheel before installing reqs
* dont use requirements.txt as filename
* update cache-dependency-path
* add facexlib to requirements-base.txt
* first install requirements-base.txt
* first install `-e .`, then install requirements
I know that this is obviously the wrong order, but still have a feeling
* add facexlib to requirements.in
* remove `-e .` from reqs and install after reqs
* unpin torch and torchvision in requirements.in
* fix model dl path
* fix curl output path
* create directory before downloading model
* set INVOKEAI_ROOT_PATH
https://docs.github.com/en/actions/learn-github-actions/environment-variables#naming-conventions-for-environment-variables
* INVOKEAI_ROOT ${{ env.GITHUB_WORKSPACE }}/invokeai
* fix matrix stable-diffusion-model-dl-path
* fix INVOKEAI_ROOT
* fix INVOKEAI_ROOT
* add --root and --outdir to run-tests step
* create models.yaml from example
* fix scripts variable in setup.py
by removing unused scripts
* fix archive-results path
* fix workflow to reflect latest code changes
* fix copy paste error
* fix job name
* fix matrix.stable-diffusion-model
* restructure matrix
* fix `activate conda env` step
* update the environment yamls
use same 4 git packages as for pip
* rename job in test-invoke-conda
* add tqdm to environment-lin-amd.yml
* fix python commands in test-invoke-conda.yml
Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
This corrects behavior of --no-interactive, which was in fact
asking for interaction!
New behavior:
If you pass --no-interactive it will behave exactly as it did before
and completely skip the downloading of SD models.
If you pass --yes it will do almost the same, but download the
recommended models. The combination of the two arguments is the same
as --no-interactive.
- If initial model fails to load, invoke.py will inform the user that
something is wrong with models.yaml or the models themselves and
drop user into configure_invokeai.py to repair the problem.
- The model caching system will longer try to reload the current model
if there is none.
- fixes broken setup.py in current dev
- it is just an alias for configure_invokeai.py
- preload_models.py will be deprecated, but for now
it is a second alias
- install scripts:
- allow EN-abling pip cache (use 'use-cache' as an arg to the install script)
- debug message showing which sourceball we're downloading
- add 'wheel' to pip update, so we can speed up installs from source (and quiet deprecations)
- install.sh: use absolute path for micromamba
- setup.py:
- fill 'install_requires' using 'requirements.in'
- fix 'load_models' script name
Signed-off-by: Ben Alkov <ben.alkov@gmail.com>
remove duplicate import: os
ldm.util.ask_user is imported only once now
introduce textwrap and contextlib packages to clean up the code
return, returns None implicitly so it is omitted
a function returns None by default so it is omitted
dict.get returns None by default if the value is not found so it is omitted
type of True is a bool and if the module only returns True then it should not return anything in the first place
added some indentations and line breaks to further improve readability
Signed-off-by: devops117 <55235206+devops117@users.noreply.github.com>
The step in which the new models.yaml file replaces the old one was
crashing on Windows due to the fact that on Windows, the os.rename()
function will refuse to replace an existing file, unlike the behavior
on Linux and Mac. The os.replace() function, which was introduced in
python3, supposedly fixes this.
- dangling debug messages in several files, introduced during
testing of the external root directory
- these need to be removed before they are interpreted as errors by users
'requirements.in':
- add picklescan
- finally find a good compromise for torch (==1.12.0) and
torchvision (==0.13.0) across all platforms
'invoke.sh: hotfix for MacOS - add `export PYTORCH_ENABLE_MPS_FALLBACK=1`
Signed-off-by: Ben Alkov <ben.alkov@gmail.com>
- Loader is renamed `configure_invokeai.py`, but `preload_models.py` is retained
(as a shell) for backward compatibility
- At startup, if no runtime root directory exists and no `.invokeai` startup file is
present, user will be prompted to select the runtime and outputs directories.
- Also expanded the number of initial models offered to the user to include the
most "liked" ones from HuggingFace, including the two trinart models, the
PaperCut model, and the VoxelArt model.
- Created a configuration file for initial models to be offered to the user, at
configs/INITIAL_MODELS.yaml
- dangling debug messages in several files, introduced during
testing of the external root directory
- these need to be removed before they are interpreted as errors by users
This list makes it look like there's lot going on for a single commit,
but the changes are actually pretty small
- 'install'/'invoke' scripts:
- use venv's 'activate' script instead of hacking PATH
- 'deactivate' before exiting, so we don't leave a confusing environment
hanging around
- 'setup.py':
- make 'install_requires" an accurate list of our direct dependencies,
as it should be
- add more info/details for eventual use in pypi
- 'invoke' scripts: "developer console" invocation simplified/better
logging (it's now *much* more obvious from inspection what the
"developer console" actually *is*)
- 'requirements.in':
- move 'clipseg' package out of installer and into requirements where it
should be
- bump/pin 'accelerate' package to 0.14.0 to bypass torch 1.13 SIGKILL
issue on Windows (prep for when we decide to upgrade)
- pin 'torch' as well as 'torchvision', to reduce pip-compile's
confusion
- notebooks: delete unused/deprecated notebook installer
Signed-off-by: Ben Alkov <ben.alkov@gmail.com>
- 'install'/'invoke' scripts: use venv 'activate' script
- 'setup.py':
- make 'install_requires" accurate
- add more details for eventual use in pypi
- 'invoke' scripts: "developer" console invocation simplified/better logging
- requirements:
- move 'clipseg' package out of installer and into requirements where it should be
- bump/pin 'accelerate' package to 0.14.0 to bypass torch 1.13 SIGKILL issue on Windows (prep for when we decide to upgrade)
- 'requirements.in': pin torch as well to reduce pip-compile's confusion
- notebooks: delete unused/deprecated notebook installer
Signed-off-by: Ben Alkov <ben.alkov@gmail.com>
- If there is not already a `.invokeai` file in the user's home directory
the first time invoke.py runs, it will create an empty one with comments
showing how to customize it.
- This fixes an issue in which generated images were not being saved
into the ~/invokeai/outputs directory, but were instead being stored
to a relative './outputs/img_samples' path as before.
- Note that if you specify a relative directory in the --outdir argument,
it will now be interpreted as relative to the invokeai run directory.
You will need to provide an absolute pathname in order to save the
outputs outside this directory.
- Also found and fixed a minor problem in which commands with syntax
errors were not being stored to the CLI command history.
- This fixes the clipseg loading code so that it looks in the root directory
for the model.
- It also adds several __init__.py files needed to allow InvokeAI to be
installed without the -e (editable) flag. This lets you delete the
source code directory after installation.
- preload_models.py has been renamed load_models.py. I've left a
shell legacy version with the previous name to avoid breaking any
code.
- The load_models.py script now takes an optional --root argument,
which points to an install directory for the models, scripts, config
files, and the default outputs directory. In the future, the
embeddings manager directory will also be stored here.
- If no --root is provided, and no init file or environment variable
is present, load_models.py will install to '.' by default, which is
the current behavior. (This has *not* been tested thoroughly.)
- The location of the root directory is stored in the file .invokeai
in the user's home directory ($HOME on Linux/Mac, or HOMEPATH on
windows). The load_models.py script creates this file if it
does not already exist.
- invoke.py and load_models.py use the following search path to find
the install directory:
1. Contents of the environment variable INVOKEAI_ROOT
2. The --root=XXXXX option in ~/.invokeai
3. The --root option passed on the script command line.
4. As a last gasp, the currently working directory (".")
Running `python scripts/load_models.py --root ~/invokeai` will
create a directory structured like this (shortened for clarity):
~/invokeai
├── configs
│ ├── models.yaml
│ └── stable-diffusion
│ ├── v1-finetune.yaml
│ ├── v1-finetune_style.yaml
│ ├── v1-inference.yaml
│ ├── v1-inpainting-inference.yaml
│ └── v1-m1-finetune.yaml
├── models
│ ├── CompVis
│ ├── bert-base-uncased
│ ├── clipseg
│ ├── codeformer
│ ├── gfpgan
│ ├── ldm
│ │ └── stable-diffusion-v1
│ │ ├── sd-v1-5-inpainting.ckpt
│ │ └── vae-ft-mse-840000-ema-pruned.ckpt
│ └── openai
├── outputs
└── scripts
├── dream.py
├── images2prompt.py
├── invoke.py
├── legacy_api.py
├── load_models.py
├── merge_embeddings.py
├── orig_scripts
│ ├── download_first_stages.sh
│ ├── train_searcher.py
│ └── txt2img.py
├── preload_models.py
└── sd-metadata.py
1. You can now run invoke.py anywhere! Just copy it to one of your
bin directories, or put the ~/invokeai/scripts onto your PATH.
2. git pulls will no longer fight with you over models.yaml
3. It keeps end users out of the source code repo and will create
a path for us to do installs from invokeai.tar.gz.
- Under some circumstances, the image resizer was fitting
the wrong dimension to the user-provided bounding box
when an init image provided.
- Closes#1470.
I was working on attention control in #1384, started making a few
changes to improve the typing and make it easier to work with. Then the
whitespace changes touched so many lines it seemed worth separating out
these refactoring operations to this PR so they don't get mixed up with
other functional changes.
It would be helpful to merge this to `development` before continuing
work on attention control in #1384
The github diff isn't good at showing these together since they changed
whitespace on so many lines. It may be easier to review by looking at
the individual commits, and/or toggling the "hide whitespace
differences" option in the view.
This commit does several things that improve the customizability of the CLI `outcrop` command:
1. When outcropping an image you can now add a `--new_prompt` option, to specify a new prompt to be applied to the outpainted region instead of the prompt used to generate the image.
2. Similarly you can provide a new seed using `--seed` (or `-S`). A seed less than zero will pick one randomly.
3. The metadata written into the outcropped file is now more informative about what was previously stored.
4. This PR also fixes the crash that happened when trying to outcrop an image that does not contain InvokeAI metadata.
Other changes:
- add error checking suggested by @Kyle0654
- add special case in invoke.py to allow -1 to be passed as seed.
This now only occurs for postprocessing commands. Previously, -1
caused previous seed to be used, and this still applies to generate
operations.
- When outcropping an image you can now add a `--new_prompt` option, to specify
a new prompt to be used instead of the original one used to generate the image.
- Similarly you can provide a new seed using `--seed` (or `-S`). A seed of zero
will pick one randomly.
- This PR also fixes the crash that happened when trying to outcrop an image
that does not contain InvokeAI metadata.
- Works best with runwayML inpainting model
- Numerous code changes required to propagate seed to final metadata.
Original code predicated on the image being generated within InvokeAI.
- When outcropping an image you can now add a `--new_prompt` option, to specify
a new prompt to be used instead of the original one used to generate the image.
- Similarly you can provide a new seed using `--seed` (or `-S`). A seed of zero
will pick one randomly.
- This PR also fixes the crash that happened when trying to outcrop an image
that does not contain InvokeAI metadata.
- Works best with runwayML inpainting model
- Numerous code changes required to propagate seed to final metadata.
Original code predicated on the image being generated within InvokeAI.
- Place preferred startup command switches in a file named
"invokeai.init". The file can consist of a single line of switches
such as "--web --steps=28", a series of switches on each
line, or any combination of the two.
Example:
```
--web
--host=0.0.0.0
--steps=28
--grid
-f 0.6 -C 11.0 -A k_euler_a
```
- The following options, which were previously only available within
the CLI, are now available on the command line as well:
--steps
--strength
--cfg_scale
--width
--height
--fit
This commit addresses two bugs:
1) invokeai.py crashes immediately with a message about an undefined
attritube sigKILL (closes#1288). The fix is to pin torch at 1.12.1.
2) Version 1.4.2 of basicsr fails to load properly on Windows, and is
a requirement of realesrgan, however 1.4.1 works. Pinning basicsr
in our requirements file resulted in a dependency conflict, so I
ended up cloning realesrgan into the invoke-ai Git space and changing
the requirements file there.
If there is a more elegant solution, please advise.
To get the rid of the difference between main and development.
Since otherwise it will be a pain to start fixing the documentatino
(when the state between main and development is not the same ...)
Also this should fix the problem of all tests failing since environment
yamls get updated.
- squashed commit of 52 commits from PR #1327
don't log base64 progress images
Fresh Build For WebUI
[WebUI] Loopback Default False
Fixes bugs/styling
- Fixes missing web app state on new version:
Adds stateReconciler to redux-persist.
When we add more values to the state and then release the update app, they will be automatically merged in.
Reseting web UI will be needed far less.
7159ec
- Fixes console z-index
- Moves reset web UI button to visible area
Decreases gallery width on inpainting
Increases workarea split padding to 1rem
Adds missing tooltips to site header
Changes inpainting controls settings to hover
Fixes hotkeys and settings buttons not working
Improves bounding box interactions
- Bounding box can now be moved by dragging any of its edges
- Bounding box does not affect drawing if already drawing a stroke
- Can lock bounding box to draw directly on the bounding box edges
- Removes spacebar-hold behaviour due to technical issues
Fixes silent crash when init image too large
To send the mask to the server, the UI rendered the mask onto the init image and sent the whole image. The mask was then cropped by the server.
If the image was too large, the app silently failed. Maybe it exceeds the websocket size limit.
Fixed by cropping the mask in the UI layer, sending only bounding-box-sized mask image data.
Disabled bounding box settings when locked
Styles image uploader
Builds fresh bundle
Improves bounding box interaction
Added spacebar-hold-to-transform back.
Address bounding box feedback
- Adds back toggle to hide bounding box
- Box quick toggle = q, normal toggle = shift + q
- Styles canvas alert icons
Adds hints when unable to invoke
- Popover on Invoke button indicates why exactly it is disabled, e.g. prompt is empty, something else is processing, etc.
- There may be more than one reason; all are displayed.
Fix Inpainting Alerts Styling
Preventing unnecessary re-renders across the app
Code Split Inpaint Options
Isolate features to their own components so they dont re-render the other stuff each time.
[TESTING] Remove global isReady checking
I dont believe this is need at all because the isready state is constantly updated when needed and tracked real time in the Redux store. This causes massive re-renders. @psychedelicious If this is absolutely essential for a reason that I do not see, please hit me up on Discord.
Fresh Bundle
Fix Bounding Box Settings re-rendering on brush stroke
[Code Splitting] Bounding Box Options
Isolated all bounding box components to trigger unnecessary re-renders. Still need to fix bounding box triggering re-renders on the control panel inside the canvas itself. But the options panel should be a good to go with this change.
Inpainting Controls Code Spitting and Performance
Codesplit the entirety of the inpainting controls. Created new selectors for each and every component to ensure there are no unnecessary re-renders. App feels a lot smoother.
Fixes rerenders on ClearBrushHistory
Fixes crash when requesting post-generation upscale/face restoration
- Moves the inpainting paste to before the postprocessing.
Removes unused isReady state
Changes Report Bug icon to a bug
Restores shift+q bounding box shortcut
Adds alert for bounding box size to status icons
Adds asCheckbox to IAIIconButton
Rough draft of this. Not happy with the styling but it's clearer than having them look just like buttons.
Fixes crash related to old value of progress_latents in state
Styling changes and settings modal minor refactor
Fixes: uploaded JPG images not loading
Reworks CurrentImageButtons.tsx
- Change all icons to FA iconset for consistency
- Refactors IAIIconButton, IAIButton, IAIPopover to handle ref forwarding
- Redesigns buttons into group
Only generate 1 iteration when seed fixed & variations disabled
Fixes progress images select
Fixes edge case: upload over gets stuck while alt tabbing
- Press esc to close it now
Fixes display progress images select typing
Fixes current image button rerenders
Adds min width to ImageUploader
Makes fast-latents in progress default
Update Icon Button Checkbox Style Styling
Fixes next/prev image buttons
Refactor canvas buttons + more
Add Save Intermediates Step Count
For accurate mode only.
Co-Authored-By: Richard Macarthy <richardmacarthy@protonmail.com>
Restores "initial image" text
Address feedback
- moves mask clear button
- fixes intermediates
- shrinks inpainting icons by 10%
Fix Loopback Styling
Adds escape hotkey to close floating panels
Readd Hotkey for Dual Display
Updated Current Image Button Styling
- Change all icons to FA iconset for consistency
- Refactors IAIIconButton, IAIButton, IAIPopover to handle ref forwarding
- Redesigns buttons into group
Codesplit the entirety of the inpainting controls. Created new selectors for each and every component to ensure there are no unnecessary re-renders. App feels a lot smoother.
Isolated all bounding box components to trigger unnecessary re-renders. Still need to fix bounding box triggering re-renders on the control panel inside the canvas itself. But the options panel should be a good to go with this change.
I dont believe this is need at all because the isready state is constantly updated when needed and tracked real time in the Redux store. This causes massive re-renders. @psychedelicious If this is absolutely essential for a reason that I do not see, please hit me up on Discord.
- Popover on Invoke button indicates why exactly it is disabled, e.g. prompt is empty, something else is processing, etc.
- There may be more than one reason; all are displayed.
To send the mask to the server, the UI rendered the mask onto the init image and sent the whole image. The mask was then cropped by the server.
If the image was too large, the app silently failed. Maybe it exceeds the websocket size limit.
Fixed by cropping the mask in the UI layer, sending only bounding-box-sized mask image data.
- Bounding box can now be moved by dragging any of its edges
- Bounding box does not affect drawing if already drawing a stroke
- Can lock bounding box to draw directly on the bounding box edges
- Removes spacebar-hold behaviour due to technical issues
- Fixes missing web app state on new version:
Adds stateReconciler to redux-persist.
When we add more values to the state and then release the update app, they will be automatically merged in.
Reseting web UI will be needed far less.
7159ec
- Fixes console z-index
- Moves reset web UI button to visible area
Complete re-write of the prompt parsing logic to be more readable and
logical, and therefore also hopefully easier to debug, maintain, and
augment.
In the process it has also become more robust to badly-formed prompts.
Squashed commit of the following:
commit 8fcfa88a16e1390d41717e940d72aed64712171c
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Sun Oct 30 17:05:57 2022 +0100
further cleanup
commit 1a1fd78bcfeb49d072e3e6d5808aa8df15441629
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Sun Oct 30 16:07:57 2022 +0100
cleanup and document
commit 099c9659fa8b8135876f9a5a50fe80b20bc0635c
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Sun Oct 30 15:54:58 2022 +0100
works fully
commit 5e6887ea8c25a1e21438ff6defb381fd027d25fd
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Sun Oct 30 15:24:31 2022 +0100
further...
commit 492fda120844d9bc1ad4ec7dd408a3374762d0ff
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Sun Oct 30 14:08:57 2022 +0100
getting there...
commit c6aab05a8450cc3c95c8691daf38fdc64c74f52d
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Fri Oct 28 14:29:03 2022 +0200
wip doesn't compile
commit 5e533f731cfd20cd435330eeb0012e5689e87e81
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Fri Oct 28 13:21:43 2022 +0200
working with CrossAttentionCtonrol but no Attention support yet
commit 9678348773431e500e110e8aede99086bb7b5955
Author: Damian at mba <damian@frey.NOSPAMco.nz>
Date: Fri Oct 28 13:04:52 2022 +0200
wip rebuiling prompt parser
- Faster startup for command line switch processing
- Specify configuration file to modify using --config option:
./scripts/preload_models.ply --config models/my-models-file.yaml
- NEVER overwrite user's existing models.yaml
- Instead, merge its contents into new config file,
and rename original to models.yaml.orig (with
message)
- models.yaml has been removed from repository and renamed
models.yaml.example
@ -56,7 +56,7 @@ unofficial Stable Diffusion models and where they can be obtained.
There are three ways to install weights files:
1. During InvokeAI installation, the `configure_invokeai.py` script can download
1. During InvokeAI installation, the `preload_models.py` script can download
them for you.
2. You can use the command-line interface (CLI) to import, configure and modify
@ -65,13 +65,13 @@ There are three ways to install weights files:
3. You can download the files manually and add the appropriate entries to
`models.yaml`.
### Installation via `configure_invokeai.py`
### Installation via `preload_models.py`
This is the most automatic way. Run `scripts/configure_invokeai.py` from the
This is the most automatic way. Run `scripts/preload_models.py` from the
console. It will ask you to select which models to download and lead you through
the steps of setting up a Hugging Face account if you haven't done so already.
To start, run `python scripts/configure_invokeai.py` from within the InvokeAI:
To start, run `python scripts/preload_models.py` from within the InvokeAI:
directory
!!! example ""
@ -162,12 +162,6 @@ the command-line client's `!import_model` command.
Type a bit of the path name and hit ++tab++ in order to get a choice of
possible completions.
!!! tip "on Windows, you can drag model files onto the command-line"
Once you have typed in `!import_model `, you can drag the model `.ckpt` file
onto the command-line to insert the model path. This way, you don't need to
type it or copy/paste.
4. Follow the wizard's instructions to complete installation as shown in the
example here:
@ -244,7 +238,7 @@ arabian-nights-1.0:
| arabian-nights-1.0 | This is the name of the model that you will refer to from within the CLI and the WebGUI when you need to load and use the model. |
| description | Any description that you want to add to the model to remind you what it is. |
| weights | Relative path to the .ckpt weights file for this model. |
| config | This is the confusingly-named configuration file for the model itself. Use `./configs/stable-diffusion/v1-inference.yaml` unless the model happens to need a custom configuration, in which case the place you downloaded it from will tell you what to use instead. For example, the runwayML custom inpainting model requires the file `configs/stable-diffusion/v1-inpainting-inference.yaml`. This is already inclued in the InvokeAI distribution and is configured automatically for you by the `configure_invokeai.py` script. |
| config | This is the confusingly-named configuration file for the model itself. Use `./configs/stable-diffusion/v1-inference.yaml` unless the model happens to need a custom configuration, in which case the place you downloaded it from will tell you what to use instead. For example, the runwayML custom inpainting model requires the file `configs/stable-diffusion/v1-inpainting-inference.yaml`. This is already inclued in the InvokeAI distribution and is configured automatically for you by the `preload_models.py` script. |
| vae | If you want to add a VAE file to the model, then enter its path here. |
| width, height | This is the width and height of the images used to train the model. Currently they are always 512 and 512. |
print('>> Patchmatch not loaded, please see https://github.com/invoke-ai/InvokeAI/blob/patchmatch-install-docs/docs/installation/INSTALL_PATCHMATCH.md')
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.