CommunityEscrita e Ediçãogithub.com

ZhangYanXiong/wechat-mp

Fluxo completo de criação de artigos para WeChat Official Account: seleção de tópicos, redação, formatação, imagens e verificação de conformidade, gerando conteúdo pronto para colar e publicar.

O que é wechat-mp?

Esta skill automatiza o processo de criação de artigos para a plataforma WeChat Official Account (公众号), desde a redação até a entrega final. Ela cobre a ingestão de materiais de diferentes formatos (PDF, docx, pptx, páginas web), conversão de Markdown para HTML com estilos inline (4 temas prontos), geração automática de capas nos padrões exigidos (900×383 para头条, 1080×1080 quadrada, 200×200 miniatura) e uma dupla verificação de conformidade: um lint de escrita que garante que fatos, dados e argumentos tenham fontes, e um check de publicação que verifica limites de caracteres, links externos e palavras proibidas. A skill também oferece um 'workbench' (sheet.html) que centraliza todas as ações de copiar e colar para o editor do WeChat, facilitando a publicação manual. Ideal para criadores de conteúdo que precisam de um pipeline robusto e confiável para produzir artigos de alta qualidade sem retrabalho manual repetitivo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ZhangYanXiong/skills-hub/tree/HEAD/wechat-mp

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Prévia

Do README da skill

wechat-mp preview

Documentação

Fábrica de Conteúdo para WeChat Official Account (公众号)

Automatize o trabalho manual tedioso que vem depois de escrever: formatação, imagens, conformidade e entrega.

A redação em si fica por conta do modelo; esta skill cuida para que o artigo seja realmente publicável, fique bonito e não cause problemas.

Escopo de Capacidades

NívelCapacidadeDescriçãoDependências
L0 – Materialingest.py Ingestão de materialPDF/docx/pptx/página web/texto longo → material estruturado citávelpypdf, python-docx, python-pptx
L1 – Colávelmd2wx.py Markdown → HTML com estilos inline4 temas, saída pronta para colar no editorBiblioteca padrão
L2 – Artigo Finalizadocover.py Capa, lint.py Verificação de escrita, check.py Verificação de conformidade, preview.py Confirmação de formatação900×383 / 1080×1080 / 200×200; validação durante a escritaPillow, Chrome
L3 – Publicação DiretaAPI de rascunhos para publicação diretaNão implementado, contrato da interface em references/api.mdAppID + AppSecret + Conta verificada

A criação completa segue por padrão L1 + L2; tarefas parciais seguem o escopo solicitado, sem forçar a geração de todos os artefatos. O L3 requer que a conta seja verificada e que o AppSecret esteja disponível – contas de assinatura não verificadas não possuem interface de desenvolvedor. Portanto, é necessário confirmar isso com o usuário primeiro, sem assumir que está disponível.

Início Rápido

A ordem é importante: primeiro a prévia, depois a verificação de conformidade e, por fim, o workbench. O workbench é um snapshot; gerá-lo antes de revisões resultará em uma versão antiga após as alterações.

Para criação completa, a verificação segue o padrão de três tamanhos de capa deste projeto. Formatação pronta para publicação também deve verificar as capas; lint --out out --publish marca como "deve corrigir" capas ausentes ou com dimensões incorretas. Tarefas de "apenas formatação", "apenas verificação de conformidade" ou "apenas prévia" não exigem a complementação das capas. Os três tamanhos são especificações de entrega deste projeto, não substituem os requisitos atuais do backend do WeChat ou a verificação real de imagens.

# 0. Se houver arquivos de material, ingira-os primeiro (PDF/docx/pptx)
python3 scripts/ingest.py material.pdf -o out/ingest

# 1. Criação completa gera capas conforme especificação do projeto: 900×383 para头条, 1080×1080 quadrada, 200×200 miniatura
python3 scripts/cover.py --md article.md --all -o out/cover

# 2. Gere a prévia primeiro (esta etapa não gera o workbench); o diretório de saída é criado automaticamente se não existir
python3 scripts/md2wx.py article.md -o out/article.html

# 3. Confirme a formatação (se o navegador não estiver disponível, explique claramente)
python3 scripts/preview.py out/article.html -o out/preview.png --height 4000

# 4. Dupla verificação de conformidade (execute primeiro; se encontrar problemas, corrija o artigo e repita)
python3 scripts/lint.py article.md --cards out/material-card.md --outline out/outline.md --strict
python3 scripts/check.py article.md --html out/article.body.html --strict

# 5. Após tudo aprovado, gere o workbench final e tire um snapshot (a impressão digital do build é escrita nos artefatos e no build.json)
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html

