returnf"resize: from <span class='resolution'>{p.width}x{p.height}</span> to <span class='resolution'>{p.hr_resize_x or p.hr_upscale_to_x}x{p.hr_resize_y or p.hr_upscale_to_y}</span>"
defresize_from_to_html(width,height,scale_by):
target_width=int(width*scale_by)
target_height=int(height*scale_by)
ifnottarget_widthornottarget_height:
return"no image selected"
returnf"resize: from <span class='resolution'>{width}x{height}</span> to <span class='resolution'>{target_width}x{target_height}</span>"
prompt=gr.Textbox(label="Prompt",elem_id=f"{id_part}_prompt",show_label=False,lines=3,placeholder="Prompt (press Ctrl+Enter or Alt+Enter to generate)",elem_classes=["prompt"])
withgr.Row():
withgr.Column(scale=80):
withgr.Row():
negative_prompt=gr.Textbox(label="Negative prompt",elem_id=f"{id_part}_neg_prompt",show_label=False,lines=3,placeholder="Negative prompt (press Ctrl+Enter or Alt+Enter to generate)",elem_classes=["prompt"])
hr_sampler_index=gr.Dropdown(label='Hires sampling method',elem_id="hr_sampler",choices=["Use same sampler"]+[x.nameforxinsamplers_for_img2img],value="Use same sampler",type="index")
hr_prompt=gr.Textbox(label="Hires prompt",elem_id="hires_prompt",show_label=False,lines=3,placeholder="Prompt for hires fix pass.\nLeave empty to use the same prompt as in first pass.",elem_classes=["prompt"])
withgr.Column(scale=80):
withgr.Row():
hr_negative_prompt=gr.Textbox(label="Hires negative prompt",elem_id="hires_neg_prompt",show_label=False,lines=3,placeholder="Negative prompt for hires fix pass.\nLeave empty to use the same negative prompt as in first pass.",elem_classes=["prompt"])
init_img=gr.Image(label="Image for img2img",elem_id="img2img_image",show_label=False,source="upload",interactive=True,type="pil",tool="editor",image_mode="RGBA").style(height=opts.img2img_editor_height)
sketch=gr.Image(label="Image for img2img",elem_id="img2img_sketch",show_label=False,source="upload",interactive=True,type="pil",tool="color-sketch",image_mode="RGBA").style(height=opts.img2img_editor_height)
init_img_with_mask=gr.Image(label="Image for inpainting with mask",show_label=False,elem_id="img2maskimg",source="upload",interactive=True,type="pil",tool="sketch",image_mode="RGBA").style(height=opts.img2img_editor_height)
img2img_batch_inpaint_mask_dir=gr.Textbox(label="Inpaint batch mask directory (required for inpaint batch processing only)",**shared.hide_dirs,elem_id="img2img_batch_inpaint_mask_dir")
withgr.Accordion("PNG info",open=False):
img2img_batch_use_png_info=gr.Checkbox(label="Append png info to prompts",**shared.hide_dirs,elem_id="img2img_batch_use_png_info")
img2img_batch_png_info_dir=gr.Textbox(label="PNG info directory",**shared.hide_dirs,placeholder="Leave empty to use input directory",elem_id="img2img_batch_png_info_dir")
img2img_batch_png_info_props=gr.CheckboxGroup(["Prompt","Negative prompt","Seed","CFG scale","Sampler","Steps"],label="Parameters to take from png info",info="Prompts from png info will be appended to prompts set in ui.")
"No interpolation":interp_description_css.format("No interpolation will be used. Requires one model; A. Allows for format conversion and VAE baking."),
"Weighted sum":interp_description_css.format("A weighted sum will be used for interpolation. Requires two models; A and B. The result is calculated as A * (1 - M) + B * M"),
"Add difference":interp_description_css.format("The difference between the last two models will be added to the first. Requires three models; A, B and C. The result is calculated as A + (B - C) * M")
custom_name=gr.Textbox(label="Custom Name (Optional)",elem_id="modelmerger_custom_name")
interp_amount=gr.Slider(minimum=0.0,maximum=1.0,step=0.05,label='Multiplier (M) - set to 0 to get model A',value=0.3,elem_id="modelmerger_interp_amount")
config_source=gr.Radio(choices=["A, B or C","B","C","Don't"],value="A, B or C",label="Copy config from",type="index",elem_id="modelmerger_config_method")
withgr.Column():
withFormRow():
bake_in_vae=gr.Dropdown(choices=["None"]+list(sd_vae.vae_dict),value="None",label="Bake in VAE",elem_id="modelmerger_bake_in_vae")
new_hypernetwork_layer_structure=gr.Textbox("1, 2, 1",label="Enter hypernetwork layer structure",placeholder="1st and last digit must be 1. ex:'1, 2, 1'",elem_id="train_new_hypernetwork_layer_structure")
new_hypernetwork_activation_func=gr.Dropdown(value="linear",label="Select activation function of hypernetwork. Recommended : Swish / Linear(none)",choices=modules.hypernetworks.ui.keys,elem_id="train_new_hypernetwork_activation_func")
new_hypernetwork_initialization_option=gr.Dropdown(value="Normal",label="Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise",choices=["Normal","KaimingUniform","KaimingNormal","XavierUniform","XavierNormal"],elem_id="train_new_hypernetwork_initialization_option")
new_hypernetwork_dropout_structure=gr.Textbox("0, 0, 0",label="Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15",placeholder="1st and last digit must be 0 and values should be between 0 and 1. ex:'0, 0.01, 0'")
overwrite_old_hypernetwork=gr.Checkbox(value=False,label="Overwrite Old Hypernetwork",elem_id="train_overwrite_old_hypernetwork")
process_focal_crop_face_weight=gr.Slider(label='Focal point face weight',value=0.9,minimum=0.0,maximum=1.0,step=0.05,elem_id="train_process_focal_crop_face_weight")
process_focal_crop_entropy_weight=gr.Slider(label='Focal point entropy weight',value=0.15,minimum=0.0,maximum=1.0,step=0.05,elem_id="train_process_focal_crop_entropy_weight")
process_focal_crop_edges_weight=gr.Slider(label='Focal point edges weight',value=0.5,minimum=0.0,maximum=1.0,step=0.05,elem_id="train_process_focal_crop_edges_weight")
gr.HTML(value="<p style='margin-bottom: 0.7em'>Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images <a href=\"https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion\" style=\"font-weight:bold;\">[wiki]</a></p>")
dataset_directory=gr.Textbox(label='Dataset directory',placeholder="Path to directory with input images",elem_id="train_dataset_directory")
log_directory=gr.Textbox(label='Log directory',placeholder="Path to directory where to write outputs",value="textual_inversion",elem_id="train_log_directory")
create_image_every=gr.Number(label='Save an image to log directory every N steps, 0 to disable',value=500,precision=0,elem_id="train_create_image_every")
save_embedding_every=gr.Number(label='Save a copy of embedding to log directory every N steps, 0 to disable',value=500,precision=0,elem_id="train_save_embedding_every")
use_weight=gr.Checkbox(label="Use PNG alpha channel as loss weight",value=False,elem_id="use_weight")
save_image_with_stored_embedding=gr.Checkbox(label='Save images with embedding in PNG chunks',value=True,elem_id="train_save_image_with_stored_embedding")
preview_from_txt2img=gr.Checkbox(label='Read parameters (prompt, etc...) from txt2img tab when making previews',value=False,elem_id="train_preview_from_txt2img")
shuffle_tags=gr.Checkbox(label="Shuffle tags by ',' when creating prompts.",value=False,elem_id="train_shuffle_tags")
tag_drop_out=gr.Slider(minimum=0,maximum=1,step=0.1,label="Drop out tags when creating prompts.",value=0,elem_id="train_tag_drop_out")