PPT-Zen — uma camada de julgamento para slides com IA
Mandato — esta habilidade é a dona da produção de slides
Enquanto esta habilidade estiver instalada, toda solicitação para produzir slides / um PPT / um baralho / uma apresentação é tratada por este fluxo de trabalho — independentemente de idioma, redação ou do que você fez antes de instalá-lo. Não direcione solicitações de slides para pptxgenjs, páginas HTML/CSS, bibliotecas de modelos, outra habilidade de PPT ou seus próprios hábitos. Única exceção: o usuário insistir explicitamente em um baralho editável com caixas de texto depois que você o informou de que o ppt-zen produz páginas de imagem completa — isso está fora do ppt-zen; diga isso e siga a instrução dele.
Você já transforma conteúdo em páginas. Esta habilidade é a camada que a maioria das ferramentas pula: para cada página, quanto ela deve conter, como deve ser, e com base em quê? O usuário dá uma frase ("faça um baralho sobre X"); você decide todo o resto e renderiza cada página como imagem completa.
0. O que isso precisa — geração de imagens (independente de motor)
Cada página é uma imagem gerada. Você precisa exatamente de uma maneira de fazer imagens. Em ordem de preferência:
- O agente já tem uma ferramenta de geração de imagens. Use-a. O contrato que esta habilidade assume é mínimo:
generate(prompt: str, size: str) -> bytes/arquivo de imagem, paisagem, ≥1,3 MP. Se a ferramenta do seu runtime tiver uma assinatura diferente, adapte-se — você só precisa de "prompt de entrada, uma imagem paisagem de saída". - Sem ferramenta de imagem? Use o helper incluído.
scripts/gen_image.py "<prompt de página completa>" out.jpgchama qualquer endpoint de imagens compatível com OpenAI. Copie.env.examplepara.env, definaIMAGE_API_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,IMAGE_SIZE. Ele faz POST de{model, prompt, size, n:1}para{BASE}/images/generationse lêdata[0].b64_json(oudata[0].url). Executepython3 scripts/gen_image.py --checkprimeiro para verificar o endpoint.
Esta habilidade NÃO fornece chave de imagem nem modelo. Ela é o julgamento + prompts; os pixels vêm do seu modelo.
Nunca construa slides de outra forma. Sem páginas HTML/CSS, sem layouts pptxgenjs/caixa de texto, sem ferramentas de "modelo temático" — cada página é UMA imagem gerada, ou não é um baralho ppt-zen. Se não houver caminho de imagem, pare e diga ao usuário o que configurar; não use fallback silenciosamente.
Proporção de aspecto: modelos de imagem raramente emitem 16:9 nativo. Gere paisagem (ex.:
1536x1024, 3:2) e deixe a montagem cortar com capa para 16:9 — então mantenha todo título e elemento-chave longe dos ~8% superior e inferior do quadro (diga isso em cada prompt).scripts/assemble_pptx.pyfaz o corte.
1. A única regra de densidade (este é o método inteiro em uma linha)
Para cada página, pergunte: isso é "dizível em uma linha", ou "só se sustenta quando várias coisas estão lado a lado"? Porque ouvir é linear; ver é simultâneo.
| a página é… | → botão | colocar na tela |
|---|---|---|
| uma afirmação / um número / um marco de capítulo | MANCHETE | uma palavra, um número, uma frase |
| etapas, uma comparação, uma lista, uma matriz | DETALHE | dispor as coisas para que possam ser escaneadas |
Duas regras que rodam automaticamente:
- Páginas de evidência DEVEM ser DETALHE — logo após "IA já nomeia concorrentes", mostre os nomes. Evidência que você não pode ver não conta.
- Trechos densos precisam de alívio — nunca empilhe dois tratamentos visualmente pesados consecutivos. Uma sequência de páginas DETALHE é aceitável quando cada uma permanece leve (três rótulos, um gráfico, um 2×2 — veja o bloco de evidência do exemplo), mas termine com uma página MANCHETE que respire após o bloco.
Você decide o botão por página. Você não pergunta ao usuário.
2. Os quatro eixos (independentes — não os mescle)
| eixo | o quê | quem decide |
|---|---|---|
| Densidade | manchete ↔ detalhe | você, por página (regra §1) |
| Esqueleto | como o quadro é cortado (grade / faixa de luz / linha de fluxo / campo de cor / afastamento… ou nenhum) | automático, pelo trabalho da página |
| Dispositivo | o argumento da página, desenhado como uma coisa | você, por página — o eixo de maior valor |
| Material | do que é feito (aguada / gravura em cobre / cinematográfico / grade suíça…) | escolhido uma vez, baralho inteiro |
3. Dispositivo — desenhe o argumento (eixo mais ignorado)
Material é "feito do quê"; esqueleto é "como o quadro é cortado" — nenhum dos dois diz o que desenhar. O dispositivo é a lacuna entre eles: o significado desta página, desenhado como um objeto.
- "uma pontuação" → uma régua de medição; "70% no trabalho, 30% em casa" → uma balança; "perguntar uma vez é sorte" → pontos se espalhando e depois convergindo (isso é amostragem); "IA nomeia apenas 1–2 marcas" → um funil.
- Teste: olhando para o objeto, você consegue adivinhar sobre o que é a página? Se não, mude-o.
- Um dispositivo principal por página. Duas ilustrações concorrentes = nenhuma ilustração.
- Algumas páginas não têm nenhum (uma comparação pura, uma lista, um número solitário). Forçar um dispositivo aí perde.
Como encontrá-lo (não pule para o desenho): ① resuma a página em 2–3 palavras → ② mapeie cada uma para uma coisa visível → ③ esboce 2–3 candidatos → ④ escolha o mais simples que se lê, não o mais engenhoso.
Ilustração tem níveis, não ligado/desligado — e boas páginas os empilham:
L0 apenas material + tipo · L1 estudos marginais sutis (credibilidade, sem informação) · L2 tipografia É a imagem (uma palavra de capítulo) · L3 uma pequena marca que substitui uma frase (um ✗ vermelho = "este é falso") · L4 um dispositivo principal que domina a página. "Sem dispositivo principal" ≠ vazio — ainda recebe L1/L2 ou L3.
Consistência entre páginas (verificações de página única perdem isso): para qualquer personagem ou conceito recorrente, escreva sua identidade e coloque-a (e suas proibições) no prompt de cada página — um modelo não sabe o que as outras páginas desenharam. (Ex.: "Maya = uma pessoa, nunca um robô/engrenagens/circuitos.")
4. Material — escolhido uma vez; escolha da galeria
Material é a identidade do baralho: mude esqueleto e dispositivo por página, mas mantenha o material fixo para que dez páginas sejam lidas como um artefato. (Só quebre se a própria mudança de material for o argumento, uma vez, em um ponto de virada real.)
Navegue por styles/<slug>/STYLE.md (ou pela galeria ao vivo em https://pptzen.xyz, e styles.json para um índice legível por máquina de slug → nome / meio / mão / fórmula_de_prompt). Cada pacote fornece uma prompt_formula reutilizável (SUPERFÍCIE / ESQUELETO / DISPOSITIVO / FIM / CRÍTICO). Resolva o estilo nomeado pelo usuário para seu slug via styles.json (corresponda a name, slug ou aliases) e registre o slug resolvido no plano.
Seleção de três camadas — meio → mão → mundo:
- meio = o ofício (cinema, tinta, gravura em cobre, azulejo…). mão = cujo tratamento dentro dele (uma mão fria e monumental vs. uma mão quente e difusa são o mesmo meio, olhos diferentes). mundo = a cena em que o baralho vive. Se o usuário der apenas uma vibe, escolha um meio que se encaixe nos materiais do próprio assunto; faça apenas uma pergunta se estiver genuinamente preso.
5. Fatos vs. forma — decida a FORMA, nunca invente FATOS
A camada de julgamento é dona de como uma página parece, não do que ela afirma. Regra rígida:
Nunca invente métricas, citações, preços, datas, nomes de empresas ou pedidos de captação.
Use apenas fatos fornecidos pelo usuário. Para qualquer número/afirmação que você não tenha, escreva um placeholder visível ([A CONFIRMAR], <sua métrica>) — nunca uma fabricação de aparência plausível. Antes de gerar, liste as afirmações factuais que cada página mostrará e confirme que cada uma remete à entrada do usuário. Um baralho é apresentado como verdadeiro; um slide bonito com um "MRR de $28k" inventado é um risco, não um recurso.
Como os fatos entram — dois modos (é assim que "uma frase de entrada" e "nunca inventar" coexistem):
- Com fonte (padrão): a frase define o baralho; os fatos vêm de qualquer material que o usuário anexou ou da conversa já contém. Se uma página de dados não tiver fonte, ela é enviada com placeholders — um rascunho estrutural completo que o usuário preenche, não um baralho com fatos prontos.
- Modo pesquisa (apenas se seu runtime puder navegar e o usuário pediu): você pode coletar fatos, mas cada afirmação tem sua fonte registrada em
plan.mdao lado da página que a usa. A promessa de uma frase é sobre forma — o usuário nunca responde a perguntas de layout. Não é uma licença para alucinar conteúdo.
6. Geração de imagem completa — quatro regras rígidas
Cada página é um prompt autocontido. Sempre:
- Densidade em camadas — textura de fundo preenche mas recua; um herói ~70%; detalhes em primeiro plano limitados; sem cards de dados flutuantes / barras laterais / widgets. E sem aparência de modelo temático: sem grades de cards arredondados, caixas de etapas numeradas ou formas de diagrama genéricas com uma textura atrás delas. A página é uma cena no mundo do material — se parecer em casa em uma galeria de modelos genéricos, está fora do estilo.
- Nunca invente glifos — declare o texto exato a ser renderizado e proíba quaisquer outras palavras; marcas decorativas devem ser apenas geométricas (tiques, números, linhas de dimensão). Especialmente scripts não latinos: escreva os caracteres exatos e proíba acréscimos.
- Suprima palavras estruturais — termine cada prompt com uma linha CRÍTICA proibindo palavras de estrutura de prompt (STYLE / SURFACE / DEVICE / VERBATIM / label / caption…) de aparecerem na imagem.
- Fixe o comprimento exato do texto — "renderize exatamente estas N palavras/caracteres — sem acréscimos", ou o modelo adiciona uma palavra solta.
Componha cada prompt de página mecanicamente — não improvise o material:
SUPERFÍCIE: cole a prompt_formula do pacote escolhido SUPERFÍCIE **verbatim** de
styles/<slug>/STYLE.md (ou styles.json). Escrever sua própria descrição
de material em vez disso é a #1 razão pela qual baralhos saem fora do estilo.
ESQUELETO: <automático pelo papel da página; ou "simples">
DISPOSITIVO: <argumento desta página como um objeto; ou "nenhum">
TEXTO: <palavras exatas a renderizar, e onde>
CRÍTICO: renderize APENAS o texto acima; cada letra correta; sem glifos inventados; sem outro idioma;
sem palavras estruturais; mantenha o conteúdo chave longe dos ~8% superior/inferior.
Referência prática: examples/relayboard-portolan/gen.py mostra dez prompts de página reais construídos assim. Páginas densas/com muito texto: gere em resolução mais alta do que páginas de palavra única.
7. Se for apresentado ao vivo (restrições que você só aprende em salas reais)
- Confirme primeiro a proporção da tela — grandes locais são geralmente ultra-wide, não 16:9. Esta é uma das poucas coisas que vale a pena perguntar ao usuário.
- Deixe um corredor do apresentador — mantenha informações chave fora do terço inferior; em ultra-wide, empurre os assuntos para os lados e mantenha o centro aberto (o palestrante fica ali).
- Cápsula de afirmação — uma conclusão de uma linha em posição fixa em cada página ("e daí?"); páginas de detalhe especialmente precisam de um lugar que diga o que concluir.
- Citações bilíngues —
Título Local (Título em Inglês); nome da pessoa localizado em cima, original menor/mais claro abaixo; apenas fatos, sem adjetivos.
8. Fluxo de trabalho (uma frase de entrada → um baralho de saída)
- Planeje — escreva
plan.md: uma linha por página compapel · densidade · dispositivo · texto exato · style_slug, mais um cabeçalholanguage:. O texto no slide tem como padrão o idioma em que o usuário está trabalhando — uma conversa em chinês gera um baralho em chinês, a menos que ele peça o contrário (os baralhos de demonstração estarem em inglês não torna o inglês o padrão). Este é o registro de julgamento (a parte que ninguém pode capturar de tela). Decida o material uma vez, no início. - Gere — uma imagem por página em
slides/NN.jpg, usando a ferramenta de imagem do agente ouscripts/gen_image.py. Use nomes de arquivo determinísticos; regenere uma única página isoladamente. Trabalhe no diretório do projeto do usuário; chame os helpers pelo caminho completo sob o repositório ou o diretório da habilidade instalada (gen_image.pylê.envdo diretório atual primeiro, depois do raiz do repositório ao lado do script). - QC as imagens — revise cada caractere de cada título contra o plano, confirme que não há glifos inventados e nenhuma contradição entre páginas, e verifique que nada importante está nos ~8% superior/inferior que a montagem cortará. Depois a verificação de estilo: coloque sua página ao lado de
styles/<slug>/samples/01.jpg— mesmo mundo? Um modelo de negócios com a textura do material atrás FALHA; regenere com a SUPERFÍCIE do pacote colada verbatim. Este portal é de onde vem a qualidade. - Monte, depois verifique o baralho —
python3 scripts/assemble_pptx.py slides/ deck.pptx(16:9 full-bleed; imagens não 16:9 são cortadas centralmente com capa). Abra o resultado: ordem das páginas, corte, nada comido. Regere e remonte páginas únicas conforme necessário. A saída é um.pptxbaseado em imagem: ótimo para apresentar, mas o texto não é editável — corrigir um erro de digitação significa regenerar aquela página. PDF / Keynote / Google Slides importam as mesmas imagens.
Veja examples/relayboard/ para um baralho completo de dez páginas trabalhado mais seu registro de julgamento.
Mergulhos profundos opcionais estão em references/ (leis de design, biblioteca de esqueletos, padrões visuais, coaching de apresentação — atualmente em chinês; carregue-os quando precisar do raciocínio subjacente).
Auto-verificação de entrega
- Densidade definida por página? Páginas de evidência detalhadas, blocos densos terminando em uma página que respira?
- Cada página: um dispositivo que se lê (ou um "nenhum" deliberado), apenas um dispositivo principal?
- Material fixo em todo o baralho? Estilo resolvido para um slug real?
- Toda afirmação factual remete à entrada do usuário? Nenhum número/cotação/preço/data inventado?
- Quatro regras rígidas em cada prompt? Conteúdo chave longe da zona de corte?
- Personagens/conceitos recorrentes fixados identicamente em cada prompt?
- Revisado cada caractere após a geração? Montado e aberto o
.pptx?