# 6. Verificação final antes da entrega: os artefatos devem corresponder exatamente ao artigo fonte, e as capas devem estar presentes (--publish)
python3 scripts/lint.py article.md --out out --publish --strict
python3 scripts/check.py article.md --html out/article.body.html --strict

Todos os comandos devem ser executados no diretório raiz da skill. O python3 deve ser 3.9+; cover.py requer Pillow. Execute os passos em ordem e verifique os códigos de saída; não ignore falhas para continuar com etapas subsequentes; para execução em lote, habilite set -e primeiro. Se não houver material card ou outline, omita os parâmetros correspondentes e registre o escopo não verificado; se os parâmetros forem explicitamente fornecidos, mas a análise falhar, não pode ser tratado como "não fornecido" e deve ser liberado. O snapshot completo requer que as imagens locais estejam no diretório de saída; apenas formatação não exige snapshot ou capas.

Antes de Escrever: Escreva o Frontmatter Primeiro

As metainformações como título, resumo, autor e tema são escritas uma vez, no início do arquivo Markdown, e compartilhadas pelos três scripts:

---
title: Só depois de estragar 150 relatórios semanais é que entendi: o chefe não quer o que você fez
title_short: Pare de transformar relatórios semanais em listas de tarefas
summary: O relatório semanal passa por três camadas de interpretação; a cada mão, informações são perdidas. Se o chefe não puder roubar uma frase do seu relatório, sua produção da semana é zero.
author: Viajante na Névoa
tag: Avanço na Carreira
theme: growth
---

# Título do Corpo

O texto começa aqui...
CampoObrigatórioDescrição
titleSimTítulo longo, ≤64 caracteres; é o que é preenchido no backend
title_shortSimTítulo curto, ≤20 caracteres; usado apenas para verificar a exibição no feed de informações; não preenchido no backend
summarySimResumo, ≤120 caracteres
authorNãoCampo de autor no backend + crédito na capa; se não for especificado, o padrão é "Viajante na Névoa"
tagRecomendadoEtiqueta no canto superior esquerdo da capa, 2 a 4 caracteres
themeRecomendadotech / growth / minimal / elegant
cover_titleNãoUse se quiser escrever uma frase diferente na capa; se omitido, usa title

Depois de escrito, a renderização, capa e verificação de conformidade não precisam mais receber parâmetros.

Regra de crédito: Padrão "Viajante na Névoa"; se o usuário especificar, use o especificado.

CenárioAção
Usuário não mencionou créditoNão escreva nada; use automaticamente o padrão "Viajante na Névoa"; o workbench indicará "do crédito padrão"
Usuário especificou créditoEscreva no author do frontmatter – o workbench, capa e campo de autor do backend lerão dele
Apenas teste temporário de texto da capaUse md2wx.py --author / cover.py --author para substituir, sem persistir no arquivo

Prioridade: --author na linha de comando > author no frontmatter > padrão "Viajante na Névoa". Não use apenas cover.py --author sem alterar o frontmatter – isso causará inconsistência entre o crédito na capa e o campo de autor no workbench.

Fluxo de Trabalho

Primeiro, selecione o ramo da tarefa, depois execute as etapas correspondentes. Apenas a "criação completa" requer seguir todo o pipeline sequencialmente; tarefas parciais não aplicam todas as perguntas da criação completa.

TarefaSolicitação TípicaApenas ConfirmarRota de Execução
Criação CompletaEscrever um artigo; transformar material em artigoNicho, leitores, material, temaEtapa 0 → 0.5 (com material) → 1~7
Apenas FormataçãoArtigo finalizado, só formatar; converter para HTML do WeChatArquivo fonte finalizado, tema ou frontmatter existente; preencher metainformações ausentes apenas quando for publicarEtapa 4 → Etapa 6.2 (verificar avisos, sem reescrever) → Etapa 7 (entrega parcial)
Apenas CapaFazer apenas capa para WeChat Official AccountTexto da capa, tema/estilo, tamanhos necessários, etiqueta e crédito opcionaisEtapa 5 → Revisão manual do texto da capa → Etapa 7 (entrega parcial)
Apenas Verificação de ConformidadeVerificar apenas conformidade, formatação ou referênciasArquivos a verificar; use parâmetros correspondentes apenas se houver HTML, material card ou outlineEtapa 6, verificações relevantes → Etapa 7 (apenas entregar relatório)

