Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -930,66 +930,51 @@ with gr.Blocks(css=BASE_CSS, title="ForgeCaptions") as demo:
|
|
| 930 |
|
| 931 |
# ---- Shape Aliases block (placed WITH other settings, before uploads)
|
| 932 |
# ---- Shape Aliases block (placed WITH other settings, before uploads)
|
| 933 |
-
|
| 934 |
-
|
| 935 |
-
|
| 936 |
-
|
| 937 |
-
|
| 938 |
-
|
| 939 |
-
|
| 940 |
-
|
| 941 |
-
|
| 942 |
-
|
| 943 |
-
|
| 944 |
-
|
| 945 |
-
|
| 946 |
-
|
| 947 |
-
|
| 948 |
-
)
|
| 949 |
-
|
| 950 |
-
|
| 951 |
-
|
| 952 |
-
|
| 953 |
-
|
| 954 |
-
|
| 955 |
-
|
| 956 |
-
|
| 957 |
-
|
| 958 |
-
with gr.Row():
|
| 959 |
-
add_row_btn = gr.Button("+ Add row", variant="secondary")
|
| 960 |
-
clear_btn = gr.Button("Clear", variant="secondary")
|
| 961 |
-
save_btn = gr.Button("💾 Save", variant="primary")
|
| 962 |
-
|
| 963 |
-
# status line for saves
|
| 964 |
-
save_status = gr.Markdown("")
|
| 965 |
-
|
| 966 |
-
def _add_row(cur):
|
| 967 |
-
cur = (cur or []) + [["", ""]]
|
| 968 |
-
return gr.update(value=cur, row_count=(max(1, len(cur)), "dynamic"))
|
| 969 |
-
|
| 970 |
-
def _clear_rows():
|
| 971 |
-
return gr.update(value=[["", ""]], row_count=(1, "dynamic"))
|
| 972 |
-
|
| 973 |
-
add_row_btn.click(_add_row, inputs=[alias_table], outputs=[alias_table])
|
| 974 |
-
clear_btn.click(_clear_rows, outputs=[alias_table])
|
| 975 |
-
|
| 976 |
-
# Persist the "persist" toggle itself
|
| 977 |
-
def _save_alias_persist_flag(v):
|
| 978 |
-
cfg = load_settings()
|
| 979 |
-
cfg["shape_aliases_persist"] = bool(v)
|
| 980 |
-
save_settings(cfg)
|
| 981 |
-
return gr.update()
|
| 982 |
-
|
| 983 |
-
persist_aliases.change(_save_alias_persist_flag, inputs=[persist_aliases], outputs=[])
|
| 984 |
-
|
| 985 |
-
# Save/apply rows (persists to disk only if persist_aliases is checked)
|
| 986 |
-
save_btn.click(
|
| 987 |
-
save_shape_alias_rows,
|
| 988 |
-
inputs=[enable_aliases, alias_table, persist_aliases],
|
| 989 |
-
outputs=[save_status, alias_table]
|
| 990 |
-
)
|
| 991 |
|
| 992 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 993 |
def _save_alias_persist_flag(v):
|
| 994 |
cfg = load_settings()
|
| 995 |
cfg["shape_aliases_persist"] = bool(v)
|
|
@@ -997,14 +982,14 @@ with gr.Blocks(css=BASE_CSS, title="ForgeCaptions") as demo:
|
|
| 997 |
return gr.update()
|
| 998 |
|
| 999 |
persist_aliases.change(_save_alias_persist_flag, inputs=[persist_aliases], outputs=[])
|
| 1000 |
-
|
| 1001 |
-
|
| 1002 |
-
|
| 1003 |
-
|
| 1004 |
-
|
| 1005 |
-
|
| 1006 |
-
|
| 1007 |
-
|
| 1008 |
|
| 1009 |
# ---- Tabs: Single & Batch
|
| 1010 |
with gr.Tabs():
|
|
|
|
| 930 |
|
| 931 |
# ---- Shape Aliases block (placed WITH other settings, before uploads)
|
| 932 |
# ---- Shape Aliases block (placed WITH other settings, before uploads)
|
| 933 |
+
# ---- Shape Aliases block (placed WITH other settings, before uploads)
|
| 934 |
+
with gr.Accordion("Shape Aliases", open=False):
|
| 935 |
+
gr.Markdown(
|
| 936 |
+
"### 🔷 Shape Aliases\n"
|
| 937 |
+
"Replace literal **shape tokens** in captions with a preferred **name**.\n\n"
|
| 938 |
+
"**How to use:**\n"
|
| 939 |
+
"- Left column = a single token **or** comma/pipe-separated synonyms, e.g. `diamond, rhombus | lozenge`\n"
|
| 940 |
+
"- Right column = replacement name, e.g. `starkey-emblem`\n"
|
| 941 |
+
"Matches are case-insensitive, whole-word, also catches simple plurals (`box`→`boxes`, `lady`→`ladies`), "
|
| 942 |
+
"and `*-shaped` or `* shaped` variants."
|
| 943 |
+
)
|
| 944 |
+
init_rows, init_enabled = get_shape_alias_rows_ui_defaults()
|
| 945 |
+
enable_aliases = gr.Checkbox(label="Enable shape alias replacements", value=init_enabled)
|
| 946 |
+
persist_aliases = gr.Checkbox(
|
| 947 |
+
label="Save aliases across sessions",
|
| 948 |
+
value=load_settings().get("shape_aliases_persist", True)
|
| 949 |
+
)
|
| 950 |
+
alias_table = gr.Dataframe(
|
| 951 |
+
headers=["shape (token or synonyms)", "name to insert"],
|
| 952 |
+
value=init_rows,
|
| 953 |
+
row_count=(max(1, len(init_rows)), "dynamic"),
|
| 954 |
+
datatype=["str","str"],
|
| 955 |
+
type="array",
|
| 956 |
+
interactive=True
|
| 957 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 958 |
|
| 959 |
+
with gr.Row():
|
| 960 |
+
add_row_btn = gr.Button("+ Add row", variant="secondary")
|
| 961 |
+
clear_btn = gr.Button("Clear", variant="secondary")
|
| 962 |
+
save_btn = gr.Button("💾 Save", variant="primary")
|
| 963 |
+
|
| 964 |
+
# status line for saves
|
| 965 |
+
save_status = gr.Markdown("")
|
| 966 |
+
|
| 967 |
+
def _add_row(cur):
|
| 968 |
+
cur = (cur or []) + [["", ""]]
|
| 969 |
+
return gr.update(value=cur, row_count=(max(1, len(cur)), "dynamic"))
|
| 970 |
+
|
| 971 |
+
def _clear_rows():
|
| 972 |
+
return gr.update(value=[["", ""]], row_count=(1, "dynamic"))
|
| 973 |
+
|
| 974 |
+
add_row_btn.click(_add_row, inputs=[alias_table], outputs=[alias_table])
|
| 975 |
+
clear_btn.click(_clear_rows, outputs=[alias_table])
|
| 976 |
+
|
| 977 |
+
# Persist the "persist" toggle itself
|
| 978 |
def _save_alias_persist_flag(v):
|
| 979 |
cfg = load_settings()
|
| 980 |
cfg["shape_aliases_persist"] = bool(v)
|
|
|
|
| 982 |
return gr.update()
|
| 983 |
|
| 984 |
persist_aliases.change(_save_alias_persist_flag, inputs=[persist_aliases], outputs=[])
|
| 985 |
+
|
| 986 |
+
# Save/apply rows (persists to disk only if persist_aliases is checked)
|
| 987 |
+
save_btn.click(
|
| 988 |
+
save_shape_alias_rows,
|
| 989 |
+
inputs=[enable_aliases, alias_table, persist_aliases],
|
| 990 |
+
outputs=[save_status, alias_table]
|
| 991 |
+
)
|
| 992 |
+
|
| 993 |
|
| 994 |
# ---- Tabs: Single & Batch
|
| 995 |
with gr.Tabs():
|