# wechat-publish-cli **Repository Path**: codesr/wechat-publish-cli ## Basic Information - **Project Name**: wechat-publish-cli - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-25 - **Last Updated**: 2026-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wechat-publish-cli 一个面向微信公众号草稿发布的开源命令行工具。 ## 项目定位 `wechat-publish-cli` 提供一套围绕微信公众号内容发布的工作流: 1. 将 Markdown 渲染为适合公众号排版的 HTML 2. 通过 CSS 主题统一文章风格 3. 为主题维护封面策略与发布工作流 4. 直接发布到微信公众号草稿箱 5. 在本地设计器中调试、生成和导出主题 ## 当前能力 - Markdown 渲染为微信公众号兼容 HTML - CSS 主题库 - `--theme` 指定内置 CSS 主题 - `--theme-file` 直接读取外部 CSS 主题文件 - `--random-theme` 随机主题 - `themes import` / `themes validate` 导入与校验 CSS 主题 - `config init` / `config set` 初始化微信配置到 `.env` - `config set` 支持 AI provider / API key / model 配置 - 直接发布到微信公众号草稿箱 - 本地单页 HTML 的 CSS-first 主题设计器 - 主题封面计划、登记与发布回退能力 - 主题骨架生成、AI 风格分析与封面生成辅助命令 ## 内置主题 - `default`:基础通用稿 - `tech-blue`:偏科技、适合 AI / 技术简报 - `warm-magazine`:偏杂志、适合深度整理 - `blueprint-tech`:参考技术实战长文,强调蓝色信息层级与工程感 - `executive-brief`:参考企业高管演讲纪要,强调秩序感与稳重信息密度 - `security-flash`:参考安全快讯风格,强调风险提示与快讯冲击力 ## 安装依赖 ```bash npm install ``` ## 微信配置 ```bash node ./bin/wechat-publish-cli.js config init node ./bin/wechat-publish-cli.js config set --appid your_appid --appsecret your_appsecret ``` 这会在当前目录写入 `.env` 文件。 ## AI Provider 配置 公众号风格分析和封面图生成共用同一套 AI 配置,支持常用 provider,也支持自定义 OpenAI-Compatible 接口。 最简单的 OpenAI 配置: ```bash node ./bin/wechat-publish-cli.js config set --provider openai --apiKey sk-xxx --textModel gpt-4.1-mini --imageModel gpt-image-1 ``` SiliconFlow 配置示例: ```bash node ./bin/wechat-publish-cli.js config set --provider siliconflow --siliconflowApiKey sk-xxx --siliconflowTextModel deepseek-ai/DeepSeek-V3 --siliconflowImageModel Kwai-Kolors/Kolors ``` 自定义兼容 OpenAI 的 provider: ```bash node ./bin/wechat-publish-cli.js config set --provider custom --baseUrl https://your-api.example.com/v1 --apiKey sk-xxx --textModel your-text-model --imageModel your-image-model ``` 查看当前配置摘要: ```bash node ./bin/wechat-publish-cli.js config show ``` 对应 `.env` 变量: ```bash AI_PROVIDER=openai AI_BASE_URL=https://api.openai.com/v1 AI_API_KEY=sk-xxx AI_TEXT_MODEL=gpt-4.1-mini AI_IMAGE_MODEL=gpt-image-1 OPENAI_API_KEY= OPENAI_BASE_URL= OPENAI_TEXT_MODEL= OPENAI_IMAGE_MODEL= SILICONFLOW_API_KEY= SILICONFLOW_BASE_URL= SILICONFLOW_TEXT_MODEL= SILICONFLOW_IMAGE_MODEL= DEEPSEEK_API_KEY= DEEPSEEK_BASE_URL= DEEPSEEK_TEXT_MODEL= ``` 说明: - `AI_*` 是当前生效的通用配置,适合自定义 provider 或统一切换。 - `OPENAI_*`、`SILICONFLOW_*`、`DEEPSEEK_*` 是 provider 级别的便捷配置;当 `AI_*` 未填写时,会按 `AI_PROVIDER` 自动回退读取对应变量。 - 封面图生成要求当前 provider 同时支持图片生成接口,且已配置 `AI_IMAGE_MODEL`。 如果希望 `publish` 在未显式传 `--cover` 时自动使用固定封面,可在 `.env` 中增加: ```bash WECHAT_DEFAULT_COVER=./generated-images/generated-image-1778906203575-1.png ``` ## 查看主题 ```bash node ./bin/wechat-publish-cli.js themes list ``` ## 导入与校验主题 ```bash node ./bin/wechat-publish-cli.js themes import ./my-theme.css --name newsroom --label "新闻室" node ./bin/wechat-publish-cli.js themes validate ./my-theme.css ``` ## 渲染 Markdown ```bash node ./bin/wechat-publish-cli.js render article.md --theme default node ./bin/wechat-publish-cli.js render article.md --theme-file ./themes/newsroom.css node ./bin/wechat-publish-cli.js render article.md --random-theme ``` ## 发布草稿 ```bash node ./bin/wechat-publish-cli.js publish article.md --theme tech-blue node ./bin/wechat-publish-cli.js publish article.md --theme-file ./themes/newsroom.css --digest "一句话摘要" --source-url "https://example.com" node ./bin/wechat-publish-cli.js publish article.md --random-theme ``` ## 主题封面与一键发布工作流 ```bash node ./bin/wechat-publish-cli.js workflow cover-plan --theme blueprint-tech node ./bin/wechat-publish-cli.js workflow cover-mark --theme blueprint-tech --cover ./generated-images/today-cover.png node ./bin/wechat-publish-cli.js workflow publish article.md --theme blueprint-tech --title "今日文章标题" ``` 说明: - `workflow cover-plan`:查看某个主题今天是否需要重新生成封面,以及失败时应回退到哪张旧图。 - `workflow cover-mark`:当你今天第一次为该主题生成了新封面后,登记这张图,后续发布会自动复用。 - `workflow publish`:封装 `主题选择 + 默认封面选择 + render + publish` 的完整能力;如果没传 `--cover`,会优先使用该主题当天登记的封面,若当天没有新封面则回退到上一次成功封面。 说明: - 当前链路为:`Markdown -> wechat-publish-cli 渲染 -> Node 发布器 -> 微信草稿箱`。 - 当前版本已验证可成功发布到微信公众号草稿箱。 - CSS 主题会直接注入到最终 HTML,并同时映射到正式渲染器需要的基础样式对象。 - `publish` 会优先使用 `--cover`,否则依次尝试 `.env` 里的 `WECHAT_DEFAULT_COVER`、项目根目录 `cover.jpg/jpeg/png`、`assets/cover.*`、`generated-images/cover.*`;若都不可用,会自动降级为无封面发布而不是直接失败。 ## 设计器 ```bash node ./bin/wechat-publish-cli.js designer ``` 然后在浏览器打开: - `designer/index.html` 当前设计器能力: - 读取内置 CSS 主题库并切换主题 - 直接编辑 CSS 主题源码 - 左 / 中 / 右三栏工作台,支持拖拽调整宽度并记住上次布局 - 实时预览 Markdown 内容,预览失败时显示明确错误信息 - 内置更完整的主题评估样例,覆盖标题、正文、表格、图片、图注、代码块、脚注、callout 等对象 - 通过模块预设与常用功能开关快速调整主题 - 支持 `feature` 变量:首段缩进、图注、代码块行号、Mac 代码块、外链底部引用 - 内置“公众号风格分析”抽屉:可参考样例库、快速填充链接、生成 CSS 骨架、应用预览并保存为主题文件 - 展示主题评分、选择器数量等诊断信息 - 导出当前 CSS 主题文件 - 复制当前 CSS 主题源码 - 新建 / 删除运行态主题 主题使用路径: 1. 在设计器中调整 CSS 主题并导出 `.css` 2. 若保存到项目 `themes/` 目录,可直接 `--theme ` 使用 3. 若保存到其他目录,可先执行 `themes import ./my-theme.css` 4. 用 `render --theme ` 或 `publish --theme ` 验证正式输出 ## CSS 主题规范 当前主题文件统一使用 `.css`,基础变量如下: ```css :root { --md-primary-color: #245BDB; --md-font-size: 16px; --md-text-color: #243447; --md-line-height: 1.75; --blockquote-background: #eef4ff; --blockquote-border: #3b82f6; --code-bg: #f3f7ff; --code-color: #1f2937; --table-head-bg: #e8f0ff; --table-border: #d3def5; } ``` feature 开关: ```css :root { --feature-indent: off; --feature-figcaption: off; --feature-line-numbers: off; --feature-mac-code: off; --feature-link-footnote: off; } ``` 将 `off` 改为 `on` 表示启用对应增强功能。当前支持: - `indent`:首段缩进 - `figcaption`:图注结构样式 - `line-numbers`:代码块行号结构与样式 - `mac-code`:Mac 风格代码块头部 - `link-footnote`:外链转底部参考链接 常用选择器: - `h1` - `h2` - `h3` - `p` - `blockquote` - `pre.code__pre` / `pre` - `code` - `img` - `ul` / `ol` / `li` - `a` - `strong` - `table` / `thead` / `th` / `td` 当前已支持的 callout 语法包括: - `TIP` - `NOTE` - `WARNING` - `INFO` - `IMPORTANT` - `CAUTION` - `SUCCESS` - `TODO` - `QUESTION` - `FAQ` - `DANGER` - `ERROR` - `BUG` - `QUOTE` - `CITE` - `ABSTRACT` - `SUMMARY` - `TLDR` - `HELP` - `DONE` - `FAILURE` - `MISSING` - `EXAMPLE` ## 工作流 主题生产路径: 1. 在设计器左侧 Markdown 样例中观察主题对不同内容对象的表现 2. 在右侧直接编辑 CSS,或使用“模块预设 / 常用功能”快速得到初稿 3. 如需参考头部公众号风格,打开“分析风格”抽屉,选择样例链接或快速填入目标文章链接 4. 在分析抽屉里填写风格提炼备注,点击“一键生成并应用”立即看预览效果 5. 确认效果后保存为主题文件(`.css`),再通过 `render` / `publish` 做正式验证 ## CLI 主题辅助 通过 CLI 生成主题骨架: ```bash node ./bin/wechat-publish-cli.js themes parse-analysis --notes "这是一种偏科技蓝的风格,主色为 #2563eb,正文颜色 #1f2937,行高 1.8" node ./bin/wechat-publish-cli.js themes skeleton --name sample-theme --preset tech node ./bin/wechat-publish-cli.js themes from-analysis --name sample-theme --preset tech --notes "primary=#2563eb text=#1f2937 lineHeight=1.8" node ./bin/wechat-publish-cli.js themes ai-analyze --url https://mp.weixin.qq.com/s/xxx --theme default --notes "偏科技蓝,强调代码块层次" ``` 说明: - `parse-analysis`:把自然语言风格分析提炼成结构化字段 - `skeleton`:直接生成一份 CSS 主题骨架 - `from-analysis`:根据分析备注直接写出一份主题文件到 `themes/` - `ai-analyze`:调用已配置文本模型,输出公众号风格分析结果和可解析备注