Se não conseguir determinar o ramo (ex.: "me ajude a lidar com isso", "veja se isso pode ser publicado"): primeiro, siga a Etapa 0 da criação completa, mas faça apenas a pergunta mais crucial, não dispare as quatro perguntas de uma vez. É melhor perguntar uma vez a mais do que adivinhar o ramo errado e forçar todos os sete passos.

Tarefas parciais preenchem apenas as informações necessárias para a tarefa atual; informações existentes são reutilizadas diretamente; não reescreva o corpo do artigo finalizado ou os títulos existentes, não reconfirme leitores, tópico ou outline, nem force a apresentação de cinco opções de título novamente. Somente quando o usuário solicitar explicitamente a revisão do artigo, entre nas etapas de criação correspondentes.

  • Apenas formatação não chama cover.py, a menos que o usuário também solicite capa. O tema existente tem prioridade; se não houver preferência, use tech e explique, sem bloquear por isso.
  • Apenas capa não exige resumo, corpo, material card ou outline, nem falsifica um artigo para executar a verificação completa; conforme references/compliance.md, apenas revise o texto real da capa e explique o escopo da revisão.
  • Apenas verificação de conformidade não modifica os arquivos verificados. Se apenas Markdown estiver disponível, não passe --html; se apenas HTML estiver disponível e não houver Markdown fonte, faça apenas uma verificação manual de compatibilidade do HTML e explique o escopo, sem inventar um corpo falso. Se o material card estiver faltando, explique que referências e números não podem ser totalmente verificados.
  • Se Pillow ou o navegador estiverem ausentes, não instale por conta própria nem finja que a etapa foi concluída; entregue as partes concluídas e liste os itens faltantes. Uma tarefa parcial concluída não significa que o artigo inteiro está pronto para publicação.

Etapa 0 · Confirmar Entrada (apenas para criação completa)

Para criação completa, confirme quatro aspectos; se as respostas já existirem, reutilize-as; faça perguntas apenas se informações necessárias estiverem faltando, não invente:

  1. Nicho: Tecnologia/produto ou carreira/crescimento (determina o tema e o estilo de escrita)
  2. Leitores: Quem são, onde estão com dificuldades, o que podem fazer após a leitura
  3. Material: Existem casos reais, dados, código, capturas de tela?
  4. Preferência de tema: Por padrão, escolha com base no nicho (veja "Seleção de Tema")

Ao mesmo tempo, julgue qual é o ponto de partida desta vez, e siga caminhos diferentes:

Ponto de PartidaExemplo TípicoCaminho
Fornecer material"Transforme este PDF / relatório / página da web em um artigo do WeChat"Etapa 0.5 → Etapa 1
Fornecer tópico"Escreva um artigo sobre X"Pule a Etapa 0.5, vá direto para a Etapa 1
Ambos"Com base neste relatório, escreva sobre Y"Etapa 0.5 → Etapa 1

Etapa 0.5 · Ingerir Material (apenas se o usuário fornecer arquivos ou links)

Leia references/ingest.md e execute conforme ele. Não pule esta etapa e comece a escrever diretamente – ler o texto original diretamente pode levar a leitura superficial, perda de conclusões e erros nos números.

python3 scripts/ingest.py material.pdf atas_reuniao.docx -o out/ingest

Produz três camadas de arquivos (corpo limpo / esqueleto estrutural / frases citáveis candidatas). Em seguida, conforme ingest.md §2, extraia material cards:

PrefixoTipo
FFato (afirmação objetiva)
DDado (número + unidade + contexto)
OOpinião (afirmação do autor original, não é fato)
?Duvidoso (contraditório / sem fonte / precisa verificar)

O entregável desta etapa é a tabela de material cards + lista de lacunas; primeiro, confirme com o usuário e depois prossiga.

Três linhas vermelhas (ingest.md §3): não altere números, não altere contextos, não transforme suposições em fatos. Se encontrar vários valores para o mesmo indicador, coloque-o no card ? e pergunte, nunca escolha um silenciosamente.

Etapa 1 · Expansão do Tópico e Criação do Outline

  • Usuário forneceu material: A partir dos material cards, deduza quais ângulos podem ser abordados (references/topic-expand.md §3)
  • Usuário forneceu apenas tópico: Siga topic-expand.md §1–§3, expanda uma frase em uma árvore de argumentos

Em seguida, combine references/writing-playbook.md §1 (linha de base do nicho) e §4 (5 modelos de estrutura) para selecionar o esqueleto, e produza um outline com proporção de palavras para o usuário confirmar.

Cada argumento no outline deve estar vinculado a um número de material card ([F1] [D2]); argumentos sem vínculo são removidos diretamente, não invente para manter a estrutura completa (topic-expand.md §4).

