import gradio as gr from shared import path_manager from modules.imagebrowser import ImageBrowser browser = ImageBrowser() def create_image_gallery(): with gr.Blocks(theme=gr.themes.Soft()) as app_image_browser: with gr.Row(): # Left side for gallery with gr.Column(scale=2): gallery = gr.Gallery( label="Images", show_label=False, columns=[4], height="600px", object_fit="contain", value=browser.load_images(1)[0], ) ib_page = gr.Slider( label="Page", value=1, step=1, minimum=1, maximum=browser.num_images_pages()[1], ) ib_range = gr.Markdown() # Right side for metadata and search with gr.Column(scale=1): with gr.Row(): update_btn = gr.Button("Update DB", scale=5) gr.HTML(value="""🛝""") metadata_output = gr.Textbox( label="Image Metadata", interactive=False, lines=15 ) search_input = gr.Textbox( label="Search Metadata", placeholder="Enter search term" ) search_btn = gr.Button("Search") status_output = gr.Markdown() # Event handlers update_btn.click( browser.update_images, inputs=[], outputs=[gallery, ib_page, status_output] ) ib_page.change( browser.load_images, inputs=[ib_page], outputs=[gallery, ib_range] ) gallery.select(browser.get_image_metadata, None, metadata_output) search_btn.click( browser.search_metadata, inputs=[search_input], outputs=[gallery, ib_page, status_output], ) search_input.submit( browser.search_metadata, inputs=[search_input], outputs=[gallery, ib_page, status_output], ) return app_image_browser # Optional: If you want to launch just this gallery def launch_image_gallery(): app_image_browser = create_image_gallery() app_image_browser.launch()