diff --git a/install.py b/install.py index df6059a..cd16ab2 100644 --- a/install.py +++ b/install.py @@ -1,8 +1,9 @@ import launch +import os if not launch.is_installed("send2trash"): launch.run_pip("install Send2Trash", "Send2Trash requirement for image browser") -# temporarily deactivated -#if not launch.is_installed("ImageReward"): - #launch.run_pip("install image-reward", "ImageReward requirement for image browser") +if not launch.is_installed("ImageReward"): + req_IR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "req_IR.txt") + launch.run_pip(f'install -r "{req_IR}" --no-deps image-reward', 'ImageReward requirement for image browser') diff --git a/javascript/image_browser.js b/javascript/image_browser.js index dbcb930..d5d03b5 100644 --- a/javascript/image_browser.js +++ b/javascript/image_browser.js @@ -358,7 +358,7 @@ async function image_browser_controlnet_send(toTabNum, tab_base_tag, image_index let clear try { - clear = inputContainer.querySelector("button[aria-label='Clear']") + clear = inputContainer.querySelector("button[aria-label='Remove Image']") if (clear) { clear.click() } @@ -372,7 +372,7 @@ async function image_browser_controlnet_send(toTabNum, tab_base_tag, image_index // 60 seconds in milliseconds const timeout = 60000 while (clear) { - clear = inputContainer.querySelector("button[aria-label='Clear']") + clear = inputContainer.querySelector("button[aria-label='Remove Image']") if (Date.now() - startTime > timeout) { throw new Error("image_browser_controlnet_send/clear: 60 seconds have passed") } diff --git a/req_IR.txt b/req_IR.txt new file mode 100644 index 0000000..81ef8ec --- /dev/null +++ b/req_IR.txt @@ -0,0 +1 @@ +fairscale diff --git a/scripts/image_browser.py b/scripts/image_browser.py index 2506b84..5ba9d4c 100644 --- a/scripts/image_browser.py +++ b/scripts/image_browser.py @@ -47,9 +47,7 @@ except ImportError: try: import ImageReward - # temporarily deactivated - # image_reward_installed = True - image_reward_installed = False + image_reward_installed = True except ImportError: print("Image Browser: ImageReward is not installed, cannot be used.") image_reward_installed = False @@ -1082,16 +1080,19 @@ def generate_image_reward(filenames, turn_page_switch, aes_filter_min, aes_filte for filename in filenames: saved_image_reward_score, saved_image_reward_prompt = wib_db.select_image_reward_score(cursor, filename) if saved_image_reward_score is None and saved_image_reward_prompt is not None: - with torch.no_grad(): - image_reward_score = image_reward_model.score(saved_image_reward_prompt, filename) - image_reward_score = f"{image_reward_score:.2f}" try: - logger.warning(f"Generated ImageRewardScore: {image_reward_score} for {filename}") - except UnicodeEncodeError: - pass - wib_db.update_image_reward_score(cursor, filename, image_reward_score) - if any(filename.endswith(ext) for ext in image_ext_list): - img_file_info = update_exif(filename, "ImageRewardScore", image_reward_score) + with torch.no_grad(): + image_reward_score = image_reward_model.score(saved_image_reward_prompt, filename) + image_reward_score = f"{image_reward_score:.2f}" + try: + logger.warning(f"Generated ImageRewardScore: {image_reward_score} for {filename}") + except UnicodeEncodeError: + pass + wib_db.update_image_reward_score(cursor, filename, image_reward_score) + if any(filename.endswith(ext) for ext in image_ext_list): + img_file_info = update_exif(filename, "ImageRewardScore", image_reward_score) + except UnidentifiedImageError as e: + logger.warning(f"UnidentifiedImageError: {e}") wib_db.transaction_end(conn, cursor) return -turn_page_switch, aes_filter_min, aes_filter_max @@ -1140,8 +1141,7 @@ def create_tab(tab: ImageBrowserTab, current_gr_tab: gr.Tab): with gr.Row(visible=others_dir): with gr.Column(scale=10): - suffix = "" if others_dir else tab.name - img_path = gr.Textbox(dir_name, label="Images directory"+suffix, placeholder="Input images directory", interactive=others_dir) + img_path = gr.Textbox(dir_name, label="Images directory", placeholder="Input images directory", interactive=others_dir) with gr.Column(scale=1): img_path_depth = gr.Number(value="0", label="Sub directory depth") with gr.Column(scale=1): @@ -1645,7 +1645,7 @@ def on_ui_tabs(): create_tab(tab, current_gr_tab) gr.Checkbox(value=opts.image_browser_preload, elem_id="image_browser_preload", visible=False) gr.Textbox(",".join( [tab.base_tag for tab in tabs_list] ), elem_id="image_browser_tab_base_tags_list", visible=False) - gr.Checkbox(value=opts.image_browser_swipe, elem_id=f"image_browser_swipe") + gr.Checkbox(value=opts.image_browser_swipe, elem_id=f"image_browser_swipe", visible=False) javascript_level_value, (javascript_level, javascript_level_text) = debug_levels(arg_level="javascript") level_value, (level, level_text) = debug_levels(arg_text=opts.image_browser_debug_level) @@ -1655,6 +1655,11 @@ def on_ui_tabs(): debug_level_option = "" gr.Textbox(value=debug_level_option, elem_id="image_browser_debug_level_option", visible=False) + # Webui's ui_loadsave uses gradio labels as keys, this does not work with image browser, as the same labels are used on different tabs + # For this reason the do_not_save_to_config attribute is added to each gradio element + for key, value in image_browser.blocks.items(): + setattr(value, "do_not_save_to_config", True) + return (image_browser, "Image Browser", "image_browser"), def move_setting(cur_setting_name, old_setting_name, option_info, section, added): diff --git a/style.css b/style.css index f93cd36..7f6d00c 100644 --- a/style.css +++ b/style.css @@ -32,7 +32,7 @@ button[id$='_image_browser_del_img_btn'] { /* Workaround until gradio version is updated to a version that fixes it see https://github.com/gradio-app/gradio/issues/1590 */ -.thumbnail-item > img { +#tab_image_browser .thumbnail-item > img { width: auto !important; height: auto !important; }