|
import gradio as gr |
|
from easygui import diropenbox, msgbox |
|
from .common_gui import get_folder_path |
|
import shutil |
|
import os |
|
|
|
from library.custom_logging import setup_logging |
|
|
|
|
|
log = setup_logging() |
|
|
|
|
|
def copy_info_to_Folders_tab(training_folder): |
|
img_folder = os.path.join(training_folder, 'img') |
|
if os.path.exists(os.path.join(training_folder, 'reg')): |
|
reg_folder = os.path.join(training_folder, 'reg') |
|
else: |
|
reg_folder = '' |
|
model_folder = os.path.join(training_folder, 'model') |
|
log_folder = os.path.join(training_folder, 'log') |
|
|
|
return img_folder, reg_folder, model_folder, log_folder |
|
|
|
|
|
def dreambooth_folder_preparation( |
|
util_training_images_dir_input, |
|
util_training_images_repeat_input, |
|
util_instance_prompt_input, |
|
util_regularization_images_dir_input, |
|
util_regularization_images_repeat_input, |
|
util_class_prompt_input, |
|
util_training_dir_output, |
|
): |
|
|
|
|
|
if not len(util_training_dir_output): |
|
log.info( |
|
"Destination training directory is missing... can't perform the required task..." |
|
) |
|
return |
|
else: |
|
|
|
os.makedirs(util_training_dir_output, exist_ok=True) |
|
|
|
|
|
if util_instance_prompt_input == '': |
|
msgbox('Instance prompt missing...') |
|
return |
|
|
|
|
|
if util_class_prompt_input == '': |
|
msgbox('Class prompt missing...') |
|
return |
|
|
|
|
|
if util_training_images_dir_input == '': |
|
log.info( |
|
"Training images directory is missing... can't perform the required task..." |
|
) |
|
return |
|
else: |
|
training_dir = os.path.join( |
|
util_training_dir_output, |
|
f'img/{int(util_training_images_repeat_input)}_{util_instance_prompt_input} {util_class_prompt_input}', |
|
) |
|
|
|
|
|
if os.path.exists(training_dir): |
|
log.info(f'Removing existing directory {training_dir}...') |
|
shutil.rmtree(training_dir) |
|
|
|
|
|
log.info(f'Copy {util_training_images_dir_input} to {training_dir}...') |
|
shutil.copytree(util_training_images_dir_input, training_dir) |
|
|
|
if not util_regularization_images_dir_input == '': |
|
|
|
if not util_regularization_images_repeat_input > 0: |
|
log.info('Repeats is missing... not copying regularisation images...') |
|
else: |
|
regularization_dir = os.path.join( |
|
util_training_dir_output, |
|
f'reg/{int(util_regularization_images_repeat_input)}_{util_class_prompt_input}', |
|
) |
|
|
|
|
|
if os.path.exists(regularization_dir): |
|
log.info(f'Removing existing directory {regularization_dir}...') |
|
shutil.rmtree(regularization_dir) |
|
|
|
|
|
log.info( |
|
f'Copy {util_regularization_images_dir_input} to {regularization_dir}...' |
|
) |
|
shutil.copytree( |
|
util_regularization_images_dir_input, regularization_dir |
|
) |
|
else: |
|
log.info( |
|
'Regularization images directory is missing... not copying regularisation images...' |
|
) |
|
|
|
|
|
|
|
if not os.path.exists(os.path.join(util_training_dir_output, 'log')): |
|
os.makedirs(os.path.join(util_training_dir_output, 'log')) |
|
|
|
|
|
if not os.path.exists(os.path.join(util_training_dir_output, 'model')): |
|
os.makedirs(os.path.join(util_training_dir_output, 'model')) |
|
|
|
log.info( |
|
f'Done creating kohya_ss training folder structure at {util_training_dir_output}...' |
|
) |
|
|
|
|
|
def gradio_dreambooth_folder_creation_tab( |
|
train_data_dir_input=gr.Textbox(), |
|
reg_data_dir_input=gr.Textbox(), |
|
output_dir_input=gr.Textbox(), |
|
logging_dir_input=gr.Textbox(), |
|
headless=False, |
|
): |
|
with gr.Tab('Dreambooth/LoRA Folder preparation'): |
|
gr.Markdown( |
|
'This utility will create the necessary folder structure for the training images and optional regularization images needed for the kohys_ss Dreambooth/LoRA method to function correctly.' |
|
) |
|
with gr.Row(): |
|
util_instance_prompt_input = gr.Textbox( |
|
label='Instance prompt', |
|
placeholder='Eg: asd', |
|
interactive=True, |
|
) |
|
util_class_prompt_input = gr.Textbox( |
|
label='Class prompt', |
|
placeholder='Eg: person', |
|
interactive=True, |
|
) |
|
with gr.Row(): |
|
util_training_images_dir_input = gr.Textbox( |
|
label='Training images', |
|
placeholder='Directory containing the training images', |
|
interactive=True, |
|
) |
|
button_util_training_images_dir_input = gr.Button( |
|
'π', elem_id='open_folder_small', visible=(not headless) |
|
) |
|
button_util_training_images_dir_input.click( |
|
get_folder_path, |
|
outputs=util_training_images_dir_input, |
|
show_progress=False, |
|
) |
|
util_training_images_repeat_input = gr.Number( |
|
label='Repeats', |
|
value=40, |
|
interactive=True, |
|
elem_id='number_input', |
|
) |
|
with gr.Row(): |
|
util_regularization_images_dir_input = gr.Textbox( |
|
label='Regularisation images', |
|
placeholder='(Optional) Directory containing the regularisation images', |
|
interactive=True, |
|
) |
|
button_util_regularization_images_dir_input = gr.Button( |
|
'π', elem_id='open_folder_small', visible=(not headless) |
|
) |
|
button_util_regularization_images_dir_input.click( |
|
get_folder_path, |
|
outputs=util_regularization_images_dir_input, |
|
show_progress=False, |
|
) |
|
util_regularization_images_repeat_input = gr.Number( |
|
label='Repeats', |
|
value=1, |
|
interactive=True, |
|
elem_id='number_input', |
|
) |
|
with gr.Row(): |
|
util_training_dir_output = gr.Textbox( |
|
label='Destination training directory', |
|
placeholder='Directory where formatted training and regularisation folders will be placed', |
|
interactive=True, |
|
) |
|
button_util_training_dir_output = gr.Button( |
|
'π', elem_id='open_folder_small', visible=(not headless) |
|
) |
|
button_util_training_dir_output.click( |
|
get_folder_path, outputs=util_training_dir_output |
|
) |
|
button_prepare_training_data = gr.Button('Prepare training data') |
|
button_prepare_training_data.click( |
|
dreambooth_folder_preparation, |
|
inputs=[ |
|
util_training_images_dir_input, |
|
util_training_images_repeat_input, |
|
util_instance_prompt_input, |
|
util_regularization_images_dir_input, |
|
util_regularization_images_repeat_input, |
|
util_class_prompt_input, |
|
util_training_dir_output, |
|
], |
|
show_progress=False, |
|
) |
|
button_copy_info_to_Folders_tab = gr.Button('Copy info to Folders Tab') |
|
button_copy_info_to_Folders_tab.click( |
|
copy_info_to_Folders_tab, |
|
inputs=[util_training_dir_output], |
|
outputs=[ |
|
train_data_dir_input, |
|
reg_data_dir_input, |
|
output_dir_input, |
|
logging_dir_input, |
|
], |
|
show_progress=False, |
|
) |
|
|