360 Secure SkillHub
360 安全技能中心

Wechat Native Publisher V1.2 Clean

面向公众号图文发布:把 Markdown、纯文本或已排版 HTML 渲染为微信兼容富文本,支持主题/自定义配色、封面与插图上传、本地预览、发布前自检,并可推送到公众号草稿箱;凭据由外部配置提供,仅写草稿不群发。

zhouq2039-lang
zhouq2039-lang
热度 11.73
最近更新 2026-09-08 14:58:22
分类:营销依赖:代码执行 / 读写文件 / 第三方 API应用场景:社交媒体 / 工作流 / 模板 / 图像生成 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add wechat-native-publisher-v1-2-clean
Metadata
slug
wechat-native-publisher
displayName
公众号原生排版推送器
version
1.2.0
summary
公众号图文排版+推送一体化工具链。支持自动排版模式(纯文本/md→组件库自动排版)和HTML直输模式(已排好版的微信兼容HTML),一键渲染成微信原生富文本并推送到草稿箱,正文0编辑。含三套主题+自定义配色、排版偏好向导、封面自动生成、发布前自检。
license
MIT
name
wechat-native-publisher
description
公众号图文排版+推送工具链。把一篇「定稿」的 Markdown / 纯文本 / 已排版 HTML,一键渲染成「微信原生富文本」并自动推送到公众号草稿箱——正文 0 编辑,只需在后台点「发布」。两种使用方式:①自动排版模式(--md):纯文本/md → 技能用组件库自动排版 → 草稿箱,排版本身是硬实力,支持确定性 Markdown→微信组件映射(一字不改,只换渲染壳,不洗文案);②HTML直输模式(--html):用户/AI已排好版的HTML → 技能验证+上传图片 → 草稿箱,支持注释 frontmatter(title/author/digest/cover)。其他能力:首次使用有「排版偏好确认」向导(init_profile:账号署名/签名语/主题色/使用规范),生成专属 wnp_profile.json 自动套用;主题可换肤且支持自定义主色+强调色(16 色槽自动衍生,渲染与封面同色);封面与正文插图自动上传、无图时自动生成几何占位封面;本地离线预览(与微信端渲染一致);发布前自检(拦截微信必清洗的结构,如 hex 颜色/table)。当用户要「推送文章到公众号草稿箱/公众号排版/公众号封面图/公众号插图/md 转公众号/公众号多主题排版/公众号自定义配色/HTML转公众号/已排版HTML推送」时触发。凭据只从 --config 读取,不内置、不联网渲染。

wechat-native-publisher

微信公众号图文「排版 + 推送」一体化工具链。解决公众号领域最头疼的问题:

  1. 排版:公众号不认原生 HTML 粘贴,<table>/<div> 边框背景会被清洗。必须用「微信原生富文本」结构才能做出白底 + 图标 + 卡片化精品排版,且 浏览器预览 = 微信端真实渲染。
  2. 流程:很多工具只能让你「复制粘贴」一段 HTML 再去手动贴。本工链直接把正文推到草稿箱,你只需检查排版后点「发布」——正文 0 编辑。

适用人群

  • 泛内容运营者:公众号作者、编辑、代运营、写手,把自己定稿的 md/txt/word 一键变成精品图文。
  • 不需要写代码:用 md 流水线即可;要高度定制再走 Python 组件 流水线。

第一次使用:确认你的排版风格(第 0 步,2 分钟)

先跑一遍「排版偏好确认」向导,把主题色、署名、渲染规范固定成你的 wnp_profile.json, 之后每次推送/预览自动套用,不用重复回答:

$PY "$SKILL/scripts/init_profile.py"          # 交互式:账号署名 → 主题三选一或自定义配色 → 渲染规范 → 打印确认单 → 保存

不想交互可参数直给(脚本化):

$PY "$SKILL/scripts/init_profile.py" --name 我的账号 --slogan "清醒,但不冷漠" \
    --theme custom --primary "#2456a6" --accent "#ff6b4a" \
    --concept highlight --numbering on --end-sign on --cover auto

