import gradio as gr from pathlib import Path from modules.interrogate import looks from shared import state, add_setting, performance_settings, resolution_settings, path_manager, settings, models def save_clicked(*args): ui_data = {} # Overwrite current settings for key, val in zip(state["setting_name"], args): settings.default_settings[key] = val # Remove empty keys if settings.default_settings[key] == None or settings.default_settings[key] == "": settings.default_settings.pop(key) continue # Massage some of the data. Settings that are lists should be split if key in [ "archive_folders", "style", "path_checkpoints", "path_loras" ]: settings.default_settings[key] = settings.default_settings[key].splitlines() # Move ui_* and path_* if key.startswith("ui_"): ui_data[key] = settings.default_settings.get(key) settings.default_settings.pop(key) if key.startswith("path_"): path_manager.paths[key] = settings.default_settings.get(key) settings.default_settings.pop(key) settings.set_settings_path(ui_data.get("ui_settings_name", None)) settings.save_settings() path_manager.set_settings_path(ui_data.get("ui_settings_name", None)) path_manager.save_paths() print(f"Saved new settings to {settings.settings_path}. Please restart.") gr.Info("Saved! Please restart RuinedFoocus.") def create_settings(): with gr.Blocks() as app_settings: with gr.Row(): with gr.Column(): gr.Markdown("# UI settings") image_number = gr.Number(label="Image Number", interactive=True, value=settings.default_settings.get("image_number", 1)) add_setting("image_number", image_number) image_number_max = gr.Number(label="Image Number Max", interactive=True, value=settings.default_settings.get("image_number_max", 50)) add_setting("image_number_max", image_number_max) seed_random = gr.Checkbox(label="Seed Random", interactive=True, value=settings.default_settings.get("seed_random", True)) add_setting("seed_random", seed_random) seed = gr.Number(label="Seed", interactive=True, value=settings.default_settings.get("seed", -1)) add_setting("seed", seed) style = gr.Code( label="Style", interactive=True, value="\n".join(settings.default_settings.get("style", [])), lines=5, max_lines=5 ) add_setting("style", style) prompt = gr.Textbox(label="Prompt", interactive=True, value=settings.default_settings.get("prompt", "")) add_setting("prompt", prompt) negative_prompt = gr.Textbox(label="Negative Prompt", interactive=True, value=settings.default_settings.get("negative_prompt", "")) add_setting("negative_prompt", negative_prompt) performance = gr.Dropdown( label="Performance", interactive=True, choices=list(performance_settings.performance_options.keys()), value=settings.default_settings.get("performance", "Speed"), ) add_setting("performance", performance) resolution = gr.Dropdown( label="Resolution", interactive=True, choices=list(resolution_settings.aspect_ratios.keys()), value=settings.default_settings.get("resolution", "1344x768 (16:9)"), ) add_setting("resolution", resolution) base_model = gr.Dropdown( label="Base Model", interactive=True, choices=models.names['checkpoints'], value=settings.default_settings.get("base_model", "sd_xl_base_1.0_0.9vae.safetensors"), ) add_setting("base_model", base_model) with gr.Row(): lora_1_model = gr.Dropdown( label="LoRA 1 Model", interactive=True, choices=["None"] + models.names['loras'], value=settings.default_settings.get("lora_1_model", "None"), ) lora_1_weight = gr.Number(label="Lora 1 Weight", value=settings.default_settings.get("lora_1_weight", 1.0), step=0.05) with gr.Row(): lora_2_model = gr.Dropdown( label="LoRA 2 Model", interactive=True, choices=["None"] + models.names['loras'], value=settings.default_settings.get("lora_2_model", "None"), ) lora_2_weight = gr.Number(label="Lora 2 Weight", value=settings.default_settings.get("lora_2_weight", 1.0), step=0.05) with gr.Row(): lora_3_model = gr.Dropdown( label="LoRA 3 Model", interactive=True, choices=["None"] + models.names['loras'], value=settings.default_settings.get("lora_3_model", "None"), ) lora_3_weight = gr.Number(label="Lora 3 Weight", value=settings.default_settings.get("lora_3_weight", 1.0), step=0.05) with gr.Row(): lora_4_model = gr.Dropdown( label="LoRA 4 Model", interactive=True, choices=["None"] + models.names['loras'], value=settings.default_settings.get("lora_4_model", "None"), ) lora_4_weight = gr.Number(label="Lora 4 Weight", value=settings.default_settings.get("lora_4_weight", 1.0), step=0.05) with gr.Row(): lora_5_model = gr.Dropdown( label="LoRA 5 Model", interactive=True, choices=["None"] + models.names['loras'], value=settings.default_settings.get("lora_5_model", "None"), ) lora_5_weight = gr.Number(label="Lora 5 Weight", value=settings.default_settings.get("lora_5_weight", 1.0), step=0.05) add_setting("lora_1_model", lora_1_model) add_setting("lora_2_model", lora_2_model) add_setting("lora_3_model", lora_3_model) add_setting("lora_4_model", lora_4_model) add_setting("lora_5_model", lora_5_model) add_setting("lora_1_weight", lora_1_weight) add_setting("lora_2_weight", lora_2_weight) add_setting("lora_3_weight", lora_3_weight) add_setting("lora_4_weight", lora_4_weight) add_setting("lora_5_weight", lora_5_weight) auto_negative_prompt = gr.Checkbox(label="Auto Negative Prompt", interactive=True, value=settings.default_settings.get("auto_negative_prompt", False)) add_setting("auto_negative_prompt", auto_negative_prompt) with gr.Column(): gr.Markdown("# One Button Prompt") OBP_preset = gr.Textbox(label="OBP Preset", value=settings.default_settings.get("OBP_preset", "Standard")) add_setting("OBP_preset", OBP_preset) hint_chance = gr.Number(label="Hint Chance", value=settings.default_settings.get("hint_chance", 25)) add_setting("hint_chance", hint_chance) gr.Markdown("# Image Browser") images_per_page = gr.Number(label="Images per page", value=settings.default_settings.get("images_per_page", 100), minimum=1, maximum=1000, step=1) add_setting("images_per_page", images_per_page) archive_folders = gr.Code( label="Archive folders", interactive=True, value="\n".join(settings.default_settings.get("archive_folders", [])), lines=5, max_lines=5 ) add_setting("archive_folders", archive_folders) gr.Markdown("# Paths") path_checkpoints = gr.Code( label="Checkpoint folders", interactive=True, value="\n".join(path_manager.paths.get("path_checkpoints", [])), lines=5, max_lines=5 ) add_setting("path_checkpoints", path_checkpoints) path_loras = gr.Code( label="LoRA folders", interactive=True, value="\n".join(path_manager.paths.get("path_loras", [])), lines=5, max_lines=5 ) add_setting("path_loras", path_loras) path_inbox = gr.Textbox(label="Inbox folder", interactive=True, placeholder="", value=settings.default_settings.get("path_inbox", "../models/inbox/")) add_setting("path_inbox", path_inbox) path_outputs = gr.Textbox(label="Output folder", interactive=True, placeholder="", value=settings.default_settings.get("path_outputs", "../outputs/")) add_setting("path_outputs", path_outputs) with gr.Column(): gr.Markdown("# Other") interrogator = gr.Dropdown(label="Default interrogator", interactive=True, choices=list(looks.keys()), value=settings.default_settings.get("interrogator", None),) add_setting("interrogator", interrogator) save_metadata = gr.Checkbox(label="Save Metadata", value=settings.default_settings.get("save_metadata", True)) add_setting("save_metadata", save_metadata) theme = gr.Textbox(label="Theme", interactive=True, value=settings.default_settings.get("theme", None)) add_setting("theme", theme) clip_g = gr.Dropdown(label="clip_g", interactive=True, choices=[None]+path_manager.get_folder_list("clip"), value=settings.default_settings.get("clip_g", None),) add_setting("clip_g", clip_g) clip_t = gr.Dropdown(label="clip_t", interactive=True, choices=[None]+path_manager.get_folder_list("clip"), value=settings.default_settings.get("clip_t", None),) add_setting("clip_t", clip_t) clip_t5 = gr.Dropdown(label="clip_t5", interactive=True, choices=[None]+path_manager.get_folder_list("clip"), value=settings.default_settings.get("clip_t5", None),) add_setting("clip_t5", clip_t5) clip_umt5 = gr.Dropdown(label="clip_umt5", interactive=True, choices=[None]+path_manager.get_folder_list("clip"), value=settings.default_settings.get("clip_umt5", None),) add_setting("clip_umt5", clip_umt5) clip_llava = gr.Dropdown(label="clip_llava", interactive=True, choices=[None]+path_manager.get_folder_list("clip"), value=settings.default_settings.get("clip_llava", None),) add_setting("clip_llava", clip_llava) clip_vision = gr.Dropdown(label="clip_vision", interactive=True, choices=[None]+path_manager.get_folder_list("clip_vision"), value=settings.default_settings.get("clip_vision", None),) add_setting("clip_vision", clip_vision) lumina2_shift = gr.Textbox(label="Lumina2 shift", interactive=True, placeholder=3.0, value=settings.default_settings.get("lumina2_shift", None)) add_setting("lumina2_shift", lumina2_shift) vae_flux = gr.Dropdown(label="Flux VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_flux", None),) add_setting("vae_flux", vae_flux) vae_hunyuan_video = gr.Dropdown(label="Hunyuan Video VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_hunyuan_video", None),) add_setting("vae_hunyuan_video", vae_hunyuan_video) vae_lumina2 = gr.Dropdown(label="Lumina2 VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_lumina2", None),) add_setting("vae_lumina2", vae_lumina2) vae_sd3 = gr.Dropdown(label="SD3 VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_sd3", None),) add_setting("vae_sd3", vae_sd3) vae_sdxl = gr.Dropdown(label="SDXL/Pony/Illustrious VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_sdxl", None),) add_setting("vae_sdxl", vae_sdxl) vae_wan = gr.Dropdown(label="WAN 2.1 VAE", interactive=True, choices=[None]+path_manager.get_folder_list("vae"), value=settings.default_settings.get("vae_wan", None),) add_setting("vae_wan", vae_wan) llama_localfile = gr.Dropdown(label="Local Llama file", interactive=True, choices=[None]+path_manager.get_folder_list("llm"), value=settings.default_settings.get("llama_localfile", None),) add_setting("llama_localfile", llama_localfile) with gr.Row(), gr.Group(): ui_settings_name = gr.Text( label="Settings name", interactive=True, placeholder="Optional", value=settings.name, ) add_setting("ui_settings_name", ui_settings_name) save_btn = gr.Button("Save Settings") # Deal with this later # output = gr.Textbox(label="Status") # download_file = gr.File(label="Download File") # with gr.Row(): # upload = gr.File(label="Load settings file (optional)", file_count="single", type="filepath") # download_btn = gr.Button("Download current settings") save_btn.click( fn=save_clicked, inputs=state["setting_obj"], outputs=[ ] ) return app_settings