@ -20,7 +20,7 @@ from PIL import Image, PngImagePlugin
from modules . call_queue import wrap_gradio_gpu_call , wrap_queued_call , wrap_gradio_call
from modules . call_queue import wrap_gradio_gpu_call , wrap_queued_call , wrap_gradio_call
from modules import sd_hijack , sd_models , localization , script_callbacks , ui_extensions , deepbooru , sd_vae , extra_networks , postprocessing , ui_components , ui_common , ui_postprocessing
from modules import sd_hijack , sd_models , localization , script_callbacks , ui_extensions , deepbooru , sd_vae , extra_networks , postprocessing , ui_components , ui_common , ui_postprocessing
from modules . ui_components import FormRow , Form Group, ToolButton , FormHTML
from modules . ui_components import FormRow , Form Column, Form Group, ToolButton , FormHTML
from modules . paths import script_path , data_path
from modules . paths import script_path , data_path
from modules . shared import opts , cmd_opts , restricted_opts
from modules . shared import opts , cmd_opts , restricted_opts
@ -89,7 +89,7 @@ paste_symbol = '\u2199\ufe0f' # ↙
refresh_symbol = ' \U0001f504 ' # 🔄
refresh_symbol = ' \U0001f504 ' # 🔄
save_style_symbol = ' \U0001f4be ' # 💾
save_style_symbol = ' \U0001f4be ' # 💾
apply_style_symbol = ' \U0001f4cb ' # 📋
apply_style_symbol = ' \U0001f4cb ' # 📋
clear_prompt_symbol = ' \U0001 F5D1 ' # 🗑️
clear_prompt_symbol = ' \U0001 f5d1\ufe0f ' # 🗑️
extra_networks_symbol = ' \U0001F3B4 ' # 🎴
extra_networks_symbol = ' \U0001F3B4 ' # 🎴
switch_values_symbol = ' \U000021C5 ' # ⇅
switch_values_symbol = ' \U000021C5 ' # ⇅
@ -179,13 +179,12 @@ def interrogate_deepbooru(image):
def create_seed_inputs ( target_interface ) :
def create_seed_inputs ( target_interface ) :
with FormRow ( elem_id = target_interface + ' _seed_row ' ):
with FormRow ( elem_id = target_interface + ' _seed_row ' , variant = " compact " ):
seed = ( gr . Textbox if cmd_opts . use_textbox_seed else gr . Number ) ( label = ' Seed ' , value = - 1 , elem_id = target_interface + ' _seed ' )
seed = ( gr . Textbox if cmd_opts . use_textbox_seed else gr . Number ) ( label = ' Seed ' , value = - 1 , elem_id = target_interface + ' _seed ' )
seed . style ( container = False )
seed . style ( container = False )
random_seed = gr. Button( random_symbol , elem_id = target_interface + ' _random_seed ' )
random_seed = Tool Button( random_symbol , elem_id = target_interface + ' _random_seed ' )
reuse_seed = gr. Button( reuse_symbol , elem_id = target_interface + ' _reuse_seed ' )
reuse_seed = Tool Button( reuse_symbol , elem_id = target_interface + ' _reuse_seed ' )
with gr . Group ( elem_id = target_interface + ' _subseed_show_box ' ) :
seed_checkbox = gr . Checkbox ( label = ' Extra ' , elem_id = target_interface + ' _subseed_show ' , value = False )
seed_checkbox = gr . Checkbox ( label = ' Extra ' , elem_id = target_interface + ' _subseed_show ' , value = False )
# Components to show/hide based on the 'Extra' checkbox
# Components to show/hide based on the 'Extra' checkbox
@ -195,8 +194,8 @@ def create_seed_inputs(target_interface):
seed_extras . append ( seed_extra_row_1 )
seed_extras . append ( seed_extra_row_1 )
subseed = gr . Number ( label = ' Variation seed ' , value = - 1 , elem_id = target_interface + ' _subseed ' )
subseed = gr . Number ( label = ' Variation seed ' , value = - 1 , elem_id = target_interface + ' _subseed ' )
subseed . style ( container = False )
subseed . style ( container = False )
random_subseed = gr. Button( random_symbol , elem_id = target_interface + ' _random_subseed ' )
random_subseed = Tool Button( random_symbol , elem_id = target_interface + ' _random_subseed ' )
reuse_subseed = gr. Button( reuse_symbol , elem_id = target_interface + ' _reuse_subseed ' )
reuse_subseed = Tool Button( reuse_symbol , elem_id = target_interface + ' _reuse_subseed ' )
subseed_strength = gr . Slider ( label = ' Variation strength ' , value = 0.0 , minimum = 0 , maximum = 1 , step = 0.01 , elem_id = target_interface + ' _subseed_strength ' )
subseed_strength = gr . Slider ( label = ' Variation strength ' , value = 0.0 , minimum = 0 , maximum = 1 , step = 0.01 , elem_id = target_interface + ' _subseed_strength ' )
with FormRow ( visible = False ) as seed_extra_row_2 :
with FormRow ( visible = False ) as seed_extra_row_2 :
@ -291,19 +290,19 @@ def create_toprow(is_img2img):
with gr . Row ( ) :
with gr . Row ( ) :
with gr . Column ( scale = 80 ) :
with gr . Column ( scale = 80 ) :
with gr . Row ( ) :
with gr . Row ( ) :
negative_prompt = gr . Textbox ( label = " Negative prompt " , elem_id = f " { id_part } _neg_prompt " , show_label = False , lines = 2 , placeholder = " Negative prompt (press Ctrl+Enter or Alt+Enter to generate) " )
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) " )
button_interrogate = None
button_interrogate = None
button_deepbooru = None
button_deepbooru = None
if is_img2img :
if is_img2img :
with gr . Column ( scale = 1 , elem_ id= " interrogate_ col" ) :
with gr . Column ( scale = 1 , elem_ classes= " interrogate- col" ) :
button_interrogate = gr . Button ( ' Interrogate \n CLIP ' , elem_id = " interrogate " )
button_interrogate = gr . Button ( ' Interrogate \n CLIP ' , elem_id = " interrogate " )
button_deepbooru = gr . Button ( ' Interrogate \n DeepBooru ' , elem_id = " deepbooru " )
button_deepbooru = gr . Button ( ' Interrogate \n DeepBooru ' , elem_id = " deepbooru " )
with gr . Column ( scale = 1 , elem_id = f " { id_part } _actions_column " ) :
with gr . Column ( scale = 1 , elem_id = f " { id_part } _actions_column " ) :
with gr . Row ( elem_id = f " { id_part } _generate_box " ):
with gr . Row ( elem_id = f " { id_part } _generate_box " , elem_classes = " generate-box " ):
interrupt = gr . Button ( ' Interrupt ' , elem_id = f " { id_part } _interrupt " )
interrupt = gr . Button ( ' Interrupt ' , elem_id = f " { id_part } _interrupt " , elem_classes = " generate-box-interrupt " )
skip = gr . Button ( ' Skip ' , elem_id = f " { id_part } _skip " )
skip = gr . Button ( ' Skip ' , elem_id = f " { id_part } _skip " , elem_classes = " generate-box-skip " )
submit = gr . Button ( ' Generate ' , elem_id = f " { id_part } _generate " , variant = ' primary ' )
submit = gr . Button ( ' Generate ' , elem_id = f " { id_part } _generate " , variant = ' primary ' )
skip . click (
skip . click (
@ -325,9 +324,9 @@ def create_toprow(is_img2img):
prompt_style_apply = ToolButton ( value = apply_style_symbol , elem_id = f " { id_part } _style_apply " )
prompt_style_apply = ToolButton ( value = apply_style_symbol , elem_id = f " { id_part } _style_apply " )
save_style = ToolButton ( value = save_style_symbol , elem_id = f " { id_part } _style_create " )
save_style = ToolButton ( value = save_style_symbol , elem_id = f " { id_part } _style_create " )
token_counter = gr . HTML ( value = " <span> </span>" , elem_id = f " { id_part } _token_counter " )
token_counter = gr . HTML ( value = " <span> 0/75 </span>" , elem_id = f " { id_part } _token_counter " , elem_classes = [ " token-counter " ] )
token_button = gr . Button ( visible = False , elem_id = f " { id_part } _token_button " )
token_button = gr . Button ( visible = False , elem_id = f " { id_part } _token_button " )
negative_token_counter = gr . HTML ( value = " <span> </span>" , elem_id = f " { id_part } _negative_token_counter " )
negative_token_counter = gr . HTML ( value = " <span> 0/75 </span>" , elem_id = f " { id_part } _negative_token_counter " , elem_classes = [ " token-counter " ] )
negative_token_button = gr . Button ( visible = False , elem_id = f " { id_part } _negative_token_button " )
negative_token_button = gr . Button ( visible = False , elem_id = f " { id_part } _negative_token_button " )
clear_prompt_button . click (
clear_prompt_button . click (
@ -479,7 +478,9 @@ def create_ui():
width = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Width " , value = 512 , elem_id = " txt2img_width " )
width = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Width " , value = 512 , elem_id = " txt2img_width " )
height = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Height " , value = 512 , elem_id = " txt2img_height " )
height = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Height " , value = 512 , elem_id = " txt2img_height " )
with gr . Column ( elem_id = " txt2img_dimensions_row " , scale = 1 ) :
res_switch_btn = ToolButton ( value = switch_values_symbol , elem_id = " txt2img_res_switch_btn " )
res_switch_btn = ToolButton ( value = switch_values_symbol , elem_id = " txt2img_res_switch_btn " )
if opts . dimensions_and_batch_together :
if opts . dimensions_and_batch_together :
with gr . Column ( elem_id = " txt2img_column_batch " ) :
with gr . Column ( elem_id = " txt2img_column_batch " ) :
batch_count = gr . Slider ( minimum = 1 , step = 1 , label = ' Batch count ' , value = 1 , elem_id = " txt2img_batch_count " )
batch_count = gr . Slider ( minimum = 1 , step = 1 , label = ' Batch count ' , value = 1 , elem_id = " txt2img_batch_count " )
@ -492,7 +493,7 @@ def create_ui():
seed , reuse_seed , subseed , reuse_subseed , subseed_strength , seed_resize_from_h , seed_resize_from_w , seed_checkbox = create_seed_inputs ( ' txt2img ' )
seed , reuse_seed , subseed , reuse_subseed , subseed_strength , seed_resize_from_h , seed_resize_from_w , seed_checkbox = create_seed_inputs ( ' txt2img ' )
elif category == " checkboxes " :
elif category == " checkboxes " :
with FormRow ( elem_ id= " txt2img_checkboxes " , variant = " compact " ) :
with FormRow ( elem_ classes= " checkboxes-row " , variant = " compact " ) :
restore_faces = gr . Checkbox ( label = ' Restore faces ' , value = False , visible = len ( shared . face_restorers ) > 1 , elem_id = " txt2img_restore_faces " )
restore_faces = gr . Checkbox ( label = ' Restore faces ' , value = False , visible = len ( shared . face_restorers ) > 1 , elem_id = " txt2img_restore_faces " )
tiling = gr . Checkbox ( label = ' Tiling ' , value = False , elem_id = " txt2img_tiling " )
tiling = gr . Checkbox ( label = ' Tiling ' , value = False , elem_id = " txt2img_tiling " )
enable_hr = gr . Checkbox ( label = ' Hires. fix ' , value = False , elem_id = " txt2img_enable_hr " )
enable_hr = gr . Checkbox ( label = ' Hires. fix ' , value = False , elem_id = " txt2img_enable_hr " )
@ -757,7 +758,9 @@ def create_ui():
width = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Width " , value = 512 , elem_id = " img2img_width " )
width = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Width " , value = 512 , elem_id = " img2img_width " )
height = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Height " , value = 512 , elem_id = " img2img_height " )
height = gr . Slider ( minimum = 64 , maximum = 2048 , step = 8 , label = " Height " , value = 512 , elem_id = " img2img_height " )
with gr . Column ( elem_id = " img2img_dimensions_row " , scale = 1 ) :
res_switch_btn = ToolButton ( value = switch_values_symbol , elem_id = " img2img_res_switch_btn " )
res_switch_btn = ToolButton ( value = switch_values_symbol , elem_id = " img2img_res_switch_btn " )
if opts . dimensions_and_batch_together :
if opts . dimensions_and_batch_together :
with gr . Column ( elem_id = " img2img_column_batch " ) :
with gr . Column ( elem_id = " img2img_column_batch " ) :
batch_count = gr . Slider ( minimum = 1 , step = 1 , label = ' Batch count ' , value = 1 , elem_id = " img2img_batch_count " )
batch_count = gr . Slider ( minimum = 1 , step = 1 , label = ' Batch count ' , value = 1 , elem_id = " img2img_batch_count " )
@ -774,7 +777,7 @@ def create_ui():
seed , reuse_seed , subseed , reuse_subseed , subseed_strength , seed_resize_from_h , seed_resize_from_w , seed_checkbox = create_seed_inputs ( ' img2img ' )
seed , reuse_seed , subseed , reuse_subseed , subseed_strength , seed_resize_from_h , seed_resize_from_w , seed_checkbox = create_seed_inputs ( ' img2img ' )
elif category == " checkboxes " :
elif category == " checkboxes " :
with FormRow ( elem_ id= " img2img_checkboxes " , variant = " compact " ) :
with FormRow ( elem_ classes= " checkboxes-row " , variant = " compact " ) :
restore_faces = gr . Checkbox ( label = ' Restore faces ' , value = False , visible = len ( shared . face_restorers ) > 1 , elem_id = " img2img_restore_faces " )
restore_faces = gr . Checkbox ( label = ' Restore faces ' , value = False , visible = len ( shared . face_restorers ) > 1 , elem_id = " img2img_restore_faces " )
tiling = gr . Checkbox ( label = ' Tiling ' , value = False , elem_id = " img2img_tiling " )
tiling = gr . Checkbox ( label = ' Tiling ' , value = False , elem_id = " img2img_tiling " )