Spaces:
Sleeping
Sleeping
Add application file
Browse files
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()
|