Spaces:
Running on Zero
Running on Zero
Update app.py
Browse files
app.py
CHANGED
|
@@ -21,7 +21,7 @@ import tempfile, gc, os, shutil, json, time, re
|
|
| 21 |
from urllib.parse import urlparse
|
| 22 |
from typing import Optional
|
| 23 |
|
| 24 |
-
# =====
|
| 25 |
def fix_image_url(raw_url_or_path: str, host: Optional[str] = None) -> str:
|
| 26 |
if not raw_url_or_path:
|
| 27 |
return raw_url_or_path
|
|
@@ -170,7 +170,7 @@ def safe_generate_caption_direct(image, system_prompt, user_prompt, max_chars=12
|
|
| 170 |
gc.collect()
|
| 171 |
return f"β Error: {str(e)[:200]}"
|
| 172 |
|
| 173 |
-
# =====
|
| 174 |
@spaces.GPU(duration=60)
|
| 175 |
@torch.no_grad()
|
| 176 |
def generate_caption_1(image, system1, user1):
|
|
@@ -263,7 +263,7 @@ def export_joycaption_data(keywords, custom_instructions, avoid, question, cap1,
|
|
| 263 |
except Exception as e:
|
| 264 |
return f"β Export failed: {str(e)}", None
|
| 265 |
|
| 266 |
-
# =====
|
| 267 |
with gr.Blocks(title="JoyCaption Advanced Prompting System", theme=gr.themes.Soft()) as demo:
|
| 268 |
gr.HTML(TITLE)
|
| 269 |
insert_key, insert_que, insert_use, insert_not = create_template_functions()
|
|
@@ -278,7 +278,8 @@ with gr.Blocks(title="JoyCaption Advanced Prompting System", theme=gr.themes.Sof
|
|
| 278 |
ask_btn = gr.Button("Ask", variant="secondary")
|
| 279 |
qa_output = gr.Textbox(label="Answer", lines=3, show_copy_button=True)
|
| 280 |
|
| 281 |
-
|
|
|
|
| 282 |
gr.Markdown("**Insert Template**")
|
| 283 |
with gr.Row():
|
| 284 |
key_btn = gr.Button("key", size="sm")
|
|
@@ -286,20 +287,22 @@ with gr.Blocks(title="JoyCaption Advanced Prompting System", theme=gr.themes.Sof
|
|
| 286 |
use_btn = gr.Button("use", size="sm")
|
| 287 |
not_btn = gr.Button("not", size="sm")
|
| 288 |
|
| 289 |
-
|
| 290 |
with gr.Tab("π Casual"):
|
| 291 |
-
system1 = gr.Textbox(label="System",
|
| 292 |
-
user1 = gr.Textbox(label="User",
|
| 293 |
gen1_btn = gr.Button("Generate Casual", variant="primary")
|
| 294 |
out1 = gr.Textbox(lines=5, show_copy_button=True)
|
|
|
|
| 295 |
with gr.Tab("π€ Friendly"):
|
| 296 |
-
system2 = gr.Textbox(label="System",
|
| 297 |
-
user2 = gr.Textbox(label="User",
|
| 298 |
gen2_btn = gr.Button("Generate Friendly", variant="primary")
|
| 299 |
out2 = gr.Textbox(lines=5, show_copy_button=True)
|
|
|
|
| 300 |
with gr.Tab("π₯ Erotic"):
|
| 301 |
-
system3 = gr.Textbox(label="System",
|
| 302 |
-
user3 = gr.Textbox(label="User",
|
| 303 |
gen3_btn = gr.Button("Generate Erotic", variant="primary")
|
| 304 |
out3 = gr.Textbox(lines=5, show_copy_button=True)
|
| 305 |
|
|
@@ -308,13 +311,12 @@ with gr.Blocks(title="JoyCaption Advanced Prompting System", theme=gr.themes.Sof
|
|
| 308 |
export_out = gr.Textbox(visible=False)
|
| 309 |
export_file = gr.File(visible=False)
|
| 310 |
|
| 311 |
-
# ===
|
| 312 |
gen1_btn.click(generate_caption_1, [image_input, system1, user1], out1)
|
| 313 |
gen2_btn.click(generate_caption_2, [image_input, system2, user2], out2)
|
| 314 |
gen3_btn.click(generate_caption_3, [image_input, system3, user3], out3)
|
| 315 |
ask_btn.click(answer_question, [image_input, question_input], qa_output)
|
| 316 |
|
| 317 |
-
# Shared template bar
|
| 318 |
key_btn.click(lambda s1,u1,k: insert_key(s1,u1,k), [system1,user1,keywords_input], [system1,user1])
|
| 319 |
que_btn.click(lambda s1,u1,q: insert_que(s1,u1,q), [system1,user1,question_input], [system1,user1])
|
| 320 |
use_btn.click(lambda s1,u1,c: insert_use(s1,u1,c), [system1,user1,custom_instruction_input], [system1,user1])
|
|
|
|
| 21 |
from urllib.parse import urlparse
|
| 22 |
from typing import Optional
|
| 23 |
|
| 24 |
+
# ===== UTILITIES =====
|
| 25 |
def fix_image_url(raw_url_or_path: str, host: Optional[str] = None) -> str:
|
| 26 |
if not raw_url_or_path:
|
| 27 |
return raw_url_or_path
|
|
|
|
| 170 |
gc.collect()
|
| 171 |
return f"β Error: {str(e)[:200]}"
|
| 172 |
|
| 173 |
+
# ===== CAPTION FUNCTIONS =====
|
| 174 |
@spaces.GPU(duration=60)
|
| 175 |
@torch.no_grad()
|
| 176 |
def generate_caption_1(image, system1, user1):
|
|
|
|
| 263 |
except Exception as e:
|
| 264 |
return f"β Export failed: {str(e)}", None
|
| 265 |
|
| 266 |
+
# ===== UI =====
|
| 267 |
with gr.Blocks(title="JoyCaption Advanced Prompting System", theme=gr.themes.Soft()) as demo:
|
| 268 |
gr.HTML(TITLE)
|
| 269 |
insert_key, insert_que, insert_use, insert_not = create_template_functions()
|
|
|
|
| 278 |
ask_btn = gr.Button("Ask", variant="secondary")
|
| 279 |
qa_output = gr.Textbox(label="Answer", lines=3, show_copy_button=True)
|
| 280 |
|
| 281 |
+
with gr.Column(scale=1):
|
| 282 |
+
# Template buttons moved above tabs
|
| 283 |
gr.Markdown("**Insert Template**")
|
| 284 |
with gr.Row():
|
| 285 |
key_btn = gr.Button("key", size="sm")
|
|
|
|
| 287 |
use_btn = gr.Button("use", size="sm")
|
| 288 |
not_btn = gr.Button("not", size="sm")
|
| 289 |
|
| 290 |
+
# Tabs with flexible Textboxes
|
| 291 |
with gr.Tab("π Casual"):
|
| 292 |
+
system1 = gr.Textbox(label="System", show_label=True, placeholder="", value=DEFAULT_PROMPTS["casual"]["system"], lines=1, max_lines=5)
|
| 293 |
+
user1 = gr.Textbox(label="User", show_label=True, placeholder="", value=DEFAULT_PROMPTS["casual"]["user"], lines=1, max_lines=8)
|
| 294 |
gen1_btn = gr.Button("Generate Casual", variant="primary")
|
| 295 |
out1 = gr.Textbox(lines=5, show_copy_button=True)
|
| 296 |
+
|
| 297 |
with gr.Tab("π€ Friendly"):
|
| 298 |
+
system2 = gr.Textbox(label="System", show_label=True, placeholder="", value=DEFAULT_PROMPTS["friendly"]["system"], lines=1, max_lines=5)
|
| 299 |
+
user2 = gr.Textbox(label="User", show_label=True, placeholder="", value=DEFAULT_PROMPTS["friendly"]["user"], lines=1, max_lines=8)
|
| 300 |
gen2_btn = gr.Button("Generate Friendly", variant="primary")
|
| 301 |
out2 = gr.Textbox(lines=5, show_copy_button=True)
|
| 302 |
+
|
| 303 |
with gr.Tab("π₯ Erotic"):
|
| 304 |
+
system3 = gr.Textbox(label="System", show_label=True, placeholder="", value=DEFAULT_PROMPTS["erotic"]["system"], lines=1, max_lines=5)
|
| 305 |
+
user3 = gr.Textbox(label="User", show_label=True, placeholder="", value=DEFAULT_PROMPTS["erotic"]["user"], lines=1, max_lines=8)
|
| 306 |
gen3_btn = gr.Button("Generate Erotic", variant="primary")
|
| 307 |
out3 = gr.Textbox(lines=5, show_copy_button=True)
|
| 308 |
|
|
|
|
| 311 |
export_out = gr.Textbox(visible=False)
|
| 312 |
export_file = gr.File(visible=False)
|
| 313 |
|
| 314 |
+
# === EVENTS ===
|
| 315 |
gen1_btn.click(generate_caption_1, [image_input, system1, user1], out1)
|
| 316 |
gen2_btn.click(generate_caption_2, [image_input, system2, user2], out2)
|
| 317 |
gen3_btn.click(generate_caption_3, [image_input, system3, user3], out3)
|
| 318 |
ask_btn.click(answer_question, [image_input, question_input], qa_output)
|
| 319 |
|
|
|
|
| 320 |
key_btn.click(lambda s1,u1,k: insert_key(s1,u1,k), [system1,user1,keywords_input], [system1,user1])
|
| 321 |
que_btn.click(lambda s1,u1,q: insert_que(s1,u1,q), [system1,user1,question_input], [system1,user1])
|
| 322 |
use_btn.click(lambda s1,u1,c: insert_use(s1,u1,c), [system1,user1,custom_instruction_input], [system1,user1])
|