Etapa 2 · Escrever Título e Resumo

Leia references/writing-playbook.md §2 e §6:

  • Produza título longo (≤64 caracteres, para campo no backend) + título curto (≤20 caracteres, para exibição no feed)
  • Uma vez, apresente 5 opções, anotando qual fórmula cada uma usou, e deixe o usuário escolher
  • Resumo ≤120 caracteres, forneça 1 a 2 versões

Etapa 3 · Escrever o Corpo

Escreva em Markdown seguindo o outline, prestando atenção a:

  • Início conforme o gancho da seção §3, as primeiras 3 linhas devem prender o leitor
  • Cada parágrafo trata de um assunto; parágrafos individuais ≤5 linhas (cerca de 260 caracteres)
  • Finalização conforme §5, use "conclusão com pergunta / prévia da série / resumo de valor", não escreva para induzir compartilhamento
  • Após escrever, passe pela lista de 24 itens da seção §7 para verificar o "cheiro de IA", remova todas as palavras de transição que não afetam a compreensão

Etapa 4 · Renderização da Formatação

Use o theme do frontmatter ou o tema explicitamente especificado pelo usuário para renderizar; se não houver preferência, escolha com base no nicho; para formatação parcial, o padrão é tech:

python3 scripts/md2wx.py article.md -o out/article.html

O diretório pai da saída é criado automaticamente; produz dois arquivos:

  • out/article.html – Página de prévia (com contêiner de fundo branco, como página de leitura em dispositivo móvel) → para visualizar
  • out/article.body.html – Fragmento de corpo puro → plano de colagem alternativo

Esta etapa não gera o workbench; o out/sheet.html final é gerado na Etapa 7, evitando salvar snapshots de arquivos prematuros antes da conclusão da capa e da versão final.

Após a renderização, use preview.py para capturar a tela; verifique você mesmo antes de entregar ao usuário (o título está com quebras de linha feias? a tabela está muito larga? o bloco de código foi cortado?). Se o navegador não estiver disponível, abra o HTML e verifique manualmente, explicando que não houve captura de tela; não peça para reescrever o artigo por conta disso.

Etapa 5 · Gerar Capa (Obrigatório para Publicação)

Sem capa, não é possível publicar no WeChat. Esta etapa não é opcional na "criação completa" e na "formatação para publicação".

python3 scripts/cover.py --md article.md --all -o out/cover

Gera os três tamanhos de uma vez: cover.png 900×383 (头条 2.35:1), cover-square.png 1080×1080 (quadrada), cover-thumb.png 200×200 (miniatura). Se as dimensões estiverem erradas, a plataforma cortará a imagem; lint --publish fará a verificação.

Os parâmetros são lidos por padrão do frontmatter (título, etiqueta, autor, tema), geralmente não é necessário passá-los novamente:

  • --style: gradient (padrão, fundo escuro) / minimal (fundo branco, artigos de opinião) / band (faixa colorida, artigos de marca)
  • --all gera os três tamanhos: 头条 900×383, quadrada 1080×1080, miniatura 200×200
  • O título da capa usa por padrão title (o título longo tem mais gancho); se quiser trocar o texto, adicione cover_title no frontmatter

Etapa 6 · Dupla Verificação de Conformidade (Dois Portões, Cada um Cuida de uma Parte)

A criação completa executa ambos os portões; formatação apenas e verificação apenas selecionam as verificações correspondentes conforme a tabela de entrada, sem forçar a criação de materiais ausentes ou alterar o manuscrito original. Quando faltam metainformações, material cards ou capturas de tela, registre as limitações; a entrega parcial não é considerada como verificação de publicação completa.

6.1 Portão de Escrita – Verifica "se os argumentos têm fundamento, de onde vêm os números"

python3 scripts/lint.py article.md --cards out/material-card.md --outline out/outline.md

Este é um portão rígido, não uma sugestão de escrita:

VerificaçãoRegraConsequência se Não Passar
Referência vazia[F1] no corpo deve existir no material cardRelata "deve corrigir"
Card duvidoso[?N] não pode aparecer no corpoRelata "deve corrigir" – verifique ou remova
Número sem fonteCada "número + unidade" no corpo deve ser encontrado em um card F/DRelata "deve corrigir"
Argumento sem suporteCada suporte no outline deve ter ≥1 [F]/[D]Relata "deve corrigir"
Qualidade do argumento principalNão pode ser uma frase (ex.: "cache é importante")Relata "deve corrigir"
Card de opiniãoQuando [O] é citado, avisa que não deve ser usado como argumento principal"Deve confirmar"
Lista de lacunasO outline deve ter lacunas P0/P1/P2"Aviso"

