teddyk251 commited on
Commit
0cc2540
·
1 Parent(s): d3fa3b2

Add application file

Browse files
Files changed (1) hide show
  1. app.py +85 -0
app.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+ import os
3
+
4
+ import gradio as gr
5
+ from datasets import load_dataset
6
+
7
+ REPO_ID = "teddyk251/self-imagine-sample" # change me
8
+ TOKEN = os.environ.get("HF_TOKEN")
9
+
10
+ ds = load_dataset(REPO_ID, split="train", token=TOKEN)
11
+
12
+ DATASETS = ["All"] + sorted(set(ds["dataset"]))
13
+ MODELS = ["All"] + sorted(set(ds["model"]))
14
+
15
+ def filter_rows(dataset_sel, model_sel, query):
16
+ rows = ds
17
+ if dataset_sel != "All":
18
+ rows = rows.filter(lambda ex: ex["dataset"] == dataset_sel)
19
+ if model_sel != "All":
20
+ rows = rows.filter(lambda ex: ex["model"] == model_sel)
21
+ if query:
22
+ q = query.lower()
23
+ rows = rows.filter(lambda ex: q in (ex["filename"] or "").lower())
24
+ return rows
25
+
26
+ def paginate(rows, page, page_size):
27
+ total = len(rows)
28
+ total_pages = max(1, math.ceil(total / max(1, page_size)))
29
+ page = max(1, min(page, total_pages))
30
+ start = (page - 1) * page_size
31
+ end = min(start + page_size, total)
32
+ sub = rows.select(range(start, end))
33
+ gallery_items = [(sub[i]["image"], f'{sub[i]["dataset"]} / {sub[i]["model"]} — {sub[i]["filename"]}')
34
+ for i in range(len(sub))]
35
+ return gallery_items, total, total_pages, page
36
+
37
+ def refresh(dataset_sel, model_sel, query, page, page_size):
38
+ rows = filter_rows(dataset_sel, model_sel, query)
39
+ items, total, total_pages, page = paginate(rows, page, page_size)
40
+ info = f"Page {page}/{total_pages} — {total} images"
41
+ return items, info, page
42
+
43
+ with gr.Blocks(title="Self‑Imagine — Sample Gallery") as demo:
44
+ gr.Markdown("## 🖼️ Self‑Imagine — Sample Gallery")
45
+
46
+ with gr.Row():
47
+ dataset_dd = gr.Dropdown(DATASETS, value="All", label="Dataset")
48
+ model_dd = gr.Dropdown(MODELS, value="All", label="Model")
49
+ query_tb = gr.Textbox(label="Search filename")
50
+ page_size = gr.Slider(6, 60, value=24, step=6, label="Thumbnails per page")
51
+
52
+ with gr.Row():
53
+ prev_btn = gr.Button("◀ Prev")
54
+ next_btn = gr.Button("Next ▶")
55
+ page_num = gr.Number(value=1, precision=0, interactive=False, label="Page")
56
+ page_info = gr.Markdown()
57
+
58
+ gallery = gr.Gallery(columns=[6], height=700, allow_preview=False, show_label=False)
59
+
60
+ # initial
61
+ items, info, page = refresh("All", "All", "", 1, 24)
62
+ gallery.value, page_info.value, page_num.value = items, info, page
63
+
64
+ def do_search(dataset_sel, model_sel, query, page_size):
65
+ return (*refresh(dataset_sel, model_sel, query, 1, page_size), 1)
66
+
67
+ dataset_dd.change(do_search, [dataset_dd, model_dd, query_tb, page_size], [gallery, page_info, page_num])
68
+ model_dd.change(do_search, [dataset_dd, model_dd, query_tb, page_size], [gallery, page_info, page_num])
69
+ query_tb.change(do_search, [dataset_dd, model_dd, query_tb, page_size], [gallery, page_info, page_num])
70
+ page_size.change(do_search, [dataset_dd, model_dd, query_tb, page_size], [gallery, page_info, page_num])
71
+
72
+ def on_prev(dataset_sel, model_sel, query, page, page_size):
73
+ return (*refresh(dataset_sel, model_sel, query, max(1, page-1), page_size), max(1, page-1))
74
+
75
+ def on_next(dataset_sel, model_sel, query, page, page_size):
76
+ rows = filter_rows(dataset_sel, model_sel, query)
77
+ total_pages = max(1, math.ceil(len(rows) / max(1, page_size)))
78
+ newp = min(total_pages, page+1)
79
+ return (*refresh(dataset_sel, model_sel, query, newp, page_size), newp)
80
+
81
+ prev_btn.click(on_prev, [dataset_dd, model_dd, query_tb, page_num, page_size], [gallery, page_info, page_num])
82
+ next_btn.click(on_next, [dataset_dd, model_dd, query_tb, page_num, page_size], [gallery, page_info, page_num])
83
+
84
+ if __name__ == "__main__":
85
+ demo.launch()