Skip to content

Commit

Permalink
Merge pull request #14947 from AUTOMATIC1111/open-button
Browse files Browse the repository at this point in the history
option "open image button" open the actual dir
  • Loading branch information
AUTOMATIC1111 committed Feb 17, 2024
1 parent 3345218 commit cb52279
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 17 deletions.
1 change: 1 addition & 0 deletions modules/shared_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@
"sd_webui_modal_lightbox_icon_opacity": OptionInfo(1, "Full page image viewer: control icon unfocused opacity", gr.Slider, {"minimum": 0.0, "maximum": 1, "step": 0.01}, onchange=shared.reload_gradio_theme).info('for mouse only').needs_reload_ui(),
"sd_webui_modal_lightbox_toolbar_opacity": OptionInfo(0.9, "Full page image viewer: tool bar opacity", gr.Slider, {"minimum": 0.0, "maximum": 1, "step": 0.01}, onchange=shared.reload_gradio_theme).info('for mouse only').needs_reload_ui(),
"gallery_height": OptionInfo("", "Gallery height", gr.Textbox).info("can be any valid CSS value, for example 768px or 20em").needs_reload_ui(),
"open_dir_button_choice": OptionInfo("Subdirectory", "What directory the [📂] button opens", gr.Radio, {"choices": ["Output Root", "Subdirectory", "Subdirectory (even temp dir)"]}),
}))

options_templates.update(options_section(('ui_alternatives', "UI alternatives", "ui"), {
Expand Down
52 changes: 35 additions & 17 deletions modules/ui_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import gradio as gr
import subprocess as sp

from modules import call_queue, shared
from modules import call_queue, shared, ui_tempdir
from modules.infotext_utils import image_from_url_text
import modules.images
from modules.ui_components import ToolButton
Expand Down Expand Up @@ -164,29 +164,43 @@ class OutputPanel:
def create_output_panel(tabname, outdir, toprow=None):
res = OutputPanel()

def open_folder(f):
def open_folder(f, images=None, index=None):
if shared.cmd_opts.hide_ui_dir_config:
return

try:
if 'Sub' in shared.opts.open_dir_button_choice:
image_dir = os.path.split(images[index]["name"].rsplit('?', 1)[0])[0]
if 'temp' in shared.opts.open_dir_button_choice or not ui_tempdir.is_gradio_temp_path(image_dir):
f = image_dir
except Exception:
pass

if not os.path.exists(f):
print(f'Folder "{f}" does not exist. After you create an image, the folder will be created.')
msg = f'Folder "{f}" does not exist. After you create an image, the folder will be created.'
print(msg)
gr.Info(msg)
return
elif not os.path.isdir(f):
print(f"""
msg = f"""
WARNING
An open_folder request was made with an argument that is not a folder.
This could be an error or a malicious attempt to run code on your computer.
Requested path was: {f}
""", file=sys.stderr)
"""
print(msg, file=sys.stderr)
gr.Warning(msg)
return

if not shared.cmd_opts.hide_ui_dir_config:
path = os.path.normpath(f)
if platform.system() == "Windows":
os.startfile(path)
elif platform.system() == "Darwin":
sp.Popen(["open", path])
elif "microsoft-standard-WSL2" in platform.uname().release:
sp.Popen(["wsl-open", path])
else:
sp.Popen(["xdg-open", path])
path = os.path.normpath(f)
if platform.system() == "Windows":
os.startfile(path)
elif platform.system() == "Darwin":
sp.Popen(["open", path])
elif "microsoft-standard-WSL2" in platform.uname().release:
sp.Popen(["wsl-open", path])
else:
sp.Popen(["xdg-open", path])

with gr.Column(elem_id=f"{tabname}_results"):
if toprow:
Expand All @@ -213,8 +227,12 @@ def open_folder(f):
res.button_upscale = ToolButton('✨', elem_id=f'{tabname}_upscale', tooltip="Create an upscaled version of the current image using hires fix settings.")

open_folder_button.click(
fn=lambda: open_folder(shared.opts.outdir_samples or outdir),
inputs=[],
fn=lambda images, index: open_folder(shared.opts.outdir_samples or outdir, images, index),
_js="(y, w) => [y, selected_gallery_index()]",
inputs=[
res.gallery,
open_folder_button, # placeholder for index
],
outputs=[],
)

Expand Down
15 changes: 15 additions & 0 deletions modules/ui_tempdir.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,18 @@ def cleanup_tmpdr():

filename = os.path.join(root, name)
os.remove(filename)


def is_gradio_temp_path(path):
"""
Check if the path is a temp dir used by gradio
"""
path = Path(path)
if shared.opts.temp_dir and path.is_relative_to(shared.opts.temp_dir):
return True
if gradio_temp_dir := os.environ.get("GRADIO_TEMP_DIR"):
if path.is_relative_to(gradio_temp_dir):
return True
if path.is_relative_to(Path(tempfile.gettempdir()) / "gradio"):
return True
return False

0 comments on commit cb52279

Please sign in to comment.