Se o material card estiver faltando, a verificação é reduzida automaticamente: apenas avisa que "os números não podem ser verificados" e lista todas as unidades com números para revisão manual.

Verificação de versão dos artefatos: Ao adicionar --out <diretório de artefatos>, também compara a impressão digital do build nos entregáveis com a do artigo fonte atual.

python3 scripts/lint.py article.md --out out --publish --strict

--publish indica verificação dentro do escopo de pronto para publicação; deve ser usado com --out para especificar o diretório de artefatos; a falta do parâmetro de diretório resulta em erro. Ele verifica a existência dos arquivos e a largura/altura no cabeçalho PNG de acordo com as especificações de três tamanhos deste projeto; não decodifica completamente as imagens, nem verifica o texto da capa, upload ou requisitos do backend do WeChat.

SituaçãoJulgamento
Impressão digital do artefato == impressão digital do artigo fonte atualAprovado
Artigo alterado, mas não re-renderizado"Deve corrigir": a página de prévia/o workbench são versões antigas
Resumo do artigo fonte registrado em build.json não corresponde"Deve corrigir": o artigo fonte foi modificado após a geração
article.body.html foi substituído ou editado manualmente"Deve corrigir": verificação de desvio usando o resumo do corpo em build.json
Artefato não possui impressão digital"Deve confirmar": gerado por script antigo ou modificado manualmente
Capa faltando / dimensões incorretas (--publish)"Deve corrigir": não atinge as especificações de capa prontas para publicação deste projeto

Esta etapa é a única garantia mecânica para evitar "alterar o artigo, esquecer de reexecutar e publicar a versão antiga". Execute obrigatoriamente antes da entrega.

6.2 Verificação de Publicação – Verifica "se pode publicar"

python3 scripts/check.py article.md --html out/article.body.html --strict

O comprimento do título e do resumo são lidos automaticamente do frontmatter, não sendo necessário passá-los novamente.

Critérios rígidos de aprovação:

IndicadorRequisito
"Deve corrigir" do lintDeve ser 0
Itens de alto risco0 itens de alto risco não resolvidos; falsos positivos confirmados manualmente devem ter evidências e registro de revisão
Metainformaçõestitle, title_short, summary são obrigatórios e não vazios; apenas campos de linha única chave: valor são suportados
Número de caracteres do títuloTítulo longo ≤64, título curto ≤20; a parte inicial do título real publicado ainda precisa ser verificada manualmente
Número de caracteres do resumo≤120
Imagens de domínio externoFaça upload ou substitua por imagens utilizáveis no WeChat antes da publicação e confirme no editor de prévia
Conteúdo profissional ou confidencialDeve ser revisado manualmente/pela equipe jurídica; a remoção de palavras-chave, reescrita ou desidentificação não substitui a revisão e autorização

Ambos os --strict podem ser usados em CI: código de saída 1 se houver "deve corrigir" ou alto risco. check.py trata metainformações ausentes/excessivamente longas, valores de campo multilinha não suportados, e HTML explicitamente especificado mas inexistente como alto risco; mesmo sem --strict, os problemas são relatados, mas o código de saída é 0.

A verificação de publicação escaneia title, title_short, summary, cover_title, author, tag e o corpo campo por campo; o código no corpo ainda é ignorado, mas acentos graves nas metainformações não podem contornar a verificação. O field no JSON finding indica a fonte; a line do corpo ainda é relativa ao corpo. Os valores de substituição de título/resumo na linha de comando são o objeto final da verificação.

Aprovação na verificação não significa permissão para publicar. Para itens de alto risco, siga references/compliance.md §0 para registrar "pendente de revisão / falso positivo confirmado / revisão concluída / publicação recusada"; o script não pode ler ou substituir registros de revisão manual; falso positivo confirmado não faz --strict passar automaticamente. Se problemas profissionais, de autorização ou confidenciais não estiverem resolvidos, pare e não entregue como artigo publicável. Itens de médio/baixo risco mantidos, itens confirmados manualmente e suas justificativas devem ser explicados juntos.

Se o material tiver direitos de uso ou origem incertos, primeiro obtenha autorização/fonte ou exclua; não altere a magnitude, nem transforme opiniões externas em experiências do autor. Após a ingestão do material, preserve separadamente permissões_e_limitações.md, registrando fonte, créditos, escopo de uso, limites aplicáveis e status de autorização.

Etapa 7 · Entrega

