|
import shutil |
|
import os |
|
import gradio as gr |
|
import roop.globals |
|
import ui.globals |
|
from roop.utilities import clean_dir |
|
|
|
available_themes = ["Default", "gradio/glass", "gradio/monochrome", "gradio/seafoam", "gradio/soft", "gstaff/xkcd", "freddyaboulton/dracula_revamped", "ysharma/steampunk"] |
|
image_formats = ['jpg','png', 'webp'] |
|
video_formats = ['avi','mkv', 'mp4', 'webm'] |
|
video_codecs = ['libx264', 'libx265', 'libvpx-vp9', 'h264_nvenc', 'hevc_nvenc'] |
|
providerlist = None |
|
|
|
settings_controls = [] |
|
|
|
def settings_tab(): |
|
from roop.core import suggest_execution_providers |
|
global providerlist |
|
|
|
providerlist = suggest_execution_providers() |
|
with gr.Tab("⚙ Settings"): |
|
with gr.Row(): |
|
with gr.Column(): |
|
themes = gr.Dropdown(available_themes, label="Theme", info="Change needs complete restart", value=roop.globals.CFG.selected_theme) |
|
with gr.Column(): |
|
settings_controls.append(gr.Checkbox(label="Public Server", value=roop.globals.CFG.server_share, elem_id='server_share', interactive=True)) |
|
settings_controls.append(gr.Checkbox(label='Clear output folder before each run', value=roop.globals.CFG.clear_output, elem_id='clear_output', interactive=True)) |
|
output_template = gr.Textbox(label="Filename Output Template", info="(file extension is added automatically)", lines=1, placeholder='{file}_{time}', value=roop.globals.CFG.output_template) |
|
with gr.Column(): |
|
input_server_name = gr.Textbox(label="Server Name", lines=1, info="Leave blank to run locally", value=roop.globals.CFG.server_name) |
|
with gr.Column(): |
|
input_server_port = gr.Number(label="Server Port", precision=0, info="Leave at 0 to use default", value=roop.globals.CFG.server_port) |
|
with gr.Row(): |
|
with gr.Column(): |
|
settings_controls.append(gr.Dropdown(providerlist, label="Provider", value=roop.globals.CFG.provider, elem_id='provider', interactive=True)) |
|
chk_det_size = gr.Checkbox(label="Use default Det-Size", value=True, elem_id='default_det_size', interactive=True) |
|
settings_controls.append(gr.Checkbox(label="Force CPU for Face Analyser", value=roop.globals.CFG.force_cpu, elem_id='force_cpu', interactive=True)) |
|
max_threads = gr.Slider(1, 32, value=roop.globals.CFG.max_threads, label="Max. Number of Threads", info='default: 3', step=1.0, interactive=True) |
|
with gr.Column(): |
|
memory_limit = gr.Slider(0, 128, value=roop.globals.CFG.memory_limit, label="Max. Memory to use (Gb)", info='0 meaning no limit', step=1.0, interactive=True) |
|
settings_controls.append(gr.Dropdown(image_formats, label="Image Output Format", info='default: png', value=roop.globals.CFG.output_image_format, elem_id='output_image_format', interactive=True)) |
|
with gr.Column(): |
|
settings_controls.append(gr.Dropdown(video_codecs, label="Video Codec", info='default: libx264', value=roop.globals.CFG.output_video_codec, elem_id='output_video_codec', interactive=True)) |
|
settings_controls.append(gr.Dropdown(video_formats, label="Video Output Format", info='default: mp4', value=roop.globals.CFG.output_video_format, elem_id='output_video_format', interactive=True)) |
|
video_quality = gr.Slider(0, 100, value=roop.globals.CFG.video_quality, label="Video Quality (crf)", info='default: 14', step=1.0, interactive=True) |
|
with gr.Column(): |
|
with gr.Group(): |
|
settings_controls.append(gr.Checkbox(label='Use OS temp folder', value=roop.globals.CFG.use_os_temp_folder, elem_id='use_os_temp_folder', interactive=True)) |
|
settings_controls.append(gr.Checkbox(label='Show video in browser (re-encodes output)', value=roop.globals.CFG.output_show_video, elem_id='output_show_video', interactive=True)) |
|
button_apply_restart = gr.Button("Restart Server", variant='primary') |
|
button_clean_temp = gr.Button("Clean temp folder") |
|
button_apply_settings = gr.Button("Apply Settings") |
|
|
|
chk_det_size.select(fn=on_option_changed) |
|
|
|
|
|
for s in settings_controls: |
|
s.select(fn=on_settings_changed) |
|
max_threads.input(fn=lambda a,b='max_threads':on_settings_changed_misc(a,b), inputs=[max_threads]) |
|
memory_limit.input(fn=lambda a,b='memory_limit':on_settings_changed_misc(a,b), inputs=[memory_limit]) |
|
video_quality.input(fn=lambda a,b='video_quality':on_settings_changed_misc(a,b), inputs=[video_quality]) |
|
|
|
|
|
button_clean_temp.click(fn=clean_temp) |
|
button_apply_settings.click(apply_settings, inputs=[themes, input_server_name, input_server_port, output_template]) |
|
button_apply_restart.click(restart) |
|
|
|
|
|
def on_option_changed(evt: gr.SelectData): |
|
attribname = evt.target.elem_id |
|
if isinstance(evt.target, gr.Checkbox): |
|
if hasattr(roop.globals, attribname): |
|
setattr(roop.globals, attribname, evt.selected) |
|
return |
|
elif isinstance(evt.target, gr.Dropdown): |
|
if hasattr(roop.globals, attribname): |
|
setattr(roop.globals, attribname, evt.value) |
|
return |
|
raise gr.Error(f'Unhandled Setting for {evt.target}') |
|
|
|
|
|
def on_settings_changed_misc(new_val, attribname): |
|
if hasattr(roop.globals.CFG, attribname): |
|
setattr(roop.globals.CFG, attribname, new_val) |
|
else: |
|
print("Didn't find attrib!") |
|
|
|
|
|
|
|
def on_settings_changed(evt: gr.SelectData): |
|
attribname = evt.target.elem_id |
|
if isinstance(evt.target, gr.Checkbox): |
|
if hasattr(roop.globals.CFG, attribname): |
|
setattr(roop.globals.CFG, attribname, evt.selected) |
|
return |
|
elif isinstance(evt.target, gr.Dropdown): |
|
if hasattr(roop.globals.CFG, attribname): |
|
setattr(roop.globals.CFG, attribname, evt.value) |
|
return |
|
|
|
raise gr.Error(f'Unhandled Setting for {evt.target}') |
|
|
|
def clean_temp(): |
|
from ui.main import prepare_environment |
|
|
|
ui.globals.ui_input_thumbs.clear() |
|
roop.globals.INPUT_FACESETS.clear() |
|
roop.globals.TARGET_FACES.clear() |
|
ui.globals.ui_target_thumbs = [] |
|
if not roop.globals.CFG.use_os_temp_folder: |
|
clean_dir(os.environ["TEMP"]) |
|
prepare_environment() |
|
gr.Info('Temp Files removed') |
|
return None,None,None,None |
|
|
|
|
|
def apply_settings(themes, input_server_name, input_server_port, output_template): |
|
from ui.main import show_msg |
|
|
|
roop.globals.CFG.selected_theme = themes |
|
roop.globals.CFG.server_name = input_server_name |
|
roop.globals.CFG.server_port = input_server_port |
|
roop.globals.CFG.output_template = output_template |
|
roop.globals.CFG.save() |
|
show_msg('Settings saved') |
|
|
|
|
|
def restart(): |
|
ui.globals.ui_restart_server = True |
|
|