Spaces:
Running
Running
Update utils.py from anycoder
Browse files
utils.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import List, Dict
|
| 2 |
+
import textwrap
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def build_prompt_core(
|
| 6 |
+
product_name: str,
|
| 7 |
+
images: List[str],
|
| 8 |
+
colors: List[str],
|
| 9 |
+
concept: str,
|
| 10 |
+
) -> str:
|
| 11 |
+
"""
|
| 12 |
+
Standalone version of the prompt builder (no Gradio dependencies).
|
| 13 |
+
|
| 14 |
+
You can import this in other scripts to reuse the same logic.
|
| 15 |
+
|
| 16 |
+
Args:
|
| 17 |
+
product_name: Nome do produto.
|
| 18 |
+
images: Lista de URLs (ou caminhos) de imagens de referência.
|
| 19 |
+
colors: Lista de cores em texto/HEX.
|
| 20 |
+
concept: Um dos conceitos: 'FOTO PRINCIPAL', 'FOTO DESCRIÇÃO',
|
| 21 |
+
'FOTO AVALIAÇÃO', 'FOTO DESCRIÇÃO 2'.
|
| 22 |
+
|
| 23 |
+
Returns:
|
| 24 |
+
Prompt de texto pronto para uso em modelos de geração de imagem.
|
| 25 |
+
"""
|
| 26 |
+
product_name = (product_name or "").strip()
|
| 27 |
+
concept = concept or ""
|
| 28 |
+
images = images or []
|
| 29 |
+
colors = colors or []
|
| 30 |
+
|
| 31 |
+
colors_block = ", ".join(colors) if colors else "não especificadas"
|
| 32 |
+
|
| 33 |
+
validation_block = (
|
| 34 |
+
"Imagem de referência:\n" + "\n".join(f"- {u}" for u in images)
|
| 35 |
+
if images
|
| 36 |
+
else "Nenhuma imagem de referência fornecida."
|
| 37 |
+
)
|
| 38 |
+
|
| 39 |
+
base_header = f"""\
|
| 40 |
+
PROMPT MASTER – PRODUCT PHOTOGRAPHY AI
|
| 41 |
+
Produto: {product_name}
|
| 42 |
+
Cores principais: {colors_block}
|
| 43 |
+
Conceito selecionado: {concept}
|
| 44 |
+
{validation_block}
|
| 45 |
+
"""
|
| 46 |
+
|
| 47 |
+
concept_blocks: Dict[str, str] = {
|
| 48 |
+
"FOTO PRINCIPAL": """
|
| 49 |
+
Foto principal de catálogo em formato 1:1, produto centralizado sobre fundo claro,
|
| 50 |
+
iluminação de estúdio suave, foco total no produto, sem textos ou elementos gráficos.
|
| 51 |
+
""",
|
| 52 |
+
"FOTO DESCRIÇÃO": """
|
| 53 |
+
Close-up macro da textura do tecido, evidenciando trama, costuras e acabamento,
|
| 54 |
+
com fundo neutro desfocado e iluminação lateral suave.
|
| 55 |
+
""",
|
| 56 |
+
"FOTO AVALIAÇÃO": """
|
| 57 |
+
Cena orgânica estilo review real, com luz natural, ambiente cotidiano e aparência
|
| 58 |
+
de foto feita no celular, mas com boa nitidez e foco no produto.
|
| 59 |
+
""",
|
| 60 |
+
"FOTO DESCRIÇÃO 2": """
|
| 61 |
+
Foto lifestyle com modelo usando o produto em ambiente urbano ou estúdio minimalista,
|
| 62 |
+
enquadramento que valoriza o caimento, modelagem e proporções, estilo editorial de moda.
|
| 63 |
+
""",
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
concept_block = concept_blocks.get(
|
| 67 |
+
concept,
|
| 68 |
+
"Foto de produto hiper‑realista em cenário adequado para e‑commerce.",
|
| 69 |
+
)
|
| 70 |
+
|
| 71 |
+
return (base_header + "\n" + textwrap.dedent(concept_block).strip()).strip()
|