Fixes for Forge & Gradio 4, #257

pull/259/head
AlUlkesh 2024-07-31 10:25:22 +02:00
parent 193e7c1f9d
commit 19b4b7fc8f
1 changed files with 34 additions and 11 deletions

View File

@ -58,6 +58,12 @@ try:
except ImportError: except ImportError:
from modules import infotext_utils as sendto from modules import infotext_utils as sendto
try:
from modules_forge import forge_version
forge = True
except ImportError:
forge = False
# Force reload wib_db, as it doesn't get reloaded otherwise, if an extension update is started from webui # Force reload wib_db, as it doesn't get reloaded otherwise, if an extension update is started from webui
importlib.reload(wib_db) importlib.reload(wib_db)
@ -91,6 +97,11 @@ js_dummy_return = None
log_file = os.path.join(scripts.basedir(), "image_browser.log") log_file = os.path.join(scripts.basedir(), "image_browser.log")
optimized_cache = None optimized_cache = None
show_progress_setting = True show_progress_setting = True
gradio_min = "3.23.0"
gradio3_new_gallery_syntax = "3.39.0"
gradio4 = "4.0.0"
gradio4_new_gallery_syntax = "4.16.0"
temp_temp = os.path.join(scripts.basedir(), "temp")
db_version = wib_db.check() db_version = wib_db.check()
@ -153,6 +164,15 @@ class ImageBrowserTab():
tabs_list = [ImageBrowserTab(tab) for tab in tabs_list] tabs_list = [ImageBrowserTab(tab) for tab in tabs_list]
# Set temp_dir from webui settings, so gradio uses it
if shared.opts.temp_dir != "":
tempfile.tempdir = shared.opts.temp_dir
if forge:
# Workaround for forge: Its ui_tempdir seems to not use the temp_dir configuration
# The following makes sure, that onchange triggers after setting temp_dir
shared.opts.temp_dir = temp_temp
shared.opts.temp_dir = tempfile.tempdir
debug_level_types = ["none", "warning log", "debug log", "javascript log", "capture logs to file"] debug_level_types = ["none", "warning log", "debug log", "javascript log", "capture logs to file"]
debug_levels_list = [] debug_levels_list = []
@ -999,10 +1019,6 @@ def get_image_page(img_path, page_index, filenames, keyword, sort_by, sort_order
if img_path == "": if img_path == "":
return [], page_index, [], "", "", "", 0, "", None, "", "[]", False, gr.update(visible=False) return [], page_index, [], "", "", "", 0, "", None, "", "[]", False, gr.update(visible=False)
# Set temp_dir from webui settings, so gradio uses it
if shared.opts.temp_dir != "":
tempfile.tempdir = shared.opts.temp_dir
img_path, _ = pure_path(img_path) img_path, _ = pure_path(img_path)
filenames = get_all_images(img_path, sort_by, sort_order, keyword, tab_base_tag_box, img_path_depth, ranking_filter, ranking_filter_min, ranking_filter_max, aes_filter_min, aes_filter_max, exif_keyword, negative_prompt_search, use_regex) filenames = get_all_images(img_path, sort_by, sort_order, keyword, tab_base_tag_box, img_path_depth, ranking_filter, ranking_filter_min, ranking_filter_max, aes_filter_min, aes_filter_max, exif_keyword, negative_prompt_search, use_regex)
page_index = int(page_index) page_index = int(page_index)
@ -1058,10 +1074,14 @@ def show_image_info(tab_base_tag_box, num, page_index, filenames, turn_page_swit
video_checkbox_panel = False video_checkbox_panel = False
video_checkbox = False video_checkbox = False
gradio_new = "4.0.0" if version.parse(gr.__version__) < version.parse(gradio4):
if version.parse(gr.__version__) < version.parse(gradio_new): # Version for Gradio 3
image_gallery = [image["name"] for image in image_gallery] image_gallery = [image["name"] for image in image_gallery]
elif version.parse(gr.__version__) >= version.parse(gradio4_new_gallery_syntax):
# Most up-to-date version
image_gallery = [image[0] for image in image_gallery]
else: else:
# Version for Gradio 4.0 - 4.15
image_gallery = [image_gallery_element.image.path for image_gallery_element in image_gallery.root] image_gallery = [image_gallery_element.image.path for image_gallery_element in image_gallery.root]
if len(filenames) == 0: if len(filenames) == 0:
@ -1324,10 +1344,14 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab):
with gr.Row(): with gr.Row():
video_element = gr.Video(visible=False, width=opts.image_browser_video_x, height=opts.image_browser_video_y) video_element = gr.Video(visible=False, width=opts.image_browser_video_x, height=opts.image_browser_video_y)
with gr.Row(): with gr.Row():
gradio_new = "3.39.0" if version.parse(gr.__version__) < version.parse(gradio3_new_gallery_syntax):
if version.parse(gr.__version__) < version.parse(gradio_new): # Version for Gradio 3
image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery").style(columns=opts.image_browser_page_columns, height=("max-content" if opts.image_browser_height_auto else None)) image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery").style(columns=opts.image_browser_page_columns, height=("max-content" if opts.image_browser_height_auto else None))
elif version.parse(gr.__version__) >= version.parse(gradio4_new_gallery_syntax):
# Most up-to-date version
image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery", interactive=False, columns=opts.image_browser_page_columns, height=("max-content" if opts.image_browser_height_auto else None))
else: else:
# Version for Gradio 4.0 - 4.15
image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery", columns=opts.image_browser_page_columns, height=("max-content" if opts.image_browser_height_auto else None)) image_gallery = gr.Gallery(show_label=False, elem_id=f"{tab.base_tag}_image_browser_gallery", columns=opts.image_browser_page_columns, height=("max-content" if opts.image_browser_height_auto else None))
if opts.image_browser_video_pos == "Below": if opts.image_browser_video_pos == "Below":
with gr.Row(): with gr.Row():
@ -1814,9 +1838,8 @@ def on_ui_tabs():
num_of_imgs_per_page = int(opts.image_browser_page_columns * opts.image_browser_page_rows) num_of_imgs_per_page = int(opts.image_browser_page_columns * opts.image_browser_page_rows)
loads_files_num = int(opts.image_browser_pages_perload * num_of_imgs_per_page) loads_files_num = int(opts.image_browser_pages_perload * num_of_imgs_per_page)
with gr.Blocks(analytics_enabled=False) as image_browser: with gr.Blocks(analytics_enabled=False) as image_browser:
gradio_needed = "3.23.0" if version.parse(gr.__version__) < version.parse(gradio_min):
if version.parse(gr.__version__) < version.parse(gradio_needed): gr.HTML(f'<p style="color: red; font-weight: bold;">You are running Gradio version {gr.__version__}. This version of the extension requires at least Gradio version {gradio_min}.</p><p style="color: red; font-weight: bold;">For more details see <a href="https://github.com/AlUlkesh/stable-diffusion-webui-images-browser/issues/116#issuecomment-1493259585" target="_blank">https://github.com/AlUlkesh/stable-diffusion-webui-images-browser/issues/116#issuecomment-1493259585</a></p>')
gr.HTML(f'<p style="color: red; font-weight: bold;">You are running Gradio version {gr.__version__}. This version of the extension requires at least Gradio version {gradio_needed}.</p><p style="color: red; font-weight: bold;">For more details see <a href="https://github.com/AlUlkesh/stable-diffusion-webui-images-browser/issues/116#issuecomment-1493259585" target="_blank">https://github.com/AlUlkesh/stable-diffusion-webui-images-browser/issues/116#issuecomment-1493259585</a></p>')
else: else:
with gr.Tabs(elem_id="image_browser_tabs_container") as tabs: with gr.Tabs(elem_id="image_browser_tabs_container") as tabs:
js_dummy_return = gr.Textbox(interactive=False, visible=False) js_dummy_return = gr.Textbox(interactive=False, visible=False)