TGViewer
V2EX V2EX @pushv2ex · 552 subscribers
Post #238636 2
[分享创造] 开源!全套公众号写作、封面、发布自动化工具包

分享一套我每天在用的公众号自动化流水线:写完 Markdown 丢给 CLI ,从格式归档、AI 审校、纯算法封面生成到送进微信官方草稿箱,全自动跑完。

概览

主执行工具是 zzhub-pipeline( npm 包名 @akairos/pipeline,终端简写为 zzp)。

它的定位是一个命令行任务状态机,纯本地运行、可自部署,对终端与各类 Agent 极其友好。整个流水线严格按照准备、审核、渲染、发布四个阶段顺序流转,中间所有状态和产物都会持久化保存在本地目录中。即使中途某一步网络超时中断,再次执行也能断点续跑,不需要推倒重来。

文章草稿

流水线的唯一输入源是最通用的标准 Markdown (.md),不管你平时用 Obsidian 、VSCode 、Typora ,还是直接由大模型生成底稿。

把文件交给 CLI:
zzp init --workspace ./my-posts --intent-text "发公众号文章给大号"
zzp attach-body --file ./draft.md

CLI 接到文章后,会在本地自动创建独立的任务目录与版本化资产目录(如 posts/2026-10-16-my-article/),把引用的本地图片统一归档,解析出标题、摘要与日期。后续所有的修改、生成的封面图和最终导出的 HTML 都在这里,路径清晰,方便 Git 管理。

上面是我之前走本地 CLI 发布的记录,后面迁移到云上就非常爽了。==因为之前靠 Electron 打通本地调用,所以离开电脑就没法再发文章了==,很蛋疼。上云之后,我就完全抛弃了客户端,直接全走 Web 端就是通的,手机上打开浏览器就能写能发!

内容审核

流水线里特意加入了一道质量门禁(content_review),专为 Agent 写作场景兜底。

AI 初稿难免偶发幻觉、虚构细节或车轱辘话。为了防止有瑕疵的内容直接流向下游,初稿导入后状态默认置为不可信(unchecked),此时封面生成与发布接口都会锁住。

可以通过第二个不同架构的模型做交叉核对,或者人工在本地看一眼。确认通过后执行命令放行:
zzp review --state ./posts/2026-10-16-my-article/workflow-state.json --status passed


封面生成

微信公众号封面非常麻烦:文章首图要求 2.35:1 比例(如 900x383 ),而在订阅号信息流和聊天卡片里,又会被居中裁剪为 1:1 正方形。每次找图、量尺寸、居中避开裁切区都要耗费很多精力。

这里直接集成了独立的封面排版插件 typeset-studio( npm: @akairos/typeset-studio)。

它采用纯算法排版与后端原生 Canvas 渲染,几毫秒就能完成文字折行与对比度计算并直接输出 PNG ,==不需要启动无头 Chrome==。排版模板同时兼顾 2.35:1 与 1:1 双视区,大标题、副标题与作者标识自动收拢在正方形安全区内,无论怎么裁切都不会吞掉字。

模板记录的是文字排版方式和图片位置、固定素材位置,所以只需要再次接收新的文本和新的图片,就是同一种风格,不同内容的图。

封面图这个东西我不止研究过一两种方案了,也写过好几篇文章分享基于satori 和 satori-html的方案,但痛点还是模板太灵活了,没人去写 html 和 css ,但当时来 V 站宣传了一下 IMGX, 也收获了 100 多 star ,说明还是挺现实的痛点。

直到今年有了@chenglou/pretext之后,我才感觉这才是最丝滑的方案,甚至渲染成图文混排后都不需要再关心具体的样式了。

此时,只需要关注文章本身就可以,再套上排好的模板,美观性就好很多了

文章排版样式

公众号自带的排版功能简陋,第三方编辑器又需要频繁全选复制粘贴,改两个字就得重来一遍。

日常写作只要确定了一套舒服的字号、配色和行距,几乎不需要每篇都换。这套流程将排版能力拆分成了两个独立的 npm 包:

