Execução passo a passo e dependências
- Siga o fluxo de trabalho desta skill em ordem. Antes de uma etapa usar uma biblioteca, ferramenta de linha de comando, runtime ou fonte, verifique apenas as dependências necessárias para aquela etapa; não presuma que elas estão instaladas.
- Reutilize dependências que estão disponíveis. Se alguma estiver faltando, instale apenas essa dependência usando o SO atual e um gerenciador de pacotes disponível, verifique-a e tente novamente a etapa original. Não instale a lista inteira de dependências antecipadamente.
- Use o ambiente Python ativo (
python -m pip install <pacote>, ou opythoncorrespondente); crie um ambiente virtual local à tarefa, se necessário. Instale bibliotecas Node.js no projeto da tarefa (npm install <pacote>) para que o script possa resolvê-las. Para ferramentas de sistema e fontes, use o gerenciador de pacotes do SO disponível (por exemplo, Homebrew no macOS, apt no Debian/Ubuntu ou winget no Windows). - Siga o fluxo de permissão do host quando a instalação precisar de aprovação. Se o gerenciador de pacotes ou a permissão necessária não estiver disponível, ou a instalação/download falhar, relate a dependência ausente e a etapa afetada; não tente repetidamente nem afirme que a etapa passou. Continue com etapas independentes quando possível.
- Mantenha o fluxo de trabalho original e as verificações de qualidade. Verifique fontes apenas quando a renderização exigir. Etapas que usam apenas texto, ferramentas integradas ou HTML autossuficiente não requerem instalação de pacotes; acesso a ferramentas externas ou autenticação devem ser tratados pelo host, não por um gerenciador de pacotes.
Convenções de caminho e ambiente de execução (leia antes de executar comandos)
- Comando Python: Esta máquina usa
python(no Windows geralmente não hápython3). Todos os comandos abaixo usarãopython. - Caminho do script: Os scripts desta skill estão em
AppData/skills/pptx/scripts/(relativo à raiz do projeto). Os comandos de script abaixo e em editing.md / pptxgenjs.md já estão escritos como caminhos relativos absolutos a partir desse diretório base e podem ser executados diretamente da raiz do projeto. - Diretório de trabalho: Os comandos assumem que o diretório de trabalho atual é a raiz do projeto. Se o diretório de trabalho for diferente (por exemplo,
default_workdirfoi alterado para outro diretório), substituaAppData/skills/pptxpelo caminho absoluto do diretório da skill. - Node.js: Antes de executar
npm/node(necessário para pptxgenjs), adicione o diretório Node.js ao PATH, conforme as regras do projeto.
Skill PPTX
Referência rápida
| Tarefa | Guia |
|---|---|
| Ler/analisar conteúdo | python -m markitdown apresentacao.pptx |
| Editar ou criar a partir de modelo | Leia editing.md — QA: validate_layout.py + markitdown |
| Criar do zero | 1. Planejar conteúdo → 2. Pré-gerar assets → 3. Leia pptxgenjs.md |
| Prevenir estouro por design | Leia pptxgenjs.md |
| Gerar sistema de design | python AppData/skills/pptx/scripts/design/search.py "<tópico>" --design-system |
| Correção pós-geração | python AppData/skills/pptx/scripts/fix_pptx.py output.pptx |
| QA de layout (crítico primeiro) | python AppData/skills/pptx/scripts/validate_layout.py apresentacao.pptx |
Leitura de conteúdo
# Extração de texto
python -m markitdown apresentacao.pptx
# XML bruto
python AppData/skills/pptx/scripts/unpack.py apresentacao.pptx unpacked/
Fluxo de edição
Leia editing.md para detalhes completos.
- Analise o modelo com
markitdown - Descompacte + verificação de camada de estilo + plano de alinhamento Tema & Estilo
- Manipule slides → edite conteúdo → limpe → empacote
- ⚠️ QA de layout (portão obrigatório):
python AppData/skills/pptx/scripts/validate_layout.py output.pptx --slides <números_dos_slides_editados> - ⚠️ QA de conteúdo (obrigatório):
python -m markitdown output.pptx
Criar do zero
Leia pptxgenjs.md para detalhes completos.
Use quando nenhum modelo ou apresentação de referência estiver disponível.
Estrutura de slides obrigatória (somente para criação do zero)
Ao criar uma apresentação do zero, você DEVE seguir esta estrutura:
- Slide 1: Página de capa
- Slide 2: Sumário (agenda)
- Slide 3 em diante: Seções de conteúdo na ordem exata listada no Slide 2
- Slide final: Página de encerramento/agradecimento
Não pule o slide de sumário. Não coloque slides de conteúdo antes do sumário.
⚠️ Sem slides em branco
Cada slide DEVE conter pelo menos um elemento visível (addText, addShape, addImage, addChart ou addTable) dentro do slide. Um slide com apenas uma cor de fundo e sem elementos de conteúdo é um defeito de geração.
Causas comuns de slides em branco:
- Esquecer de adicionar conteúdo a slides divisores de seção / de transição
- Truncamento de token no meio da geração, deixando alguns slides vazios
- Assumir que o layout do slide ou mestre preencherá automaticamente o conteúdo (não vão — pptxgenjs cria layouts mínimos sem formas herdadas)
Se você pretende que um slide seja um divisor de seção, DEVE adicionar elementos explicitamente — por exemplo, um número de seção grande, texto de título e/ou formas decorativas.
⚠️ OBRIGATÓRIO: Planejamento pré-geração
Antes de escrever qualquer código, você DEVE completar estas etapas de planejamento:
⚡ Caminho rápido para solicitações simples: Quando o usuário pedir uma apresentação curta/simples (≤ 6 páginas, tópico único, sem diagramas complexos), pule a saída de planejamento formal e vá direto para a Etapa 3 (escrever código) usando a estrutura padrão Capa + Sumário + (N-3) Conteúdo + Encerramento. Caminho rápido = sem plano detalhado no corpo da resposta, apenas construa e execute o script.
Etapa 1: Produzir plano de design de conteúdo
Apresente um plano estruturado cobrindo:
-
Tema e estilo geral
- Escolha da paleta de cores (consulte a seção "Ideias de design")
- Combinação tipográfica
- Motivo visual para carregar entre os slides
-
Esboço slide por slide
Slide 1: Capa - Tipo de layout, elementos-chave Slide 2: Sumário - Lista de seções ordenadas Slide 3: [Seção 1 do Sumário] - Tipo de layout, elementos-chave, plano de insight (se visual) ... Slide N: Encerramento / Obrigado - Tipo de layout, elementos-chave ... -
Inventário de elementos visuais
- Liste todas as imagens, ícones, gráficos e diagramas necessários
- Marque cada um como:
[Integrado](formas/gráficos pptxgenjs) ou[Externo](precisa de pré-geração)
Exemplo de saída de planejamento:
## Plano da apresentação
**Tema:** Paleta Ocean Gradient (065A82, 1C7293, 21295C)
**Fontes:** Georgia (títulos) + Calibri (corpo)
**Motivo:** Cartões arredondados com borda de acento à esquerda
### Slides:
1. Slide de capa - Título centralizado, fundo gradiente
2. Sumário - Visão geral / Arquitetura / Métricas / Cronograma
3. [Seção 1 do Sumário] - Tipo de layout, elementos-chave, plano de insight (se visual)
...
n. Obrigado - Declaração de encerramento + contato
⚠️ Após produzir seu plano, IMEDIATAMENTE prossiga para a Etapa 2 e Etapa 3. Não replaneje, não reafirme o mesmo esboço com variações menores. Produza o plano UMA VEZ, então comece a escrever código pptxgenjs.
Etapa 2: Pré-gerar assets externos
Para figuras marcadas como [Externo], gere-as ANTES de escrever o código pptxgenjs.
⚠️ CRÍTICO: Consistência de cores
Todos os diagramas e gráficos gerados DEVEM usar a mesma paleta de cores da apresentação. Defina as cores no topo do seu script de geração com base no tema escolhido.
Opção A: Formas/Gráficos nativos primeiro (PADRÃO obrigatório)
TODOS os diagramas de arquitetura, fluxogramas, diagramas de processo, organogramas e diagramas de relacionamento DEVEM ser construídos com formas nativas pptxgenjs (RETÂNGULO, OVAL, LINHA, conectores + addText). Consulte pptxgenjs.md "Construindo Diagramas com Formas Nativas" para padrões e exemplos.
- Use um slide de modelo forte (processo, comparação, 2 colunas, grade de ícones) quando couber
- Use formas nativas pptxgenjs (caixas/setas/linhas + texto) para fluxos, arquiteturas e hierarquias
- Use gráficos pptxgenjs para gráficos de dados simples (barras, pizza, linhas, etc.)
Recorra ao matplotlib apenas para gráficos estatísticos complexos (mapas de calor, gráficos de dispersão, box plots) que os gráficos pptxgenjs não conseguem manipular. Recorra ao Mermaid apenas quando o diagrama for complexo demais para formas nativas E envolver muitas conexões cruzadas.
Opção B: Gráficos Matplotlib/Python
Defina a paleta de cores no início para corresponder ao tema do seu PPT:
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
# ============================================================
# PALETA DE CORES - Corresponda ao tema do seu PPT
# ============================================================
# Exemplo: tema "Ocean Gradient"
COLORS = {
'primary': '#065A82',
'secondary': '#1C7293',
'accent': '#21295C',
'background': '#F0F7FA',
'text': '#21295C',
'light': '#E8F4F8',
}
# Ciclo de cores para múltiplas séries de dados
COLOR_CYCLE = [COLORS['primary'], COLORS['secondary'], COLORS['accent'], '#4A90A4', '#2D5A6B']
# Aplicar tema globalmente
plt.rcParams.update({
'axes.prop_cycle': plt.cycler(color=COLOR_CYCLE),
'axes.facecolor': 'none',
'axes.edgecolor': COLORS['text'],
'axes.labelcolor': COLORS['text'],
'text.color': COLORS['text'],
'xtick.color': COLORS['text'],
'ytick.color': COLORS['text'],
'figure.facecolor': 'none',
'font.family': 'sans-serif',
'font.size': 12,
})
# ============================================================
# Criar gráfico com cores do tema
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
barras = ax.bar(['Q1', 'Q2', 'Q3', 'Q4'], [25, 40, 35, 50],
color=[COLORS['primary'], COLORS['secondary'], COLORS['primary'], COLORS['secondary']],
edgecolor=COLORS['accent'], linewidth=1.5)
ax.set_title('Receita Trimestral', fontsize=16, fontweight='bold', color=COLORS['text'])
ax.set_ylabel('Receita ($M)', color=COLORS['text'])
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
width_px, height_px = int(8 * 150), int(5 * 150)
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
plt.close()
Modelos de paleta matplotlib:
# Executivo Noturno
COLORS = {'primary': '#1E2761', 'secondary': '#CADCFC', 'accent': '#FFFFFF', 'text': '#1E2761'}
# Floresta e Musgo
COLORS = {'primary': '#2C5F2D', 'secondary': '#97BC62', 'accent': '#F5F5F5', 'text': '#2C5F2D'}
# Energia Coral
COLORS = {'primary': '#F96167', 'secondary': '#F9E795', 'accent': '#2F3C7E', 'text': '#2F3C7E'}
# Terracota Quente
COLORS = {'primary': '#B85042', 'secondary': '#E7E8D1', 'accent': '#A7BEAE', 'text': '#B85042'}
# Confiança Turquesa
COLORS = {'primary': '#028090', 'secondary': '#00A896', 'accent': '#02C39A', 'text': '#028090'}
Use para:
- Gráficos estatísticos complexos (barras, linhas, pizza, dispersão, radar, etc.)
- Visualizações personalizadas não suportadas pelo pptxgenjs
- Mapas de calor, gráficos de dispersão, box plots
⚠️ NÃO use matplotlib para:
- Diagramas de arquitetura
- Fluxogramas / diagramas de processo
- Organogramas / diagramas de hierarquia
- Diagramas de topologia de rede
- Qualquer diagrama que mostre principalmente relacionamentos entre componentes
Estes DEVEM ser construídos com formas nativas pptxgenjs para que sejam renderizados como objetos PPT editáveis — e não como imagens raster.
matplotlib - Gráficos com suporte CJK
Ao criar gráficos com matplotlib que incluam texto em chinês, você DEVE configurar a fonte:
import os
import platform
import matplotlib.pyplot as plt
import matplotlib
def setup_matplotlib_cjk():
"""Configurar matplotlib para suportar caracteres CJK"""
sistema = platform.system()
if sistema == "Darwin": # macOS
nomes_fonte = ['Arial Unicode MS', 'PingFang SC', 'Heiti SC', 'STHeiti']
elif sistema == "Windows":
nomes_fonte = ['Microsoft YaHei', 'SimHei', 'SimSun']
else: # Linux
nomes_fonte = ['Noto Sans CJK SC', 'WenQuanYi Zen Hei', 'Droid Sans Fallback']
# Encontrar fonte disponível
fontes_disponiveis = [f.name for f in matplotlib.font_manager.fontManager.ttflist]
for nome_fonte in nomes_fonte:
if nome_fonte in fontes_disponiveis:
plt.rcParams['font.sans-serif'] = [nome_fonte] + plt.rcParams['font.sans-serif']
plt.rcParams['axes.unicode_minus'] = False # Corrigir exibição de sinal de menos
return nome_fonte
return None
# Configurar fonte CJK antes de criar gráficos
fonte_cjk = setup_matplotlib_cjk()
# Criar um gráfico de barras com rótulos em chinês
categorias = ['第一季度', '第二季度', '第三季度', '第四季度']
valores = [120, 135, 142, 158]
plt.figure(figsize=(10, 6))
plt.bar(categorias, valores, color='steelblue')
plt.title('Dados de vendas trimestrais Quarterly Sales', fontsize=16)
plt.xlabel('Trimestre Quarter', fontsize=12)
plt.ylabel('Vendas Sales', fontsize=12)
plt.tight_layout()
plt.savefig('chart.png', dpi=150)
plt.close()
Opção C: Pesquisa web por imagens
Pesquise por imagens relevantes quando:
- Fotos de stock ou ilustrações forem necessárias
- Ícones ou logotipos forem necessários
- Imagens de referência para conceitos
Opção D: Diagramas Mermaid (último recurso)
Use apenas quando o diagrama não puder ser representado de forma limpa com formas/layout nativos, e mantenha a consistência com a apresentação:
# Instalar se necessário: npm install -g @mermaid-js/mermaid-cli
Crie um arquivo de configuração de tema correspondente à paleta do seu PPT:
// mermaid-config.json - Exemplo para tema "Ocean Gradient"
{
"theme": "base",
"themeVariables": {
"primaryColor": "#065A82",
"primaryTextColor": "#FFFFFF",
"primaryBorderColor": "#21295C",
"secondaryColor": "#1C7293",
"secondaryTextColor": "#FFFFFF",
"secondaryBorderColor": "#065A82",
"tertiaryColor": "#E8F4F8",
"tertiaryTextColor": "#21295C",
"lineColor": "#21295C",
"textColor": "#21295C",
"mainBkg": "#E8F4F8",
"nodeBorder": "#065A82",
"clusterBkg": "#F0F7FA",
"titleColor": "#21295C",
"edgeLabelBackground": "#FFFFFF"
}
}
cat > diagrama.mmd << 'EOF'
graph LR
A[Cliente] --> B[API Gateway]
B --> C[Serviço A]
B --> D[Serviço B]
EOF
# Prefira exportação de alta resolução para uso em PPT
mmdc -i diagrama.mmd -o diagrama.png -c mermaid-config.json -b white -w 1600 --scale 2
Etapa 3: Convenção de nomenclatura de imagens (OBRIGATÓRIA)
Todas as imagens geradas DEVEM incluir dimensões no nome do arquivo:
{nome}_{largura}x{altura}.png
Exemplos:
architecture_800x600.png- 800px de largura, 600px de alturatimeline_1200x400.png- 1200px de largura, 400px de alturachart_600x600.png- 600px quadrado
Ao salvar imagens, sempre inclua dimensões:
# Exemplo matplotlib
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
# ... criar gráfico ...
width_px = int(8 * 150) # 1200
height_px = int(5 * 150) # 750
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
# Geração genérica via script
python script.py --width 800 --height 600 --output diagrama_800x600.png
QA de layout (portão de qualidade OBRIGATÓRIO)
Sempre após qualquer edição de slide ou geração, execute:
python AppData/skills/pptx/scripts/validate_layout.py output.pptx
Isto verifica:
- Posicionamento de elementos dentro dos limites do slide
- Sobreposições
- Espaçamento mínimo
- Integridade de tabelas e gráficos
- Relação de aspecto de imagens
Se o QA falhar, corrija os problemas e execute novamente o script de validação até que passe.
Ferramentas de design
# Pesquisar e gerar sistemas de design para um tópico
python AppData/skills/pptx/scripts/design/search.py "Inteligência Artificial" --design-system
# Listar paletas de design disponíveis
python AppData/skills/pptx/scripts/design/search.py --list-palettes
# Aplicar um tema a uma apresentação existente
python AppData/skills/pptx/scripts/design/apply_theme.py apresentacao.pptx --palette ocean
Ferramentas de depuração e reparo
# Verificar integridade de arquivos PPTX (arquivo ZIP inválido, XML corrompido)
python AppData/skills/pptx/scripts/verify_pptx.py arquivo.pptx
# Corrigir problemas comuns pós-geração (estouro de texto, camadas, cores)
python AppData/skills/pptx/scripts/fix_pptx.py output.pptx
# Extrair todas as imagens/embutidos de um PPTX para inspeção
python AppData/skills/pptx/scripts/unpack.py arquivo.pptx saida/
Paletas de design incluídas
| Tema | Primário | Secundário | Acento | Fundo |
|---|---|---|---|---|
| Ocean Gradient | #065A82 | #1C7293 | #21295C | #F0F7FA |
| Midnight Executive | #1E2761 | #CADCFC | #FFFFFF | #F8F9FA |
| Forest & Moss | #2C5F2D | #97BC62 | #F5F5F5 | #F4F7F2 |
| Coral Energy | #F96167 | #F9E795 | #2F3C7E | #FFF8F0 |
| Warm Terracotta | #B85042 | #E7E8D1 | #A7BEAE | #FDFBF7 |
| Teal Trust | #028090 | #00A896 | #02C39A | #F0FCFC |
Cada paleta pode ser usada como ponto de partida e personalizada para as necessidades da apresentação.
Exemplo de uso
Criar uma apresentação do zero:
import pptxgenjs
from pptxgenjs import Presentation
prs = Presentation()
# Configurar tema Ocean Gradient
prs.theme = {
'colors': {'primary': '#065A82', 'secondary': '#1C7293', 'accent': '#21295C', 'background': '#F0F7FA', 'text': '#21295C'},
'fonts': {'heading': 'Georgia', 'body': 'Calibri'}
}
# Capa
slide = prs.addSlide()
slide.background = prs.theme['colors']['primary']
slide.addText('Apresentação de IA', {'x': 1, 'y': 2, 'w': 8, 'h': 2, 'fontSize': 44, 'color': 'FFFFFF', 'align': 'center'})
slide.addText('Uma visão geral abrangente', {'x': 1, 'y': 4.5, 'w': 8, 'h': 1, 'fontSize': 24, 'color': 'CADCFC', 'align': 'center'})
# Sumário
slide2 = prs.addSlide()
# ... adicionar elementos ...
prs.save('output.pptx')
Editar uma apresentação existente:
# Extrair e inspecionar
python AppData/skills/pptx/scripts/unpack.py modelo.pptx unpacked/
# Editar XML conforme necessário (veja editing.md)
# ... fazer alterações ...
# Reempacotar
python AppData/skills/pptx/scripts/pack.py output.pptx
# Verificar qualidade
python AppData/skills/pptx/scripts/validate_layout.py output.pptx