parser.add_argument("--data-dir",type=str,default=os.path.dirname(os.path.dirname(os.path.realpath(__file__))),help="base path where all user data is stored",)
parser.add_argument("--config",type=str,default=sd_default_config,help="path to config which constructs model",)
parser.add_argument("--ckpt",type=str,default=sd_model_file,help="path to checkpoint of stable diffusion model; if specified, this checkpoint will be added to the list of checkpoints and loaded",)
parser.add_argument("--ckpt-dir",type=str,default=None,help="Path to directory with stable diffusion checkpoints")
parser.add_argument("--vae-dir",type=str,default=None,help="Path to directory with VAE files")
parser.add_argument("--gfpgan-model",type=str,help="GFPGAN model file name",default=None)
parser.add_argument("--no-half",action='store_true',help="do not switch the model to 16-bit floats")
parser.add_argument("--no-half-vae",action='store_true',help="do not switch the VAE model to 16-bit floats")
parser.add_argument("--no-progressbar-hiding",action='store_true',help="do not hide progressbar in gradio UI (we hide it because it slows down ML if you have hardware acceleration in browser)")
parser.add_argument("--max-batch-count",type=int,default=16,help="maximum batch count value for the UI")
parser.add_argument("--embeddings-dir",type=str,default=os.path.join(data_path,'embeddings'),help="embeddings directory for textual inversion (default: embeddings)")
parser.add_argument("--textual-inversion-templates-dir",type=str,default=os.path.join(script_path,'textual_inversion_templates'),help="directory with textual inversion templates")
parser.add_argument("--allow-code",action='store_true',help="allow custom script execution from webui")
parser.add_argument("--medvram",action='store_true',help="enable stable diffusion model optimizations for sacrificing a little speed for low VRM usage")
parser.add_argument("--lowvram",action='store_true',help="enable stable diffusion model optimizations for sacrificing a lot of speed for very low VRM usage")
parser.add_argument("--lowram",action='store_true',help="load stable diffusion checkpoint weights to VRAM instead of RAM")
parser.add_argument("--always-batch-cond-uncond",action='store_true',help="disables cond/uncond batching that is enabled to save memory with --medvram or --lowvram")
parser.add_argument("--unload-gfpgan",action='store_true',help="does not do anything.")
parser.add_argument("--precision",type=str,help="evaluate at this precision",choices=["full","autocast"],default="autocast")
parser.add_argument("--upcast-sampling",action='store_true',help="upcast sampling. No effect with --no-half. Usually produces similar results to --no-half with better performance while using less memory.")
parser.add_argument("--share",action='store_true',help="use share=True for gradio and make the UI accessible through their site")
parser.add_argument("--ngrok",type=str,help="ngrok authtoken, alternative to gradio --share",default=None)
parser.add_argument("--ngrok-region",type=str,help="The region in which ngrok should start.",default="us")
parser.add_argument("--enable-insecure-extension-access",action='store_true',help="enable extensions tab regardless of other options")
parser.add_argument("--codeformer-models-path",type=str,help="Path to directory with codeformer model file(s).",default=os.path.join(models_path,'Codeformer'))
parser.add_argument("--gfpgan-models-path",type=str,help="Path to directory with GFPGAN model file(s).",default=os.path.join(models_path,'GFPGAN'))
parser.add_argument("--esrgan-models-path",type=str,help="Path to directory with ESRGAN model file(s).",default=os.path.join(models_path,'ESRGAN'))
parser.add_argument("--bsrgan-models-path",type=str,help="Path to directory with BSRGAN model file(s).",default=os.path.join(models_path,'BSRGAN'))
parser.add_argument("--realesrgan-models-path",type=str,help="Path to directory with RealESRGAN model file(s).",default=os.path.join(models_path,'RealESRGAN'))
parser.add_argument("--clip-models-path",type=str,help="Path to directory with CLIP model file(s).",default=None)
parser.add_argument("--xformers",action='store_true',help="enable xformers for cross attention layers")
parser.add_argument("--force-enable-xformers",action='store_true',help="enable xformers for cross attention layers regardless of whether the checking code thinks you can run it; do not make bug reports if this fails to work")
parser.add_argument("--xformers-flash-attention",action='store_true',help="enable xformers with Flash Attention to improve reproducibility (supported for SD2.x or variant only)")
parser.add_argument("--deepdanbooru",action='store_true',help="does not do anything")
parser.add_argument("--opt-split-attention",action='store_true',help="force-enables Doggettx's cross-attention layer optimization. By default, it's on for torch cuda.")
parser.add_argument("--sub-quad-q-chunk-size",type=int,help="query chunk size for the sub-quadratic cross-attention layer optimization to use",default=1024)
parser.add_argument("--sub-quad-kv-chunk-size",type=int,help="kv chunk size for the sub-quadratic cross-attention layer optimization to use",default=None)
parser.add_argument("--sub-quad-chunk-threshold",type=int,help="the percentage of VRAM threshold for the sub-quadratic cross-attention layer optimization to use chunking",default=None)
parser.add_argument("--opt-split-attention-invokeai",action='store_true',help="force-enables InvokeAI's cross-attention layer optimization. By default, it's on when cuda is unavailable.")
parser.add_argument("--opt-split-attention-v1",action='store_true',help="enable older version of split attention optimization that does not consume all the VRAM it can find")
parser.add_argument("--disable-nan-check",action='store_true',help="do not check if produced images/latent spaces have nans; useful for running without a checkpoint in CI")
parser.add_argument("--use-cpu",nargs='+',help="use CPU as torch device for specified modules",default=[],type=str.lower)
parser.add_argument("--listen",action='store_true',help="launch gradio with 0.0.0.0 as server name, allowing to respond to network requests")
parser.add_argument("--port",type=int,help="launch gradio with given server port, you need root/admin rights for ports < 1024, defaults to 7860 if available",default=None)
parser.add_argument("--show-negative-prompt",action='store_true',help="does not do anything",default=False)
parser.add_argument("--ui-config-file",type=str,help="filename to use for ui configuration",default=os.path.join(data_path,'ui-config.json'))
parser.add_argument("--hide-ui-dir-config",action='store_true',help="hide directory configuration from webui",default=False)
parser.add_argument("--ui-settings-file",type=str,help="filename to use for ui settings",default=os.path.join(data_path,'config.json'))
parser.add_argument("--gradio-debug",action='store_true',help="launch gradio with --debug option")
parser.add_argument("--gradio-auth",type=str,help='set gradio authentication like "username:password"; or comma-delimit multiple like "u1:p1,u2:p2,u3:p3"',default=None)
parser.add_argument("--gradio-auth-path",type=str,help='set gradio authentication file path ex. "/path/to/auth/file" same auth format as --gradio-auth',default=None)
parser.add_argument("--gradio-img2img-tool",type=str,help='does not do anything')
parser.add_argument("--gradio-inpaint-tool",type=str,help="does not do anything")
parser.add_argument("--opt-channelslast",action='store_true',help="change memory type for stable diffusion to channels last")
parser.add_argument("--styles-file",type=str,help="filename to use for styles",default=os.path.join(data_path,'styles.csv'))
parser.add_argument("--autolaunch",action='store_true',help="open the webui URL in the system's default browser upon launch",default=False)
parser.add_argument("--theme",type=str,help="launches the UI with light or dark theme",default=None)
parser.add_argument("--use-textbox-seed",action='store_true',help="use textbox for seeds in UI (no up/down, but possible to input long seeds)",default=False)
parser.add_argument("--disable-console-progressbars",action='store_true',help="do not output progressbars to console",default=False)
parser.add_argument("--enable-console-prompts",action='store_true',help="print prompts to console when generating with txt2img and img2img",default=False)
parser.add_argument('--vae-path',type=str,help='Checkpoint to use as VAE; setting this argument disables all settings related to VAE',default=None)
parser.add_argument("--disable-safe-unpickle",action='store_true',help="disable checking pytorch models for malicious code",default=False)
parser.add_argument("--api",action='store_true',help="use api=True to launch the API together with the webui (use --nowebui instead for only the API)")
parser.add_argument("--api-auth",type=str,help='Set authentication for API like "username:password"; or comma-delimit multiple like "u1:p1,u2:p2,u3:p3"',default=None)
parser.add_argument("--api-log",action='store_true',help="use api-log=True to enable logging of all API requests")
parser.add_argument("--nowebui",action='store_true',help="use api=True to launch the API instead of the webui")
parser.add_argument("--ui-debug-mode",action='store_true',help="Don't load model to quickly launch UI")
parser.add_argument("--device-id",type=str,help="Select the default CUDA device to use (export CUDA_VISIBLE_DEVICES=0,1,etc might be needed before)",default=None)
parser.add_argument("--cors-allow-origins",type=str,help="Allowed CORS origin(s) in the form of a comma-separated list (no spaces)",default=None)
parser.add_argument("--cors-allow-origins-regex",type=str,help="Allowed CORS origin(s) in the form of a single regular expression",default=None)
parser.add_argument("--tls-keyfile",type=str,help="Partially enables TLS, requires --tls-certfile to fully function",default=None)
parser.add_argument("--tls-certfile",type=str,help="Partially enables TLS, requires --tls-keyfile to fully function",default=None)
parser.add_argument("--server-name",type=str,help="Sets hostname of server",default=None)
parser.add_argument("--gradio-queue",action='store_true',help="does not do anything",default=True)
parser.add_argument("--no-gradio-queue",action='store_true',help="Disables gradio queue; causes the webpage to use http requests instead of websockets; was the defaul in earlier versions")
parser.add_argument("--skip-version-check",action='store_true',help="Do not check versions of torch and xformers")
parser.add_argument("--no-hashing",action='store_true',help="disable sha256 hashing of checkpoints to help loading performance",default=False)
parser.add_argument("--no-download-sd-model",action='store_true',help="don't download SD1.5 model even if no model is found in --ckpt-dir",default=False)
"save_images_add_number":OptionInfo(True,"Add number to filename when saving",component_args=hide_dirs),
"grid_save":OptionInfo(True,"Always save all generated image grids"),
"grid_format":OptionInfo('png','File format for grids'),
"grid_extended_filename":OptionInfo(False,"Add extended info (seed, prompt) to filename when saving grid"),
"grid_only_if_multiple":OptionInfo(True,"Do not save grids consisting of one picture"),
"grid_prevent_empty_spots":OptionInfo(False,"Prevent empty spots in grid (when set to autodetect)"),
"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}),
"enable_pnginfo":OptionInfo(True,"Save text information about generation parameters as chunks to png files"),
"save_txt":OptionInfo(False,"Create a text file next to every image with generation parameters."),
"save_images_before_face_restoration":OptionInfo(False,"Save a copy of image before doing face restoration."),
"save_images_before_highres_fix":OptionInfo(False,"Save a copy of image before applying highres fix."),
"save_images_before_color_correction":OptionInfo(False,"Save a copy of image before applying color correction to img2img results"),
"save_mask":OptionInfo(False,"For inpainting, save a copy of the greyscale mask"),
"save_mask_composite":OptionInfo(False,"For inpainting, save a masked composite"),
"jpeg_quality":OptionInfo(80,"Quality for saved jpeg images",gr.Slider,{"minimum":1,"maximum":100,"step":1}),
"webp_lossless":OptionInfo(False,"Use lossless compression for webp images"),
"export_for_4chan":OptionInfo(True,"If the saved image file size is above the limit, or its either width or height are above the limit, save a downscaled copy as JPG"),
"img_downscale_threshold":OptionInfo(4.0,"File size limit for the above option, MB",gr.Number),
"target_side_length":OptionInfo(4000,"Width/height limit for the above option, in pixels",gr.Number),
"img_max_size_mp":OptionInfo(200,"Maximum image size, in megapixels",gr.Number),
"use_original_name_batch":OptionInfo(True,"Use original name for output filename during batch process in extras tab"),
"use_upscaler_name_as_suffix":OptionInfo(False,"Use upscaler name as filename suffix in the extras tab"),
"save_selected_only":OptionInfo(True,"When using 'Save' button, only save a single selected image"),
"do_not_add_watermark":OptionInfo(False,"Do not add watermark to images"),
"temp_dir":OptionInfo("","Directory for temporary images; leave empty for default"),
"clean_temp_dir_at_start":OptionInfo(False,"Cleanup non-default temporary directory when starting webui"),
}))
options_templates.update(options_section(('saving-paths',"Paths for saving"),{
"outdir_samples":OptionInfo("","Output directory for images; if empty, defaults to three directories below",component_args=hide_dirs),
"outdir_txt2img_samples":OptionInfo("outputs/txt2img-images",'Output directory for txt2img images',component_args=hide_dirs),
"outdir_img2img_samples":OptionInfo("outputs/img2img-images",'Output directory for img2img images',component_args=hide_dirs),
"outdir_extras_samples":OptionInfo("outputs/extras-images",'Output directory for images from extras tab',component_args=hide_dirs),
"outdir_grids":OptionInfo("","Output directory for grids; if empty, defaults to two directories below",component_args=hide_dirs),
"outdir_txt2img_grids":OptionInfo("outputs/txt2img-grids",'Output directory for txt2img grids',component_args=hide_dirs),
"outdir_img2img_grids":OptionInfo("outputs/img2img-grids",'Output directory for img2img grids',component_args=hide_dirs),
"outdir_save":OptionInfo("log/images","Directory for saving images using the Save button",component_args=hide_dirs),
}))
options_templates.update(options_section(('saving-to-dirs',"Saving to a directory"),{
"save_to_dirs":OptionInfo(True,"Save images to a subdirectory"),
"grid_save_to_dirs":OptionInfo(True,"Save grids to a subdirectory"),
"use_save_to_dirs_for_ui":OptionInfo(False,"When using \"Save\" button, save images to a subdirectory"),
"directories_filename_pattern":OptionInfo("[date]","Directory name pattern",component_args=hide_dirs),
"directories_max_prompt_words":OptionInfo(8,"Max prompt words for [prompt_words] pattern",gr.Slider,{"minimum":1,"maximum":20,"step":1,**hide_dirs}),
"ESRGAN_tile":OptionInfo(192,"Tile size for ESRGAN upscalers. 0 = no tiling.",gr.Slider,{"minimum":0,"maximum":512,"step":16}),
"ESRGAN_tile_overlap":OptionInfo(8,"Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.",gr.Slider,{"minimum":0,"maximum":48,"step":1}),
"realesrgan_enabled_models":OptionInfo(["R-ESRGAN 4x+","R-ESRGAN 4x+ Anime6B"],"Select which Real-ESRGAN models to show in the web UI. (Requires restart)",gr.CheckboxGroup,lambda:{"choices":shared_items.realesrgan_models_names()}),
"upscaler_for_img2img":OptionInfo(None,"Upscaler for img2img",gr.Dropdown,lambda:{"choices":[x.nameforxinsd_upscalers]}),
"unload_models_when_training":OptionInfo(False,"Move VAE and CLIP to RAM when training if possible. Saves VRAM."),
"pin_memory":OptionInfo(False,"Turn on pin_memory for DataLoader. Makes training slightly faster but can increase memory usage."),
"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."),
"save_training_settings_to_txt":OptionInfo(True,"Save textual inversion and hypernet settings to a text file whenever training starts."),
"dataset_filename_word_regex":OptionInfo("","Filename word regex"),
"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}),
"training_write_csv_every":OptionInfo(500,"Save an csv containing the loss to log directory every N steps, 0 to disable"),
"training_xattention_optimizations":OptionInfo(False,"Use cross attention optimizations while training"),
"initial_noise_multiplier":OptionInfo(1.0,"Noise multiplier for img2img",gr.Slider,{"minimum":0.5,"maximum":1.5,"step":0.01}),
"img2img_color_correction":OptionInfo(False,"Apply color correction to img2img results to match original colors."),
"img2img_fix_steps":OptionInfo(False,"With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising)."),
"img2img_background_color":OptionInfo("#ffffff","With img2img, fill image's transparent parts with this color.",ui_components.FormColorPicker,{}),
"enable_quantization":OptionInfo(False,"Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply."),
"enable_emphasis":OptionInfo(True,"Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention"),
"enable_batch_seeds":OptionInfo(True,"Make K-diffusion samplers produce same images in a batch as when making a single image"),
"comma_padding_backtrack":OptionInfo(20,"Increase coherency by padding from the last comma within n tokens when using more than 75 tokens",gr.Slider,{"minimum":0,"maximum":74,"step":1}),
"use_old_emphasis_implementation":OptionInfo(False,"Use old emphasis implementation. Can be useful to reproduce old seeds."),
"use_old_karras_scheduler_sigmas":OptionInfo(False,"Use old karras scheduler sigmas (0.1 to 10)."),
"no_dpmpp_sde_batch_determinism":OptionInfo(False,"Do not make DPM++ SDE deterministic across different batch sizes."),
"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)."),
"interrogate_keep_models_in_memory":OptionInfo(False,"Interrogate: keep models in VRAM"),
"interrogate_return_ranks":OptionInfo(False,"Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators)."),
"interrogate_clip_num_beams":OptionInfo(1,"Interrogate: num_beams for BLIP",gr.Slider,{"minimum":1,"maximum":16,"step":1}),
"extra_networks_default_view":OptionInfo("cards","Default view for Extra Networks",gr.Dropdown,{"choices":["cards","thumbs"]}),
"extra_networks_default_multiplier":OptionInfo(1.0,"Multiplier for extra networks",gr.Slider,{"minimum":0.0,"maximum":1.0,"step":0.01}),
"extra_networks_card_width":OptionInfo(0,"Card width for Extra Networks (px)"),
"extra_networks_card_height":OptionInfo(0,"Card height for Extra Networks (px)"),
"extra_networks_add_text_separator":OptionInfo(" ","Extra text to add before <...> when adding extra network to prompt"),
"sd_hypernetwork":OptionInfo("None","Add hypernetwork to prompt",gr.Dropdown,lambda:{"choices":[""]+[xforxinhypernetworks.keys()]},refresh=reload_hypernetworks),
"return_grid":OptionInfo(True,"Show grid in results for web"),
"return_mask":OptionInfo(False,"For inpainting, include the greyscale mask in results for web"),
"return_mask_composite":OptionInfo(False,"For inpainting, include masked composite in results for web"),
"do_not_show_images":OptionInfo(False,"Do not show any images in results for web"),
"add_model_hash_to_info":OptionInfo(True,"Add model hash to generation information"),
"add_model_name_to_info":OptionInfo(True,"Add model name to generation information"),
"disable_weights_auto_swap":OptionInfo(True,"When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint."),
"send_seed":OptionInfo(True,"Send seed when sending prompt or image to other interface"),
"send_size":OptionInfo(True,"Send size when sending prompt or image to another interface"),
"font":OptionInfo("","Font for image grids that have text"),
"js_modal_lightbox":OptionInfo(True,"Enable full page image viewer"),
"js_modal_lightbox_initially_zoomed":OptionInfo(True,"Show images zoomed in by default in full page image viewer"),
"show_progress_in_title":OptionInfo(True,"Show generation progress in window title."),
"samplers_in_dropdown":OptionInfo(True,"Use dropdown for sampler selection instead of radio group"),
"dimensions_and_batch_together":OptionInfo(True,"Show Width/Height and Batch sliders in same row"),
"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}),
"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}),
"live_previews_enable":OptionInfo(True,"Show live previews of the created image"),
"show_progress_grid":OptionInfo(True,"Show previews of all images generated in a batch as a grid"),
"show_progress_every_n_steps":OptionInfo(10,"Show new live preview image every N sampling steps. Set to -1 to show after completion of batch.",gr.Slider,{"minimum":-1,"maximum":32,"step":1}),
'postprocessing_enable_in_main_ui':OptionInfo([],"Enable postprocessing operations in txt2img and img2img tabs",ui_components.DropdownMulti,lambda:{"choices":[x.nameforxinshared_items.postprocessing_scripts()]}),
print(f"Warning: bad setting value: {k}: {v} ({type(v).__name__}; expected {type(info.default).__name__})",file=sys.stderr)
bad_settings+=1
ifbad_settings>0:
print(f"The program is likely to not work with bad settings.\nSettings file: {filename}\nEither fix the file, or delete it and restart.",file=sys.stderr)