Upload 2 files
Browse files- lora_script.py +99 -0
- shared_options.py +332 -0
lora_script.py
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import re
|
2 |
+
|
3 |
+
import gradio as gr
|
4 |
+
from fastapi import FastAPI
|
5 |
+
|
6 |
+
import network
|
7 |
+
import networks
|
8 |
+
import lora # noqa:F401
|
9 |
+
import lora_patches
|
10 |
+
import extra_networks_lora
|
11 |
+
import ui_extra_networks_lora
|
12 |
+
from modules import script_callbacks, ui_extra_networks, extra_networks, shared
|
13 |
+
|
14 |
+
|
15 |
+
def unload():
|
16 |
+
networks.originals.undo()
|
17 |
+
|
18 |
+
|
19 |
+
def before_ui():
|
20 |
+
ui_extra_networks.register_page(ui_extra_networks_lora.ExtraNetworksPageLora())
|
21 |
+
|
22 |
+
networks.extra_network_lora = extra_networks_lora.ExtraNetworkLora()
|
23 |
+
extra_networks.register_extra_network(networks.extra_network_lora)
|
24 |
+
extra_networks.register_extra_network_alias(networks.extra_network_lora, "lyco")
|
25 |
+
|
26 |
+
|
27 |
+
networks.originals = lora_patches.LoraPatches()
|
28 |
+
|
29 |
+
script_callbacks.on_model_loaded(networks.assign_network_names_to_compvis_modules)
|
30 |
+
script_callbacks.on_script_unloaded(unload)
|
31 |
+
script_callbacks.on_before_ui(before_ui)
|
32 |
+
script_callbacks.on_infotext_pasted(networks.infotext_pasted)
|
33 |
+
|
34 |
+
|
35 |
+
shared.options_templates.update(shared.options_section(('extra_networks', "Extra Networks"), {
|
36 |
+
"sd_lora": shared.OptionInfo("None", "Add network to prompt", gr.Dropdown, lambda: {"choices": ["None", *networks.available_networks]}, refresh=networks.list_available_networks),
|
37 |
+
"lora_preferred_name": shared.OptionInfo("Filename", "When adding to prompt, refer to Lora by", gr.Radio, {"choices": ["Alias from file", "Filename"]}),
|
38 |
+
"lora_add_hashes_to_infotext": shared.OptionInfo(True, "Add Lora hashes to infotext"),
|
39 |
+
"lora_show_all": shared.OptionInfo(False, "Always show all networks on the Lora page").info("otherwise, those detected as for incompatible version of Stable Diffusion will be hidden"),
|
40 |
+
"lora_hide_unknown_for_versions": shared.OptionInfo([], "Hide networks of unknown versions for model versions", gr.CheckboxGroup, {"choices": ["SD1", "SD2", "SDXL"]}),
|
41 |
+
"lora_in_memory_limit": shared.OptionInfo(0, "Number of Lora networks to keep cached in memory", gr.Number, {"precision": 0}),
|
42 |
+
}))
|
43 |
+
|
44 |
+
|
45 |
+
shared.options_templates.update(shared.options_section(('compatibility', "Compatibility"), {
|
46 |
+
"lora_functional": shared.OptionInfo(False, "Lora/Networks: use old method that takes longer when you have multiple Loras active and produces same results as kohya-ss/sd-webui-additional-networks extension"),
|
47 |
+
}))
|
48 |
+
|
49 |
+
|
50 |
+
def create_lora_json(obj: network.NetworkOnDisk):
|
51 |
+
return {
|
52 |
+
"name": obj.name,
|
53 |
+
"alias": obj.alias,
|
54 |
+
"path": obj.filename,
|
55 |
+
"metadata": obj.metadata,
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
def api_networks(_: gr.Blocks, app: FastAPI):
|
60 |
+
@app.get("/sdapi/v1/loras")
|
61 |
+
async def get_loras():
|
62 |
+
return [create_lora_json(obj) for obj in networks.available_networks.values()]
|
63 |
+
|
64 |
+
@app.post("/sdapi/v1/refresh-loras")
|
65 |
+
async def refresh_loras():
|
66 |
+
return networks.list_available_networks()
|
67 |
+
|
68 |
+
|
69 |
+
script_callbacks.on_app_started(api_networks)
|
70 |
+
|
71 |
+
re_lora = re.compile("<lora:([^:]+):")
|
72 |
+
|
73 |
+
|
74 |
+
def infotext_pasted(infotext, d):
|
75 |
+
hashes = d.get("Lora hashes")
|
76 |
+
if not hashes:
|
77 |
+
return
|
78 |
+
|
79 |
+
hashes = [x.strip().split(':', 1) for x in hashes.split(",")]
|
80 |
+
hashes = {x[0].strip().replace(",", ""): x[1].strip() for x in hashes}
|
81 |
+
|
82 |
+
def network_replacement(m):
|
83 |
+
alias = m.group(1)
|
84 |
+
shorthash = hashes.get(alias)
|
85 |
+
if shorthash is None:
|
86 |
+
return m.group(0)
|
87 |
+
|
88 |
+
network_on_disk = networks.available_network_hash_lookup.get(shorthash)
|
89 |
+
if network_on_disk is None:
|
90 |
+
return m.group(0)
|
91 |
+
|
92 |
+
return f'<lora:{network_on_disk.get_alias()}:'
|
93 |
+
|
94 |
+
d["Prompt"] = re.sub(re_lora, network_replacement, d["Prompt"])
|
95 |
+
|
96 |
+
|
97 |
+
script_callbacks.on_infotext_pasted(infotext_pasted)
|
98 |
+
|
99 |
+
shared.opts.onchange("lora_in_memory_limit", networks.purge_networks_from_memory)
|
shared_options.py
ADDED
@@ -0,0 +1,332 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
|
3 |
+
from modules import localization, ui_components, shared_items, shared, interrogate, shared_gradio_themes
|
4 |
+
from modules.paths_internal import models_path, script_path, data_path, sd_configs_path, sd_default_config, sd_model_file, default_sd_model_file, extensions_dir, extensions_builtin_dir # noqa: F401
|
5 |
+
from modules.shared_cmd_options import cmd_opts
|
6 |
+
from modules.options import options_section, OptionInfo, OptionHTML
|
7 |
+
|
8 |
+
options_templates = {}
|
9 |
+
hide_dirs = shared.hide_dirs
|
10 |
+
|
11 |
+
restricted_opts = {
|
12 |
+
"samples_filename_pattern",
|
13 |
+
"directories_filename_pattern",
|
14 |
+
"outdir_samples",
|
15 |
+
"outdir_txt2img_samples",
|
16 |
+
"outdir_img2img_samples",
|
17 |
+
"outdir_extras_samples",
|
18 |
+
"outdir_grids",
|
19 |
+
"outdir_txt2img_grids",
|
20 |
+
"outdir_save",
|
21 |
+
"outdir_init_images"
|
22 |
+
}
|
23 |
+
|
24 |
+
options_templates.update(options_section(('saving-images', "Saving images/grids"), {
|
25 |
+
"samples_save": OptionInfo(True, "Always save all generated images"),
|
26 |
+
"samples_format": OptionInfo('png', 'File format for images'),
|
27 |
+
"samples_filename_pattern": OptionInfo("", "Images filename pattern", component_args=hide_dirs).link("wiki", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Images-Filename-Name-and-Subdirectory"),
|
28 |
+
"save_images_add_number": OptionInfo(True, "Add number to filename when saving", component_args=hide_dirs),
|
29 |
+
|
30 |
+
"grid_save": OptionInfo(True, "Always save all generated image grids"),
|
31 |
+
"grid_format": OptionInfo('png', 'File format for grids'),
|
32 |
+
"grid_extended_filename": OptionInfo(False, "Add extended info (seed, prompt) to filename when saving grid"),
|
33 |
+
"grid_only_if_multiple": OptionInfo(True, "Do not save grids consisting of one picture"),
|
34 |
+
"grid_prevent_empty_spots": OptionInfo(False, "Prevent empty spots in grid (when set to autodetect)"),
|
35 |
+
"grid_zip_filename_pattern": OptionInfo("", "Archive filename pattern", component_args=hide_dirs).link("wiki", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Images-Filename-Name-and-Subdirectory"),
|
36 |
+
"n_rows": OptionInfo(-1, "Grid row count; use -1 for autodetect and 0 for it to be same as batch size", gr.Slider, {"minimum": -1, "maximum": 16, "step": 1}),
|
37 |
+
"font": OptionInfo("", "Font for image grids that have text"),
|
38 |
+
"grid_text_active_color": OptionInfo("#000000", "Text color for image grids", ui_components.FormColorPicker, {}),
|
39 |
+
"grid_text_inactive_color": OptionInfo("#999999", "Inactive text color for image grids", ui_components.FormColorPicker, {}),
|
40 |
+
"grid_background_color": OptionInfo("#ffffff", "Background color for image grids", ui_components.FormColorPicker, {}),
|
41 |
+
|
42 |
+
"enable_pnginfo": OptionInfo(True, "Save text information about generation parameters as chunks to png files"),
|
43 |
+
"save_txt": OptionInfo(False, "Create a text file next to every image with generation parameters."),
|
44 |
+
"save_images_before_face_restoration": OptionInfo(False, "Save a copy of image before doing face restoration."),
|
45 |
+
"save_images_before_highres_fix": OptionInfo(False, "Save a copy of image before applying highres fix."),
|
46 |
+
"save_images_before_color_correction": OptionInfo(False, "Save a copy of image before applying color correction to img2img results"),
|
47 |
+
"save_mask": OptionInfo(False, "For inpainting, save a copy of the greyscale mask"),
|
48 |
+
"save_mask_composite": OptionInfo(False, "For inpainting, save a masked composite"),
|
49 |
+
"jpeg_quality": OptionInfo(80, "Quality for saved jpeg images", gr.Slider, {"minimum": 1, "maximum": 100, "step": 1}),
|
50 |
+
"webp_lossless": OptionInfo(False, "Use lossless compression for webp images"),
|
51 |
+
"export_for_4chan": OptionInfo(True, "Save copy of large images as JPG").info("if the file size is above the limit, or either width or height are above the limit"),
|
52 |
+
"img_downscale_threshold": OptionInfo(4.0, "File size limit for the above option, MB", gr.Number),
|
53 |
+
"target_side_length": OptionInfo(4000, "Width/height limit for the above option, in pixels", gr.Number),
|
54 |
+
"img_max_size_mp": OptionInfo(200, "Maximum image size", gr.Number).info("in megapixels"),
|
55 |
+
|
56 |
+
"use_original_name_batch": OptionInfo(True, "Use original name for output filename during batch process in extras tab"),
|
57 |
+
"use_upscaler_name_as_suffix": OptionInfo(False, "Use upscaler name as filename suffix in the extras tab"),
|
58 |
+
"save_selected_only": OptionInfo(True, "When using 'Save' button, only save a single selected image"),
|
59 |
+
"save_init_img": OptionInfo(False, "Save init images when using img2img"),
|
60 |
+
|
61 |
+
"temp_dir": OptionInfo("", "Directory for temporary images; leave empty for default"),
|
62 |
+
"clean_temp_dir_at_start": OptionInfo(False, "Cleanup non-default temporary directory when starting webui"),
|
63 |
+
|
64 |
+
"save_incomplete_images": OptionInfo(False, "Save incomplete images").info("save images that has been interrupted in mid-generation; even if not saved, they will still show up in webui output."),
|
65 |
+
}))
|
66 |
+
|
67 |
+
options_templates.update(options_section(('saving-paths', "Paths for saving"), {
|
68 |
+
"outdir_samples": OptionInfo("", "Output directory for images; if empty, defaults to three directories below", component_args=hide_dirs),
|
69 |
+
"outdir_txt2img_samples": OptionInfo("outputs/txt2img-images", 'Output directory for txt2img images', component_args=hide_dirs),
|
70 |
+
"outdir_img2img_samples": OptionInfo("outputs/img2img-images", 'Output directory for img2img images', component_args=hide_dirs),
|
71 |
+
"outdir_extras_samples": OptionInfo("outputs/extras-images", 'Output directory for images from extras tab', component_args=hide_dirs),
|
72 |
+
"outdir_grids": OptionInfo("", "Output directory for grids; if empty, defaults to two directories below", component_args=hide_dirs),
|
73 |
+
"outdir_txt2img_grids": OptionInfo("outputs/txt2img-grids", 'Output directory for txt2img grids', component_args=hide_dirs),
|
74 |
+
"outdir_img2img_grids": OptionInfo("outputs/img2img-grids", 'Output directory for img2img grids', component_args=hide_dirs),
|
75 |
+
"outdir_save": OptionInfo("log/images", "Directory for saving images using the Save button", component_args=hide_dirs),
|
76 |
+
"outdir_init_images": OptionInfo("outputs/init-images", "Directory for saving init images when using img2img", component_args=hide_dirs),
|
77 |
+
}))
|
78 |
+
|
79 |
+
options_templates.update(options_section(('saving-to-dirs', "Saving to a directory"), {
|
80 |
+
"save_to_dirs": OptionInfo(True, "Save images to a subdirectory"),
|
81 |
+
"grid_save_to_dirs": OptionInfo(True, "Save grids to a subdirectory"),
|
82 |
+
"use_save_to_dirs_for_ui": OptionInfo(False, "When using \"Save\" button, save images to a subdirectory"),
|
83 |
+
"directories_filename_pattern": OptionInfo("[date]", "Directory name pattern", component_args=hide_dirs).link("wiki", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Images-Filename-Name-and-Subdirectory"),
|
84 |
+
"directories_max_prompt_words": OptionInfo(8, "Max prompt words for [prompt_words] pattern", gr.Slider, {"minimum": 1, "maximum": 20, "step": 1, **hide_dirs}),
|
85 |
+
}))
|
86 |
+
|
87 |
+
options_templates.update(options_section(('upscaling', "Upscaling"), {
|
88 |
+
"ESRGAN_tile": OptionInfo(192, "Tile size for ESRGAN upscalers.", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}).info("0 = no tiling"),
|
89 |
+
"ESRGAN_tile_overlap": OptionInfo(8, "Tile overlap for ESRGAN upscalers.", gr.Slider, {"minimum": 0, "maximum": 48, "step": 1}).info("Low values = visible seam"),
|
90 |
+
"realesrgan_enabled_models": OptionInfo(["R-ESRGAN 4x+", "R-ESRGAN 4x+ Anime6B"], "Select which Real-ESRGAN models to show in the web UI.", gr.CheckboxGroup, lambda: {"choices": shared_items.realesrgan_models_names()}),
|
91 |
+
"upscaler_for_img2img": OptionInfo(None, "Upscaler for img2img", gr.Dropdown, lambda: {"choices": [x.name for x in shared.sd_upscalers]}),
|
92 |
+
}))
|
93 |
+
|
94 |
+
options_templates.update(options_section(('face-restoration', "Face restoration"), {
|
95 |
+
"face_restoration": OptionInfo(False, "Restore faces", infotext='Face restoration').info("will use a third-party model on generation result to reconstruct faces"),
|
96 |
+
"face_restoration_model": OptionInfo("CodeFormer", "Face restoration model", gr.Radio, lambda: {"choices": [x.name() for x in shared.face_restorers]}),
|
97 |
+
"code_former_weight": OptionInfo(0.5, "CodeFormer weight", gr.Slider, {"minimum": 0, "maximum": 1, "step": 0.01}).info("0 = maximum effect; 1 = minimum effect"),
|
98 |
+
"face_restoration_unload": OptionInfo(False, "Move face restoration model from VRAM into RAM after processing"),
|
99 |
+
}))
|
100 |
+
|
101 |
+
options_templates.update(options_section(('system', "System"), {
|
102 |
+
"auto_launch_browser": OptionInfo("Local", "Automatically open webui in browser on startup", gr.Radio, lambda: {"choices": ["Disable", "Local", "Remote"]}),
|
103 |
+
"show_warnings": OptionInfo(False, "Show warnings in console.").needs_reload_ui(),
|
104 |
+
"show_gradio_deprecation_warnings": OptionInfo(True, "Show gradio deprecation warnings in console.").needs_reload_ui(),
|
105 |
+
"memmon_poll_rate": OptionInfo(8, "VRAM usage polls per second during generation.", gr.Slider, {"minimum": 0, "maximum": 40, "step": 1}).info("0 = disable"),
|
106 |
+
"samples_log_stdout": OptionInfo(False, "Always print all generation info to standard output"),
|
107 |
+
"multiple_tqdm": OptionInfo(True, "Add a second progress bar to the console that shows progress for an entire job."),
|
108 |
+
"print_hypernet_extra": OptionInfo(False, "Print extra hypernetwork information to console."),
|
109 |
+
"list_hidden_files": OptionInfo(True, "Load models/files in hidden directories").info("directory is hidden if its name starts with \".\""),
|
110 |
+
"disable_mmap_load_safetensors": OptionInfo(False, "Disable memmapping for loading .safetensors files.").info("fixes very slow loading speed in some cases"),
|
111 |
+
"hide_ldm_prints": OptionInfo(True, "Prevent Stability-AI's ldm/sgm modules from printing noise to console."),
|
112 |
+
}))
|
113 |
+
|
114 |
+
options_templates.update(options_section(('API', "API"), {
|
115 |
+
"api_enable_requests": OptionInfo(True, "Allow http:// and https:// URLs for input images in API", restrict_api=True),
|
116 |
+
"api_forbid_local_requests": OptionInfo(True, "Forbid URLs to local resources", restrict_api=True),
|
117 |
+
"api_useragent": OptionInfo("", "User agent for requests", restrict_api=True),
|
118 |
+
}))
|
119 |
+
|
120 |
+
options_templates.update(options_section(('training', "Training"), {
|
121 |
+
"unload_models_when_training": OptionInfo(False, "Move VAE and CLIP to RAM when training if possible. Saves VRAM."),
|
122 |
+
"pin_memory": OptionInfo(False, "Turn on pin_memory for DataLoader. Makes training slightly faster but can increase memory usage."),
|
123 |
+
"save_optimizer_state": OptionInfo(False, "Saves Optimizer state as separate *.optim file. Training of embedding or HN can be resumed with the matching optim file."),
|
124 |
+
"save_training_settings_to_txt": OptionInfo(True, "Save textual inversion and hypernet settings to a text file whenever training starts."),
|
125 |
+
"dataset_filename_word_regex": OptionInfo("", "Filename word regex"),
|
126 |
+
"dataset_filename_join_string": OptionInfo(" ", "Filename join string"),
|
127 |
+
"training_image_repeats_per_epoch": OptionInfo(1, "Number of repeats for a single input image per epoch; used only for displaying epoch number", gr.Number, {"precision": 0}),
|
128 |
+
"training_write_csv_every": OptionInfo(500, "Save an csv containing the loss to log directory every N steps, 0 to disable"),
|
129 |
+
"training_xattention_optimizations": OptionInfo(False, "Use cross attention optimizations while training"),
|
130 |
+
"training_enable_tensorboard": OptionInfo(False, "Enable tensorboard logging."),
|
131 |
+
"training_tensorboard_save_images": OptionInfo(False, "Save generated images within tensorboard."),
|
132 |
+
"training_tensorboard_flush_every": OptionInfo(120, "How often, in seconds, to flush the pending tensorboard events and summaries to disk."),
|
133 |
+
}))
|
134 |
+
|
135 |
+
options_templates.update(options_section(('sd', "Stable Diffusion"), {
|
136 |
+
"sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Dropdown, lambda: {"choices": shared_items.list_checkpoint_tiles()}, refresh=shared_items.refresh_checkpoints, infotext='Model hash'),
|
137 |
+
"sd_checkpoints_limit": OptionInfo(1, "Maximum number of checkpoints loaded at the same time", gr.Slider, {"minimum": 1, "maximum": 10, "step": 1}),
|
138 |
+
"sd_checkpoints_keep_in_cpu": OptionInfo(True, "Only keep one model on device").info("will keep models other than the currently used one in RAM rather than VRAM"),
|
139 |
+
"sd_checkpoint_cache": OptionInfo(0, "Checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}).info("obsolete; set to 0 and use the two settings above instead"),
|
140 |
+
"sd_unet": OptionInfo("Automatic", "SD Unet", gr.Dropdown, lambda: {"choices": shared_items.sd_unet_items()}, refresh=shared_items.refresh_unet_list).info("choose Unet model: Automatic = use one with same filename as checkpoint; None = use Unet from checkpoint"),
|
141 |
+
"enable_quantization": OptionInfo(False, "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds").needs_reload_ui(),
|
142 |
+
"enable_emphasis": OptionInfo(True, "Enable emphasis").info("use (text) to make model pay more attention to text and [text] to make it pay less attention"),
|
143 |
+
"enable_batch_seeds": OptionInfo(True, "Make K-diffusion samplers produce same images in a batch as when making a single image"),
|
144 |
+
"comma_padding_backtrack": OptionInfo(20, "Prompt word wrap length limit", gr.Slider, {"minimum": 0, "maximum": 74, "step": 1}).info("in tokens - for texts shorter than specified, if they don't fit into 75 token limit, move them to the next 75 token chunk"),
|
145 |
+
"CLIP_stop_at_last_layers": OptionInfo(1, "Clip skip", gr.Slider, {"minimum": 1, "maximum": 12, "step": 1}, infotext="Clip skip").link("wiki", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#clip-skip").info("ignore last layers of CLIP network; 1 ignores none, 2 ignores one layer"),
|
146 |
+
"upcast_attn": OptionInfo(False, "Upcast cross attention layer to float32"),
|
147 |
+
"randn_source": OptionInfo("GPU", "Random number generator source.", gr.Radio, {"choices": ["GPU", "CPU", "NV"]}, infotext="RNG").info("changes seeds drastically; use CPU to produce the same picture across different videocard vendors; use NV to produce same picture as on NVidia videocards"),
|
148 |
+
"tiling": OptionInfo(False, "Tiling", infotext='Tiling').info("produce a tileable picture"),
|
149 |
+
"hires_fix_refiner_pass": OptionInfo("second pass", "Hires fix: which pass to enable refiner for", gr.Radio, {"choices": ["first pass", "second pass", "both passes"]}, infotext="Hires refiner"),
|
150 |
+
}))
|
151 |
+
|
152 |
+
options_templates.update(options_section(('sdxl', "Stable Diffusion XL"), {
|
153 |
+
"sdxl_crop_top": OptionInfo(0, "crop top coordinate"),
|
154 |
+
"sdxl_crop_left": OptionInfo(0, "crop left coordinate"),
|
155 |
+
"sdxl_refiner_low_aesthetic_score": OptionInfo(2.5, "SDXL low aesthetic score", gr.Number).info("used for refiner model negative prompt"),
|
156 |
+
"sdxl_refiner_high_aesthetic_score": OptionInfo(6.0, "SDXL high aesthetic score", gr.Number).info("used for refiner model prompt"),
|
157 |
+
}))
|
158 |
+
|
159 |
+
options_templates.update(options_section(('vae', "VAE"), {
|
160 |
+
"sd_vae_explanation": OptionHTML("""
|
161 |
+
<abbr title='Variational autoencoder'>VAE</abbr> is a neural network that transforms a standard <abbr title='red/green/blue'>RGB</abbr>
|
162 |
+
image into latent space representation and back. Latent space representation is what stable diffusion is working on during sampling
|
163 |
+
(i.e. when the progress bar is between empty and full). For txt2img, VAE is used to create a resulting image after the sampling is finished.
|
164 |
+
For img2img, VAE is used to process user's input image before the sampling, and to create an image after sampling.
|
165 |
+
"""),
|
166 |
+
"sd_vae_checkpoint_cache": OptionInfo(0, "VAE Checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}),
|
167 |
+
"sd_vae": OptionInfo("Automatic", "SD VAE", gr.Dropdown, lambda: {"choices": shared_items.sd_vae_items()}, refresh=shared_items.refresh_vae_list, infotext='VAE').info("choose VAE model: Automatic = use one with same filename as checkpoint; None = use VAE from checkpoint"),
|
168 |
+
"sd_vae_overrides_per_model_preferences": OptionInfo(True, "Selected VAE overrides per-model preferences").info("you can set per-model VAE either by editing user metadata for checkpoints, or by making the VAE have same name as checkpoint"),
|
169 |
+
"auto_vae_precision": OptionInfo(True, "Automatically revert VAE to 32-bit floats").info("triggers when a tensor with NaNs is produced in VAE; disabling the option in this case will result in a black square image"),
|
170 |
+
"sd_vae_encode_method": OptionInfo("Full", "VAE type for encode", gr.Radio, {"choices": ["Full", "TAESD"]}, infotext='VAE Encoder').info("method to encode image to latent (use in img2img, hires-fix or inpaint mask)"),
|
171 |
+
"sd_vae_decode_method": OptionInfo("Full", "VAE type for decode", gr.Radio, {"choices": ["Full", "TAESD"]}, infotext='VAE Decoder').info("method to decode latent to image"),
|
172 |
+
}))
|
173 |
+
|
174 |
+
options_templates.update(options_section(('img2img', "img2img"), {
|
175 |
+
"inpainting_mask_weight": OptionInfo(1.0, "Inpainting conditioning mask strength", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}, infotext='Conditional mask weight'),
|
176 |
+
"initial_noise_multiplier": OptionInfo(1.0, "Noise multiplier for img2img", gr.Slider, {"minimum": 0.0, "maximum": 1.5, "step": 0.001}, infotext='Noise multiplier'),
|
177 |
+
"img2img_extra_noise": OptionInfo(0.0, "Extra noise multiplier for img2img and hires fix", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}, infotext='Extra noise').info("0 = disabled (default); should be lower than denoising strength"),
|
178 |
+
"img2img_color_correction": OptionInfo(False, "Apply color correction to img2img results to match original colors."),
|
179 |
+
"img2img_fix_steps": OptionInfo(False, "With img2img, do exactly the amount of steps the slider specifies.").info("normally you'd do less with less denoising"),
|
180 |
+
"img2img_background_color": OptionInfo("#ffffff", "With img2img, fill transparent parts of the input image with this color.", ui_components.FormColorPicker, {}),
|
181 |
+
"img2img_editor_height": OptionInfo(720, "Height of the image editor", gr.Slider, {"minimum": 80, "maximum": 1600, "step": 1}).info("in pixels").needs_reload_ui(),
|
182 |
+
"img2img_sketch_default_brush_color": OptionInfo("#ffffff", "Sketch initial brush color", ui_components.FormColorPicker, {}).info("default brush color of img2img sketch").needs_reload_ui(),
|
183 |
+
"img2img_inpaint_mask_brush_color": OptionInfo("#ffffff", "Inpaint mask brush color", ui_components.FormColorPicker, {}).info("brush color of inpaint mask").needs_reload_ui(),
|
184 |
+
"img2img_inpaint_sketch_default_brush_color": OptionInfo("#ffffff", "Inpaint sketch initial brush color", ui_components.FormColorPicker, {}).info("default brush color of img2img inpaint sketch").needs_reload_ui(),
|
185 |
+
"return_mask": OptionInfo(False, "For inpainting, include the greyscale mask in results for web"),
|
186 |
+
"return_mask_composite": OptionInfo(False, "For inpainting, include masked composite in results for web"),
|
187 |
+
}))
|
188 |
+
|
189 |
+
options_templates.update(options_section(('optimizations', "Optimizations"), {
|
190 |
+
"cross_attention_optimization": OptionInfo("Automatic", "Cross attention optimization", gr.Dropdown, lambda: {"choices": shared_items.cross_attention_optimizations()}),
|
191 |
+
"s_min_uncond": OptionInfo(0.0, "Negative Guidance minimum sigma", gr.Slider, {"minimum": 0.0, "maximum": 15.0, "step": 0.01}).link("PR", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/9177").info("skip negative prompt for some steps when the image is almost ready; 0=disable, higher=faster"),
|
192 |
+
"token_merging_ratio": OptionInfo(0.0, "Token merging ratio", gr.Slider, {"minimum": 0.0, "maximum": 0.9, "step": 0.1}, infotext='Token merging ratio').link("PR", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/9256").info("0=disable, higher=faster"),
|
193 |
+
"token_merging_ratio_img2img": OptionInfo(0.0, "Token merging ratio for img2img", gr.Slider, {"minimum": 0.0, "maximum": 0.9, "step": 0.1}).info("only applies if non-zero and overrides above"),
|
194 |
+
"token_merging_ratio_hr": OptionInfo(0.0, "Token merging ratio for high-res pass", gr.Slider, {"minimum": 0.0, "maximum": 0.9, "step": 0.1}, infotext='Token merging ratio hr').info("only applies if non-zero and overrides above"),
|
195 |
+
"pad_cond_uncond": OptionInfo(False, "Pad prompt/negative prompt to be same length", infotext='Pad conds').info("improves performance when prompt and negative prompt have different lengths; changes seeds"),
|
196 |
+
"persistent_cond_cache": OptionInfo(True, "Persistent cond cache").info("do not recalculate conds from prompts if prompts have not changed since previous calculation"),
|
197 |
+
"batch_cond_uncond": OptionInfo(True, "Batch cond/uncond").info("do both conditional and unconditional denoising in one batch; uses a bit more VRAM during sampling, but improves speed; previously this was controlled by --always-batch-cond-uncond comandline argument"),
|
198 |
+
}))
|
199 |
+
|
200 |
+
options_templates.update(options_section(('compatibility', "Compatibility"), {
|
201 |
+
"use_old_emphasis_implementation": OptionInfo(False, "Use old emphasis implementation. Can be useful to reproduce old seeds."),
|
202 |
+
"use_old_karras_scheduler_sigmas": OptionInfo(False, "Use old karras scheduler sigmas (0.1 to 10)."),
|
203 |
+
"no_dpmpp_sde_batch_determinism": OptionInfo(False, "Do not make DPM++ SDE deterministic across different batch sizes."),
|
204 |
+
"use_old_hires_fix_width_height": OptionInfo(False, "For hires fix, use width/height sliders to set final resolution rather than first pass (disables Upscale by, Resize width/height to)."),
|
205 |
+
"dont_fix_second_order_samplers_schedule": OptionInfo(False, "Do not fix prompt schedule for second order samplers."),
|
206 |
+
"hires_fix_use_firstpass_conds": OptionInfo(False, "For hires fix, calculate conds of second pass using extra networks of first pass."),
|
207 |
+
"use_old_scheduling": OptionInfo(False, "Use old prompt editing timelines.", infotext="Old prompt editing timelines").info("For [red:green:N]; old: If N < 1, it's a fraction of steps (and hires fix uses range from 0 to 1), if N >= 1, it's an absolute number of steps; new: If N has a decimal point in it, it's a fraction of steps (and hires fix uses range from 1 to 2), othewrwise it's an absolute number of steps"),
|
208 |
+
}))
|
209 |
+
|
210 |
+
options_templates.update(options_section(('interrogate', "Interrogate"), {
|
211 |
+
"interrogate_keep_models_in_memory": OptionInfo(False, "Keep models in VRAM"),
|
212 |
+
"interrogate_return_ranks": OptionInfo(False, "Include ranks of model tags matches in results.").info("booru only"),
|
213 |
+
"interrogate_clip_num_beams": OptionInfo(1, "BLIP: num_beams", gr.Slider, {"minimum": 1, "maximum": 16, "step": 1}),
|
214 |
+
"interrogate_clip_min_length": OptionInfo(24, "BLIP: minimum description length", gr.Slider, {"minimum": 1, "maximum": 128, "step": 1}),
|
215 |
+
"interrogate_clip_max_length": OptionInfo(48, "BLIP: maximum description length", gr.Slider, {"minimum": 1, "maximum": 256, "step": 1}),
|
216 |
+
"interrogate_clip_dict_limit": OptionInfo(1500, "CLIP: maximum number of lines in text file").info("0 = No limit"),
|
217 |
+
"interrogate_clip_skip_categories": OptionInfo([], "CLIP: skip inquire categories", gr.CheckboxGroup, lambda: {"choices": interrogate.category_types()}, refresh=interrogate.category_types),
|
218 |
+
"interrogate_deepbooru_score_threshold": OptionInfo(0.5, "deepbooru: score threshold", gr.Slider, {"minimum": 0, "maximum": 1, "step": 0.01}),
|
219 |
+
"deepbooru_sort_alpha": OptionInfo(True, "deepbooru: sort tags alphabetically").info("if not: sort by score"),
|
220 |
+
"deepbooru_use_spaces": OptionInfo(True, "deepbooru: use spaces in tags").info("if not: use underscores"),
|
221 |
+
"deepbooru_escape": OptionInfo(True, "deepbooru: escape (\\) brackets").info("so they are used as literal brackets and not for emphasis"),
|
222 |
+
"deepbooru_filter_tags": OptionInfo("", "deepbooru: filter out those tags").info("separate by comma"),
|
223 |
+
}))
|
224 |
+
|
225 |
+
options_templates.update(options_section(('extra_networks', "Extra Networks"), {
|
226 |
+
"extra_networks_show_hidden_directories": OptionInfo(True, "Show hidden directories").info("directory is hidden if its name starts with \".\"."),
|
227 |
+
"extra_networks_hidden_models": OptionInfo("When searched", "Show cards for models in hidden directories", gr.Radio, {"choices": ["Always", "When searched", "Never"]}).info('"When searched" option will only show the item when the search string has 4 characters or more'),
|
228 |
+
"extra_networks_default_multiplier": OptionInfo(1.0, "Default multiplier for extra networks", gr.Slider, {"minimum": 0.0, "maximum": 2.0, "step": 0.01}),
|
229 |
+
"extra_networks_card_width": OptionInfo(0, "Card width for Extra Networks").info("in pixels"),
|
230 |
+
"extra_networks_card_height": OptionInfo(0, "Card height for Extra Networks").info("in pixels"),
|
231 |
+
"extra_networks_card_text_scale": OptionInfo(1.0, "Card text scale", gr.Slider, {"minimum": 0.0, "maximum": 2.0, "step": 0.01}).info("1 = original size"),
|
232 |
+
"extra_networks_card_show_desc": OptionInfo(True, "Show description on card"),
|
233 |
+
"extra_networks_add_text_separator": OptionInfo(" ", "Extra networks separator").info("extra text to add before <...> when adding extra network to prompt"),
|
234 |
+
"ui_extra_networks_tab_reorder": OptionInfo("", "Extra networks tab order").needs_reload_ui(),
|
235 |
+
"textual_inversion_print_at_load": OptionInfo(False, "Print a list of Textual Inversion embeddings when loading model"),
|
236 |
+
"textual_inversion_add_hashes_to_infotext": OptionInfo(True, "Add Textual Inversion hashes to infotext"),
|
237 |
+
"sd_hypernetwork": OptionInfo("None", "Add hypernetwork to prompt", gr.Dropdown, lambda: {"choices": ["None", *shared.hypernetworks]}, refresh=shared_items.reload_hypernetworks),
|
238 |
+
}))
|
239 |
+
|
240 |
+
options_templates.update(options_section(('ui', "User interface"), {
|
241 |
+
"localization": OptionInfo("None", "Localization", gr.Dropdown, lambda: {"choices": ["None"] + list(localization.localizations.keys())}, refresh=lambda: localization.list_localizations(cmd_opts.localizations_dir)).needs_reload_ui(),
|
242 |
+
"gradio_theme": OptionInfo("Default", "Gradio theme", ui_components.DropdownEditable, lambda: {"choices": ["Default"] + shared_gradio_themes.gradio_hf_hub_themes}).info("you can also manually enter any of themes from the <a href='https://huggingface.co/spaces/gradio/theme-gallery'>gallery</a>.").needs_reload_ui(),
|
243 |
+
"gradio_themes_cache": OptionInfo(True, "Cache gradio themes locally").info("disable to update the selected Gradio theme"),
|
244 |
+
"gallery_height": OptionInfo("", "Gallery height", gr.Textbox).info("an be any valid CSS value").needs_reload_ui(),
|
245 |
+
"return_grid": OptionInfo(True, "Show grid in results for web"),
|
246 |
+
"do_not_show_images": OptionInfo(False, "Do not show any images in results for web"),
|
247 |
+
"send_seed": OptionInfo(True, "Send seed when sending prompt or image to other interface"),
|
248 |
+
"send_size": OptionInfo(True, "Send size when sending prompt or image to another interface"),
|
249 |
+
"js_modal_lightbox": OptionInfo(True, "Enable full page image viewer"),
|
250 |
+
"js_modal_lightbox_initially_zoomed": OptionInfo(True, "Show images zoomed in by default in full page image viewer"),
|
251 |
+
"js_modal_lightbox_gamepad": OptionInfo(False, "Navigate image viewer with gamepad"),
|
252 |
+
"js_modal_lightbox_gamepad_repeat": OptionInfo(250, "Gamepad repeat period, in milliseconds"),
|
253 |
+
"show_progress_in_title": OptionInfo(True, "Show generation progress in window title."),
|
254 |
+
"samplers_in_dropdown": OptionInfo(True, "Use dropdown for sampler selection instead of radio group").needs_reload_ui(),
|
255 |
+
"dimensions_and_batch_together": OptionInfo(True, "Show Width/Height and Batch sliders in same row").needs_reload_ui(),
|
256 |
+
"keyedit_precision_attention": OptionInfo(0.1, "Ctrl+up/down precision when editing (attention:1.1)", gr.Slider, {"minimum": 0.01, "maximum": 0.2, "step": 0.001}),
|
257 |
+
"keyedit_precision_extra": OptionInfo(0.05, "Ctrl+up/down precision when editing <extra networks:0.9>", gr.Slider, {"minimum": 0.01, "maximum": 0.2, "step": 0.001}),
|
258 |
+
"keyedit_delimiters": OptionInfo(".,\\/!?%^*;:{}=`~()", "Ctrl+up/down word delimiters"),
|
259 |
+
"keyedit_move": OptionInfo(True, "Alt+left/right moves prompt elements"),
|
260 |
+
"quicksettings_list": OptionInfo(["sd_model_checkpoint","sd_vae","CLIP_stop_at_last_layers","eta_noise_seed_delta"], "Quicksettings list", ui_components.DropdownMulti, lambda: {"choices": list(shared.opts.data_labels.keys())}).js("info", "settingsHintsShowQuicksettings").info("setting entries that appear at the top of page rather than in settings tab").needs_reload_ui(),
|
261 |
+
"ui_tab_order": OptionInfo([], "UI tab order", ui_components.DropdownMulti, lambda: {"choices": list(shared.tab_names)}).needs_reload_ui(),
|
262 |
+
"hidden_tabs": OptionInfo([], "Hidden UI tabs", ui_components.DropdownMulti, lambda: {"choices": list(shared.tab_names)}).needs_reload_ui(),
|
263 |
+
"ui_reorder_list": OptionInfo([], "txt2img/img2img UI item order", ui_components.DropdownMulti, lambda: {"choices": list(shared_items.ui_reorder_categories())}).info("selected items appear first").needs_reload_ui(),
|
264 |
+
"hires_fix_show_sampler": OptionInfo(False, "Hires fix: show hires checkpoint and sampler selection").needs_reload_ui(),
|
265 |
+
"hires_fix_show_prompts": OptionInfo(False, "Hires fix: show hires prompt and negative prompt").needs_reload_ui(),
|
266 |
+
"disable_token_counters": OptionInfo(False, "Disable prompt token counters").needs_reload_ui(),
|
267 |
+
}))
|
268 |
+
|
269 |
+
|
270 |
+
options_templates.update(options_section(('infotext', "Infotext"), {
|
271 |
+
"add_model_hash_to_info": OptionInfo(True, "Add model hash to generation information"),
|
272 |
+
"add_model_name_to_info": OptionInfo(True, "Add model name to generation information"),
|
273 |
+
"add_user_name_to_info": OptionInfo(False, "Add user name to generation information when authenticated"),
|
274 |
+
"add_version_to_infotext": OptionInfo(True, "Add program version to generation information"),
|
275 |
+
"disable_weights_auto_swap": OptionInfo(True, "Disregard checkpoint information from pasted infotext").info("when reading generation parameters from text into UI"),
|
276 |
+
"infotext_styles": OptionInfo("Apply if any", "Infer styles from prompts of pasted infotext", gr.Radio, {"choices": ["Ignore", "Apply", "Discard", "Apply if any"]}).info("when reading generation parameters from text into UI)").html("""<ul style='margin-left: 1.5em'>
|
277 |
+
<li>Ignore: keep prompt and styles dropdown as it is.</li>
|
278 |
+
<li>Apply: remove style text from prompt, always replace styles dropdown value with found styles (even if none are found).</li>
|
279 |
+
<li>Discard: remove style text from prompt, keep styles dropdown as it is.</li>
|
280 |
+
<li>Apply if any: remove style text from prompt; if any styles are found in prompt, put them into styles dropdown, otherwise keep it as it is.</li>
|
281 |
+
</ul>"""),
|
282 |
+
|
283 |
+
}))
|
284 |
+
|
285 |
+
options_templates.update(options_section(('ui', "Live previews"), {
|
286 |
+
"show_progressbar": OptionInfo(True, "Show progressbar"),
|
287 |
+
"live_previews_enable": OptionInfo(True, "Show live previews of the created image"),
|
288 |
+
"live_previews_image_format": OptionInfo("png", "Live preview file format", gr.Radio, {"choices": ["jpeg", "png", "webp"]}),
|
289 |
+
"show_progress_grid": OptionInfo(True, "Show previews of all images generated in a batch as a grid"),
|
290 |
+
"show_progress_every_n_steps": OptionInfo(10, "Live preview display period", gr.Slider, {"minimum": -1, "maximum": 32, "step": 1}).info("in sampling steps - show new live preview image every N sampling steps; -1 = only show after completion of batch"),
|
291 |
+
"show_progress_type": OptionInfo("Approx NN", "Live preview method", gr.Radio, {"choices": ["Full", "Approx NN", "Approx cheap", "TAESD"]}).info("Full = slow but pretty; Approx NN and TAESD = fast but low quality; Approx cheap = super fast but terrible otherwise"),
|
292 |
+
"live_preview_allow_lowvram_full": OptionInfo(False, "Allow Full live preview method with lowvram/medvram").info("If not, Approx NN will be used instead; Full live preview method is very detrimental to speed if lowvram/medvram optimizations are enabled"),
|
293 |
+
"live_preview_content": OptionInfo("Prompt", "Live preview subject", gr.Radio, {"choices": ["Combined", "Prompt", "Negative prompt"]}),
|
294 |
+
"live_preview_refresh_period": OptionInfo(1000, "Progressbar and preview update period").info("in milliseconds"),
|
295 |
+
"live_preview_fast_interrupt": OptionInfo(False, "Return image with chosen live preview method on interrupt").info("makes interrupts faster"),
|
296 |
+
}))
|
297 |
+
|
298 |
+
options_templates.update(options_section(('sampler-params', "Sampler parameters"), {
|
299 |
+
"hide_samplers": OptionInfo([], "Hide samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in shared_items.list_samplers()]}).needs_reload_ui(),
|
300 |
+
"eta_ddim": OptionInfo(0.0, "Eta for DDIM", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}, infotext='Eta DDIM').info("noise multiplier; higher = more unpredictable results"),
|
301 |
+
"eta_ancestral": OptionInfo(1.0, "Eta for k-diffusion samplers", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}, infotext='Eta').info("noise multiplier; currently only applies to ancestral samplers (i.e. Euler a) and SDE samplers"),
|
302 |
+
"ddim_discretize": OptionInfo('uniform', "img2img DDIM discretize", gr.Radio, {"choices": ['uniform', 'quad']}),
|
303 |
+
's_churn': OptionInfo(0.0, "sigma churn", gr.Slider, {"minimum": 0.0, "maximum": 100.0, "step": 0.01}, infotext='Sigma churn').info('amount of stochasticity; only applies to Euler, Heun, and DPM2'),
|
304 |
+
's_tmin': OptionInfo(0.0, "sigma tmin", gr.Slider, {"minimum": 0.0, "maximum": 10.0, "step": 0.01}, infotext='Sigma tmin').info('enable stochasticity; start value of the sigma range; only applies to Euler, Heun, and DPM2'),
|
305 |
+
's_tmax': OptionInfo(0.0, "sigma tmax", gr.Slider, {"minimum": 0.0, "maximum": 999.0, "step": 0.01}, infotext='Sigma tmax').info("0 = inf; end value of the sigma range; only applies to Euler, Heun, and DPM2"),
|
306 |
+
's_noise': OptionInfo(1.0, "sigma noise", gr.Slider, {"minimum": 0.0, "maximum": 1.1, "step": 0.001}, infotext='Sigma noise').info('amount of additional noise to counteract loss of detail during sampling'),
|
307 |
+
'k_sched_type': OptionInfo("Automatic", "Scheduler type", gr.Dropdown, {"choices": ["Automatic", "karras", "exponential", "polyexponential"]}, infotext='Schedule type').info("lets you override the noise schedule for k-diffusion samplers; choosing Automatic disables the three parameters below"),
|
308 |
+
'sigma_min': OptionInfo(0.0, "sigma min", gr.Number, infotext='Schedule max sigma').info("0 = default (~0.03); minimum noise strength for k-diffusion noise scheduler"),
|
309 |
+
'sigma_max': OptionInfo(0.0, "sigma max", gr.Number, infotext='Schedule min sigma').info("0 = default (~14.6); maximum noise strength for k-diffusion noise scheduler"),
|
310 |
+
'rho': OptionInfo(0.0, "rho", gr.Number, infotext='Schedule rho').info("0 = default (7 for karras, 1 for polyexponential); higher values result in a steeper noise schedule (decreases faster)"),
|
311 |
+
'eta_noise_seed_delta': OptionInfo(0, "Eta noise seed delta", gr.Number, {"precision": 0}, infotext='ENSD').info("ENSD; does not improve anything, just produces different results for ancestral samplers - only useful for reproducing images"),
|
312 |
+
'always_discard_next_to_last_sigma': OptionInfo(False, "Always discard next-to-last sigma", infotext='Discard penultimate sigma').link("PR", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/6044"),
|
313 |
+
'sgm_noise_multiplier': OptionInfo(False, "SGM noise multiplier", infotext='SGM noise multplier').link("PR", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/12818").info("Match initial noise to official SDXL implementation - only useful for reproducing images"),
|
314 |
+
'uni_pc_variant': OptionInfo("bh1", "UniPC variant", gr.Radio, {"choices": ["bh1", "bh2", "vary_coeff"]}, infotext='UniPC variant'),
|
315 |
+
'uni_pc_skip_type': OptionInfo("time_uniform", "UniPC skip type", gr.Radio, {"choices": ["time_uniform", "time_quadratic", "logSNR"]}, infotext='UniPC skip type'),
|
316 |
+
'uni_pc_order': OptionInfo(3, "UniPC order", gr.Slider, {"minimum": 1, "maximum": 50, "step": 1}, infotext='UniPC order').info("must be < sampling steps"),
|
317 |
+
'uni_pc_lower_order_final': OptionInfo(True, "UniPC lower order final", infotext='UniPC lower order final'),
|
318 |
+
}))
|
319 |
+
|
320 |
+
options_templates.update(options_section(('postprocessing', "Postprocessing"), {
|
321 |
+
'postprocessing_enable_in_main_ui': OptionInfo([], "Enable postprocessing operations in txt2img and img2img tabs", ui_components.DropdownMulti, lambda: {"choices": [x.name for x in shared_items.postprocessing_scripts()]}),
|
322 |
+
'postprocessing_operation_order': OptionInfo([], "Postprocessing operation order", ui_components.DropdownMulti, lambda: {"choices": [x.name for x in shared_items.postprocessing_scripts()]}),
|
323 |
+
'upscaling_max_images_in_cache': OptionInfo(5, "Maximum number of images in upscaling cache", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}),
|
324 |
+
}))
|
325 |
+
|
326 |
+
options_templates.update(options_section((None, "Hidden options"), {
|
327 |
+
"disabled_extensions": OptionInfo([], "Disable these extensions"),
|
328 |
+
"disable_all_extensions": OptionInfo("none", "Disable all extensions (preserves the list of disabled extensions)", gr.Radio, {"choices": ["none", "extra", "all"]}),
|
329 |
+
"restore_config_state_file": OptionInfo("", "Config state file to restore from, under 'config-states/' folder"),
|
330 |
+
"sd_checkpoint_hash": OptionInfo("", "SHA256 hash of the current checkpoint"),
|
331 |
+
}))
|
332 |
+
|