mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Merge branch 'main' into feat/onnx
This commit is contained in:
commit
eb1ba8d74b
290
LICENSE-SDXL.txt
Normal file
290
LICENSE-SDXL.txt
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
Copyright (c) 2023 Stability AI
|
||||||
|
CreativeML Open RAIL++-M License dated July 26, 2023
|
||||||
|
|
||||||
|
Section I: PREAMBLE
|
||||||
|
|
||||||
|
Multimodal generative models are being widely adopted and used, and
|
||||||
|
have the potential to transform the way artists, among other
|
||||||
|
individuals, conceive and benefit from AI or ML technologies as a tool
|
||||||
|
for content creation.
|
||||||
|
|
||||||
|
Notwithstanding the current and potential benefits that these
|
||||||
|
artifacts can bring to society at large, there are also concerns about
|
||||||
|
potential misuses of them, either due to their technical limitations
|
||||||
|
or ethical considerations.
|
||||||
|
|
||||||
|
In short, this license strives for both the open and responsible
|
||||||
|
downstream use of the accompanying model. When it comes to the open
|
||||||
|
character, we took inspiration from open source permissive licenses
|
||||||
|
regarding the grant of IP rights. Referring to the downstream
|
||||||
|
responsible use, we added use-based restrictions not permitting the
|
||||||
|
use of the model in very specific scenarios, in order for the licensor
|
||||||
|
to be able to enforce the license in case potential misuses of the
|
||||||
|
Model may occur. At the same time, we strive to promote open and
|
||||||
|
responsible research on generative models for art and content
|
||||||
|
generation.
|
||||||
|
|
||||||
|
Even though downstream derivative versions of the model could be
|
||||||
|
released under different licensing terms, the latter will always have
|
||||||
|
to include - at minimum - the same use-based restrictions as the ones
|
||||||
|
in the original license (this license). We believe in the intersection
|
||||||
|
between open and responsible AI development; thus, this agreement aims
|
||||||
|
to strike a balance between both in order to enable responsible
|
||||||
|
open-science in the field of AI.
|
||||||
|
|
||||||
|
This CreativeML Open RAIL++-M License governs the use of the model
|
||||||
|
(and its derivatives) and is informed by the model card associated
|
||||||
|
with the model.
|
||||||
|
|
||||||
|
NOW THEREFORE, You and Licensor agree as follows:
|
||||||
|
|
||||||
|
Definitions
|
||||||
|
|
||||||
|
"License" means the terms and conditions for use, reproduction, and
|
||||||
|
Distribution as defined in this document.
|
||||||
|
|
||||||
|
"Data" means a collection of information and/or content extracted from
|
||||||
|
the dataset used with the Model, including to train, pretrain, or
|
||||||
|
otherwise evaluate the Model. The Data is not licensed under this
|
||||||
|
License.
|
||||||
|
|
||||||
|
"Output" means the results of operating a Model as embodied in
|
||||||
|
informational content resulting therefrom.
|
||||||
|
|
||||||
|
"Model" means any accompanying machine-learning based assemblies
|
||||||
|
(including checkpoints), consisting of learnt weights, parameters
|
||||||
|
(including optimizer states), corresponding to the model architecture
|
||||||
|
as embodied in the Complementary Material, that have been trained or
|
||||||
|
tuned, in whole or in part on the Data, using the Complementary
|
||||||
|
Material.
|
||||||
|
|
||||||
|
"Derivatives of the Model" means all modifications to the Model, works
|
||||||
|
based on the Model, or any other model which is created or initialized
|
||||||
|
by transfer of patterns of the weights, parameters, activations or
|
||||||
|
output of the Model, to the other model, in order to cause the other
|
||||||
|
model to perform similarly to the Model, including - but not limited
|
||||||
|
to - distillation methods entailing the use of intermediate data
|
||||||
|
representations or methods based on the generation of synthetic data
|
||||||
|
by the Model for training the other model.
|
||||||
|
|
||||||
|
"Complementary Material" means the accompanying source code and
|
||||||
|
scripts used to define, run, load, benchmark or evaluate the Model,
|
||||||
|
and used to prepare data for training or evaluation, if any. This
|
||||||
|
includes any accompanying documentation, tutorials, examples, etc, if
|
||||||
|
any.
|
||||||
|
|
||||||
|
"Distribution" means any transmission, reproduction, publication or
|
||||||
|
other sharing of the Model or Derivatives of the Model to a third
|
||||||
|
party, including providing the Model as a hosted service made
|
||||||
|
available by electronic or other remote means - e.g. API-based or web
|
||||||
|
access.
|
||||||
|
|
||||||
|
"Licensor" means the copyright owner or entity authorized by the
|
||||||
|
copyright owner that is granting the License, including the persons or
|
||||||
|
entities that may have rights in the Model and/or distributing the
|
||||||
|
Model.
|
||||||
|
|
||||||
|
"You" (or "Your") means an individual or Legal Entity exercising
|
||||||
|
permissions granted by this License and/or making use of the Model for
|
||||||
|
whichever purpose and in any field of use, including usage of the
|
||||||
|
Model in an end-use application - e.g. chatbot, translator, image
|
||||||
|
generator.
|
||||||
|
|
||||||
|
"Third Parties" means individuals or legal entities that are not under
|
||||||
|
common control with Licensor or You.
|
||||||
|
|
||||||
|
"Contribution" means any work of authorship, including the original
|
||||||
|
version of the Model and any modifications or additions to that Model
|
||||||
|
or Derivatives of the Model thereof, that is intentionally submitted
|
||||||
|
to Licensor for inclusion in the Model by the copyright owner or by an
|
||||||
|
individual or Legal Entity authorized to submit on behalf of the
|
||||||
|
copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent to
|
||||||
|
the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control
|
||||||
|
systems, and issue tracking systems that are managed by, or on behalf
|
||||||
|
of, the Licensor for the purpose of discussing and improving the
|
||||||
|
Model, but excluding communication that is conspicuously marked or
|
||||||
|
otherwise designated in writing by the copyright owner as "Not a
|
||||||
|
Contribution."
|
||||||
|
|
||||||
|
"Contributor" means Licensor and any individual or Legal Entity on
|
||||||
|
behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Model.
|
||||||
|
|
||||||
|
Section II: INTELLECTUAL PROPERTY RIGHTS
|
||||||
|
|
||||||
|
Both copyright and patent grants apply to the Model, Derivatives of
|
||||||
|
the Model and Complementary Material. The Model and Derivatives of the
|
||||||
|
Model are subject to additional terms as described in
|
||||||
|
|
||||||
|
Section III.
|
||||||
|
|
||||||
|
Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare, publicly display, publicly
|
||||||
|
perform, sublicense, and distribute the Complementary Material, the
|
||||||
|
Model, and Derivatives of the Model.
|
||||||
|
|
||||||
|
Grant of Patent License. Subject to the terms and conditions of this
|
||||||
|
License and where and as applicable, each Contributor hereby grants to
|
||||||
|
You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||||
|
irrevocable (except as stated in this paragraph) patent license to
|
||||||
|
make, have made, use, offer to sell, sell, import, and otherwise
|
||||||
|
transfer the Model and the Complementary Material, where such license
|
||||||
|
applies only to those patent claims licensable by such Contributor
|
||||||
|
that are necessarily infringed by their Contribution(s) alone or by
|
||||||
|
combination of their Contribution(s) with the Model to which such
|
||||||
|
Contribution(s) was submitted. If You institute patent litigation
|
||||||
|
against any entity (including a cross-claim or counterclaim in a
|
||||||
|
lawsuit) alleging that the Model and/or Complementary Material or a
|
||||||
|
Contribution incorporated within the Model and/or Complementary
|
||||||
|
Material constitutes direct or contributory patent infringement, then
|
||||||
|
any patent licenses granted to You under this License for the Model
|
||||||
|
and/or Work shall terminate as of the date such litigation is asserted
|
||||||
|
or filed.
|
||||||
|
|
||||||
|
Section III: CONDITIONS OF USAGE, DISTRIBUTION AND REDISTRIBUTION
|
||||||
|
|
||||||
|
Distribution and Redistribution. You may host for Third Party remote
|
||||||
|
access purposes (e.g. software-as-a-service), reproduce and distribute
|
||||||
|
copies of the Model or Derivatives of the Model thereof in any medium,
|
||||||
|
with or without modifications, provided that You meet the following
|
||||||
|
conditions: Use-based restrictions as referenced in paragraph 5 MUST
|
||||||
|
be included as an enforceable provision by You in any type of legal
|
||||||
|
agreement (e.g. a license) governing the use and/or distribution of
|
||||||
|
the Model or Derivatives of the Model, and You shall give notice to
|
||||||
|
subsequent users You Distribute to, that the Model or Derivatives of
|
||||||
|
the Model are subject to paragraph 5. This provision does not apply to
|
||||||
|
the use of Complementary Material. You must give any Third Party
|
||||||
|
recipients of the Model or Derivatives of the Model a copy of this
|
||||||
|
License; You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; You must retain all copyright,
|
||||||
|
patent, trademark, and attribution notices excluding those notices
|
||||||
|
that do not pertain to any part of the Model, Derivatives of the
|
||||||
|
Model. You may add Your own copyright statement to Your modifications
|
||||||
|
and may provide additional or different license terms and conditions -
|
||||||
|
respecting paragraph 4.a. - for use, reproduction, or Distribution of
|
||||||
|
Your modifications, or for any such Derivatives of the Model as a
|
||||||
|
whole, provided Your use, reproduction, and Distribution of the Model
|
||||||
|
otherwise complies with the conditions stated in this License.
|
||||||
|
|
||||||
|
Use-based restrictions. The restrictions set forth in Attachment A are
|
||||||
|
considered Use-based restrictions. Therefore You cannot use the Model
|
||||||
|
and the Derivatives of the Model for the specified restricted
|
||||||
|
uses. You may use the Model subject to this License, including only
|
||||||
|
for lawful purposes and in accordance with the License. Use may
|
||||||
|
include creating any content with, finetuning, updating, running,
|
||||||
|
training, evaluating and/or reparametrizing the Model. You shall
|
||||||
|
require all of Your users who use the Model or a Derivative of the
|
||||||
|
Model to comply with the terms of this paragraph (paragraph 5).
|
||||||
|
|
||||||
|
The Output You Generate. Except as set forth herein, Licensor claims
|
||||||
|
no rights in the Output You generate using the Model. You are
|
||||||
|
accountable for the Output you generate and its subsequent uses. No
|
||||||
|
use of the output can contravene any provision as stated in the
|
||||||
|
License.
|
||||||
|
|
||||||
|
Section IV: OTHER PROVISIONS
|
||||||
|
|
||||||
|
Updates and Runtime Restrictions. To the maximum extent permitted by
|
||||||
|
law, Licensor reserves the right to restrict (remotely or otherwise)
|
||||||
|
usage of the Model in violation of this License.
|
||||||
|
|
||||||
|
Trademarks and related. Nothing in this License permits You to make
|
||||||
|
use of Licensors’ trademarks, trade names, logos or to otherwise
|
||||||
|
suggest endorsement or misrepresent the relationship between the
|
||||||
|
parties; and any rights not expressly granted herein are reserved by
|
||||||
|
the Licensors.
|
||||||
|
|
||||||
|
Disclaimer of Warranty. Unless required by applicable law or agreed to
|
||||||
|
in writing, Licensor provides the Model and the Complementary Material
|
||||||
|
(and each Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Model, Derivatives of
|
||||||
|
the Model, and the Complementary Material and assume any risks
|
||||||
|
associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise, unless
|
||||||
|
required by applicable law (such as deliberate and grossly negligent
|
||||||
|
acts) or agreed to in writing, shall any Contributor be liable to You
|
||||||
|
for damages, including any direct, indirect, special, incidental, or
|
||||||
|
consequential damages of any character arising as a result of this
|
||||||
|
License or out of the use or inability to use the Model and the
|
||||||
|
Complementary Material (including but not limited to damages for loss
|
||||||
|
of goodwill, work stoppage, computer failure or malfunction, or any
|
||||||
|
and all other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
Accepting Warranty or Additional Liability. While redistributing the
|
||||||
|
Model, Derivatives of the Model and the Complementary Material
|
||||||
|
thereof, You may choose to offer, and charge a fee for, acceptance of
|
||||||
|
support, warranty, indemnity, or other liability obligations and/or
|
||||||
|
rights consistent with this License. However, in accepting such
|
||||||
|
obligations, You may act only on Your own behalf and on Your sole
|
||||||
|
responsibility, not on behalf of any other Contributor, and only if
|
||||||
|
You agree to indemnify, defend, and hold each Contributor harmless for
|
||||||
|
any liability incurred by, or claims asserted against, such
|
||||||
|
Contributor by reason of your accepting any such warranty or
|
||||||
|
additional liability.
|
||||||
|
|
||||||
|
If any provision of this License is held to be invalid, illegal or
|
||||||
|
unenforceable, the remaining provisions shall be unaffected thereby
|
||||||
|
and remain valid as if such provision had not been set forth herein.
|
||||||
|
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
Attachment A
|
||||||
|
|
||||||
|
Use Restrictions
|
||||||
|
|
||||||
|
You agree not to use the Model or Derivatives of the Model:
|
||||||
|
|
||||||
|
* In any way that violates any applicable national, federal, state,
|
||||||
|
local or international law or regulation;
|
||||||
|
|
||||||
|
* For the purpose of exploiting, harming or attempting to exploit or
|
||||||
|
harm minors in any way;
|
||||||
|
|
||||||
|
* To generate or disseminate verifiably false information and/or
|
||||||
|
content with the purpose of harming others;
|
||||||
|
|
||||||
|
* To generate or disseminate personal identifiable information that
|
||||||
|
can be used to harm an individual;
|
||||||
|
|
||||||
|
* To defame, disparage or otherwise harass others;
|
||||||
|
|
||||||
|
* For fully automated decision making that adversely impacts an
|
||||||
|
individual’s legal rights or otherwise creates or modifies a
|
||||||
|
binding, enforceable obligation;
|
||||||
|
|
||||||
|
* For any use intended to or which has the effect of discriminating
|
||||||
|
against or harming individuals or groups based on online or offline
|
||||||
|
social behavior or known or predicted personal or personality
|
||||||
|
characteristics;
|
||||||
|
|
||||||
|
* To exploit any of the vulnerabilities of a specific group of persons
|
||||||
|
based on their age, social, physical or mental characteristics, in
|
||||||
|
order to materially distort the behavior of a person pertaining to
|
||||||
|
that group in a manner that causes or is likely to cause that person
|
||||||
|
or another person physical or psychological harm;
|
||||||
|
|
||||||
|
* For any use intended to or which has the effect of discriminating
|
||||||
|
against individuals or groups based on legally protected
|
||||||
|
characteristics or categories;
|
||||||
|
|
||||||
|
* To provide medical advice and medical results interpretation;
|
||||||
|
|
||||||
|
* To generate or disseminate information for the purpose to be used
|
||||||
|
for administration of justice, law enforcement, immigration or
|
||||||
|
asylum processes, such as predicting an individual will commit
|
||||||
|
fraud/crime commitment (e.g. by text profiling, drawing causal
|
||||||
|
relationships between assertions made in documents, indiscriminate
|
||||||
|
and arbitrarily-targeted use).
|
||||||
|
|
@ -65,7 +65,6 @@ InvokeAI:
|
|||||||
esrgan: true
|
esrgan: true
|
||||||
internet_available: true
|
internet_available: true
|
||||||
log_tokenization: false
|
log_tokenization: false
|
||||||
nsfw_checker: false
|
|
||||||
patchmatch: true
|
patchmatch: true
|
||||||
restore: true
|
restore: true
|
||||||
...
|
...
|
||||||
@ -138,7 +137,7 @@ command-line options by giving the `--help` argument:
|
|||||||
(.venv) > invokeai-web --help
|
(.venv) > invokeai-web --help
|
||||||
usage: InvokeAI [-h] [--host HOST] [--port PORT] [--allow_origins [ALLOW_ORIGINS ...]] [--allow_credentials | --no-allow_credentials] [--allow_methods [ALLOW_METHODS ...]]
|
usage: InvokeAI [-h] [--host HOST] [--port PORT] [--allow_origins [ALLOW_ORIGINS ...]] [--allow_credentials | --no-allow_credentials] [--allow_methods [ALLOW_METHODS ...]]
|
||||||
[--allow_headers [ALLOW_HEADERS ...]] [--esrgan | --no-esrgan] [--internet_available | --no-internet_available] [--log_tokenization | --no-log_tokenization]
|
[--allow_headers [ALLOW_HEADERS ...]] [--esrgan | --no-esrgan] [--internet_available | --no-internet_available] [--log_tokenization | --no-log_tokenization]
|
||||||
[--nsfw_checker | --no-nsfw_checker] [--invisible_watermark | --no-invisible_watermark] [--patchmatch | --no-patchmatch] [--restore | --no-restore]
|
[--patchmatch | --no-patchmatch] [--restore | --no-restore]
|
||||||
[--always_use_cpu | --no-always_use_cpu] [--free_gpu_mem | --no-free_gpu_mem] [--max_loaded_models MAX_LOADED_MODELS] [--max_cache_size MAX_CACHE_SIZE]
|
[--always_use_cpu | --no-always_use_cpu] [--free_gpu_mem | --no-free_gpu_mem] [--max_loaded_models MAX_LOADED_MODELS] [--max_cache_size MAX_CACHE_SIZE]
|
||||||
[--max_vram_cache_size MAX_VRAM_CACHE_SIZE] [--gpu_mem_reserved GPU_MEM_RESERVED] [--precision {auto,float16,float32,autocast}]
|
[--max_vram_cache_size MAX_VRAM_CACHE_SIZE] [--gpu_mem_reserved GPU_MEM_RESERVED] [--precision {auto,float16,float32,autocast}]
|
||||||
[--sequential_guidance | --no-sequential_guidance] [--xformers_enabled | --no-xformers_enabled] [--tiled_decode | --no-tiled_decode] [--root ROOT]
|
[--sequential_guidance | --no-sequential_guidance] [--xformers_enabled | --no-xformers_enabled] [--tiled_decode | --no-tiled_decode] [--root ROOT]
|
||||||
@ -175,8 +174,6 @@ These configuration settings allow you to enable and disable various InvokeAI fe
|
|||||||
| `esrgan` | `true` | Activate the ESRGAN upscaling options|
|
| `esrgan` | `true` | Activate the ESRGAN upscaling options|
|
||||||
| `internet_available` | `true` | When a resource is not available locally, try to fetch it via the internet |
|
| `internet_available` | `true` | When a resource is not available locally, try to fetch it via the internet |
|
||||||
| `log_tokenization` | `false` | Before each text2image generation, print a color-coded representation of the prompt to the console; this can help understand why a prompt is not working as expected |
|
| `log_tokenization` | `false` | Before each text2image generation, print a color-coded representation of the prompt to the console; this can help understand why a prompt is not working as expected |
|
||||||
| `nsfw_checker` | `true` | Activate the NSFW checker to blur out risque images |
|
|
||||||
| `invisible_watermark` | `true` | Write an invisible watermark 'InvokeAI' into generated images for use by AI image detectors |
|
|
||||||
| `patchmatch` | `true` | Activate the "patchmatch" algorithm for improved inpainting |
|
| `patchmatch` | `true` | Activate the "patchmatch" algorithm for improved inpainting |
|
||||||
| `restore` | `true` | Activate the facial restoration features (DEPRECATED; restoration features will be removed in 3.0.0) |
|
| `restore` | `true` | Activate the facial restoration features (DEPRECATED; restoration features will be removed in 3.0.0) |
|
||||||
|
|
||||||
|
@ -1,12 +1,40 @@
|
|||||||
---
|
---
|
||||||
title: The NSFW Checker
|
title: Watermarking, NSFW Image Checking
|
||||||
---
|
---
|
||||||
|
|
||||||
# :material-image-off: NSFW Checker
|
# :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
|
## The NSFW ("Safety") Checker
|
||||||
|
|
||||||
The Stable Diffusion image generation models will produce sexual
|
Stable Diffusion 1.5-based image generation models will produce sexual
|
||||||
imagery if deliberately prompted, and will occasionally produce such
|
imagery if deliberately prompted, and will occasionally produce such
|
||||||
images when this is not intended. Such images are colloquially known
|
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
|
as "Not Safe for Work" (NSFW). This behavior is due to the nature of
|
||||||
@ -18,35 +46,17 @@ jurisdictions it may be illegal to publicly distribute such imagery,
|
|||||||
including mounting a publicly-available server that provides
|
including mounting a publicly-available server that provides
|
||||||
unfiltered images to the public. Furthermore, the [Stable Diffusion
|
unfiltered images to the public. Furthermore, the [Stable Diffusion
|
||||||
weights
|
weights
|
||||||
License](https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE-ModelWeights.txt)
|
License](https://github.com/invoke-ai/InvokeAI/blob/main/LICENSE-SD1+SD2.txt),
|
||||||
forbids the model from being used to "exploit any of the
|
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."
|
vulnerabilities of a specific group of persons."
|
||||||
|
|
||||||
For these reasons Stable Diffusion offers a "safety checker," a
|
For these reasons Stable Diffusion offers a "safety checker," a
|
||||||
machine learning model trained to recognize potentially disturbing
|
machine learning model trained to recognize potentially disturbing
|
||||||
imagery. When a potentially NSFW image is detected, the checker will
|
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
|
blur the image and paste a warning icon on top. The checker can be
|
||||||
turned on and off on the command line using `--nsfw_checker` and
|
turned on and off in the Web interface under Settings.
|
||||||
`--no-nsfw_checker`.
|
|
||||||
|
|
||||||
At installation time, InvokeAI will ask whether the checker should be
|
|
||||||
activated by default (neither argument given on the command line). The
|
|
||||||
response is stored in the InvokeAI initialization file
|
|
||||||
(`invokeai.yaml` in the InvokeAI root directory). You can change the
|
|
||||||
default at any time by opening this file in a text editor and
|
|
||||||
changing the line `nsfw_checker:` from true to false or vice-versa:
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
...
|
|
||||||
Features:
|
|
||||||
esrgan: true
|
|
||||||
internet_available: true
|
|
||||||
log_tokenization: false
|
|
||||||
nsfw_checker: true
|
|
||||||
patchmatch: true
|
|
||||||
restore: true
|
|
||||||
```
|
|
||||||
|
|
||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
@ -84,10 +94,3 @@ are encouraged to turn **off** intermediate image rendering when you
|
|||||||
are using the checker. Future versions of InvokeAI will apply
|
are using the checker. Future versions of InvokeAI will apply
|
||||||
additional blurring to intermediate images when the checker is active.
|
additional blurring to intermediate images when the checker is active.
|
||||||
|
|
||||||
### Watermarking
|
|
||||||
|
|
||||||
InvokeAI does not apply any sort of watermark to images it
|
|
||||||
generates. However, it does write metadata into the PNG data area,
|
|
||||||
including the prompt used to generate the image and relevant parameter
|
|
||||||
settings. These fields can be examined using the `sd-metadata.py`
|
|
||||||
script that comes with the InvokeAI package.
|
|
@ -148,7 +148,7 @@ images in full-precision mode:
|
|||||||
- [Model Merging](features/MODEL_MERGING.md)
|
- [Model Merging](features/MODEL_MERGING.md)
|
||||||
- [ControlNet Models](features/CONTROLNET.md)
|
- [ControlNet Models](features/CONTROLNET.md)
|
||||||
- [Style/Subject Concepts and Embeddings](features/CONCEPTS.md)
|
- [Style/Subject Concepts and Embeddings](features/CONCEPTS.md)
|
||||||
- [Not Safe for Work (NSFW) Checker](features/NSFW.md)
|
- [Watermarking and the Not Safe for Work (NSFW) Checker](features/WATERMARK+NSFW.md)
|
||||||
<!-- seperator -->
|
<!-- seperator -->
|
||||||
### Prompt Engineering
|
### Prompt Engineering
|
||||||
- [Prompt Syntax](features/PROMPTS.md)
|
- [Prompt Syntax](features/PROMPTS.md)
|
||||||
|
@ -215,17 +215,6 @@ experimental versions later.
|
|||||||
Generally the defaults are fine, and you can come back to this screen at
|
Generally the defaults are fine, and you can come back to this screen at
|
||||||
any time to tweak your system. Here are the options you can adjust:
|
any time to tweak your system. Here are the options you can adjust:
|
||||||
|
|
||||||
- ***Output directory for images***
|
|
||||||
This is the path to a directory in which InvokeAI will store all its
|
|
||||||
generated images.
|
|
||||||
|
|
||||||
- ***NSFW checker***
|
|
||||||
If checked, InvokeAI will test images for potential sexual content
|
|
||||||
and blur them out if found. Note that the NSFW checker consumes
|
|
||||||
an additional 0.6 GB of VRAM on top of the 2-3 GB of VRAM used
|
|
||||||
by most image models. If you have a low VRAM GPU (4-6 GB), you
|
|
||||||
can reduce out of memory errors by disabling the checker.
|
|
||||||
|
|
||||||
- ***HuggingFace Access Token***
|
- ***HuggingFace Access Token***
|
||||||
InvokeAI has the ability to download embedded styles and subjects
|
InvokeAI has the ability to download embedded styles and subjects
|
||||||
from the HuggingFace Concept Library on-demand. However, some of
|
from the HuggingFace Concept Library on-demand. However, some of
|
||||||
@ -257,20 +246,30 @@ experimental versions later.
|
|||||||
and graphics cards. The "autocast" option is deprecated and
|
and graphics cards. The "autocast" option is deprecated and
|
||||||
shouldn't be used unless you are asked to by a member of the team.
|
shouldn't be used unless you are asked to by a member of the team.
|
||||||
|
|
||||||
- ***Number of models to cache in CPU memory***
|
- **Size of the RAM cache used for fast model switching***
|
||||||
This allows you to keep models in memory and switch rapidly among
|
This allows you to keep models in memory and switch rapidly among
|
||||||
them rather than having them load from disk each time. This slider
|
them rather than having them load from disk each time. This slider
|
||||||
controls how many models to keep loaded at once. Each
|
controls how many models to keep loaded at once. A typical SD-1 or SD-2 model
|
||||||
model will use 2-4 GB of RAM, so use this cautiously
|
uses 2-3 GB of memory. A typical SDXL model uses 6-7 GB. Providing more
|
||||||
|
RAM will allow more models to be co-resident.
|
||||||
|
|
||||||
- ***Directory containing embedding/textual inversion files***
|
- ***Output directory for images***
|
||||||
This is the directory in which you can place custom embedding
|
This is the path to a directory in which InvokeAI will store all its
|
||||||
files (.pt or .bin). During startup, this directory will be
|
generated images.
|
||||||
scanned and InvokeAI will print out the text terms that
|
|
||||||
are available to trigger the embeddings.
|
- ***Autoimport Folder***
|
||||||
|
This is the directory in which you can place models you have
|
||||||
|
downloaded and wish to load into InvokeAI. You can place a variety
|
||||||
|
of models in this directory, including diffusers folders, .ckpt files,
|
||||||
|
.safetensors files, as well as LoRAs, ControlNet and Textual Inversion
|
||||||
|
files (both folder and file versions). To help organize this folder,
|
||||||
|
you can create several levels of subfolders and drop your models into
|
||||||
|
whichever ones you want.
|
||||||
|
|
||||||
|
- ***Autoimport FolderLICENSE***
|
||||||
|
|
||||||
At the bottom of the screen you will see a checkbox for accepting
|
At the bottom of the screen you will see a checkbox for accepting
|
||||||
the CreativeML Responsible AI License. You need to accept the license
|
the CreativeML Responsible AI Licenses. You need to accept the license
|
||||||
in order to download Stable Diffusion models from the next screen.
|
in order to download Stable Diffusion models from the next screen.
|
||||||
|
|
||||||
_You can come back to the startup options form_ as many times as you like.
|
_You can come back to the startup options form_ as many times as you like.
|
||||||
|
@ -8,9 +8,9 @@ from invokeai.app.services.config import (
|
|||||||
|
|
||||||
def check_invokeai_root(config: InvokeAIAppConfig):
|
def check_invokeai_root(config: InvokeAIAppConfig):
|
||||||
try:
|
try:
|
||||||
assert config.model_conf_path.exists()
|
assert config.model_conf_path.exists(), f'{config.model_conf_path} not found'
|
||||||
assert config.db_path.exists()
|
assert config.db_path.parent.exists(), f'{config.db_path.parent} not found'
|
||||||
assert config.models_path.exists()
|
assert config.models_path.exists(), f'{config.models_path} not found'
|
||||||
for model in [
|
for model in [
|
||||||
'CLIP-ViT-bigG-14-laion2B-39B-b160k',
|
'CLIP-ViT-bigG-14-laion2B-39B-b160k',
|
||||||
'bert-base-uncased',
|
'bert-base-uncased',
|
||||||
@ -18,9 +18,11 @@ def check_invokeai_root(config: InvokeAIAppConfig):
|
|||||||
'sd-vae-ft-mse',
|
'sd-vae-ft-mse',
|
||||||
'stable-diffusion-2-clip',
|
'stable-diffusion-2-clip',
|
||||||
'stable-diffusion-safety-checker']:
|
'stable-diffusion-safety-checker']:
|
||||||
assert (config.models_path / f'core/convert/{model}').exists()
|
path = config.models_path / f'core/convert/{model}'
|
||||||
except:
|
assert path.exists(), f'{path} is missing'
|
||||||
|
except Exception as e:
|
||||||
print()
|
print()
|
||||||
|
print(f'An exception has occurred: {str(e)}')
|
||||||
print('== STARTUP ABORTED ==')
|
print('== STARTUP ABORTED ==')
|
||||||
print('** One or more necessary files is missing from your InvokeAI root directory **')
|
print('** One or more necessary files is missing from your InvokeAI root directory **')
|
||||||
print('** Please rerun the configuration script to fix this problem. **')
|
print('** Please rerun the configuration script to fix this problem. **')
|
||||||
|
@ -13,8 +13,8 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import textwrap
|
import textwrap
|
||||||
import traceback
|
import traceback
|
||||||
import warnings
|
|
||||||
import yaml
|
import yaml
|
||||||
|
import warnings
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import get_terminal_size
|
from shutil import get_terminal_size
|
||||||
@ -45,6 +45,7 @@ from invokeai.app.services.config import (
|
|||||||
from invokeai.backend.util.logging import InvokeAILogger
|
from invokeai.backend.util.logging import InvokeAILogger
|
||||||
from invokeai.frontend.install.model_install import addModelsForm, process_and_execute
|
from invokeai.frontend.install.model_install import addModelsForm, process_and_execute
|
||||||
from invokeai.frontend.install.widgets import (
|
from invokeai.frontend.install.widgets import (
|
||||||
|
SingleSelectColumns,
|
||||||
CenteredButtonPress,
|
CenteredButtonPress,
|
||||||
FileBox,
|
FileBox,
|
||||||
IntTitleSlider,
|
IntTitleSlider,
|
||||||
@ -56,7 +57,6 @@ from invokeai.frontend.install.widgets import (
|
|||||||
from invokeai.backend.install.legacy_arg_parsing import legacy_parser
|
from invokeai.backend.install.legacy_arg_parsing import legacy_parser
|
||||||
from invokeai.backend.install.model_install_backend import (
|
from invokeai.backend.install.model_install_backend import (
|
||||||
hf_download_from_pretrained,
|
hf_download_from_pretrained,
|
||||||
hf_download_with_resume,
|
|
||||||
InstallSelections,
|
InstallSelections,
|
||||||
ModelInstall,
|
ModelInstall,
|
||||||
)
|
)
|
||||||
@ -330,34 +330,49 @@ Use cursor arrows to make a checkbox selection, and space to toggle.
|
|||||||
npyscreen.Checkbox,
|
npyscreen.Checkbox,
|
||||||
name="Free GPU memory after each generation",
|
name="Free GPU memory after each generation",
|
||||||
value=old_opts.free_gpu_mem,
|
value=old_opts.free_gpu_mem,
|
||||||
|
max_width=45,
|
||||||
relx=5,
|
relx=5,
|
||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
)
|
)
|
||||||
|
self.nextrely -= 1
|
||||||
self.xformers_enabled = self.add_widget_intelligent(
|
self.xformers_enabled = self.add_widget_intelligent(
|
||||||
npyscreen.Checkbox,
|
npyscreen.Checkbox,
|
||||||
name="Enable xformers support if available",
|
name="Enable xformers support",
|
||||||
value=old_opts.xformers_enabled,
|
value=old_opts.xformers_enabled,
|
||||||
relx=5,
|
max_width=30,
|
||||||
|
relx=50,
|
||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
)
|
)
|
||||||
|
self.nextrely -=1
|
||||||
self.always_use_cpu = self.add_widget_intelligent(
|
self.always_use_cpu = self.add_widget_intelligent(
|
||||||
npyscreen.Checkbox,
|
npyscreen.Checkbox,
|
||||||
name="Force CPU to be used on GPU systems",
|
name="Force CPU to be used on GPU systems",
|
||||||
value=old_opts.always_use_cpu,
|
value=old_opts.always_use_cpu,
|
||||||
relx=5,
|
relx=80,
|
||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
)
|
)
|
||||||
precision = old_opts.precision or (
|
precision = old_opts.precision or (
|
||||||
"float32" if program_opts.full_precision else "auto"
|
"float32" if program_opts.full_precision else "auto"
|
||||||
)
|
)
|
||||||
|
self.nextrely +=1
|
||||||
|
self.add_widget_intelligent(
|
||||||
|
npyscreen.TitleFixedText,
|
||||||
|
name="Floating Point Precision",
|
||||||
|
begin_entry_at=0,
|
||||||
|
editable=False,
|
||||||
|
color="CONTROL",
|
||||||
|
scroll_exit=True,
|
||||||
|
)
|
||||||
|
self.nextrely -=1
|
||||||
self.precision = self.add_widget_intelligent(
|
self.precision = self.add_widget_intelligent(
|
||||||
npyscreen.TitleSelectOne,
|
SingleSelectColumns,
|
||||||
columns = 2,
|
columns = 3,
|
||||||
name="Precision",
|
name="Precision",
|
||||||
values=PRECISION_CHOICES,
|
values=PRECISION_CHOICES,
|
||||||
value=PRECISION_CHOICES.index(precision),
|
value=PRECISION_CHOICES.index(precision),
|
||||||
begin_entry_at=3,
|
begin_entry_at=3,
|
||||||
max_height=len(PRECISION_CHOICES) + 1,
|
max_height=2,
|
||||||
|
max_width=80,
|
||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
)
|
)
|
||||||
self.max_cache_size = self.add_widget_intelligent(
|
self.max_cache_size = self.add_widget_intelligent(
|
||||||
@ -370,12 +385,6 @@ Use cursor arrows to make a checkbox selection, and space to toggle.
|
|||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
)
|
)
|
||||||
self.nextrely += 1
|
self.nextrely += 1
|
||||||
self.add_widget_intelligent(
|
|
||||||
npyscreen.FixedText,
|
|
||||||
value="Folder to recursively scan for new checkpoints, ControlNets, LoRAs and TI models (<tab> autocompletes, ctrl-N advances):",
|
|
||||||
editable=False,
|
|
||||||
color="CONTROL",
|
|
||||||
)
|
|
||||||
self.outdir = self.add_widget_intelligent(
|
self.outdir = self.add_widget_intelligent(
|
||||||
FileBox,
|
FileBox,
|
||||||
name="Output directory for images (<tab> autocompletes, ctrl-N advances):",
|
name="Output directory for images (<tab> autocompletes, ctrl-N advances):",
|
||||||
@ -391,7 +400,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle.
|
|||||||
self.autoimport_dirs = {}
|
self.autoimport_dirs = {}
|
||||||
self.autoimport_dirs['autoimport_dir'] = self.add_widget_intelligent(
|
self.autoimport_dirs['autoimport_dir'] = self.add_widget_intelligent(
|
||||||
FileBox,
|
FileBox,
|
||||||
name=f'Autoimport Folder',
|
name=f'Folder to recursively scan for new checkpoints, ControlNets, LoRAs and TI models',
|
||||||
value=str(config.root_path / config.autoimport_dir),
|
value=str(config.root_path / config.autoimport_dir),
|
||||||
select_dir=True,
|
select_dir=True,
|
||||||
must_exist=False,
|
must_exist=False,
|
||||||
@ -402,18 +411,10 @@ Use cursor arrows to make a checkbox selection, and space to toggle.
|
|||||||
scroll_exit=True
|
scroll_exit=True
|
||||||
)
|
)
|
||||||
self.nextrely += 1
|
self.nextrely += 1
|
||||||
self.add_widget_intelligent(
|
|
||||||
npyscreen.TitleFixedText,
|
|
||||||
name="== LICENSE ==",
|
|
||||||
begin_entry_at=0,
|
|
||||||
editable=False,
|
|
||||||
color="CONTROL",
|
|
||||||
scroll_exit=True,
|
|
||||||
)
|
|
||||||
self.nextrely -= 1
|
|
||||||
label = """BY DOWNLOADING THE STABLE DIFFUSION WEIGHT FILES, YOU AGREE TO HAVE READ
|
label = """BY DOWNLOADING THE STABLE DIFFUSION WEIGHT FILES, YOU AGREE TO HAVE READ
|
||||||
AND ACCEPTED THE CREATIVEML RESPONSIBLE AI LICENSE LOCATED AT
|
AND ACCEPTED THE CREATIVEML RESPONSIBLE AI LICENSES LOCATED AT
|
||||||
https://huggingface.co/spaces/CompVis/stable-diffusion-license
|
https://huggingface.co/spaces/CompVis/stable-diffusion-license and
|
||||||
|
https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/LICENSE.md
|
||||||
"""
|
"""
|
||||||
for i in textwrap.wrap(label,width=window_width-6):
|
for i in textwrap.wrap(label,width=window_width-6):
|
||||||
self.add_widget_intelligent(
|
self.add_widget_intelligent(
|
||||||
@ -424,7 +425,7 @@ https://huggingface.co/spaces/CompVis/stable-diffusion-license
|
|||||||
)
|
)
|
||||||
self.license_acceptance = self.add_widget_intelligent(
|
self.license_acceptance = self.add_widget_intelligent(
|
||||||
npyscreen.Checkbox,
|
npyscreen.Checkbox,
|
||||||
name="I accept the CreativeML Responsible AI License",
|
name="I accept the CreativeML Responsible AI Licenses",
|
||||||
value=not first_time,
|
value=not first_time,
|
||||||
relx=2,
|
relx=2,
|
||||||
scroll_exit=True,
|
scroll_exit=True,
|
||||||
@ -439,7 +440,6 @@ https://huggingface.co/spaces/CompVis/stable-diffusion-license
|
|||||||
CenteredButtonPress,
|
CenteredButtonPress,
|
||||||
name=label,
|
name=label,
|
||||||
relx=(window_width - len(label)) // 2,
|
relx=(window_width - len(label)) // 2,
|
||||||
rely=-3,
|
|
||||||
when_pressed_function=self.on_ok,
|
when_pressed_function=self.on_ok,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -558,7 +558,7 @@ def default_user_selections(program_opts: Namespace) -> InstallSelections:
|
|||||||
|
|
||||||
# -------------------------------------
|
# -------------------------------------
|
||||||
def initialize_rootdir(root: Path, yes_to_all: bool = False):
|
def initialize_rootdir(root: Path, yes_to_all: bool = False):
|
||||||
logger.info("** INITIALIZING INVOKEAI RUNTIME DIRECTORY **")
|
logger.info("Initializing InvokeAI runtime directory")
|
||||||
for name in (
|
for name in (
|
||||||
"models",
|
"models",
|
||||||
"databases",
|
"databases",
|
||||||
@ -583,7 +583,18 @@ def initialize_rootdir(root: Path, yes_to_all: bool = False):
|
|||||||
path = dest / 'core'
|
path = dest / 'core'
|
||||||
path.mkdir(parents=True, exist_ok=True)
|
path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
with open(root / 'configs' / 'models.yaml','w') as yaml_file:
|
maybe_create_models_yaml(root)
|
||||||
|
|
||||||
|
def maybe_create_models_yaml(root: Path):
|
||||||
|
models_yaml = root / 'configs' / 'models.yaml'
|
||||||
|
if models_yaml.exists():
|
||||||
|
if OmegaConf.load(models_yaml).get('__metadata__'): # up to date
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
logger.info('Creating new models.yaml, original saved as models.yaml.orig')
|
||||||
|
models_yaml.rename(models_yaml.parent / 'models.yaml.orig')
|
||||||
|
|
||||||
|
with open(models_yaml,'w') as yaml_file:
|
||||||
yaml_file.write(yaml.dump({'__metadata__':
|
yaml_file.write(yaml.dump({'__metadata__':
|
||||||
{'version':'3.0.0'}
|
{'version':'3.0.0'}
|
||||||
}
|
}
|
||||||
@ -767,7 +778,7 @@ def main():
|
|||||||
if migrate_if_needed(opt, config.root_path):
|
if migrate_if_needed(opt, config.root_path):
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if not config.model_conf_path.exists():
|
# run this unconditionally in case new directories need to be added
|
||||||
initialize_rootdir(config.root_path, opt.yes_to_all)
|
initialize_rootdir(config.root_path, opt.yes_to_all)
|
||||||
|
|
||||||
models_to_download = default_user_selections(opt)
|
models_to_download = default_user_selections(opt)
|
||||||
@ -788,15 +799,14 @@ def main():
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if opt.skip_support_models:
|
if opt.skip_support_models:
|
||||||
logger.info("SKIPPING SUPPORT MODEL DOWNLOADS PER USER REQUEST")
|
logger.info("Skipping support models at user's request")
|
||||||
else:
|
else:
|
||||||
logger.info("CHECKING/UPDATING SUPPORT MODELS")
|
logger.info("Installing support models")
|
||||||
download_support_models()
|
download_support_models()
|
||||||
|
|
||||||
if opt.skip_sd_weights:
|
if opt.skip_sd_weights:
|
||||||
logger.warning("SKIPPING DIFFUSION WEIGHTS DOWNLOAD PER USER REQUEST")
|
logger.warning("Skipping diffusion weights download per user request")
|
||||||
elif models_to_download:
|
elif models_to_download:
|
||||||
logger.info("DOWNLOADING DIFFUSION WEIGHTS")
|
|
||||||
process_and_execute(opt, models_to_download)
|
process_and_execute(opt, models_to_download)
|
||||||
|
|
||||||
postscript(errors=errors)
|
postscript(errors=errors)
|
||||||
|
@ -149,16 +149,17 @@ class ModelInstall(object):
|
|||||||
for i in installed:
|
for i in installed:
|
||||||
print(f"{i['model_name']}\t{i['base_model']}\t{i['path']}")
|
print(f"{i['model_name']}\t{i['base_model']}\t{i['path']}")
|
||||||
|
|
||||||
def starter_models(self)->Set[str]:
|
# logic here a little reversed to maintain backward compatibility
|
||||||
|
def starter_models(self, all_models: bool=False)->Set[str]:
|
||||||
models = set()
|
models = set()
|
||||||
for key, value in self.datasets.items():
|
for key, value in self.datasets.items():
|
||||||
name,base,model_type = ModelManager.parse_key(key)
|
name,base,model_type = ModelManager.parse_key(key)
|
||||||
if model_type==ModelType.Main:
|
if all_models or model_type in [ModelType.Main, ModelType.Vae]:
|
||||||
models.add(key)
|
models.add(key)
|
||||||
return models
|
return models
|
||||||
|
|
||||||
def recommended_models(self)->Set[str]:
|
def recommended_models(self)->Set[str]:
|
||||||
starters = self.starter_models()
|
starters = self.starter_models(all_models=True)
|
||||||
return set([x for x in starters if self.datasets[x].get('recommended',False)])
|
return set([x for x in starters if self.datasets[x].get('recommended',False)])
|
||||||
|
|
||||||
def default_model(self)->str:
|
def default_model(self)->str:
|
||||||
|
@ -754,7 +754,7 @@ class ModelManager(object):
|
|||||||
# We are taking advantage of a side effect of get_model() that converts check points
|
# We are taking advantage of a side effect of get_model() that converts check points
|
||||||
# into cached diffusers directories stored at `location`. It doesn't matter
|
# into cached diffusers directories stored at `location`. It doesn't matter
|
||||||
# what submodeltype we request here, so we get the smallest.
|
# what submodeltype we request here, so we get the smallest.
|
||||||
submodel = {"submodel_type": SubModelType.Tokenizer} if model_type==ModelType.Main else {}
|
submodel = {"submodel_type": SubModelType.Scheduler} if model_type==ModelType.Main else {}
|
||||||
model = self.get_model(model_name,
|
model = self.get_model(model_name,
|
||||||
base_model,
|
base_model,
|
||||||
model_type,
|
model_type,
|
||||||
|
@ -416,7 +416,14 @@ class PipelineFolderProbe(FolderProbeBase):
|
|||||||
|
|
||||||
class VaeFolderProbe(FolderProbeBase):
|
class VaeFolderProbe(FolderProbeBase):
|
||||||
def get_base_type(self)->BaseModelType:
|
def get_base_type(self)->BaseModelType:
|
||||||
return BaseModelType.StableDiffusion1
|
config_file = self.folder_path / 'config.json'
|
||||||
|
if not config_file.exists():
|
||||||
|
raise InvalidModelException(f"Cannot determine base type for {self.folder_path}")
|
||||||
|
with open(config_file,'r') as file:
|
||||||
|
config = json.load(file)
|
||||||
|
return BaseModelType.StableDiffusionXL \
|
||||||
|
if config.get('scaling_factor',0)==0.13025 and config.get('sample_size') in [512, 1024] \
|
||||||
|
else BaseModelType.StableDiffusion1
|
||||||
|
|
||||||
class TextualInversionFolderProbe(FolderProbeBase):
|
class TextualInversionFolderProbe(FolderProbeBase):
|
||||||
def get_format(self)->str:
|
def get_format(self)->str:
|
||||||
|
@ -112,16 +112,12 @@ class StableDiffusionXLModel(DiffusersModel):
|
|||||||
# The convert script adapted from the diffusers package uses
|
# The convert script adapted from the diffusers package uses
|
||||||
# strings for the base model type. To avoid making too many
|
# strings for the base model type. To avoid making too many
|
||||||
# source code changes, we simply translate here
|
# source code changes, we simply translate here
|
||||||
model_base_to_model_type = {BaseModelType.StableDiffusionXL: 'SDXL',
|
|
||||||
BaseModelType.StableDiffusionXLRefiner: 'SDXL-Refiner',
|
|
||||||
}
|
|
||||||
if isinstance(config, cls.CheckpointConfig):
|
if isinstance(config, cls.CheckpointConfig):
|
||||||
from invokeai.backend.model_management.models.stable_diffusion import _convert_ckpt_and_cache
|
from invokeai.backend.model_management.models.stable_diffusion import _convert_ckpt_and_cache
|
||||||
return _convert_ckpt_and_cache(
|
return _convert_ckpt_and_cache(
|
||||||
version=base_model,
|
version=base_model,
|
||||||
model_config=config,
|
model_config=config,
|
||||||
output_path=output_path,
|
output_path=output_path,
|
||||||
model_type=model_base_to_model_type[base_model],
|
|
||||||
use_safetensors=False, # corrupts sdxl models for some reason
|
use_safetensors=False, # corrupts sdxl models for some reason
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
@ -14,6 +14,7 @@ from .base import (
|
|||||||
read_checkpoint_meta,
|
read_checkpoint_meta,
|
||||||
classproperty,
|
classproperty,
|
||||||
InvalidModelException,
|
InvalidModelException,
|
||||||
|
ModelNotFoundException,
|
||||||
)
|
)
|
||||||
from .sdxl import StableDiffusionXLModel
|
from .sdxl import StableDiffusionXLModel
|
||||||
import invokeai.backend.util.logging as logger
|
import invokeai.backend.util.logging as logger
|
||||||
@ -269,11 +270,17 @@ def _convert_ckpt_and_cache(
|
|||||||
from ..convert_ckpt_to_diffusers import convert_ckpt_to_diffusers
|
from ..convert_ckpt_to_diffusers import convert_ckpt_to_diffusers
|
||||||
from ...util.devices import choose_torch_device, torch_dtype
|
from ...util.devices import choose_torch_device, torch_dtype
|
||||||
|
|
||||||
|
model_base_to_model_type = {BaseModelType.StableDiffusion1: 'FrozenCLIPEmbedder',
|
||||||
|
BaseModelType.StableDiffusion2: 'FrozenOpenCLIPEmbedder',
|
||||||
|
BaseModelType.StableDiffusionXL: 'SDXL',
|
||||||
|
BaseModelType.StableDiffusionXLRefiner: 'SDXL-Refiner',
|
||||||
|
}
|
||||||
logger.info(f'Converting {weights} to diffusers format')
|
logger.info(f'Converting {weights} to diffusers format')
|
||||||
with SilenceWarnings():
|
with SilenceWarnings():
|
||||||
convert_ckpt_to_diffusers(
|
convert_ckpt_to_diffusers(
|
||||||
weights,
|
weights,
|
||||||
output_path,
|
output_path,
|
||||||
|
model_type=model_base_to_model_type[version],
|
||||||
model_version=version,
|
model_version=version,
|
||||||
model_variant=model_config.variant,
|
model_variant=model_config.variant,
|
||||||
original_config_file=config_file,
|
original_config_file=config_file,
|
||||||
|
@ -16,14 +16,18 @@ sd-2/main/stable-diffusion-2-inpainting:
|
|||||||
description: Stable Diffusion version 2.0 inpainting model (5.21 GB)
|
description: Stable Diffusion version 2.0 inpainting model (5.21 GB)
|
||||||
repo_id: stabilityai/stable-diffusion-2-inpainting
|
repo_id: stabilityai/stable-diffusion-2-inpainting
|
||||||
recommended: False
|
recommended: False
|
||||||
sdxl/main/stable-diffusion-xl-base-0-9:
|
sdxl/main/stable-diffusion-xl-base-1-0:
|
||||||
description: Stable Diffusion XL base model (12 GB; access token required)
|
description: Stable Diffusion XL base model (12 GB)
|
||||||
repo_id: stabilityai/stable-diffusion-xl-base-0.9
|
repo_id: stabilityai/stable-diffusion-xl-base-1.0
|
||||||
recommended: False
|
|
||||||
sdxl-refiner/main/stable-diffusion-xl-refiner-0-9:
|
|
||||||
description: Stable Diffusion XL refiner model (12 GB; access token required)
|
|
||||||
repo_id: stabilityai/stable-diffusion-xl-refiner-0.9
|
|
||||||
recommended: False
|
recommended: False
|
||||||
|
sdxl-refiner/main/stable-diffusion-xl-refiner-1-0:
|
||||||
|
description: Stable Diffusion XL refiner model (12 GB)
|
||||||
|
repo_id: stabilityai/stable-diffusion-xl-refiner-1.0
|
||||||
|
recommended: false
|
||||||
|
sdxl/vae/sdxl-1-0-vae-fix:
|
||||||
|
description: Fine tuned version of the SDXL-1.0 VAE
|
||||||
|
repo_id: madebyollin/sdxl-vae-fp16-fix
|
||||||
|
recommended: true
|
||||||
sd-1/main/Analog-Diffusion:
|
sd-1/main/Analog-Diffusion:
|
||||||
description: An SD-1.5 model trained on diverse analog photographs (2.13 GB)
|
description: An SD-1.5 model trained on diverse analog photographs (2.13 GB)
|
||||||
repo_id: wavymulder/Analog-Diffusion
|
repo_id: wavymulder/Analog-Diffusion
|
||||||
@ -48,10 +52,6 @@ sd-1/main/openjourney:
|
|||||||
description: An SD 1.5 model fine tuned on Midjourney; prompt with "mdjrny-v4 style" (2.13 GB)
|
description: An SD 1.5 model fine tuned on Midjourney; prompt with "mdjrny-v4 style" (2.13 GB)
|
||||||
repo_id: prompthero/openjourney
|
repo_id: prompthero/openjourney
|
||||||
recommended: False
|
recommended: False
|
||||||
sd-1/main/portraitplus:
|
|
||||||
description: An SD-1.5 model trained on close range portraits of people; prompt with "portrait+" (2.13 GB)
|
|
||||||
repo_id: wavymulder/portraitplus
|
|
||||||
recommended: False
|
|
||||||
sd-1/main/seek.art_MEGA:
|
sd-1/main/seek.art_MEGA:
|
||||||
repo_id: coreco/seek.art_MEGA
|
repo_id: coreco/seek.art_MEGA
|
||||||
description: A general use SD-1.5 "anything" model that supports multiple styles (2.1 GB)
|
description: A general use SD-1.5 "anything" model that supports multiple styles (2.1 GB)
|
||||||
@ -60,10 +60,6 @@ sd-1/main/trinart_stable_diffusion_v2:
|
|||||||
description: An SD-1.5 model finetuned with ~40K assorted high resolution manga/anime-style images (2.13 GB)
|
description: An SD-1.5 model finetuned with ~40K assorted high resolution manga/anime-style images (2.13 GB)
|
||||||
repo_id: naclbit/trinart_stable_diffusion_v2
|
repo_id: naclbit/trinart_stable_diffusion_v2
|
||||||
recommended: False
|
recommended: False
|
||||||
sd-1/main/waifu-diffusion:
|
|
||||||
description: An SD-1.5 model trained on 680k anime/manga-style images (2.13 GB)
|
|
||||||
repo_id: hakurei/waifu-diffusion
|
|
||||||
recommended: False
|
|
||||||
sd-1/controlnet/canny:
|
sd-1/controlnet/canny:
|
||||||
repo_id: lllyasviel/control_v11p_sd15_canny
|
repo_id: lllyasviel/control_v11p_sd15_canny
|
||||||
recommended: True
|
recommended: True
|
||||||
|
@ -93,13 +93,7 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage):
|
|||||||
self.nextrely -= 1
|
self.nextrely -= 1
|
||||||
self.add_widget_intelligent(
|
self.add_widget_intelligent(
|
||||||
npyscreen.FixedText,
|
npyscreen.FixedText,
|
||||||
value="Use ctrl-N and ctrl-P to move to the <N>ext and <P>revious fields,",
|
value="Use ctrl-N and ctrl-P to move to the <N>ext and <P>revious fields. Cursor keys navigate, and <space> selects.",
|
||||||
editable=False,
|
|
||||||
color="CAUTION",
|
|
||||||
)
|
|
||||||
self.add_widget_intelligent(
|
|
||||||
npyscreen.FixedText,
|
|
||||||
value="Use cursor arrows to make a selection, and space to toggle checkboxes.",
|
|
||||||
editable=False,
|
editable=False,
|
||||||
color="CAUTION",
|
color="CAUTION",
|
||||||
)
|
)
|
||||||
@ -161,33 +155,40 @@ class addModelsForm(CyclingForm, npyscreen.FormMultiPage):
|
|||||||
BufferBox,
|
BufferBox,
|
||||||
name='Log Messages',
|
name='Log Messages',
|
||||||
editable=False,
|
editable=False,
|
||||||
max_height = 10,
|
max_height = 8,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.nextrely += 1
|
self.nextrely += 1
|
||||||
done_label = "APPLY CHANGES"
|
done_label = "APPLY CHANGES"
|
||||||
back_label = "BACK"
|
back_label = "BACK"
|
||||||
|
cancel_label = "CANCEL"
|
||||||
|
current_position = self.nextrely
|
||||||
if self.multipage:
|
if self.multipage:
|
||||||
self.back_button = self.add_widget_intelligent(
|
self.back_button = self.add_widget_intelligent(
|
||||||
npyscreen.ButtonPress,
|
npyscreen.ButtonPress,
|
||||||
name=back_label,
|
name=back_label,
|
||||||
rely=-3,
|
|
||||||
when_pressed_function=self.on_back,
|
when_pressed_function=self.on_back,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
self.nextrely = current_position
|
||||||
|
self.cancel_button = self.add_widget_intelligent(
|
||||||
|
npyscreen.ButtonPress,
|
||||||
|
name=cancel_label,
|
||||||
|
when_pressed_function=self.on_cancel
|
||||||
|
)
|
||||||
|
self.nextrely = current_position
|
||||||
self.ok_button = self.add_widget_intelligent(
|
self.ok_button = self.add_widget_intelligent(
|
||||||
npyscreen.ButtonPress,
|
npyscreen.ButtonPress,
|
||||||
name=done_label,
|
name=done_label,
|
||||||
relx=(window_width - len(done_label)) // 2,
|
relx=(window_width - len(done_label)) // 2,
|
||||||
rely=-3,
|
|
||||||
when_pressed_function=self.on_execute
|
when_pressed_function=self.on_execute
|
||||||
)
|
)
|
||||||
|
|
||||||
label = "APPLY CHANGES & EXIT"
|
label = "APPLY CHANGES & EXIT"
|
||||||
|
self.nextrely = current_position
|
||||||
self.done = self.add_widget_intelligent(
|
self.done = self.add_widget_intelligent(
|
||||||
npyscreen.ButtonPress,
|
npyscreen.ButtonPress,
|
||||||
name=label,
|
name=label,
|
||||||
rely=-3,
|
|
||||||
relx=window_width-len(label)-15,
|
relx=window_width-len(label)-15,
|
||||||
when_pressed_function=self.on_done,
|
when_pressed_function=self.on_done,
|
||||||
)
|
)
|
||||||
|
@ -17,8 +17,8 @@ from shutil import get_terminal_size
|
|||||||
from curses import BUTTON2_CLICKED,BUTTON3_CLICKED
|
from curses import BUTTON2_CLICKED,BUTTON3_CLICKED
|
||||||
|
|
||||||
# minimum size for UIs
|
# minimum size for UIs
|
||||||
MIN_COLS = 136
|
MIN_COLS = 130
|
||||||
MIN_LINES = 45
|
MIN_LINES = 38
|
||||||
|
|
||||||
# -------------------------------------
|
# -------------------------------------
|
||||||
def set_terminal_size(columns: int, lines: int):
|
def set_terminal_size(columns: int, lines: int):
|
||||||
@ -38,13 +38,13 @@ def set_terminal_size(columns: int, lines: int):
|
|||||||
ts = get_terminal_size()
|
ts = get_terminal_size()
|
||||||
pause = False
|
pause = False
|
||||||
if ts.columns < columns:
|
if ts.columns < columns:
|
||||||
print('\033[1mThis window is too narrow for the user interface. Please make it wider.\033[0m')
|
print('\033[1mThis window is too narrow for the user interface.\033[0m')
|
||||||
pause = True
|
pause = True
|
||||||
if ts.lines < lines:
|
if ts.lines < lines:
|
||||||
print('\033[1mThis window is too short for the user interface. Please make it taller.\033[0m')
|
print('\033[1mThis window is too short for the user interface.\033[0m')
|
||||||
pause = True
|
pause = True
|
||||||
if pause:
|
if pause:
|
||||||
input('Press any key to continue..')
|
input('Maximize the window then press any key to continue..')
|
||||||
|
|
||||||
def _set_terminal_size_powershell(width: int, height: int):
|
def _set_terminal_size_powershell(width: int, height: int):
|
||||||
script=f'''
|
script=f'''
|
||||||
|
169
invokeai/frontend/web/dist/assets/App-69e5ea36.js
vendored
Normal file
169
invokeai/frontend/web/dist/assets/App-69e5ea36.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
invokeai/frontend/web/dist/assets/MantineProvider-8184f020.js
vendored
Normal file
1
invokeai/frontend/web/dist/assets/MantineProvider-8184f020.js
vendored
Normal file
File diff suppressed because one or more lines are too long
302
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-9ac72450.js
vendored
Normal file
302
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-9ac72450.js
vendored
Normal file
File diff suppressed because one or more lines are too long
125
invokeai/frontend/web/dist/assets/index-89941396.js
vendored
Normal file
125
invokeai/frontend/web/dist/assets/index-89941396.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
invokeai/frontend/web/dist/index.html
vendored
2
invokeai/frontend/web/dist/index.html
vendored
@ -12,7 +12,7 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script type="module" crossorigin src="./assets/index-91eecded.js"></script>
|
<script type="module" crossorigin src="./assets/index-89941396.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body dir="ltr">
|
<body dir="ltr">
|
||||||
|
@ -317,6 +317,17 @@ export const buildCanvasImageToImageGraph = (
|
|||||||
init_image: initialImage.image_name,
|
init_image: initialImage.image_name,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
graph.edges.push({
|
||||||
|
source: {
|
||||||
|
node_id: METADATA_ACCUMULATOR,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
destination: {
|
||||||
|
node_id: LATENTS_TO_IMAGE,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// add LoRA support
|
// add LoRA support
|
||||||
addLoRAsToGraph(state, graph, LATENTS_TO_LATENTS, model_loader);
|
addLoRAsToGraph(state, graph, LATENTS_TO_LATENTS, model_loader);
|
||||||
|
|
||||||
|
@ -8,7 +8,9 @@ import {
|
|||||||
RangeOfSizeInvocation,
|
RangeOfSizeInvocation,
|
||||||
} from 'services/api/types';
|
} from 'services/api/types';
|
||||||
import { addLoRAsToGraph } from './addLoRAsToGraph';
|
import { addLoRAsToGraph } from './addLoRAsToGraph';
|
||||||
|
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
||||||
import { addVAEToGraph } from './addVAEToGraph';
|
import { addVAEToGraph } from './addVAEToGraph';
|
||||||
|
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
||||||
import {
|
import {
|
||||||
CLIP_SKIP,
|
CLIP_SKIP,
|
||||||
INPAINT,
|
INPAINT,
|
||||||
@ -21,8 +23,6 @@ import {
|
|||||||
RANDOM_INT,
|
RANDOM_INT,
|
||||||
RANGE_OF_SIZE,
|
RANGE_OF_SIZE,
|
||||||
} from './constants';
|
} from './constants';
|
||||||
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
|
||||||
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the Canvas tab's Inpaint graph.
|
* Builds the Canvas tab's Inpaint graph.
|
||||||
|
@ -220,6 +220,17 @@ export const buildCanvasTextToImageGraph = (
|
|||||||
clip_skip: clipSkip,
|
clip_skip: clipSkip,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
graph.edges.push({
|
||||||
|
source: {
|
||||||
|
node_id: METADATA_ACCUMULATOR,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
destination: {
|
||||||
|
node_id: LATENTS_TO_IMAGE,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// add LoRA support
|
// add LoRA support
|
||||||
addLoRAsToGraph(state, graph, TEXT_TO_LATENTS, model_loader);
|
addLoRAsToGraph(state, graph, TEXT_TO_LATENTS, model_loader);
|
||||||
|
|
||||||
|
@ -327,6 +327,17 @@ export const buildLinearImageToImageGraph = (
|
|||||||
init_image: initialImage.imageName,
|
init_image: initialImage.imageName,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
graph.edges.push({
|
||||||
|
source: {
|
||||||
|
node_id: METADATA_ACCUMULATOR,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
destination: {
|
||||||
|
node_id: LATENTS_TO_IMAGE,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// add LoRA support
|
// add LoRA support
|
||||||
addLoRAsToGraph(state, graph, LATENTS_TO_LATENTS, model_loader);
|
addLoRAsToGraph(state, graph, LATENTS_TO_LATENTS, model_loader);
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@ import {
|
|||||||
ImageToLatentsInvocation,
|
ImageToLatentsInvocation,
|
||||||
} from 'services/api/types';
|
} from 'services/api/types';
|
||||||
import { addDynamicPromptsToGraph } from './addDynamicPromptsToGraph';
|
import { addDynamicPromptsToGraph } from './addDynamicPromptsToGraph';
|
||||||
|
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
||||||
import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph';
|
import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph';
|
||||||
|
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
||||||
import {
|
import {
|
||||||
IMAGE_TO_LATENTS,
|
IMAGE_TO_LATENTS,
|
||||||
LATENTS_TO_IMAGE,
|
LATENTS_TO_IMAGE,
|
||||||
@ -20,8 +22,6 @@ import {
|
|||||||
SDXL_LATENTS_TO_LATENTS,
|
SDXL_LATENTS_TO_LATENTS,
|
||||||
SDXL_MODEL_LOADER,
|
SDXL_MODEL_LOADER,
|
||||||
} from './constants';
|
} from './constants';
|
||||||
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
|
||||||
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the Image to Image tab graph.
|
* Builds the Image to Image tab graph.
|
||||||
@ -50,6 +50,7 @@ export const buildLinearSDXLImageToImageGraph = (
|
|||||||
const {
|
const {
|
||||||
positiveStylePrompt,
|
positiveStylePrompt,
|
||||||
negativeStylePrompt,
|
negativeStylePrompt,
|
||||||
|
shouldConcatSDXLStylePrompt,
|
||||||
shouldUseSDXLRefiner,
|
shouldUseSDXLRefiner,
|
||||||
refinerStart,
|
refinerStart,
|
||||||
sdxlImg2ImgDenoisingStrength: strength,
|
sdxlImg2ImgDenoisingStrength: strength,
|
||||||
@ -91,13 +92,17 @@ export const buildLinearSDXLImageToImageGraph = (
|
|||||||
type: 'sdxl_compel_prompt',
|
type: 'sdxl_compel_prompt',
|
||||||
id: POSITIVE_CONDITIONING,
|
id: POSITIVE_CONDITIONING,
|
||||||
prompt: positivePrompt,
|
prompt: positivePrompt,
|
||||||
style: positiveStylePrompt,
|
style: shouldConcatSDXLStylePrompt
|
||||||
|
? `${positivePrompt} ${positiveStylePrompt}`
|
||||||
|
: positiveStylePrompt,
|
||||||
},
|
},
|
||||||
[NEGATIVE_CONDITIONING]: {
|
[NEGATIVE_CONDITIONING]: {
|
||||||
type: 'sdxl_compel_prompt',
|
type: 'sdxl_compel_prompt',
|
||||||
id: NEGATIVE_CONDITIONING,
|
id: NEGATIVE_CONDITIONING,
|
||||||
prompt: negativePrompt,
|
prompt: negativePrompt,
|
||||||
style: negativeStylePrompt,
|
style: shouldConcatSDXLStylePrompt
|
||||||
|
? `${negativePrompt} ${negativeStylePrompt}`
|
||||||
|
: negativeStylePrompt,
|
||||||
},
|
},
|
||||||
[NOISE]: {
|
[NOISE]: {
|
||||||
type: 'noise',
|
type: 'noise',
|
||||||
|
@ -3,7 +3,9 @@ import { RootState } from 'app/store/store';
|
|||||||
import { NonNullableGraph } from 'features/nodes/types/types';
|
import { NonNullableGraph } from 'features/nodes/types/types';
|
||||||
import { initialGenerationState } from 'features/parameters/store/generationSlice';
|
import { initialGenerationState } from 'features/parameters/store/generationSlice';
|
||||||
import { addDynamicPromptsToGraph } from './addDynamicPromptsToGraph';
|
import { addDynamicPromptsToGraph } from './addDynamicPromptsToGraph';
|
||||||
|
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
||||||
import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph';
|
import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph';
|
||||||
|
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
||||||
import {
|
import {
|
||||||
LATENTS_TO_IMAGE,
|
LATENTS_TO_IMAGE,
|
||||||
METADATA_ACCUMULATOR,
|
METADATA_ACCUMULATOR,
|
||||||
@ -14,8 +16,6 @@ import {
|
|||||||
SDXL_TEXT_TO_IMAGE_GRAPH,
|
SDXL_TEXT_TO_IMAGE_GRAPH,
|
||||||
SDXL_TEXT_TO_LATENTS,
|
SDXL_TEXT_TO_LATENTS,
|
||||||
} from './constants';
|
} from './constants';
|
||||||
import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph';
|
|
||||||
import { addWatermarkerToGraph } from './addWatermarkerToGraph';
|
|
||||||
|
|
||||||
export const buildLinearSDXLTextToImageGraph = (
|
export const buildLinearSDXLTextToImageGraph = (
|
||||||
state: RootState
|
state: RootState
|
||||||
@ -39,6 +39,7 @@ export const buildLinearSDXLTextToImageGraph = (
|
|||||||
const {
|
const {
|
||||||
positiveStylePrompt,
|
positiveStylePrompt,
|
||||||
negativeStylePrompt,
|
negativeStylePrompt,
|
||||||
|
shouldConcatSDXLStylePrompt,
|
||||||
shouldUseSDXLRefiner,
|
shouldUseSDXLRefiner,
|
||||||
refinerStart,
|
refinerStart,
|
||||||
} = state.sdxl;
|
} = state.sdxl;
|
||||||
@ -74,13 +75,17 @@ export const buildLinearSDXLTextToImageGraph = (
|
|||||||
type: 'sdxl_compel_prompt',
|
type: 'sdxl_compel_prompt',
|
||||||
id: POSITIVE_CONDITIONING,
|
id: POSITIVE_CONDITIONING,
|
||||||
prompt: positivePrompt,
|
prompt: positivePrompt,
|
||||||
style: positiveStylePrompt,
|
style: shouldConcatSDXLStylePrompt
|
||||||
|
? `${positivePrompt} ${positiveStylePrompt}`
|
||||||
|
: positiveStylePrompt,
|
||||||
},
|
},
|
||||||
[NEGATIVE_CONDITIONING]: {
|
[NEGATIVE_CONDITIONING]: {
|
||||||
type: 'sdxl_compel_prompt',
|
type: 'sdxl_compel_prompt',
|
||||||
id: NEGATIVE_CONDITIONING,
|
id: NEGATIVE_CONDITIONING,
|
||||||
prompt: negativePrompt,
|
prompt: negativePrompt,
|
||||||
style: negativeStylePrompt,
|
style: shouldConcatSDXLStylePrompt
|
||||||
|
? `${negativePrompt} ${negativeStylePrompt}`
|
||||||
|
: negativeStylePrompt,
|
||||||
},
|
},
|
||||||
[NOISE]: {
|
[NOISE]: {
|
||||||
type: 'noise',
|
type: 'noise',
|
||||||
|
@ -211,6 +211,17 @@ export const buildLinearTextToImageGraph = (
|
|||||||
clip_skip: clipSkip,
|
clip_skip: clipSkip,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
graph.edges.push({
|
||||||
|
source: {
|
||||||
|
node_id: METADATA_ACCUMULATOR,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
destination: {
|
||||||
|
node_id: LATENTS_TO_IMAGE,
|
||||||
|
field: 'metadata',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// add LoRA support
|
// add LoRA support
|
||||||
addLoRAsToGraph(state, graph, TEXT_TO_LATENTS, model_loader);
|
addLoRAsToGraph(state, graph, TEXT_TO_LATENTS, model_loader);
|
||||||
|
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
import { Box } from '@chakra-ui/react';
|
||||||
|
import { RootState } from 'app/store/store';
|
||||||
|
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||||
|
import IAISwitch from 'common/components/IAISwitch';
|
||||||
|
import { ChangeEvent } from 'react';
|
||||||
|
import { setShouldConcatSDXLStylePrompt } from '../store/sdxlSlice';
|
||||||
|
|
||||||
|
export default function ParamSDXLConcatPrompt() {
|
||||||
|
const shouldConcatSDXLStylePrompt = useAppSelector(
|
||||||
|
(state: RootState) => state.sdxl.shouldConcatSDXLStylePrompt
|
||||||
|
);
|
||||||
|
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
const handleShouldConcatPromptChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
dispatch(setShouldConcatSDXLStylePrompt(e.target.checked));
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
px: 2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<IAISwitch
|
||||||
|
label="Concat Style Prompt"
|
||||||
|
tooltip="Concatenates Basic Prompt with Style (Recommended)"
|
||||||
|
isChecked={shouldConcatSDXLStylePrompt}
|
||||||
|
onChange={handleShouldConcatPromptChange}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
|
import { Flex } from '@chakra-ui/react';
|
||||||
import ParamDynamicPromptsCollapse from 'features/dynamicPrompts/components/ParamDynamicPromptsCollapse';
|
import ParamDynamicPromptsCollapse from 'features/dynamicPrompts/components/ParamDynamicPromptsCollapse';
|
||||||
import ParamNegativeConditioning from 'features/parameters/components/Parameters/Core/ParamNegativeConditioning';
|
import ParamNegativeConditioning from 'features/parameters/components/Parameters/Core/ParamNegativeConditioning';
|
||||||
import ParamPositiveConditioning from 'features/parameters/components/Parameters/Core/ParamPositiveConditioning';
|
import ParamPositiveConditioning from 'features/parameters/components/Parameters/Core/ParamPositiveConditioning';
|
||||||
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
||||||
// import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse';
|
|
||||||
import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons';
|
import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons';
|
||||||
|
import ParamSDXLConcatPrompt from './ParamSDXLConcatPrompt';
|
||||||
import ParamSDXLNegativeStyleConditioning from './ParamSDXLNegativeStyleConditioning';
|
import ParamSDXLNegativeStyleConditioning from './ParamSDXLNegativeStyleConditioning';
|
||||||
import ParamSDXLPositiveStyleConditioning from './ParamSDXLPositiveStyleConditioning';
|
import ParamSDXLPositiveStyleConditioning from './ParamSDXLPositiveStyleConditioning';
|
||||||
import ParamSDXLRefinerCollapse from './ParamSDXLRefinerCollapse';
|
import ParamSDXLRefinerCollapse from './ParamSDXLRefinerCollapse';
|
||||||
@ -12,10 +13,22 @@ import SDXLImageToImageTabCoreParameters from './SDXLImageToImageTabCoreParamete
|
|||||||
const SDXLImageToImageTabParameters = () => {
|
const SDXLImageToImageTabParameters = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Flex
|
||||||
|
sx={{
|
||||||
|
flexDirection: 'column',
|
||||||
|
gap: 2,
|
||||||
|
p: 2,
|
||||||
|
borderRadius: 4,
|
||||||
|
bg: 'base.100',
|
||||||
|
_dark: { bg: 'base.850' },
|
||||||
|
}}
|
||||||
|
>
|
||||||
<ParamPositiveConditioning />
|
<ParamPositiveConditioning />
|
||||||
<ParamSDXLPositiveStyleConditioning />
|
<ParamSDXLPositiveStyleConditioning />
|
||||||
<ParamNegativeConditioning />
|
<ParamNegativeConditioning />
|
||||||
<ParamSDXLNegativeStyleConditioning />
|
<ParamSDXLNegativeStyleConditioning />
|
||||||
|
<ParamSDXLConcatPrompt />
|
||||||
|
</Flex>
|
||||||
<ProcessButtons />
|
<ProcessButtons />
|
||||||
<SDXLImageToImageTabCoreParameters />
|
<SDXLImageToImageTabCoreParameters />
|
||||||
<ParamSDXLRefinerCollapse />
|
<ParamSDXLRefinerCollapse />
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
import { Flex } from '@chakra-ui/react';
|
||||||
import ParamDynamicPromptsCollapse from 'features/dynamicPrompts/components/ParamDynamicPromptsCollapse';
|
import ParamDynamicPromptsCollapse from 'features/dynamicPrompts/components/ParamDynamicPromptsCollapse';
|
||||||
import ParamNegativeConditioning from 'features/parameters/components/Parameters/Core/ParamNegativeConditioning';
|
import ParamNegativeConditioning from 'features/parameters/components/Parameters/Core/ParamNegativeConditioning';
|
||||||
import ParamPositiveConditioning from 'features/parameters/components/Parameters/Core/ParamPositiveConditioning';
|
import ParamPositiveConditioning from 'features/parameters/components/Parameters/Core/ParamPositiveConditioning';
|
||||||
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
||||||
import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons';
|
import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons';
|
||||||
import TextToImageTabCoreParameters from 'features/ui/components/tabs/TextToImage/TextToImageTabCoreParameters';
|
import TextToImageTabCoreParameters from 'features/ui/components/tabs/TextToImage/TextToImageTabCoreParameters';
|
||||||
|
import ParamSDXLConcatPrompt from './ParamSDXLConcatPrompt';
|
||||||
import ParamSDXLNegativeStyleConditioning from './ParamSDXLNegativeStyleConditioning';
|
import ParamSDXLNegativeStyleConditioning from './ParamSDXLNegativeStyleConditioning';
|
||||||
import ParamSDXLPositiveStyleConditioning from './ParamSDXLPositiveStyleConditioning';
|
import ParamSDXLPositiveStyleConditioning from './ParamSDXLPositiveStyleConditioning';
|
||||||
import ParamSDXLRefinerCollapse from './ParamSDXLRefinerCollapse';
|
import ParamSDXLRefinerCollapse from './ParamSDXLRefinerCollapse';
|
||||||
@ -11,10 +13,22 @@ import ParamSDXLRefinerCollapse from './ParamSDXLRefinerCollapse';
|
|||||||
const SDXLTextToImageTabParameters = () => {
|
const SDXLTextToImageTabParameters = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Flex
|
||||||
|
sx={{
|
||||||
|
flexDirection: 'column',
|
||||||
|
gap: 2,
|
||||||
|
p: 2,
|
||||||
|
borderRadius: 4,
|
||||||
|
bg: 'base.100',
|
||||||
|
_dark: { bg: 'base.850' },
|
||||||
|
}}
|
||||||
|
>
|
||||||
<ParamPositiveConditioning />
|
<ParamPositiveConditioning />
|
||||||
<ParamSDXLPositiveStyleConditioning />
|
<ParamSDXLPositiveStyleConditioning />
|
||||||
<ParamNegativeConditioning />
|
<ParamNegativeConditioning />
|
||||||
<ParamSDXLNegativeStyleConditioning />
|
<ParamSDXLNegativeStyleConditioning />
|
||||||
|
<ParamSDXLConcatPrompt />
|
||||||
|
</Flex>
|
||||||
<ProcessButtons />
|
<ProcessButtons />
|
||||||
<TextToImageTabCoreParameters />
|
<TextToImageTabCoreParameters />
|
||||||
<ParamSDXLRefinerCollapse />
|
<ParamSDXLRefinerCollapse />
|
||||||
|
@ -10,6 +10,7 @@ import { MainModelField } from 'services/api/types';
|
|||||||
type SDXLInitialState = {
|
type SDXLInitialState = {
|
||||||
positiveStylePrompt: PositiveStylePromptSDXLParam;
|
positiveStylePrompt: PositiveStylePromptSDXLParam;
|
||||||
negativeStylePrompt: NegativeStylePromptSDXLParam;
|
negativeStylePrompt: NegativeStylePromptSDXLParam;
|
||||||
|
shouldConcatSDXLStylePrompt: boolean;
|
||||||
shouldUseSDXLRefiner: boolean;
|
shouldUseSDXLRefiner: boolean;
|
||||||
sdxlImg2ImgDenoisingStrength: number;
|
sdxlImg2ImgDenoisingStrength: number;
|
||||||
refinerModel: MainModelField | null;
|
refinerModel: MainModelField | null;
|
||||||
@ -23,6 +24,7 @@ type SDXLInitialState = {
|
|||||||
const sdxlInitialState: SDXLInitialState = {
|
const sdxlInitialState: SDXLInitialState = {
|
||||||
positiveStylePrompt: '',
|
positiveStylePrompt: '',
|
||||||
negativeStylePrompt: '',
|
negativeStylePrompt: '',
|
||||||
|
shouldConcatSDXLStylePrompt: true,
|
||||||
shouldUseSDXLRefiner: false,
|
shouldUseSDXLRefiner: false,
|
||||||
sdxlImg2ImgDenoisingStrength: 0.7,
|
sdxlImg2ImgDenoisingStrength: 0.7,
|
||||||
refinerModel: null,
|
refinerModel: null,
|
||||||
@ -43,6 +45,9 @@ const sdxlSlice = createSlice({
|
|||||||
setNegativeStylePromptSDXL: (state, action: PayloadAction<string>) => {
|
setNegativeStylePromptSDXL: (state, action: PayloadAction<string>) => {
|
||||||
state.negativeStylePrompt = action.payload;
|
state.negativeStylePrompt = action.payload;
|
||||||
},
|
},
|
||||||
|
setShouldConcatSDXLStylePrompt: (state, action: PayloadAction<boolean>) => {
|
||||||
|
state.shouldConcatSDXLStylePrompt = action.payload;
|
||||||
|
},
|
||||||
setShouldUseSDXLRefiner: (state, action: PayloadAction<boolean>) => {
|
setShouldUseSDXLRefiner: (state, action: PayloadAction<boolean>) => {
|
||||||
state.shouldUseSDXLRefiner = action.payload;
|
state.shouldUseSDXLRefiner = action.payload;
|
||||||
},
|
},
|
||||||
@ -76,6 +81,7 @@ const sdxlSlice = createSlice({
|
|||||||
export const {
|
export const {
|
||||||
setPositiveStylePromptSDXL,
|
setPositiveStylePromptSDXL,
|
||||||
setNegativeStylePromptSDXL,
|
setNegativeStylePromptSDXL,
|
||||||
|
setShouldConcatSDXLStylePrompt,
|
||||||
setShouldUseSDXLRefiner,
|
setShouldUseSDXLRefiner,
|
||||||
setSDXLImg2ImgDenoisingStrength,
|
setSDXLImg2ImgDenoisingStrength,
|
||||||
refinerModelChanged,
|
refinerModelChanged,
|
||||||
|
@ -104,6 +104,7 @@ type ConfigOptions = {
|
|||||||
shouldShowAdvancedOptionsSettings: boolean;
|
shouldShowAdvancedOptionsSettings: boolean;
|
||||||
shouldShowClearIntermediates: boolean;
|
shouldShowClearIntermediates: boolean;
|
||||||
shouldShowNodesToggle: boolean;
|
shouldShowNodesToggle: boolean;
|
||||||
|
shouldShowLocalizationToggle: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
type SettingsModalProps = {
|
type SettingsModalProps = {
|
||||||
@ -125,6 +126,8 @@ const SettingsModal = ({ children, config }: SettingsModalProps) => {
|
|||||||
const shouldShowClearIntermediates =
|
const shouldShowClearIntermediates =
|
||||||
config?.shouldShowClearIntermediates ?? true;
|
config?.shouldShowClearIntermediates ?? true;
|
||||||
const shouldShowNodesToggle = config?.shouldShowNodesToggle ?? true;
|
const shouldShowNodesToggle = config?.shouldShowNodesToggle ?? true;
|
||||||
|
const shouldShowLocalizationToggle =
|
||||||
|
config?.shouldShowLocalizationToggle ?? true;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!shouldShowDeveloperSettings) {
|
if (!shouldShowDeveloperSettings) {
|
||||||
@ -325,6 +328,7 @@ const SettingsModal = ({ children, config }: SettingsModalProps) => {
|
|||||||
onChange={handleToggleNodes}
|
onChange={handleToggleNodes}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{shouldShowLocalizationToggle && (
|
||||||
<IAIMantineSelect
|
<IAIMantineSelect
|
||||||
disabled={!isLocalizationEnabled}
|
disabled={!isLocalizationEnabled}
|
||||||
label={t('common.languagePickerLabel')}
|
label={t('common.languagePickerLabel')}
|
||||||
@ -335,6 +339,7 @@ const SettingsModal = ({ children, config }: SettingsModalProps) => {
|
|||||||
}))}
|
}))}
|
||||||
onChange={handleLanguageChanged}
|
onChange={handleLanguageChanged}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</StyledFlex>
|
</StyledFlex>
|
||||||
|
|
||||||
{shouldShowDeveloperSettings && (
|
{shouldShowDeveloperSettings && (
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
import { Flex } from '@chakra-ui/react';
|
import { Flex } from '@chakra-ui/react';
|
||||||
import { createSelector } from '@reduxjs/toolkit';
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
|
import { RootState } from 'app/store/store';
|
||||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||||
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
||||||
|
import SDXLImageToImageTabParameters from 'features/sdxl/components/SDXLImageToImageTabParameters';
|
||||||
|
import SDXLTextToImageTabParameters from 'features/sdxl/components/SDXLTextToImageTabParameters';
|
||||||
import InvokeAILogoComponent from 'features/system/components/InvokeAILogoComponent';
|
import InvokeAILogoComponent from 'features/system/components/InvokeAILogoComponent';
|
||||||
import {
|
import {
|
||||||
activeTabNameSelector,
|
activeTabNameSelector,
|
||||||
@ -39,13 +42,23 @@ const ParametersDrawer = () => {
|
|||||||
dispatch(setShouldShowParametersPanel(false));
|
dispatch(setShouldShowParametersPanel(false));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const model = useAppSelector((state: RootState) => state.generation.model);
|
||||||
|
|
||||||
const drawerContent = useMemo(() => {
|
const drawerContent = useMemo(() => {
|
||||||
if (activeTabName === 'txt2img') {
|
if (activeTabName === 'txt2img') {
|
||||||
return <TextToImageTabParameters />;
|
return model && model.base_model === 'sdxl' ? (
|
||||||
|
<SDXLTextToImageTabParameters />
|
||||||
|
) : (
|
||||||
|
<TextToImageTabParameters />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTabName === 'img2img') {
|
if (activeTabName === 'img2img') {
|
||||||
return <ImageToImageTabParameters />;
|
return model && model.base_model === 'sdxl' ? (
|
||||||
|
<SDXLImageToImageTabParameters />
|
||||||
|
) : (
|
||||||
|
<ImageToImageTabParameters />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTabName === 'unifiedCanvas') {
|
if (activeTabName === 'unifiedCanvas') {
|
||||||
@ -53,7 +66,7 @@ const ParametersDrawer = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}, [activeTabName]);
|
}, [activeTabName, model]);
|
||||||
|
|
||||||
if (shouldPinParametersPanel) {
|
if (shouldPinParametersPanel) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Flex } from '@chakra-ui/react';
|
import { Flex } from '@chakra-ui/react';
|
||||||
import { RootState } from 'app/store/store';
|
import { RootState } from 'app/store/store';
|
||||||
import { useAppSelector } from 'app/store/storeHooks';
|
import { useAppSelector } from 'app/store/storeHooks';
|
||||||
import TextToImageSDXLTabParameters from 'features/sdxl/components/SDXLTextToImageTabParameters';
|
import SDXLTextToImageTabParameters from 'features/sdxl/components/SDXLTextToImageTabParameters';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
||||||
import TextToImageTabMain from './TextToImageTabMain';
|
import TextToImageTabMain from './TextToImageTabMain';
|
||||||
@ -13,7 +13,7 @@ const TextToImageTab = () => {
|
|||||||
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
||||||
<ParametersPinnedWrapper>
|
<ParametersPinnedWrapper>
|
||||||
{model && model.base_model === 'sdxl' ? (
|
{model && model.base_model === 'sdxl' ? (
|
||||||
<TextToImageSDXLTabParameters />
|
<SDXLTextToImageTabParameters />
|
||||||
) : (
|
) : (
|
||||||
<TextToImageTabParameters />
|
<TextToImageTabParameters />
|
||||||
)}
|
)}
|
||||||
|
@ -1381,7 +1381,7 @@ export type components = {
|
|||||||
* @description The nodes in this graph
|
* @description The nodes in this graph
|
||||||
*/
|
*/
|
||||||
nodes?: {
|
nodes?: {
|
||||||
[key: string]: (components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ONNXSD1ModelLoaderInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"]) | undefined;
|
[key: string]: (components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"]) | undefined;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Edges
|
* Edges
|
||||||
@ -1424,7 +1424,7 @@ export type components = {
|
|||||||
* @description The results of node executions
|
* @description The results of node executions
|
||||||
*/
|
*/
|
||||||
results: {
|
results: {
|
||||||
[key: string]: (components["schemas"]["ImageOutput"] | components["schemas"]["MaskOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["VaeLoaderOutput"] | components["schemas"]["MetadataAccumulatorOutput"] | components["schemas"]["PromptOutput"] | components["schemas"]["PromptCollectionOutput"] | components["schemas"]["IntOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["CompelOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["IntCollectionOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["ONNXModelLoaderOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["CollectInvocationOutput"]) | undefined;
|
[key: string]: (components["schemas"]["ImageOutput"] | components["schemas"]["MaskOutput"] | components["schemas"]["ControlOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["LoraLoaderOutput"] | components["schemas"]["VaeLoaderOutput"] | components["schemas"]["MetadataAccumulatorOutput"] | components["schemas"]["CompelOutput"] | components["schemas"]["ClipSkipInvocationOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["IntOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["IntCollectionOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["PromptOutput"] | components["schemas"]["PromptCollectionOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["GraphInvocationOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["CollectInvocationOutput"]) | undefined;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Errors
|
* Errors
|
||||||
@ -3630,7 +3630,7 @@ export type components = {
|
|||||||
/** ModelsList */
|
/** ModelsList */
|
||||||
ModelsList: {
|
ModelsList: {
|
||||||
/** Models */
|
/** Models */
|
||||||
models: (components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"])[];
|
models: (components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"])[];
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* MultiplyInvocation
|
* MultiplyInvocation
|
||||||
@ -5856,6 +5856,12 @@ export type components = {
|
|||||||
*/
|
*/
|
||||||
image?: components["schemas"]["ImageField"];
|
image?: components["schemas"]["ImageField"];
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* StableDiffusion2ModelFormat
|
||||||
|
* @description An enumeration.
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
StableDiffusion2ModelFormat: "checkpoint" | "diffusers";
|
||||||
/**
|
/**
|
||||||
* StableDiffusion1ModelFormat
|
* StableDiffusion1ModelFormat
|
||||||
* @description An enumeration.
|
* @description An enumeration.
|
||||||
@ -5868,12 +5874,6 @@ export type components = {
|
|||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
StableDiffusionXLModelFormat: "checkpoint" | "diffusers";
|
StableDiffusionXLModelFormat: "checkpoint" | "diffusers";
|
||||||
/**
|
|
||||||
* StableDiffusion2ModelFormat
|
|
||||||
* @description An enumeration.
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
StableDiffusion2ModelFormat: "checkpoint" | "diffusers";
|
|
||||||
/**
|
/**
|
||||||
* ControlNetModelFormat
|
* ControlNetModelFormat
|
||||||
* @description An enumeration.
|
* @description An enumeration.
|
||||||
@ -5990,7 +5990,7 @@ export type operations = {
|
|||||||
};
|
};
|
||||||
requestBody: {
|
requestBody: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ONNXSD1ModelLoaderInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"];
|
"application/json": components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
responses: {
|
responses: {
|
||||||
@ -6027,7 +6027,7 @@ export type operations = {
|
|||||||
};
|
};
|
||||||
requestBody: {
|
requestBody: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["ONNXPromptInvocation"] | components["schemas"]["ONNXTextToLatentsInvocation"] | components["schemas"]["ONNXLatentsToImageInvocation"] | components["schemas"]["ONNXSD1ModelLoaderInvocation"] | components["schemas"]["OnnxModelLoaderInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"];
|
"application/json": components["schemas"]["ControlNetInvocation"] | components["schemas"]["ImageProcessorInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["LoraLoaderInvocation"] | components["schemas"]["VaeLoaderInvocation"] | components["schemas"]["MetadataAccumulatorInvocation"] | components["schemas"]["LoadImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SDXLRawPromptInvocation"] | components["schemas"]["SDXLRefinerRawPromptInvocation"] | components["schemas"]["ClipSkipInvocation"] | components["schemas"]["TextToLatentsInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["InpaintInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["ParamIntInvocation"] | components["schemas"]["ParamFloatInvocation"] | components["schemas"]["ParamStringInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["SDXLTextToLatentsInvocation"] | components["schemas"]["SDXLLatentsToLatentsInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["GraphInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["OpenposeImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["LatentsToLatentsInvocation"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
responses: {
|
responses: {
|
||||||
@ -6291,14 +6291,14 @@ export type operations = {
|
|||||||
};
|
};
|
||||||
requestBody: {
|
requestBody: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
responses: {
|
responses: {
|
||||||
/** @description The model was updated successfully */
|
/** @description The model was updated successfully */
|
||||||
200: {
|
200: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description Bad request */
|
/** @description Bad request */
|
||||||
@ -6329,7 +6329,7 @@ export type operations = {
|
|||||||
/** @description The model imported successfully */
|
/** @description The model imported successfully */
|
||||||
201: {
|
201: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description The model could not be found */
|
/** @description The model could not be found */
|
||||||
@ -6355,14 +6355,14 @@ export type operations = {
|
|||||||
add_model: {
|
add_model: {
|
||||||
requestBody: {
|
requestBody: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
responses: {
|
responses: {
|
||||||
/** @description The model added successfully */
|
/** @description The model added successfully */
|
||||||
201: {
|
201: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description The model could not be found */
|
/** @description The model could not be found */
|
||||||
@ -6402,7 +6402,7 @@ export type operations = {
|
|||||||
/** @description Model converted successfully */
|
/** @description Model converted successfully */
|
||||||
200: {
|
200: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description Bad request */
|
/** @description Bad request */
|
||||||
@ -6491,7 +6491,7 @@ export type operations = {
|
|||||||
/** @description Model converted successfully */
|
/** @description Model converted successfully */
|
||||||
200: {
|
200: {
|
||||||
content: {
|
content: {
|
||||||
"application/json": components["schemas"]["ONNXStableDiffusion1ModelConfig"] | components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["ONNXStableDiffusion2ModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
"application/json": components["schemas"]["StableDiffusion1ModelCheckpointConfig"] | components["schemas"]["StableDiffusion1ModelDiffusersConfig"] | components["schemas"]["VaeModelConfig"] | components["schemas"]["LoRAModelConfig"] | components["schemas"]["ControlNetModelCheckpointConfig"] | components["schemas"]["ControlNetModelDiffusersConfig"] | components["schemas"]["TextualInversionModelConfig"] | components["schemas"]["StableDiffusion2ModelCheckpointConfig"] | components["schemas"]["StableDiffusion2ModelDiffusersConfig"] | components["schemas"]["StableDiffusionXLModelCheckpointConfig"] | components["schemas"]["StableDiffusionXLModelDiffusersConfig"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description Incompatible models */
|
/** @description Incompatible models */
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = "3.0.0"
|
__version__ = "3.0.1rc1"
|
||||||
|
11
scripts/probe-model.py
Executable file
11
scripts/probe-model.py
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/env python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from invokeai.backend.model_management.model_probe import ModelProbe
|
||||||
|
|
||||||
|
info = ModelProbe().probe(Path(sys.argv[1]))
|
||||||
|
print(info)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user