Shit / ui /tabs /settings_tab.py
brentph504's picture
Upload 58 files
632bd54 verified
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)
# Settings
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, outputs=[bt_srcfiles, input_faces, target_faces, bt_destfiles])
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