anycoder-86ce6d32 / utils.py
eubottura's picture
Update utils.py from anycoder
e0df73c verified
from typing import List, Dict
import textwrap
def build_prompt_core(
product_name: str,
images: List[str],
colors: List[str],
concept: str,
) -> str:
"""
Standalone version of the prompt builder (no Gradio dependencies).
You can import this in other scripts to reuse the same logic.
Args:
product_name: Nome do produto.
images: Lista de URLs (ou caminhos) de imagens de referência.
colors: Lista de cores em texto/HEX.
concept: Um dos conceitos: 'FOTO PRINCIPAL', 'FOTO DESCRIÇÃO',
'FOTO AVALIAÇÃO', 'FOTO DESCRIÇÃO 2'.
Returns:
Prompt de texto pronto para uso em modelos de geração de imagem.
"""
product_name = (product_name or "").strip()
concept = concept or ""
images = images or []
colors = colors or []
colors_block = ", ".join(colors) if colors else "não especificadas"
validation_block = (
"Imagem de referência:\n" + "\n".join(f"- {u}" for u in images)
if images
else "Nenhuma imagem de referência fornecida."
)
base_header = f"""\
PROMPT MASTER – PRODUCT PHOTOGRAPHY AI
Produto: {product_name}
Cores principais: {colors_block}
Conceito selecionado: {concept}
{validation_block}
"""
concept_blocks: Dict[str, str] = {
"FOTO PRINCIPAL": """
Foto principal de catálogo em formato 1:1, produto centralizado sobre fundo claro,
iluminação de estúdio suave, foco total no produto, sem textos ou elementos gráficos.
""",
"FOTO DESCRIÇÃO": """
Close-up macro da textura do tecido, evidenciando trama, costuras e acabamento,
com fundo neutro desfocado e iluminação lateral suave.
""",
"FOTO AVALIAÇÃO": """
Cena orgânica estilo review real, com luz natural, ambiente cotidiano e aparência
de foto feita no celular, mas com boa nitidez e foco no produto.
""",
"FOTO DESCRIÇÃO 2": """
Foto lifestyle com modelo usando o produto em ambiente urbano ou estúdio minimalista,
enquadramento que valoriza o caimento, modelagem e proporções, estilo editorial de moda.
""",
}
concept_block = concept_blocks.get(
concept,
"Foto de produto hiper‑realista em cenário adequado para e‑commerce.",
)
return (base_header + "\n" + textwrap.dedent(concept_block).strip()).strip()