Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Coding
Wechat Native Publisher
Try it把定稿的纯文本/md/已排版HTML,一键渲染成微信原生富文本并推送到公众号草稿箱。支持自动排版和HTML直输两种模式,含主题换肤、排版偏好向导、封面自动生成、发布前自检。
What it does
1. **排版**:公众号不认原生 HTML 粘贴, 边框背景会被清洗。必须用「微信原生富文本」结构才能做出白底 + 图标 + 卡片化精品排版,且 **浏览器预览 = 微信端真实渲染**。 2. **流程**:很多工具只能让你「复制粘贴」一段 HTML 再去手动贴。本工链直接把正文推到**草稿箱**,你只需检查排版后点「发布」——**正文 0 编辑**。
The skill document
wechat-native-publisher
微信公众号图文「排版 + 推送」一体化工具链。解决公众号领域最头疼的问题:
- 排版:公众号不认原生 HTML 粘贴,
/边框背景会被清洗。必须用「微信原生富文本」结构才能做出白底 + 图标 + 卡片化精品排版,且 浏览器预览 = 微信端真实渲染。 - 流程:很多工具只能让你「复制粘贴」一段 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
# 2) 把定稿 md 推到草稿箱(自动套用当前目录 wnp_profile.json 的排版规范)
$PY "$SKILL/scripts/push_draft.py" --config \
--md "$SKILL/examples/sample.md"
# 只预览不推送(先自检 + 打印正文):
# $PY .../push_draft.py --config --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 \
--html "$SKILL/examples/sample_html.html"
# 只预览不推送:
# $PY .../push_draft.py --config --html article.html --no-push
HTML 文件格式要求:
- 元数据用 HTML 注释 frontmatter:
<!-- title: 标题 author: 作者 digest: 摘要 cover: 封面路径 --> - 正文为 `` 内内容(或全文,技能自动提取)
- 必须符合微信白名单规则(用
不用/,颜色用 `rgb()` 不用 hex,文本节点包) - 发布前自检会自动拦截不符合规则的内容,告诉你哪里要改
- 图片用 ``,技能自动上传到微信CDN并替换URL
md 语法约定(确定性映射,一字不改)
| 输入 | 渲染为 |
|---|---|
--- 开头的 frontmatter | 标题/摘要/作者/封面(title/author/digest/cover + sign_name/sign_slogan 文末签名) |
# 标题 | 文章标题元信息(若 frontmatter 已给 title 则此文内 # 作为正文大标题) |
## 标题 | 章节头,自动编号 01/02… |
### 标题 | 节内小标题 |
> 引用 | 引用卡片(连续行合并) |
**加粗** | 黑色加粗 |
==高亮== | 橙色荧光笔高亮(内容焦点,推荐给自创概念) |
*斜体* / `行内码` | 斜体 / 等宽灰底 |
``` lang | 代码块(主题浅底等宽圆角) |
- 项 / 1. 项 | 圆点列表 / 序号徽章列表 |
--- 独立行 | 主题色分隔线 |
 | 正文插图(自动上传换真实图 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 --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);容器统一(不用/``)。 - 凭据绝不写进 skill:
config.json由--config指定,或环境变量WECHAT_PUSH_CONFIG。skill 目录不留 config.json。 - 安全:本 skill 无任何第三方远程渲染,所有处理本地完成;只写入「草稿箱」不群发(群发需管理员扫码)。
v1.2.1 安全防护(SSRF + 路径遍历)
远程图片URL防护(SSRF):
- 下载远程图片前解析主机名,拒绝所有私有/回环/链路本地/多播/保留IP(IPv4+IPv6)
- 禁用HTTP重定向(防止公开URL重定向到内部地址)
- 仅允许80/443端口
- 流式下载,单张图片最大20MB
- 验证Content-Type为图片类型
- 用Pillow解码验证下载内容确实是有效图片
本地图片路径防护(路径遍历):
-
所有本地图片路径用
os.path.realpath()解析后,验证仍在授权目录(文章所在目录)之下 -
拒绝
../路径遍历和绝对路径逃逸 -
验证是常规文件(非目录/设备/FIFO)
-
仅允许
.jpg/.jpeg/.png/.gif/.webp/.bmp格式 -
单张图片最大20MB
-
需
requests+Pillow(封面/插图本地处理)。桌面/服务器均可。
参考
- 微信富文本「可存活」结构细节 →
references/wechat-whitelist.md - 新手环境指引/errcode 对照 →
push_draft.py --check-env
Related skills
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Write, debug, and tune Playwright specs with locator strategy, trace diagnosis, and CI-aware timeouts.
Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
More from zhouq2039-lang
Browse all skills抖音视频解析-把抖音视频链接生成交互式 HTML 报告。免费,不依赖任何 API key。一条命令出逐字稿(带时间戳)+ 连贯稿(无时间戳)+ 可视化 HTML 报告(含一句话总结、金句卡片、核心观点、结构拆解、内容总结等)
把B站视频链接一键转成中文字幕连贯稿 + 结构化 HTML 分析报告。优先使用 CC 字幕秒出结果,无字幕时本地 faster-whisper 转写,不需要任何 API key。
丢一条小红书笔记链接,自动抓取笔记内容(标题/正文/图片/标签/互动数据),AI 分析后输出交互式胶囊卡片 HTML 报告。需要联网访问小红书页面下载笔记内容和图片。分析由调用方 AI 完成,不需要外部 API Key。
丢一条热门短视频链接,自动下载视频、本地转写(faster-whisper)、AI分析,输出交互式胶囊卡片 HTML 报告。需网络下载视频和 Whisper 模型(首次约 500MB),转写和分析完全本地。分析由调用方 AI 完成,无外部 API 调用。HTML 报告无外部资源依赖(不含 Google Fonts 等第三方请求)。
丢个视频链接,还你字幕稿、结构化分析和可视化 HTML 报告。支持 B站 / 抖音 / 小红书。
浓缩一本好书的精华,像胶囊一样随取随用。输入一个作者或一本书,生成精美卡片式书摘文章,存到本地或推送到公众号,帮你对抗遗忘、碎片阅读、为自己的书架留痕。