Meadow slides
Decks com o visual Meadow, construídos a partir de uma pequena especificação JSON por um script, de modo que cada slide se encaixe na mesma grade, escala tipográfica e cores dos decks de vendas da Meadow. Você escreve o conteúdo e escolhe os layouts; o script faz o trabalho de pixel e avisa quando o texto não cabe.
scripts/meadow_deck.py spec.json -> .pptx (+ --figma-json layout para Figma)
scripts/preview.py .pptx -> PNG por slide + folha de contato (LibreOffice ou Keynote)
scripts/figma_render.js desenha um slide do dump de layout via use_figma
scripts/install_fonts.sh instala Geist / Geist Mono / Syne para o usuário atual
references/layouts.md cada layout, seus campos e quando usá-los <- leia antes de escrever uma spec
references/design-system.md tokens e regras por trás dos layouts <- leia ao sair do layout
references/image-prompts.md biblioteca de prompts para imagens do deck <- leia quando o deck precisar de novas imagens
references/figma.md receita de saída Figma e seus problemas <- leia apenas se Figma for desejado
examples/sample-deck.json um deck de seis slides cobrindo os principais layouts (dados fictícios)
examples/skill-intro-deck.json o deck que apresenta este skill (imagens do README)
Fluxo de trabalho
- Obtenha o conteúdo primeiro. Pergunte (ou extraia do briefing / deck antigo / documento) a mensagem de cada slide. Se o usuário fornecer um deck fonte para reformatar, mantenha o texto palavra por palavra: altere apenas o que foi solicitado, e ofereça cortes ou novos títulos como sugestão separada. As pessoas notam quando seu texto é reescrito em silêncio.
- Esboço. Uma ideia por slide. Mapeie cada slide para um layout em
references/layouts.md(capa → slides de conteúdo → contatos é o arco usual). Mostre o esboço ao usuário quando o deck tiver mais de ~6 slides ou o briefing for vago; caso contrário, vá direto para a construção. - Verifique os números. Decks comerciais vivem de orçamentos, CPM/CPV, visualizações. Recalcule figuras derivadas (CPM = orçamento / visualizações × 1000, totais, percentuais) antes da composição. Se não baterem, ainda assim componha o que o usuário forneceu e informe quais números discordam e por quanto. Um cliente fará a mesma aritmética.
- Escreva a spec (
deck.json), veja o exemplo ereferences/layouts.md. Imagens são nomes curtos agrupados (wave-05,meadow-night-02,people-02-camera-blue) ou caminhos. - Construa:
python3 scripts/meadow_deck.py deck.json -o deck.pptx. Trate cadaWARNcomo um bug: encurte o texto, divida o slide ou mude o layout, depois reconstrua. As linhasWARNcobrem texto estourado, texto cirílico em Syne (sem glifos cirílicos), mais de uma placa de acento em um slide e o portão de alinhamento, que roda em toda construção:- texto não centralizado opticamente em uma pílula, chip, botão ou badge (padding de tinta esquerda/direita e altura da caixa-alta acima/abaixo devem coincidir dentro de 1.5px);
- conteúdo cruzando as margens laterais de 96px (imagens que sangram do slide são aceitáveis);
- bordas que quase se alinham, com 1–4px de diferença: encaixe-as ou mova-as claramente para longe;
- lacunas desiguais em uma linha ou pilha de cartões do mesmo tamanho.
Qualquer novo elemento em forma de pílula passa por
Slide.pill(), que o dimensiona e centraliza; texto que segue outro texto inline (um ícone após um número, uma unidade, um badge) é construído comflow=Truepara ser verificado quanto ao ajuste, mas não é mantido na grade.
- Veja o resultado. Mais rápido e funciona em qualquer lugar: adicione
--png preview/à construção. Ele desenha o mesmo layout com Pillow, medindo o texto como o Keynote faz. Para verificar se o PPTX reconhece as fontes em um Mac,qlmanage -t -s 1600 -o preview/ deck.pptxrenderiza o slide 1 através do sistema (nenhum aplicativo abre).python3 scripts/preview.py deck.pptxusa LibreOffice, ou Keynote como último recurso: a scriptação do Keynote pode travar e deixar um diálogo na tela do usuário, então não repita em loop. Abracontact-sheet.pnge os slides individuais. Verifique alinhamento, aglomeração, contraste sobre fotos, meios-cartões vazios e colisões com o rodapé. As renderizações do Office precisam das fontes instaladas (scripts/install_fonts.sh). - Entregue o .pptx. Mencione que os destinatários precisam das fontes (
assets/fonts, todas gratuitas sob a OFL) ou devem usar a construção--portable(veja abaixo). - Figma (opcional) quando solicitado: siga
references/figma.md. Não escreva no arquivo Figma de ninguém a menos que tenha sido solicitado.
Regras que fazem parecer Meadow
Estas são as regras que as pessoas verificam primeiro. Os layouts já as aplicam, então importam principalmente quando você escreve o texto ou adapta um layout.
- Canvas escuro, uma placa verde-limão. Fundo #0E1013, cartões #1A1D21, linhas internas #23262B. Verde-limão #D3FF31 marca a única coisa sobre a qual o slide trata (a oferta, o resultado, o destaque principal). Duas placas verde-limão em um slide nivelam a hierarquia. Não pinte um cartão aleatório de verde-limão só para ter um acento: um slide pode não ter nenhum. Texto sobre verde-limão é quase preto, nunca branco.
- Fontes. Um título escrito em latim é definido em Syne, mesmo dentro de um deck em russo (um nome de produto como «Meadow Slides» em uma capa). Um título com qualquer caractere cirílico é Geist, porque Syne não tem cirílico. O script decide por título (capa, seção, declaração, títulos de slide e contatos), então escreva o título no idioma em que deseja que seja definido. O corpo do texto é sempre Geist, rótulos em Geist Mono maiúsculas, números/KPIs isolados em Syne (a partir de ~36px).
- Grade. Margens de 96px, cabeçalho (mono sobrancelha + título de 64px) no topo, conteúdo entre y=264 e y=944, rodapé = logotipo +
NN / NN. Lacunas de 24, raio do cartão 24, padding 40. - Diga com superfícies, não traços. Os cartões são separados por preenchimento, não por contornos. O único elemento com contorno é um chip de categoria (1px branco 18%).
- Nenhum nome de concorrente no texto. Logotipos/depoimentos de clientes apenas se o usuário os forneceu.
- Tipografia: o script cola preposições/conjunções curtas e travessões com NBSP para que as linhas não terminem em «в», «и», «—». Escreva números como
10 000+,$5 000,1,5 млнem decks em russo. - Gráficos são barras escuras sólidas sobre verde-limão ou verde-limão sobre escuro, linha de base zero, alturas proporcionais aos dados. Um preto semitransparente sobre verde-limão fica turvo, então não use um.
Imagens
Incorporadas: 6 ondas abstratas azuis/verdes-limão (wave-01…06), 3 prados noturnos (meadow-night-01…03), 4 fotos de pessoas em estilo de vida (people-…), e glifos de plataforma brancos (instagram, tiktok, youtube, vk, telegram, x, linkedin, twitch). Ondas são adequadas para capas e quebras de seção, prados para contatos e slides de encerramento, fotos de pessoas para contatos e slides de imagem-texto.
Quando o deck precisar de algo novo (uma capa temática como o piso da fábrica de conteúdo, uma cena para um case), escreva prompts a partir de references/image-prompts.md: prefixo do estilo da marca + cena + nota de composição para o espaço que preenche. Se uma ferramenta de geração de imagens estiver conectada (por exemplo, o Magnific MCP images_generate), ofereça-se para gerar; caso contrário, entregue os prompts e conecte os arquivos retornados à spec por caminho.
Variantes de saída
--portable: mapeia cada peso para Regular/Bold da mesma família. Use para importação no Google Slides ou para destinatários que não podem instalar fontes. A hierarquia sobrevive, a nuance não.--figma-json layout.json: despeja o layout calculado para o renderizador Figma.- Notas do apresentador: adicione
"notes"a qualquer slide. Elas vão paradeck-notes.mdao lado do PPTX, porque o Keynote se recusa a abrir um PPTX que tenha slides de notas escritos por python-pptx.--embed-notescoloca-as dentro, para decks que serão abertos apenas no PowerPoint. - PDF: adicione
--pdf deck.pdf(renderização completa 1920×1080 de cada slide, texto não selecionável). Use quando alguém pedir um PDF para enviar ou ler; nenhum Keynote ou LibreOffice é necessário.
Quando os layouts não se encaixam
Prefira dividir o conteúdo em dois slides a espremê-lo. Se um slide realmente precisar de um novo arranjo, adicione uma função layout_<nome> a scripts/meadow_deck.py construída a partir dos mesmos helpers (header, card, grid, bullets, kpi_tile, footer) e tokens, para que herde o sistema. Leia references/design-system.md antes de fazer isso.