File size: 2,450 Bytes
2de3774
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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="""<a href="gradio_api/file/html/slideshow.html" style="color: gray; text-decoration: none" target="_blank">🛝</a>""")
                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()