mirror of
				https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
				synced 2025-11-04 03:55:05 +00:00 
			
		
		
		
	Merge pull request #14947 from AUTOMATIC1111/open-button
option "open image button" open the actual dir
This commit is contained in:
		
							parent
							
								
									3345218439
								
							
						
					
					
						commit
						cb52279c3e
					
				@ -284,6 +284,7 @@ options_templates.update(options_section(('ui_gallery', "Gallery", "ui"), {
 | 
			
		||||
    "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"), {
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import sys
 | 
			
		||||
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
 | 
			
		||||
@ -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:
 | 
			
		||||
@ -213,8 +227,12 @@ Requested path was: {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=[],
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user