mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
799dc6d0df
This was a difficult merge because both PR #1108 and #1243 made changes to obscure parts of the diffusion code. - prompt weighting, merging and cross-attention working - cross-attention does not work with runwayML inpainting model, but weighting and merging are tested and working - CLI command parsing code rewritten in order to get embedded quotes right - --hires now works with runwayML inpainting - --embiggen does not work with runwayML and will give an error - Added an --invert option to invert masks applied to inpainting - Updated documentation
575 lines
30 KiB
Markdown
575 lines
30 KiB
Markdown
---
|
|
title: CLI
|
|
hide:
|
|
- toc
|
|
---
|
|
|
|
# :material-bash: CLI
|
|
|
|
## **Interactive Command Line Interface**
|
|
|
|
The `invoke.py` script, located in `scripts/`, provides an interactive
|
|
interface to image generation similar to the "invoke mothership" bot that Stable
|
|
AI provided on its Discord server.
|
|
|
|
Unlike the `txt2img.py` and `img2img.py` scripts provided in the original
|
|
[CompVis/stable-diffusion](https://github.com/CompVis/stable-diffusion) source
|
|
code repository, the time-consuming initialization of the AI model
|
|
initialization only happens once. After that image generation from the
|
|
command-line interface is very fast.
|
|
|
|
The script uses the readline library to allow for in-line editing, command
|
|
history (++up++ and ++down++), autocompletion, and more. To help keep track of
|
|
which prompts generated which images, the script writes a log file of image
|
|
names and prompts to the selected output directory.
|
|
|
|
In addition, as of version 1.02, it also writes the prompt into the PNG file's
|
|
metadata where it can be retrieved using `scripts/images2prompt.py`
|
|
|
|
The script is confirmed to work on Linux, Windows and Mac systems.
|
|
|
|
!!! note
|
|
|
|
This script runs from the command-line or can be used as a Web application. The Web GUI is
|
|
currently rudimentary, but a much better replacement is on its way.
|
|
|
|
```bash
|
|
(invokeai) ~/stable-diffusion$ python3 ./scripts/invoke.py
|
|
* Initializing, be patient...
|
|
Loading model from models/ldm/text2img-large/model.ckpt
|
|
(...more initialization messages...)
|
|
|
|
* Initialization done! Awaiting your command...
|
|
invoke> ashley judd riding a camel -n2 -s150
|
|
Outputs:
|
|
outputs/img-samples/00009.png: "ashley judd riding a camel" -n2 -s150 -S 416354203
|
|
outputs/img-samples/00010.png: "ashley judd riding a camel" -n2 -s150 -S 1362479620
|
|
|
|
invoke> "there's a fly in my soup" -n6 -g
|
|
outputs/img-samples/00011.png: "there's a fly in my soup" -n6 -g -S 2685670268
|
|
seeds for individual rows: [2685670268, 1216708065, 2335773498, 822223658, 714542046, 3395302430]
|
|
invoke> q
|
|
|
|
# this shows how to retrieve the prompt stored in the saved image's metadata
|
|
(invokeai) ~/stable-diffusion$ python ./scripts/images2prompt.py outputs/img_samples/*.png
|
|
00009.png: "ashley judd riding a camel" -s150 -S 416354203
|
|
00010.png: "ashley judd riding a camel" -s150 -S 1362479620
|
|
00011.png: "there's a fly in my soup" -n6 -g -S 2685670268
|
|
```
|
|
|
|
![invoke-py-demo](../assets/dream-py-demo.png)
|
|
|
|
The `invoke>` prompt's arguments are pretty much identical to those used in the
|
|
Discord bot, except you don't need to type `!invoke` (it doesn't hurt if you do).
|
|
A significant change is that creation of individual images is now the default
|
|
unless `--grid` (`-g`) is given. A full list is given in
|
|
[List of prompt arguments](#list-of-prompt-arguments).
|
|
|
|
## Arguments
|
|
|
|
The script itself also recognizes a series of command-line switches that will
|
|
change important global defaults, such as the directory for image outputs and
|
|
the location of the model weight files.
|
|
|
|
### List of arguments recognized at the command line
|
|
|
|
These command-line arguments can be passed to `invoke.py` when you first run it
|
|
from the Windows, Mac or Linux command line. Some set defaults that can be
|
|
overridden on a per-prompt basis (see [List of prompt arguments](#list-of-prompt-arguments). Others
|
|
|
|
| Argument <img width="240" align="right"/> | Shortcut <img width="100" align="right"/> | Default <img width="320" align="right"/> | Description |
|
|
| ----------------------------------------- | ----------------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
| `--help` | `-h` | | Print a concise help message. |
|
|
| `--outdir <path>` | `-o<path>` | `outputs/img_samples` | Location for generated images. |
|
|
| `--prompt_as_dir` | `-p` | `False` | Name output directories using the prompt text. |
|
|
| `--from_file <path>` | | `None` | Read list of prompts from a file. Use `-` to read from standard input |
|
|
| `--model <modelname>` | | `stable-diffusion-1.4` | Loads model specified in configs/models.yaml. Currently one of "stable-diffusion-1.4" or "laion400m" |
|
|
| `--full_precision` | `-F` | `False` | Run in slower full-precision mode. Needed for Macintosh M1/M2 hardware and some older video cards. |
|
|
| `--png_compression <0-9>` | `-z<0-9>` | 6 | Select level of compression for output files, from 0 (no compression) to 9 (max compression) |
|
|
| `--safety-checker` | | False | Activate safety checker for NSFW and other potentially disturbing imagery |
|
|
| `--web` | | `False` | Start in web server mode |
|
|
| `--host <ip addr>` | | `localhost` | Which network interface web server should listen on. Set to 0.0.0.0 to listen on any. |
|
|
| `--port <port>` | | `9090` | Which port web server should listen for requests on. |
|
|
| `--config <path>` | | `configs/models.yaml` | Configuration file for models and their weights. |
|
|
| `--iterations <int>` | `-n<int>` | `1` | How many images to generate per prompt. |
|
|
| `--grid` | `-g` | `False` | Save all image series as a grid rather than individually. |
|
|
| `--sampler <sampler>` | `-A<sampler>` | `k_lms` | Sampler to use. Use `-h` to get list of available samplers. |
|
|
| `--seamless` | | `False` | Create interesting effects by tiling elements of the image. |
|
|
| `--embedding_path <path>` | | `None` | Path to pre-trained embedding manager checkpoints, for custom models |
|
|
| `--gfpgan_dir` | | `src/gfpgan` | Path to where GFPGAN is installed. |
|
|
| `--gfpgan_model_path` | | `experiments/pretrained_models/GFPGANv1.4.pth` | Path to GFPGAN model file, relative to `--gfpgan_dir`. |
|
|
| `--free_gpu_mem` | | `False` | Free GPU memory after sampling, to allow image decoding and saving in low VRAM conditions |
|
|
| `--precision` | | `auto` | Set model precision, default is selected by device. Options: auto, float32, float16, autocast |
|
|
|
|
!!! warning deprecated
|
|
|
|
These arguments are deprecated but still work:
|
|
|
|
<div align="center" markdown>
|
|
|
|
| Argument | Shortcut | Default | Description |
|
|
|--------------------|------------|---------------------|--------------|
|
|
| `--weights <path>` | | `None` | Pth to weights file; use `--model stable-diffusion-1.4` instead |
|
|
| `--laion400m` | `-l` | `False` | Use older LAION400m weights; use `--model=laion400m` instead |
|
|
|
|
</div>
|
|
|
|
!!! tip
|
|
|
|
On Windows systems, you may run into
|
|
problems when passing the invoke script standard backslashed path
|
|
names because the Python interpreter treats "\" as an escape.
|
|
You can either double your slashes (ick): `C:\\path\\to\\my\\file`, or
|
|
use Linux/Mac style forward slashes (better): `C:/path/to/my/file`.
|
|
|
|
## List of prompt arguments
|
|
|
|
After the invoke.py script initializes, it will present you with a
|
|
`invoke>` prompt. Here you can enter information to generate images
|
|
from text ([txt2img](#txt2img)), to embellish an existing image or sketch
|
|
([img2img](#img2img)), or to selectively alter chosen regions of the image
|
|
([inpainting](#inpainting)).
|
|
|
|
### txt2img
|
|
|
|
!!! example
|
|
|
|
```bash
|
|
invoke> waterfall and rainbow -W640 -H480
|
|
```
|
|
|
|
This will create the requested image with the dimensions 640 (width)
|
|
and 480 (height).
|
|
|
|
Here are the invoke> command that apply to txt2img:
|
|
|
|
| Argument <img width="680" align="right"/> | Shortcut <img width="420" align="right"/> | Default <img width="480" align="right"/> | Description |
|
|
|--------------------|------------|---------------------|--------------|
|
|
| "my prompt" | | | Text prompt to use. The quotation marks are optional. |
|
|
| --width <int> | -W<int> | 512 | Width of generated image |
|
|
| --height <int> | -H<int> | 512 | Height of generated image |
|
|
| --iterations <int> | -n<int> | 1 | How many images to generate from this prompt |
|
|
| --steps <int> | -s<int> | 50 | How many steps of refinement to apply |
|
|
| --cfg_scale <float>| -C<float> | 7.5 | How hard to try to match the prompt to the generated image; any number greater than 1.0 works, but the useful range is roughly 5.0 to 20.0 |
|
|
| --seed <int> | -S<int> | None | Set the random seed for the next series of images. This can be used to recreate an image generated previously.|
|
|
| --sampler <sampler>| -A<sampler>| k_lms | Sampler to use. Use -h to get list of available samplers. |
|
|
| --hires_fix | | | Larger images often have duplication artefacts. This option suppresses duplicates by generating the image at low res, and then using img2img to increase the resolution |
|
|
| --png_compression <0-9> | -z<0-9> | 6 | Select level of compression for output files, from 0 (no compression) to 9 (max compression) |
|
|
| --grid | -g | False | Turn on grid mode to return a single image combining all the images generated by this prompt |
|
|
| --individual | -i | True | Turn off grid mode (deprecated; leave off --grid instead) |
|
|
| --outdir <path> | -o<path> | outputs/img_samples | Temporarily change the location of these images |
|
|
| --seamless | | False | Activate seamless tiling for interesting effects |
|
|
| --seamless_axes | | x,y | Specify which axes to use circular convolution on. |
|
|
| --log_tokenization | -t | False | Display a color-coded list of the parsed tokens derived from the prompt |
|
|
| --skip_normalization| -x | False | Weighted subprompts will not be normalized. See [Weighted Prompts](./OTHER.md#weighted-prompts) |
|
|
| --upscale <int> <float> | -U <int> <float> | -U 1 0.75| Upscale image by magnification factor (2, 4), and set strength of upscaling (0.0-1.0). If strength not set, will default to 0.75. |
|
|
| --facetool_strength <float> | -G <float> | -G0 | Fix faces (defaults to using the GFPGAN algorithm); argument indicates how hard the algorithm should try (0.0-1.0) |
|
|
| --facetool <name> | -ft <name> | -ft gfpgan | Select face restoration algorithm to use: gfpgan, codeformer |
|
|
| --codeformer_fidelity | -cf <float> | 0.75 | Used along with CodeFormer. Takes values between 0 and 1. 0 produces high quality but low accuracy. 1 produces high accuracy but low quality |
|
|
| --save_original | -save_orig| False | When upscaling or fixing faces, this will cause the original image to be saved rather than replaced. |
|
|
| --variation <float> |-v<float>| 0.0 | Add a bit of noise (0.0=none, 1.0=high) to the image in order to generate a series of variations. Usually used in combination with -S<seed> and -n<int> to generate a series a riffs on a starting image. See [Variations](./VARIATIONS.md). |
|
|
| --with_variations <pattern> | | None | Combine two or more variations. See [Variations](./VARIATIONS.md) for now to use this. |
|
|
| --save_intermediates <n> | | None | Save the image from every nth step into an "intermediates" folder inside the output directory |
|
|
|
|
Note that the width and height of the image must be multiples of
|
|
64. You can provide different values, but they will be rounded down to
|
|
the nearest multiple of 64.
|
|
|
|
|
|
### This is an example of img2img:
|
|
|
|
~~~~
|
|
invoke> waterfall and rainbow -I./vacation-photo.png -W640 -H480 --fit
|
|
~~~~
|
|
|
|
This will modify the indicated vacation photograph by making it more
|
|
like the prompt. Results will vary greatly depending on what is in the
|
|
image. We also ask to --fit the image into a box no bigger than
|
|
640x480. Otherwise the image size will be identical to the provided
|
|
photo and you may run out of memory if it is large.
|
|
|
|
In addition to the command-line options recognized by txt2img, img2img
|
|
accepts additional options:
|
|
|
|
| Argument <img width="160" align="right"/> | Shortcut | Default | Description |
|
|
|----------------------|-------------|-----------------|--------------|
|
|
| `--init_img <path>` | `-I<path>` | `None` | Path to the initialization image |
|
|
| `--fit` | `-F` | `False` | Scale the image to fit into the specified -H and -W dimensions |
|
|
| `--strength <float>` | `-s<float>` | `0.75` | How hard to try to match the prompt to the initial image. Ranges from 0.0-0.99, with higher values replacing the initial image completely.|
|
|
|
|
### inpainting
|
|
|
|
!!! example
|
|
|
|
```bash
|
|
invoke> waterfall and rainbow -I./vacation-photo.png -M./vacation-mask.png -W640 -H480 --fit
|
|
```
|
|
|
|
This will do the same thing as img2img, but image alterations will
|
|
only occur within transparent areas defined by the mask file specified
|
|
by `-M`. You may also supply just a single initial image with the areas
|
|
to overpaint made transparent, but you must be careful not to destroy
|
|
the pixels underneath when you create the transparent areas. See
|
|
[Inpainting](./INPAINTING.md) for details.
|
|
|
|
inpainting accepts all the arguments used for txt2img and img2img, as
|
|
well as the --mask (-M) and --text_mask (-tm) arguments:
|
|
|
|
| Argument <img width="100" align="right"/> | Shortcut | Default | Description |
|
|
|--------------------|------------|---------------------|--------------|
|
|
| `--init_mask <path>` | `-M<path>` | `None` |Path to an image the same size as the initial_image, with areas for inpainting made transparent.|
|
|
| `--invert_mask ` | | False |If true, invert the mask so that transparent areas are opaque and vice versa.|
|
|
| `--text_mask <prompt> [<float>]` | `-tm <prompt> [<float>]` | <none> | Create a mask from a text prompt describing part of the image|
|
|
|
|
The mask may either be an image with transparent areas, in which case
|
|
the inpainting will occur in the transparent areas only, or a black
|
|
and white image, in which case all black areas will be painted into.
|
|
|
|
`--text_mask` (short form `-tm`) is a way to generate a mask using a
|
|
text description of the part of the image to replace. For example, if
|
|
you have an image of a breakfast plate with a bagel, toast and
|
|
scrambled eggs, you can selectively mask the bagel and replace it with
|
|
a piece of cake this way:
|
|
|
|
~~~
|
|
invoke> a piece of cake -I /path/to/breakfast.png -tm bagel
|
|
~~~
|
|
|
|
The algorithm uses <a
|
|
href="https://github.com/timojl/clipseg">clipseg</a> to classify
|
|
different regions of the image. The classifier puts out a confidence
|
|
score for each region it identifies. Generally regions that score
|
|
above 0.5 are reliable, but if you are getting too much or too little
|
|
masking you can adjust the threshold down (to get more mask), or up
|
|
(to get less). In this example, by passing `-tm` a higher value, we
|
|
are insisting on a more stringent classification.
|
|
|
|
~~~
|
|
invoke> a piece of cake -I /path/to/breakfast.png -tm bagel 0.6
|
|
~~~
|
|
|
|
# Other Commands
|
|
|
|
The CLI offers a number of commands that begin with "!".
|
|
|
|
## Postprocessing images
|
|
|
|
To postprocess a file using face restoration or upscaling, use the
|
|
`!fix` command.
|
|
|
|
### `!fix`
|
|
|
|
This command runs a post-processor on a previously-generated image. It
|
|
takes a PNG filename or path and applies your choice of the `-U`, `-G`, or
|
|
`--embiggen` switches in order to fix faces or upscale. If you provide a
|
|
filename, the script will look for it in the current output
|
|
directory. Otherwise you can provide a full or partial path to the
|
|
desired file.
|
|
|
|
Some examples:
|
|
|
|
!!! example ""
|
|
|
|
Upscale to 4X its original size and fix faces using codeformer:
|
|
|
|
```bash
|
|
invoke> !fix 0000045.4829112.png -G1 -U4 -ft codeformer
|
|
```
|
|
|
|
!!! example ""
|
|
|
|
Use the GFPGAN algorithm to fix faces, then upscale to 3X using --embiggen:
|
|
|
|
```bash
|
|
invoke> !fix 0000045.4829112.png -G0.8 -ft gfpgan
|
|
>> fixing outputs/img-samples/0000045.4829112.png
|
|
>> retrieved seed 4829112 and prompt "boy enjoying a banana split"
|
|
>> GFPGAN - Restoring Faces for image seed:4829112
|
|
Outputs:
|
|
[1] outputs/img-samples/000017.4829112.gfpgan-00.png: !fix "outputs/img-samples/0000045.4829112.png" -s 50 -S -W 512 -H 512 -C 7.5 -A k_lms -G 0.8
|
|
|
|
### !mask
|
|
|
|
This command takes an image, a text prompt, and uses the `clipseg`
|
|
algorithm to automatically generate a mask of the area that matches
|
|
the text prompt. It is useful for debugging the text masking process
|
|
prior to inpainting with the `--text_mask` argument. See
|
|
[INPAINTING.md] for details.
|
|
|
|
## Model selection and importation
|
|
|
|
The CLI allows you to add new models on the fly, as well as to switch
|
|
among them rapidly without leaving the script.
|
|
|
|
### !models
|
|
|
|
This prints out a list of the models defined in `config/models.yaml'.
|
|
The active model is bold-faced
|
|
|
|
Example:
|
|
<pre>
|
|
laion400m not loaded <no description>
|
|
<b>stable-diffusion-1.4 active Stable Diffusion v1.4</b>
|
|
waifu-diffusion not loaded Waifu Diffusion v1.3
|
|
</pre>
|
|
|
|
### !switch <model>
|
|
|
|
This quickly switches from one model to another without leaving the
|
|
CLI script. `invoke.py` uses a memory caching system; once a model
|
|
has been loaded, switching back and forth is quick. The following
|
|
example shows this in action. Note how the second column of the
|
|
`!models` table changes to `cached` after a model is first loaded,
|
|
and that the long initialization step is not needed when loading
|
|
a cached model.
|
|
|
|
<pre>
|
|
invoke> !models
|
|
laion400m not loaded <no description>
|
|
<b>stable-diffusion-1.4 cached Stable Diffusion v1.4</b>
|
|
waifu-diffusion active Waifu Diffusion v1.3
|
|
|
|
invoke> !switch waifu-diffusion
|
|
>> Caching model stable-diffusion-1.4 in system RAM
|
|
>> Loading waifu-diffusion from models/ldm/stable-diffusion-v1/model-epoch08-float16.ckpt
|
|
| LatentDiffusion: Running in eps-prediction mode
|
|
| DiffusionWrapper has 859.52 M params.
|
|
| Making attention of type 'vanilla' with 512 in_channels
|
|
| Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
|
|
| Making attention of type 'vanilla' with 512 in_channels
|
|
| Using faster float16 precision
|
|
>> Model loaded in 18.24s
|
|
>> Max VRAM used to load the model: 2.17G
|
|
>> Current VRAM usage:2.17G
|
|
>> Setting Sampler to k_lms
|
|
|
|
invoke> !models
|
|
laion400m not loaded <no description>
|
|
stable-diffusion-1.4 cached Stable Diffusion v1.4
|
|
<b>waifu-diffusion active Waifu Diffusion v1.3</b>
|
|
|
|
invoke> !switch stable-diffusion-1.4
|
|
>> Caching model waifu-diffusion in system RAM
|
|
>> Retrieving model stable-diffusion-1.4 from system RAM cache
|
|
>> Setting Sampler to k_lms
|
|
|
|
invoke> !models
|
|
laion400m not loaded <no description>
|
|
<b>stable-diffusion-1.4 active Stable Diffusion v1.4</b>
|
|
waifu-diffusion cached Waifu Diffusion v1.3
|
|
</pre>
|
|
|
|
### !import_model <path/to/model/weights>
|
|
|
|
This command imports a new model weights file into InvokeAI, makes it
|
|
available for image generation within the script, and writes out the
|
|
configuration for the model into `config/models.yaml` for use in
|
|
subsequent sessions.
|
|
|
|
Provide `!import_model` with the path to a weights file ending in
|
|
`.ckpt`. If you type a partial path and press tab, the CLI will
|
|
autocomplete. Although it will also autocomplete to `.vae` files,
|
|
these are not currenty supported (but will be soon).
|
|
|
|
When you hit return, the CLI will prompt you to fill in additional
|
|
information about the model, including the short name you wish to use
|
|
for it with the `!switch` command, a brief description of the model,
|
|
the default image width and height to use with this model, and the
|
|
model's configuration file. The latter three fields are automatically
|
|
filled with reasonable defaults. In the example below, the bold-faced
|
|
text shows what the user typed in with the exception of the width,
|
|
height and configuration file paths, which were filled in
|
|
automatically.
|
|
|
|
Example:
|
|
|
|
<pre>
|
|
invoke> <b>!import_model models/ldm/stable-diffusion-v1/ model-epoch08-float16.ckpt</b>
|
|
>> Model import in process. Please enter the values needed to configure this model:
|
|
|
|
Name for this model: <b>waifu-diffusion</b>
|
|
Description of this model: <b>Waifu Diffusion v1.3</b>
|
|
Configuration file for this model: <b>configs/stable-diffusion/v1-inference.yaml</b>
|
|
Default image width: <b>512</b>
|
|
Default image height: <b>512</b>
|
|
>> New configuration:
|
|
waifu-diffusion:
|
|
config: configs/stable-diffusion/v1-inference.yaml
|
|
description: Waifu Diffusion v1.3
|
|
height: 512
|
|
weights: models/ldm/stable-diffusion-v1/model-epoch08-float16.ckpt
|
|
width: 512
|
|
OK to import [n]? <b>y</b>
|
|
>> Caching model stable-diffusion-1.4 in system RAM
|
|
>> Loading waifu-diffusion from models/ldm/stable-diffusion-v1/model-epoch08-float16.ckpt
|
|
| LatentDiffusion: Running in eps-prediction mode
|
|
| DiffusionWrapper has 859.52 M params.
|
|
| Making attention of type 'vanilla' with 512 in_channels
|
|
| Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
|
|
| Making attention of type 'vanilla' with 512 in_channels
|
|
| Using faster float16 precision
|
|
invoke>
|
|
</pre>
|
|
|
|
###!edit_model <name_of_model>
|
|
|
|
The `!edit_model` command can be used to modify a model that is
|
|
already defined in `config/models.yaml`. Call it with the short
|
|
name of the model you wish to modify, and it will allow you to
|
|
modify the model's `description`, `weights` and other fields.
|
|
|
|
Example:
|
|
<pre>
|
|
invoke> <b>!edit_model waifu-diffusion</b>
|
|
>> Editing model waifu-diffusion from configuration file ./configs/models.yaml
|
|
description: <b>Waifu diffusion v1.4beta</b>
|
|
weights: models/ldm/stable-diffusion-v1/<b>model-epoch10-float16.ckpt</b>
|
|
config: configs/stable-diffusion/v1-inference.yaml
|
|
width: 512
|
|
height: 512
|
|
|
|
>> New configuration:
|
|
waifu-diffusion:
|
|
config: configs/stable-diffusion/v1-inference.yaml
|
|
description: Waifu diffusion v1.4beta
|
|
weights: models/ldm/stable-diffusion-v1/model-epoch10-float16.ckpt
|
|
height: 512
|
|
width: 512
|
|
|
|
OK to import [n]? y
|
|
>> Caching model stable-diffusion-1.4 in system RAM
|
|
>> Loading waifu-diffusion from models/ldm/stable-diffusion-v1/model-epoch10-float16.ckpt
|
|
...
|
|
</pre>
|
|
=======
|
|
invoke> !fix 000017.4829112.gfpgan-00.png --embiggen 3
|
|
...lots of text...
|
|
Outputs:
|
|
[2] outputs/img-samples/000018.2273800735.embiggen-00.png: !fix "outputs/img-samples/000017.243781548.gfpgan-00.png" -s 50 -S 2273800735 -W 512 -H 512 -C 7.5 -A k_lms --embiggen 3.0 0.75 0.25
|
|
```
|
|
## History processing
|
|
|
|
The CLI provides a series of convenient commands for reviewing previous
|
|
actions, retrieving them, modifying them, and re-running them.
|
|
|
|
### !history
|
|
|
|
The invoke script keeps track of all the commands you issue during a
|
|
session, allowing you to re-run them. On Mac and Linux systems, it
|
|
also writes the command-line history out to disk, giving you access to
|
|
the most recent 1000 commands issued.
|
|
|
|
The `!history` command will return a numbered list of all the commands
|
|
issued during the session (Windows), or the most recent 1000 commands
|
|
(Mac|Linux). You can then repeat a command by using the command `!NNN`,
|
|
where "NNN" is the history line number. For example:
|
|
|
|
```bash
|
|
invoke> !history
|
|
...
|
|
[14] happy woman sitting under tree wearing broad hat and flowing garment
|
|
[15] beautiful woman sitting under tree wearing broad hat and flowing garment
|
|
[18] beautiful woman sitting under tree wearing broad hat and flowing garment -v0.2 -n6
|
|
[20] watercolor of beautiful woman sitting under tree wearing broad hat and flowing garment -v0.2 -n6 -S2878767194
|
|
[21] surrealist painting of beautiful woman sitting under tree wearing broad hat and flowing garment -v0.2 -n6 -S2878767194
|
|
...
|
|
invoke> !20
|
|
invoke> watercolor of beautiful woman sitting under tree wearing broad hat and flowing garment -v0.2 -n6 -S2878767194
|
|
```
|
|
|
|
### !fetch
|
|
|
|
This command retrieves the generation parameters from a previously
|
|
generated image and either loads them into the command line
|
|
(Linux|Mac), or prints them out in a comment for copy-and-paste
|
|
(Windows). You may provide either the name of a file in the current
|
|
output directory, or a full file path. Specify path to a folder with
|
|
image png files, and wildcard *.png to retrieve the dream command used
|
|
to generate the images, and save them to a file commands.txt for
|
|
further processing.
|
|
|
|
This example loads the generation command for a single png file:
|
|
|
|
```bash
|
|
invoke> !fetch 0000015.8929913.png
|
|
# the script returns the next line, ready for editing and running:
|
|
invoke> a fantastic alien landscape -W 576 -H 512 -s 60 -A plms -C 7.5
|
|
```
|
|
|
|
This one fetches the generation commands from a batch of files and
|
|
stores them into `selected.txt`:
|
|
|
|
```bash
|
|
invoke> !fetch outputs\selected-imgs\*.png selected.txt
|
|
```
|
|
|
|
### !replay
|
|
|
|
This command replays a text file generated by !fetch or created manually
|
|
|
|
~~~
|
|
invoke> !replay outputs\selected-imgs\selected.txt
|
|
~~~
|
|
|
|
Note that these commands may behave unexpectedly if given a PNG file that
|
|
was not generated by InvokeAI.
|
|
|
|
### !search <search string>
|
|
|
|
This is similar to !history but it only returns lines that contain
|
|
`search string`. For example:
|
|
|
|
```bash
|
|
invoke> !search surreal
|
|
[21] surrealist painting of beautiful woman sitting under tree wearing broad hat and flowing garment -v0.2 -n6 -S2878767194
|
|
```
|
|
|
|
### `!clear`
|
|
|
|
This clears the search history from memory and disk. Be advised that
|
|
this operation is irreversible and does not issue any warnings!
|
|
|
|
## Command-line editing and completion
|
|
|
|
The command-line offers convenient history tracking, editing, and
|
|
command completion.
|
|
|
|
- To scroll through previous commands and potentially edit/reuse them, use the ++up++ and ++down++ keys.
|
|
- To edit the current command, use the ++left++ and ++right++ keys to position the cursor, and then ++backspace++, ++delete++ or insert characters.
|
|
- To move to the very beginning of the command, type ++ctrl+a++ (or ++command+a++ on the Mac)
|
|
- To move to the end of the command, type ++ctrl+e++.
|
|
- To cut a section of the command, position the cursor where you want to start cutting and type ++ctrl+k++
|
|
- To paste a cut section back in, position the cursor where you want to paste, and type ++ctrl+y++
|
|
|
|
Windows users can get similar, but more limited, functionality if they
|
|
launch `invoke.py` with the `winpty` program and have the `pyreadline3`
|
|
library installed:
|
|
|
|
```batch
|
|
> winpty python scripts\invoke.py
|
|
```
|
|
|
|
On the Mac and Linux platforms, when you exit invoke.py, the last 1000
|
|
lines of your command-line history will be saved. When you restart
|
|
`invoke.py`, you can access the saved history using the ++up++ key.
|
|
|
|
In addition, limited command-line completion is installed. In various
|
|
contexts, you can start typing your command and press ++tab++. A list of
|
|
potential completions will be presented to you. You can then type a
|
|
little more, hit ++tab++ again, and eventually autocomplete what you want.
|
|
|
|
When specifying file paths using the one-letter shortcuts, the CLI
|
|
will attempt to complete pathnames for you. This is most handy for the
|
|
`-I` (init image) and `-M` (init mask) paths. To initiate completion, start
|
|
the path with a slash (`/`) or `./`. For example:
|
|
|
|
```bash
|
|
invoke> zebra with a mustache -I./test-pictures<TAB>
|
|
-I./test-pictures/Lincoln-and-Parrot.png -I./test-pictures/zebra.jpg -I./test-pictures/madonna.png
|
|
-I./test-pictures/bad-sketch.png -I./test-pictures/man_with_eagle/
|
|
```
|
|
|
|
You can then type ++z++, hit ++tab++ again, and it will autofill to `zebra.jpg`.
|
|
|
|
More text completion features (such as autocompleting seeds) are on their way.
|