Para tarefas que exigem HTML/workbench, gere novamente o workbench final antes da entrega. Depois de confirmar que a versão final, metainformações, tema e capa solicitada estão concluídos, execute com o mesmo artigo fonte e tema/parâmetros de saída:

python3 scripts/md2wx.py article.md --sheet -o out/article.html

Isso atualiza simultaneamente a página de prévia, o fragmento do corpo e sheet.html; o workbench lê do mesmo diretório os arquivos finais cover.png, cover-square.png, cover-thumb.png. É um snapshot de arquivo estático; atualizar o navegador não regenera o workbench. Se depois disso o corpo, metainformações, tema ou imagens forem modificados, regenere os artefatos relacionados e reexamine as verificações e prévias correspondentes; não entregue snapshots antigos.

Impressão digital do build e reversão:

  • A impressão digital inclui o código de renderização, o artigo fonte, o tema mesclado, as substituições reais de título/crédito/tema e opções de saída, imagens locais e conteúdo da capa; alterações em metainformações ou ativos locais invalidam builds antigos.
  • build.json usa schema 2, declara os arquivos realmente solicitados e registra SHA256 completo de cada um; o verificador valida com base nos parâmetros reais de renderização, portanto uma substituição explícita de tema com -t não deve causar falsos positivos. Arquivos ausentes, conteúdo substituído ou estrutura danificada bloqueiam.
  • article.body.html permanece puro, sem marcações adicionais; ele e a prévia/workbench são verificados separadamente pelo resumo da lista, não confiando apenas na tag de impressão digital no HTML. Se a lista antiga não puder ser verificada completamente, sugira re-renderizar.
  • A criação completa adiciona --snapshot na última renderização, salvando o artigo fonte, HTML solicitado, imagens locais e capa em out/.builds/<impressão_digital>/. Snapshots com a mesma impressão digital não podem ser sobrescritos; a falta de imagens locais não pode fingir ser um snapshot completo. As imagens devem ser caminhos relativos dentro do diretório de saída; o snapshot não obtém imagens remotas.
  • md2wx.py --list-builds --out-dir out para ver histórico; md2wx.py --rollback <impressão_digital> --out-dir out restaura o artigo fonte ao caminho original, artefatos, imagens locais e capa, e limpa saídas que a declaração da versão anterior tinha, mas esta versão não precisa. Antes de operar, confirme a intenção de reversão, pois ela sobrescreverá o artigo fonte atual e os ativos declarados; use apenas snapshots locais confiáveis.
  • A reversão primeiro verifica todos os arquivos e resumos; arquivos danificados ou caminhos perigosos não são restaurados parcialmente. O snapshot não restaura scripts de renderização ou configurações globais de tema; após essas alterações, ainda é necessário re-renderizar e reexaminar. O artigo fonte do snapshot de stdin é restaurado para article.md no diretório de saída.
  • Apenas formatação usa o comando sem --snapshot; criação completa usa:
python3 scripts/md2wx.py article.md --sheet --snapshot -o out/article.html

Lista de verificação pré-entrega (confirme item por item, não substitua "os comandos foram executados" por "os arquivos foram vistos"):

  • Criação completa executou lint.py article.md --out out --publish --strict com sucesso – o artefato corresponde ao artigo fonte atual e as capas atendem às especificações do projeto
  • check.py article.md --html out/article.body.html --strict executado com sucesso – sem itens de alto risco
  • Visualizou pessoalmente article.html ou preview.png (quebra de linha do título, largura da tabela, corte do bloco de código)
  • O título/título curto/resumo/autor em sheet.html correspondem ao que será preenchido no backend
  • As capas dos três tamanhos existem e as dimensões do cabeçalho estão corretas (--publish já verificou); abra as imagens separadamente para confirmar que são decodificáveis e o texto não foi cortado
  • As imagens locais no corpo foram listadas como "necessário fazer upload manual"
  • A descrição da entrega informa claramente: quais itens de médio/baixo risco foram mantidos, o que não foi concluído

Verifique os arquivos de saída reais item por item; itens faltantes de capa ou captura de tela devem ser listados; não substitua a confirmação de arquivos pela execução de comandos. Quando a conclusão total é necessária, itens faltantes não resolvidos não são marcados como entrega completa. O Markdown fonte é fornecido junto com o caminho real, sem exigir movimentação ou substituição do manuscrito original do usuário.

