A Python script that lets you paint on a canvas and sends that image every stroke to the automatic1111 API and updates the canvas when the image is generated.
Key / Mouse button | Control |
---|---|
Left button | Draw with the current brush size |
Middle button | Draw with a white color brush |
e + Left button |
Eraser brush (bigger) |
Scroll up / down | Increase / decrease brush size |
backspace |
Erase the entire sketch |
shift + Left button |
Draw a line between two clicks |
RETURN or ENTER |
Request image rendering |
ctrl + i |
Interrupt image rendering |
c |
Display current configuration while pressed |
p |
Edit prompt |
alt + p |
Edit negative prompt |
a |
Toggle autosave |
shift + t |
Cycle render wait time (+0.5s, or off) |
ctrl + p |
Pause dynamic rendering |
q |
Toggle quick rendering : low steps & HR fix off |
n |
Random seed value |
ctrl + n |
Edit seed value |
UP / DOWN |
Increase / decrease seed by 1 |
ctrl + s |
Save the current generated image |
ctrl + o |
Open an image file as sketch |
ctrl + d |
Call ControlNet detector (replace sketch) |
shift + ctrl + d |
Cycle ControlNet detectors |
h |
Toggle HR fix |
shift + h |
Cycle HR fix scale |
shift + u |
Cycle HR upscalers |
shift + d |
Cycle denoising strengths |
shift + s |
Cycle samplers |
b |
Toggle batch rendering |
shift + b |
Cycle batch sizes |
shift + c |
Cycle CLIP skip settings |
shift + m |
Cycle ControlNel models |
shift + w |
Cycle ControlNel weights |
shift + g |
Cycle ControlNel guidance ends |
shift + ctrl + g |
Toggle ControlNel pixel perfect mode |
keypad 0 |
Restore starting settings |
keypad 1-9 |
Load custom rendering preset |
ctrl + keypad 1-9 |
Save custom rendering preset |
alt + keypad 1-9 |
Load custom ControlNet preset |
ctrl + alt + keypad 1-9 |
Save custom ControlNet preset |
x or ESC |
Quit |
Note : "Cycle" shortcuts type will wait for the shift
key to be released before launching the rendering.
Windows: Link to step-by-step Windows installation instructions with screenshots
Linux: To Do
macOS: To Do
TLDR; Web UI with the ControlNet extension, API mode enabled in settings, and the AI Models
On first launch of the Start file, the script will create the config.json
, controlnet.json
and img2img.json
configuration files as needed. The ControlNet
available models for scribble and lineart will be automatically fetched from your API and set in configuration.
The config.json
file handles global interface and script configuration. For these settings, the value used on
application start is the
first value of each of those list:
controlnet_models
detectors
samplers
hr_scales
hr_upscalers
denoising_strengths
The controlnet.json
or img2img.json
files can be used to configure the prompt, negative prompt, seed, controlnet
model, etc.
When you save the json file the program will use it after the next brush stroke or when you press enter
.
A controlnet-high.json-dist
example configuration file is available for better image quality, at the cost of longer
rendering time.
Use only with a powerful graphics card.
If you want to add additional models into your controlnet extension you can do so by adding the model folder into the models folder of the controlnet extension.
".\stable-diffusion-webui\extensions\sd-webui-controlnet\models"
The images can be auto-saved after each rendering into outputs
and outputs/autosave
directories. The maximum
number of images saved is set by autosave_images_max
in config.json
.
This feature can be disabled on start by setting autosave_images
to "false"
.
You can update the config.json
"controlnet_models"
list to have multiple ControlNet models available. You can then
cycle
between the models using the l
and m
keys.
The models set by default correspond to the ones available on https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors :
- Scribble
- Lineart
- Lineart anime
Note: "pixel perfect" preprocessor mode is disabled by default, because it can be detrimental with scribble and lineart models when used with a resolution > 512. Try out and compare the results.
You can also update the config.json
"detectors"
list to configure the line detection on the generated image. Cycle
between detections
with the d
key.
The default detectors are:
- Lineart
- Lineart coarse
- Sketch (pidinet)
- Scribble (pidinet)
You can find the full list of supported modules with this URL http://127.0.0.1:7860/controlnet/module_list .
You can save the current rendering settings by using ctrl
+ keypad 1-9
, and the current ControlNet settings by using
ctrl
+ alt
+ keypad 1-9
. Those presets persist in a local presets.json
file and are available even after the
application
is restarted.
You can load rendering settings with keypad 1-9
, and ControlNet settings with alt
+ keypad 1-9
. Not all the saved
fields
are applied by default : the settings that are applied are determined respectively by the preset_fields
and cn_preset_fields
entries of the config.json
file. For example, if you
want to also apply the sampler value of the preset on recall, add 'sampler'
to your preset_fields
list.
Launch the program with --img2img <image_file_path>
to watch an image file for changes, and use it as img2img source.
If the script is launched
with an empty image file path, a loading file dialog will be displayed.
The img2img.json
file is used in this mode.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.