Update app.py
Browse files
app.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
| 1 |
import random
|
| 2 |
import gradio as gr
|
| 3 |
-
from typing import Optional, Dict, Any
|
|
|
|
|
|
|
| 4 |
|
| 5 |
class PromptGenerator:
|
| 6 |
def __init__(self):
|
|
@@ -114,25 +116,65 @@ class PromptGenerator:
|
|
| 114 |
f"Pose: {pose}. Scene: {setting}. Atmosphere: {atmosphere}. "
|
| 115 |
f"{self.TECHNICAL_DETAILS}"
|
| 116 |
)
|
| 117 |
-
|
|
|
|
| 118 |
|
| 119 |
-
def generate_five_prompts(self):
|
| 120 |
return [self.generate_prompt() for _ in range(5)]
|
| 121 |
|
|
|
|
| 122 |
|
| 123 |
-
def
|
|
|
|
| 124 |
generator = PromptGenerator()
|
| 125 |
-
|
| 126 |
-
return "\n\n".join(generator.generate_five_prompts())
|
| 127 |
|
| 128 |
|
| 129 |
-
|
|
|
|
|
|
|
| 130 |
|
| 131 |
with gr.Blocks() as demo:
|
| 132 |
gr.Markdown("# Hyperrealistic Full-Body Prompt Generator")
|
| 133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
button = gr.Button("Generate 5 Prompts")
|
| 135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
|
| 137 |
if __name__ == "__main__":
|
| 138 |
demo.launch()
|
|
|
|
| 1 |
import random
|
| 2 |
import gradio as gr
|
| 3 |
+
from typing import Optional, Dict, Any, List
|
| 4 |
+
|
| 5 |
+
# --- Clase PromptGenerator (Sin cambios relevantes a la lógica, solo corrección del return) ---
|
| 6 |
|
| 7 |
class PromptGenerator:
|
| 8 |
def __init__(self):
|
|
|
|
| 116 |
f"Pose: {pose}. Scene: {setting}. Atmosphere: {atmosphere}. "
|
| 117 |
f"{self.TECHNICAL_DETAILS}"
|
| 118 |
)
|
| 119 |
+
# CORRECCIÓN: Devolver el prompt real, no solo "``````"
|
| 120 |
+
return prompt
|
| 121 |
|
| 122 |
+
def generate_five_prompts(self) -> List[str]:
|
| 123 |
return [self.generate_prompt() for _ in range(5)]
|
| 124 |
|
| 125 |
+
# --- Función de la interfaz de usuario de Gradio ---
|
| 126 |
|
| 127 |
+
def generate_prompts_list():
|
| 128 |
+
"""Genera y devuelve la lista de 5 prompts."""
|
| 129 |
generator = PromptGenerator()
|
| 130 |
+
return generator.generate_five_prompts()
|
|
|
|
| 131 |
|
| 132 |
|
| 133 |
+
# --- Definición de la interfaz de usuario con Acordeones ---
|
| 134 |
+
|
| 135 |
+
PROMPT_COUNT = 5 # Cantidad de prompts a generar
|
| 136 |
|
| 137 |
with gr.Blocks() as demo:
|
| 138 |
gr.Markdown("# Hyperrealistic Full-Body Prompt Generator")
|
| 139 |
+
|
| 140 |
+
# Crea una lista de Textbox para mostrar cada prompt individualmente
|
| 141 |
+
prompt_outputs = [gr.Textbox(label=f"Prompt {i+1}", lines=5, interactive=False, show_copy_button=False)
|
| 142 |
+
for i in range(PROMPT_COUNT)]
|
| 143 |
+
|
| 144 |
button = gr.Button("Generate 5 Prompts")
|
| 145 |
+
|
| 146 |
+
# Define el layout con acordeones y botones de copia
|
| 147 |
+
with gr.Row():
|
| 148 |
+
with gr.Column():
|
| 149 |
+
gr.Markdown("## Generated Prompts")
|
| 150 |
+
|
| 151 |
+
# Itera para crear 5 acordeones, uno para cada prompt
|
| 152 |
+
for i in range(PROMPT_COUNT):
|
| 153 |
+
# Usamos el título del acordeón para dar un resumen del prompt (opcional, podrías usar solo "Prompt N")
|
| 154 |
+
with gr.Accordion(f"Prompt #{i+1} (Click para ver y copiar)", open=False):
|
| 155 |
+
# El Textbox para el prompt, que es uno de los elementos en prompt_outputs
|
| 156 |
+
prompt_outputs[i].render()
|
| 157 |
+
|
| 158 |
+
# Botón de copia para el prompt
|
| 159 |
+
# Gradio soporta show_copy_button=True en Textbox, pero para un control más explícito:
|
| 160 |
+
# Alternativa simple: usa el show_copy_button=True en el Textbox de arriba
|
| 161 |
+
# Para mantener la estética que pides:
|
| 162 |
+
gr.Textbox(value="", label="Copiar Prompt", elem_classes=["hidden"], show_copy_button=True, interactive=False, value=prompt_outputs[i].value)
|
| 163 |
+
|
| 164 |
+
# Nota: El Textbox renderizado dentro del Accordion ya tiene el valor del prompt_outputs[i]
|
| 165 |
+
# La forma más limpia es usar la propiedad nativa show_copy_button=True en el Textbox.
|
| 166 |
+
# He actualizado el Textbox inicial (prompt_outputs) para incluirlo.
|
| 167 |
+
|
| 168 |
+
# ¡Mejor y más simple!: Usaremos show_copy_button=True en el Textbox de arriba.
|
| 169 |
+
# Actualicé la definición de `prompt_outputs` para usar `show_copy_button=True`.
|
| 170 |
+
pass
|
| 171 |
+
|
| 172 |
+
# La acción del botón: llama a la función de generación y asigna la lista de resultados
|
| 173 |
+
# a la lista de Textboxes creados.
|
| 174 |
+
button.click(
|
| 175 |
+
fn=generate_prompts_list,
|
| 176 |
+
outputs=prompt_outputs
|
| 177 |
+
)
|
| 178 |
|
| 179 |
if __name__ == "__main__":
|
| 180 |
demo.launch()
|