生成的 wnp_profile.json(放你的工作目录即可,push_draft/make_preview 自动发现):

  • theme:signature / mono / paper / custom(自定义主色+强调色,16 色槽自动衍生)
  • sign:文末品牌签名位(名字 + 签名语);frontmatter 写了 sign_name 时以文章为准
  • rules:==高亮== 用荧光笔还是黑粗 / ## 是否自动编号 01、02… / 文末签名开关
  • cover:无封面时是否自动生成同主题几何封面

排版规范(wnp_profile.json)与公众号凭据(config.json)完全分离:前者管「长什么样」, 后者管「推到哪」。凭据依旧只走 --config,profile 里永不存 appid/appsecret。

一键流程(两种使用方式)

方式一:自动排版模式(推荐,0 代码)—— 技能帮你排版

你给纯文本/md,技能用组件库自动排版成微信原生富文本,再推草稿箱。排版本身是这个技能的硬实力,不需要你自己写HTML。

PY=python   # 建议 Python 3.10+(需 requests、Pillow)
SKILL=wechat-native-publisher

# 1) 首次先自检环境(凭据/AppID/IP白名单/连接,有问题会给你指引)
$PY "$SKILL/scripts/push_draft.py" --check-env --config <config.json>

# 2) 把定稿 md 推到草稿箱(自动套用当前目录 wnp_profile.json 的排版规范)
$PY "$SKILL/scripts/push_draft.py" --config <config.json> \
    --md "$SKILL/examples/sample.md"

# 只预览不推送(先自检 + 打印正文):
#   $PY .../push_draft.py --config <config.json> --md article.md --no-push
# 换主题(覆盖 profile):--theme mono / --theme paper
# 换排版规范:--profile <其他路径>;跳过自检:--no-validate;BLOCK 仍强推:--force

方式二:HTML 直输模式 —— 你/AI 已排好版,技能直接推送

你或AI已经用HTML排好版了(符合微信白名单规则:section/rgb/span leaf),技能直接验证+上传图片+推草稿箱。不需要重新排版。

# 把已排好版的 HTML 推到草稿箱
$PY "$SKILL/scripts/push_draft.py" --config <config.json> \
    --html "$SKILL/examples/sample_html.html"

# 只预览不推送:
#   $PY .../push_draft.py --config <config.json> --html article.html --no-push

HTML 文件格式要求:

  • 元数据用 HTML 注释 frontmatter:<!-- title: 标题 author: 作者 digest: 摘要 cover: 封面路径 -->
  • 正文为 <body> 内内容(或全文,技能自动提取)
  • 必须符合微信白名单规则(用 <section> 不用 <div>/<table>,颜色用 rgb() 不用 hex,文本节点包 <span leaf="">)
  • 发布前自检会自动拦截不符合规则的内容,告诉你哪里要改
  • 图片用 <img src="本地路径或URL">,技能自动上传到微信CDN并替换URL

md 语法约定(确定性映射,一字不改)

