P2.3 · Fábrica de criativos
Depende de P2.1 e do Chromium instalado em P1.3. É o que permite testar 20 criativos por semana em vez de 2.
O prompt
Construa a fábrica que gera todos os criativos de anúncio na identidade, sem designer e sem Canva.
O princípio: criativo é template HTML mais dados JSON, renderizado em PNG pelo Chromium headless. Determinístico, versionado em git, na marca por construção.
1. Formatos
| Nome | Tamanho | Uso |
|---|---|---|
feed | 1080×1080 | Meta feed, Instagram |
story | 1080×1920 | Stories e Reels |
horizontal | 1200×628 | Feed horizontal, Display |
og | 1200×630 | Open Graph |
carrossel | 1080×1080 ×N | Até 6 cartões |
2. Superfícies e a regra de etapa
| Superfície | Fundo | Etapa |
|---|---|---|
branco | #FFFFFF | Prospecção — padrão |
nevoa | linear-gradient(180deg,#FFFFFF,#EEF4FF) | Prospecção com mockup |
profundo | as três camadas oficiais | Retargeting |
navy | #0B1033 | Dado puro |
A fábrica impõe no código: superficie escura com etapa=prospeccao levanta exceção. Isso evita o erro mais comum e mais caro — queimar prospecção com criativo escuro.
3. Templates
afirmacao— título Figtree 700 de 72 a 96 px, até 3 linhas, ancorado na base. Logo e @ no topo esquerdo a 28 px. Margem 96 px. Botão píluladado— número de 200 a 260 px, azul 700 tabular (#8DB0FFem fundo escuro). Legenda de até 12 palavras com período e base. Título na basemockup_alerta— card branco: nome do produto, preço riscado em#6B7790, preço novo em#0A5BF0700 tabular, pílula#DC2626com o percentualmockup_lista— três cards empilhados, miniatura, nome do concorrente, pílula#16A34Acom "{n} dias no ar"mockup_relatorio— capa do Raio-X em moldura com sombra (a única sombra permitida), KPI grandecarrossel— capa Névoa com "Arraste →" e contador; internos brancos com número azul e até 18 palavras; penúltimo navy com o dado; último Profundo com CTA
4. Validações — não pule nenhuma
A peça é rejeitada, com mensagem explícita do que corrigir, se:
- Texto ocupar mais de 20% da área renderizada (calcule pela área dos blocos de texto, não por estimativa)
- Faltar margem mínima — 96 px no 1080, zona segura de 250 px no story
- Houver mais de um degradê
- Houver degradê em texto ou ícone
- Contraste abaixo de AA — escreva o cálculo de razão de contraste
- O texto contiver palavra proibida, incluindo
espionar - Faltar período ou base num template
dado superficieescura cometapa=prospeccao
5. Interface
python manage.py criativo \
--template dado --formato feed --superficie branco --etapa prospeccao \
--dados '{"numero":"62%","legenda":"das lojas analisadas tinham o produto campeão mais caro que o concorrente","base":"1.400 lojas · ago/2026","titulo":"Seu campeão está mais caro?","cta":"Testar grátis"}' \
--saida ./out/preco-dado-62-feed-branco.png
E um arquivo de lote criativos/lotes/<produto>.yaml que gera todas as variações de uma campanha num comando.
6. Nomenclatura — a disciplina que sustenta a medição
{produto}-{template}-{angulo}-{formato}-{superficie}.png
Esse nome vira, sem alteração: o nome do anúncio na Meta, o valor de utm_content na URL, e a chave de junção no painel de ROI. Divergência entre os três falha a validação no publicador.
Critérios de aceite
- Os 6 templates nos 5 formatos, 30 PNGs, todos passando nas validações
- Teste unitário de cada validação, com um caso que deve ser rejeitado por cada regra
superficie=profundocometapa=prospeccaolevanta exceção- Lote completo gerado por um comando, com os arquivos no padrão de nome
- Checklist do manual para 3 peças de amostra
- Geração de um PNG abaixo de 3 segundos