Auto-verificação por escopo da tarefa (a auto-verificação segue a solicitação, não aplique a verificação de criação completa a tudo):

  • Criação completa: toda a lista, item por item
  • Apenas formatação: artigo fonte, HTML, fragmento do corpo, workbench disponíveis são suficientes; apenas formatação não exige capas de três tamanhos
  • Apenas capa: apenas revise o texto e as dimensões da capa; não exige corpo ou verificação de conformidade
  • Apenas verificação de conformidade: apenas entregue o relatório; não exige revisão do artigo

Tarefas parciais entregam apenas os artefatos solicitados: apenas formatação entrega artigo fonte, HTML, fragmento do corpo e workbench; apenas capa entrega imagens nos tamanhos solicitados e conclusão da revisão de texto; apenas verificação de conformidade entrega o relatório de verificação. Não é necessário completar capas, material cards ou outlines; não trate a verificação parcial como verificação de publicação completa.

A lista a seguir aplica-se apenas à criação completa; a localização do arquivo fonte segue o caminho real:

out/
├── article.md          Markdown finalizado (arquivo fonte, com frontmatter)
├── article.html        Página de prévia (para visualização)
├── article.body.html   Fragmento de corpo puro (plano alternativo)
├── sheet.html          Workbench de publicação (para publicar)
├── cover.png           Capa 头条 900×383
├── cover-square.png    Quadrada 1080×1080
├── cover-thumb.png     Miniatura 200×200
└── preview.png         Captura de tela da formatação

A criação completa também fornece: título longo / título curto / resumo / conclusão da verificação de conformidade (quais itens de médio/baixo risco foram mantidos). Tarefas parciais listam apenas as metainformações existentes, os artefatos solicitados, o escopo real da verificação e os itens não concluídos; não escreva títulos, resumos ou corpo para completar a lista.

Publicar no WeChat Official Account (Passos Cruciais)

Abra out/sheet.html; uma página resolve todas as operações de copiar e colar:

  1. ① Título → Clique em "Copiar" → Cole no campo de título do backend
  2. ③ Resumo → Clique em "Copiar" → Cole no campo de resumo do backend
  3. ④ Autor → Clique em "Copiar" → Cole no campo de autor
  4. Corpo → Clique em "Copiar corpo" no canto superior direito → Cole na área de edição
  5. Imagens do corpo → No card "Imagens do corpo" à esquerda, processe uma a uma (veja abaixo)
  6. Capa → Faça upload de cover.png
  7. Siga a "Lista de verificação pré-publicação" item por item

Por que as imagens desaparecem

O editor do WeChat, ao colar, recebe apenas texto e estilos; ele não faz upload de imagens locais para você. O <img src="fig.png"> no corpo é um caminho relativo local; ao colar no editor, a posição da imagem fica vazia – isso não é um erro de formatação, é uma limitação do ambiente host: a imagem primeiro precisa estar no servidor do WeChat (mmbiz.qpic.cn) para ser exibida.

Sem permissão de API, esta etapa só pode ser manual. O workbench a simplifica em dois caminhos:

MétodoAção
Copiar imagemClique em "Copiar imagem" → Cmd+V na posição correspondente no editor; o WeChat fará o upload automaticamente
Copiar com clique direitoSe "Copiar imagem" falhar, clique em "Abrir imagem original" → clique direito "Copiar imagem" → cole no editor
Plano BClique direito "Salvar imagem como" → Botão "Imagem" no editor → Faça upload

A ordem segue a ordem de aparecimento no corpo (1ª imagem, 2ª imagem...); ao colar, encontre a posição comparando com o corpo.

Não copie o .md fonte: md é texto puro; ao colar, só restarão # e **, e as imagens e formatação não serão preservadas. É necessário copiar o rich text do workbench, ou o resultado renderizado de article.body.html.

Verifique se há imagens faltando: antes de publicar, na visualização do celular, percorra do início ao fim para ver se cada imagem está no lugar.

Plano alternativo: abra article.body.html no navegador → Cmd+A → Copiar → Colar. (Não use article.html, é a página de prévia e trará contêineres externos.)

Seleção de Tema

TemaAplicaçãoVisual
tech Azul tecnologiaAnálise técnica, análise de produto, prática de engenhariaDestaque azul, H2 com barra vertical, bloco de código escuro
growth Laranja crescimentoExperiência profissional, retrospectiva de crescimento, metodologiaDestaque laranja quente, bloco de cor H2, espaçamento entre linhas mais solto
minimal Preto e branco minimalistaComentários de opinião, reflexão profundaPreto e branco, H2 sublinhado
elegant Azul marinho empresarialArtigos de marca, publicações formais, análise de setorFonte serifada, destaque azul marinho, H1 centralizado