输入 渲染为
--- 开头的 frontmatter 标题/摘要/作者/封面(title/author/digest/cover + sign_name/sign_slogan 文末签名)
# 标题 文章标题元信息(若 frontmatter 已给 title 则此文内 # 作为正文大标题)
## 标题 章节头,自动编号 01/02…
### 标题 节内小标题
> 引用 引用卡片(连续行合并)
**加粗** 黑色加粗
==高亮== 橙色荧光笔高亮(内容焦点,推荐给自创概念)
*斜体* / `行内码` 斜体 / 等宽灰底
``` lang 代码块(主题浅底等宽圆角)
- 项 / 1. 项 圆点列表 / 序号徽章列表
--- 独立行 主题色分隔线
![图注](路径或URL) 正文插图(自动上传换真实图 URL;配图注)

内容原则:只做结构映射,不增删、不改写文案。你写的正文长什么样,推出去就长什么样。

主题

id 名称 调性 适合
signature 绿橙旗舰 绿主导(结构) + 橙点缀(焦点) 职场/观点/个人 IP
mono 黑白极简 石墨黑 + 唯一经典蓝强调 通用职场/科技/方法论
paper 暖棕纸感 暖棕结构 + 陶土橙强调 读书/随笔/文化
custom 自定义配色 你给主色+强调色,16 色槽自动衍生 品牌色/账号专属调性

--theme 一键换肤;渲染与封面取色都跟随主题。 custom 由 init_profile.py --theme custom --primary #RRGGBB --accent #RRGGBB 定义; 主色管结构(徽章/章节方块/列表/竖线),强调色管焦点(荧光笔/概念/结尾卡), 浅底/浅边/深字/投影等其余槽位按同一色族自动算出,不用你配全。

目录结构

wechat-native-publisher/
├── SKILL.md
├── scripts/
│   ├── themes.json        # 三套主题的颜色槽(16 个语义槽)
│   ├── theme.py           # 主题加载/换肤/hex 取色 + 自定义配色衍生(apply_custom)
│   ├── renderer.py        # 核心渲染组件库(微信可存活结构:section/rgb/span leaf)
│   ├── md2render.py       # md/txt → 微信组件的确定性解析器(rules:概念高亮/编号)
│   ├── init_profile.py    # ★第 0 步:排版偏好确认向导 → 生成 wnp_profile.json
│   ├── profile.py         # wnp_profile.json 读取/换肤/规则应用(push/preview 共用)
│   ├── validate.py        # 发布前自检(hex/table/text-decoration/script 等 B 级拦截)
│   ├── wx_api.py          # 微信 API(token/封面/正文插图/草稿)—— 不内置凭据
│   ├── make_cover.py      # 封面:插画合成(+裁白边叠字品牌条) / 几何占位(--no-art)
│   └── make_preview.py    # 本地离线预览(微信同结构 + base64 插图;支持 --profile)
├── examples/
│   ├── sample.md          # 通用示例(去品牌,可直接套用)
│   └── sample_html.html   # HTML直输示例(已排好版的微信兼容HTML)
└── references/
    └── wechat-whitelist.md# 微信富文本存活细节

进阶「Python 组件流水线」请按 SKILL.md 下方组件速查,用 scripts/renderer.py 的组件 自建一个文章模块(导出 TITLE/AUTHOR/DIGEST/COVER/ILLUSTRATIONS/build_content(images))。

进阶:Python 组件流水线

需要高度定制(首屏摘要框、part_header 章节头、结尾赞看转卡片等富组件)时,写一个文章模块(导出 TITLE/AUTHOR/DIGEST/COVER/ILLUSTRATIONS/build_content(images)),用 renderer 组件拼正文:

$PY .../push_draft.py --config <config.json> --build examples.article
$PY .../make_preview.py --build examples.article --out preview.html

组件速查(scripts/renderer.py):p/key/concept/num_badge/dot/quote_card/summary_box/part_header/chapter_header/section_title/summary_title/img/caption/hr_dashed/signature/end_card。全部输出 section+rgb()+span leaf 的微信存活结构。

配色与安全要点

  • 颜色必须用 rgb(),不能用 hex(微信富文本会清洗 hex);下划线用 border-bottom(不用 text-decoration);容器统一 <section>(不用 <table>/<div>)。
  • 凭据绝不写进 skill:config.json 由 --config 指定,或环境变量 WECHAT_PUSH_CONFIG。skill 目录不留 config.json。
  • 安全:本 skill 无任何第三方远程渲染,所有处理本地完成;只写入「草稿箱」不群发(群发需管理员扫码)。
  • 需 requests + Pillow(封面/插图本地处理)。桌面/服务器均可。

参考

  • 微信富文本「可存活」结构细节 → references/wechat-whitelist.md
  • 新手环境指引/errcode 对照 → push_draft.py --check-env