DiffusionModel / library /class_sample_images.py
thorfinn0330's picture
Upload folder using huggingface_hub
11c2c17 verified
import tempfile
import os
import gradio as gr
from easygui import msgbox
from library.custom_logging import setup_logging
# Set up logging
log = setup_logging()
folder_symbol = '\U0001f4c2' # πŸ“‚
refresh_symbol = '\U0001f504' # πŸ”„
save_style_symbol = '\U0001f4be' # πŸ’Ύ
document_symbol = '\U0001F4C4' # πŸ“„
###
### Gradio common sampler GUI section
###
def sample_gradio_config():
with gr.Accordion('Sample images config', open=False):
with gr.Row():
sample_every_n_steps = gr.Number(
label='Sample every n steps',
value=0,
precision=0,
interactive=True,
)
sample_every_n_epochs = gr.Number(
label='Sample every n epochs',
value=0,
precision=0,
interactive=True,
)
sample_sampler = gr.Dropdown(
label='Sample sampler',
choices=[
'ddim',
'pndm',
'lms',
'euler',
'euler_a',
'heun',
'dpm_2',
'dpm_2_a',
'dpmsolver',
'dpmsolver++',
'dpmsingle',
'k_lms',
'k_euler',
'k_euler_a',
'k_dpm_2',
'k_dpm_2_a',
],
value='euler_a',
interactive=True,
)
with gr.Row():
sample_prompts = gr.Textbox(
lines=5,
label='Sample prompts',
interactive=True,
placeholder='masterpiece, best quality, 1girl, in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28',
info='Enter one sample prompt per line to generate multiple samples per cycle. Optional specifiers include: --w (width), --h (height), --d (seed), --l (cfg scale), --s (sampler steps) and --n (negative prompt). To modify sample prompts during training, edit the prompt.txt file in the samples directory.'
)
return (
sample_every_n_steps,
sample_every_n_epochs,
sample_sampler,
sample_prompts,
)
def run_cmd_sample(
sample_every_n_steps,
sample_every_n_epochs,
sample_sampler,
sample_prompts,
output_dir,
):
output_dir = os.path.join(output_dir, 'sample')
if not os.path.exists(output_dir):
os.makedirs(output_dir)
run_cmd = ''
if sample_every_n_epochs == 0 and sample_every_n_steps == 0:
return run_cmd
# Create the prompt file and get its path
sample_prompts_path = os.path.join(output_dir, 'prompt.txt')
with open(sample_prompts_path, 'w') as f:
f.write(sample_prompts)
run_cmd += f' --sample_sampler={sample_sampler}'
run_cmd += f' --sample_prompts="{sample_prompts_path}"'
if not sample_every_n_epochs == 0:
run_cmd += f' --sample_every_n_epochs="{sample_every_n_epochs}"'
if not sample_every_n_steps == 0:
run_cmd += f' --sample_every_n_steps="{sample_every_n_steps}"'
return run_cmd
class SampleImages:
def __init__(
self,
):
with gr.Accordion('Sample images config', open=False):
with gr.Row():
self.sample_every_n_steps = gr.Number(
label='Sample every n steps',
value=0,
precision=0,
interactive=True,
)
self.sample_every_n_epochs = gr.Number(
label='Sample every n epochs',
value=0,
precision=0,
interactive=True,
)
self.sample_sampler = gr.Dropdown(
label='Sample sampler',
choices=[
'ddim',
'pndm',
'lms',
'euler',
'euler_a',
'heun',
'dpm_2',
'dpm_2_a',
'dpmsolver',
'dpmsolver++',
'dpmsingle',
'k_lms',
'k_euler',
'k_euler_a',
'k_dpm_2',
'k_dpm_2_a',
],
value='euler_a',
interactive=True,
)
with gr.Row():
self.sample_prompts = gr.Textbox(
lines=5,
label='Sample prompts',
interactive=True,
placeholder='masterpiece, best quality, 1girl, in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28',
info='Enter one sample prompt per line to generate multiple samples per cycle. Optional specifiers include: --w (width), --h (height), --d (seed), --l (cfg scale), --s (sampler steps) and --n (negative prompt). To modify sample prompts during training, edit the prompt.txt file in the samples directory.'
)