● 排版底座与编辑器:myno( npm: @akairos/myno),提供现代化的 Markdown 排版引擎。
● 微信富文本扩展:milkdown-article-plugins( npm: @akairos/milkdown-article-plugins),为 Markdown 扩充了提示块 Callout 、导读卡( INTRO )、文末卡( CTA )以及徽章等公众号兼容样式。

在本地调试样式也很方便,一条命令就能在浏览器拉起可视化调试台:
zzp wechat-preview studio

调好一次视觉主题后,后续直接由 CLI 全自动导出内联样式,告别手动搬运。

==这个工作台的本意是可视化的调出自己中意的一套样式,然后保存到配置,此后就不再动它了。==

这些所有的前端面板,都是为了方便的得到一组样式。如果预设都不满意,也可以在左下角打开高级配置,插入自定义 css,就会覆盖原有样式。

如果你有多个账号,只要在 pipeline 里配好,这里就可以自由切换,这套配置会挂在对应的账号上

多账号绑定与发布

自动化发公众号会不会有安全隐患?这里完全放心。流水线使用的是微信官方开放平台的标准接口(draft/add 与素材上传),没有任何网页爬虫或逆向行为。

由于微信官方接口要求调用方服务器 IP 必须加入白名单,而本地电脑往往没有固定的公网 IP 。

所以我单独开源了一个轻量级代理服务 bun-wx-server。部署在任意一台有固定 IP 的服务器上即可,本地 CLI 带着 Token 请求它完成中转调用。

只需要让 AI 读这个项目,然后参考一下,自己实现和部署即可。

开源仓库清单

整套工具相关的开源项目清单如下:

● [badge:brand|核心流水线] zzhub-pipeline( npm: @akairos/pipeline,命令 zzp):任务状态机,负责流程编排与状态持久化。
● [badge:success|纯后端渲染] typeset-studio( npm: @akairos/typeset-studio):兼顾双视区的算法封面渲染器,免 Chrome 极速出图。
● [badge:brand|排版底座] myno( npm: @akairos/myno):Milkdown 排版引擎与可视化排版调试台。
● [badge:info|微信扩展] milkdown-article-plugins( npm: @akairos/milkdown-article-plugins):为 Markdown 增加 Callout 、导读卡和徽章等排版插件。
● [badge:warning|需公网 IP] bun-wx-server:部署在固定公网 IP 服务器上的微信官方接口安全代理。
● [badge:info|笔记扩展] obsidian-wechat-publish:在 Obsidian 笔记里一键唤起发布流水线的社区插件。

交流与反馈

如果这套工具包能帮你省下发公众号的机械重复时间,欢迎给各个仓库点个 Star 。

遇到任何问题或有定制需求,欢迎在 GitHub 提 Issue 或 PR 一起完善。
More from @pushv2ex
  1. Oct 17, 2026[Google Play] 请问怎么给招商银行的借记卡加一层 pay,用来充值 gpt
  2. Oct 17, 2026[宽带症候群] 江苏电信阻断出国流量? 晚上经常访问外网出现所有国外网站都无法访问的情况。 不清楚是单纯的访问还是代理( vless reality )被检测,但只要重拨宽带获取到…
  3. Oct 17, 2026[分享创造] 做了个 AI 汽车视频工具,上传照片就能让自己的车“起飞” 最近做了个汽车 AI 视频小工具。上传一张车的照片,选好场景,就能生成起飞、飞越堵车或坡道翻转的短视频;不…
  4. Oct 17, 2026[全球工单系统] 高德地图 CarPlay 导航不给车道信息 最近在基于 DiPlay 适配车机,测试渲染车道的时候发现高德地图不给 CarPlay 车道信息,导致无法绘制车道,不…
  5. Oct 17, 2026[iPhone] 为了满足记账+记物的需求,我开发了一款 App 核心亮点 • 钱物一体:不仅能记下每天的收支,还能记录添置了多少物品,并且物品相关账单自动跟着生成。 • 双向追溯…
  6. Oct 17, 2026[程序员] 今天, PStack 官方支持 Claude Code 了,但是没支持 Codex,你品,你细品 10 月 17 日,poteto 的 PR #637 合进了 curs…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →