7b5639cff5
This is a massive WIP and should not be trusted or used right now. However, major milestones have been crossed. Both message boxes and file dialogs are now properly subprocessed and work on macOS. I think by extension, it may work on runpod environments as well, but that remains to be tested.
102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
import tempfile
|
|
import os
|
|
import gradio as gr
|
|
|
|
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',
|
|
)
|
|
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
|