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()