Princípio: quanto mais denso o conteúdo, mais simples o tema. Em caso de dúvida, use tech.

Para adicionar um novo tema, basta adicionar um JSON em scripts/themes/; a descrição dos campos está em references/layout-spec.md §13.

Referência Rápida de Comandos

ComandoFunçãoParâmetros Principais
ingest.py <arquivo...>Material → texto estruturado + frases citáveis candidatas-o diretório de saída, --json
md2wx.py <md>Markdown → HTML do WeChat--sheet gera workbench, --snapshot tira snapshot, -t tema, -o saída, --no-body, --check
md2wx.py --list-buildsVer histórico de builds--out-dir
md2wx.py --rollback <impressão>Restaurar artefatos de uma versão--out-dir
cover.pyCapa--md lê frontmatter automaticamente, --style, --all; --title/--tag/--author/--theme para substituir
lint.py <md>Portão de escrita + verificação de versão de artefatos--cards, --outline, --out, --json, --strict
check.py <md>Verificação pré-publicação--html, --json, --strict; --title/--summary para substituir frontmatter
preview.py <html>Captura de tela para confirmar formatação-o, --width, --height

Título, resumo, autor e tema são lidos por padrão do frontmatter; os parâmetros de linha de comando são usados apenas para substituição temporária.

--strict é usado em CI/automação: código de saída 1 se houver alto risco.

Armadilhas Comuns (É Preciso Saber)

ArmadilhaSintomaTratamento
Link externo não clicávelhttps://... no corpo não reage ao cliqueTransforme em descrição textual ou coloque em "Ler o original"
Imagem em brancoImagem de domínio externo aparece como placeholder/bloco cinzaFaça upload manual no editor ou use a interface de material L3
Linha em branco instávelEspaçamento entre parágrafos com linhas em branco, comportamento inconsistente entre clientesUse margin para espaçamento; md2wx.py já trata isso
Quebra de linha em códigoCódigo longo é automaticamente quebrado, ilegívelBloco único ≤30 linhas; divida fragmentos muito longos
Tabela estourandoTabelas com mais de 5 colunas causam rolagem horizontalNúmero de colunas ≤4; se ultrapassar, divida em duas tabelas
Título cortadoO feed de informações mostra apenas cerca de 20 caracteresDeve ter uma versão de título curto
Sem capa, não publicaA capa头条 no backend é obrigatória; pular a capa equivale a não entregar o artigoCriação completa deve executar cover.py --all; antes da entrega, use lint --out --publish para verificar
Versão antiga entregueArtigo alterado, mas não re-renderizado; a versão publicada é a anteriorAntes da entrega, execute lint --out out --strict; impressões digitais incompatíveis bloquearão

Documentos de Referência (Carregue Conforme Necessidade, Não Leia Tudo de Uma Vez)

DocumentoQuando Ler
references/ingest.mdEtapa 0.5: ingestão de material, extração de material cards, regras de fidelidade, conflitos de contexto, lista de lacunas
references/topic-expand.mdEtapa 1: expansão de tópico, árvore de argumentos, disciplina anti-embromation
references/writing-playbook.mdEtapas 2-3: fórmulas de título, gancho de abertura, modelos de estrutura, remoção de cheiro de IA
references/compliance.mdEtapa 6: lista de palavras de conformidade, tipos de violação, expressões alternativas
references/layout-spec.mdQuando precisar ajustar formatação, adicionar tema, ou julgar problemas visuais
references/api.mdQuando o usuário quiser fazer publicação automática L3

Dependências

DependênciaUsada emQuando Ausente
Python 3.9+Todos os scriptsObrigatório
Pillowcover.pyA etapa de capa falhará; o resto funciona
pypdfingest.py analisar PDFJá incluído em scripts/vendor, sem necessidade de instalação adicional
python-docxingest.py analisar docxJá incluído em scripts/vendor, sem necessidade de instalação adicional
python-pptxingest.py analisar pptxJá incluído em scripts/vendor, sem necessidade de instalação adicional
Chrome/Chromiumpreview.py captura de telaA captura de tela não estará disponível; verifique manualmente o HTML
beautifulsoup4ingest.py analisar HTMLJá incluído em scripts/vendor, sem necessidade de instalação adicional

scripts/vendor/ contém dependências Python puras selecionadas, sem necessidade de instalação adicional. Apenas Pillow e o navegador podem exigir instalação manual.

Se o ambiente não tiver pip para instalar dependências, a capa não estará disponível; explique ao usuário a situação real, sem se oferecer para adaptar.

Licença

MIT

Habilidades Relacionadas