360 Secure SkillHub
360 安全技能中心

odd-articles

面向公众号等平台的内容生产与分发管线:记录素材并出稿、按框架写文章、排版与封面/微贴图 HTML、生成微博/博客园/朋友圈/播客文案、抓取微信文章,并通过 Chrome CDP 或 API 发布到多平台,另含存档与视频画布。依赖 Python、Bun/Node、Chrome 及平台凭证。

jackyhwei
jackyhwei
热度 34.10
最近更新 2026-05-18 11:43:58
分类:营销依赖:代码执行 / 联网浏览搜索 / 读写文件 / 第三方 API / 内部调用大模型应用场景:文案创作 / 社交媒体 / 博客写作 / 图像生成 ...

安装技能

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

执行命令安装此 skill: npx secure-skills-cli add odd-articles
Metadata
name
odd-article-skills
description
内容生产和分发统一管线。素材收集→出稿→排版→封面→朋友圈文案→多平台转换→一键分发。涵盖公众号写作、微贴图轮播图、博客园文案、微博文案、品牌视频、Chrome CDP 自动发布。

OddMeta文章生成技能 Article Generation Skill

本技能默认使用 oddmeta 品牌色作为示例。你可以在 references/ 目录下修改为自己的品牌色,或在 local/SKILL.local.md 中覆盖路径和个人设定。

一条龙:素材收集 → 写文章 → 排版 → 多平台内容 → 一键分发。


环境变量配置

本技能所使用到的环境变量在 local/.env 中配置。

支持的环境变量如下:

  • OUTPUT_DIR:输出目录,用于放置收集到的素材、生成的文章、排版预览、封面图、微贴图轮播图等文件。
  • ARCHIVE_DIR:存档目录,用于归档历史文档文件。
  • BRAND_NAME:品牌名称,用于在生成的文章中显示品牌名称。
  • BRAND_LOGO_DARK:品牌logo(深色),用于在生成的文章中显示品牌logo。
  • BRAND_LOGO_LIGHT:品牌logo(浅色),用于在生成的文章中显示品牌logo。
  • WECHAT_ID:微信公众号ID,用于发布文章。
  • WECHAT_SLOGON:微信公众号标语,用于在文章中显示。
  • WECHAT_APPID:微信公众号AppID,用于发布文章时的认证。
  • WECHAT_APPSECRET:微信公众号AppSecret,用于发布文章时的认证。
  • CNBLOGS_TOKEN:博客园Token,用于发布博客园文章时的认证。
  • MD_FORMATTER_DIR:Markdown格式化工具目录,用于格式化Markdown文章。
  • BAOYU_WECHAT_SKILL_DIR: 奥德元微信技能目录,用于发布文章。
  • MD_TO_WECHAT_SCRIPT: Markdown文章转微信文章脚本,用于将Markdown文章转换为微信文章。

输出目录 OUTPUT_DIR 示例

[输出目录]/
├── drafts/
│   └── current.json          # 当前素材列表
├── [文章标题].md              # 产出的文章
├── [文章标题]_preview.html    # 排版预览
├── [文章标题]_cover.html      # 封面图
└── [主题]-chartlet.html       # 微贴图轮播图

存档目录 ARCHIVE_DIR 示例

[存档目录]/
├── 20260321/                  # 按日期归档(YYYYMMDD)
│   ├── Fish-Audio-S2-Tutorial-v2/    # 文章标题目录
│   │   ├── Fish-Audio-S2-Tutorial-v2.md
│   │   ├── Fish-Audio-S2-Tutorial-v2_preview.html
│   │   ├── Fish-Audio-S2-Tutorial-v2_cover.html
│   │   └── manifest.json
│   └── OpenClaw-Memory-Deep-Article/  # 另一篇文章
│       ├── OpenClaw-Memory-Deep-Article.md
│       ├── OpenClaw-Memory-Deep-Article_preview.html
│       └── manifest.json
└── 20260320/
    └── ...

触发词

素材收集(Path A)

触发词 说明
/story 查看当前素材状态
"看看素材" 查看已记录的素材
"出稿" 生成文章 + 排版 + 封面图
"清空素材" 清空当前素材
"记一笔:xxx" 手动添加素材
"素材+1:xxx" 手动添加素材
"写个朋友圈" 根据素材/文章生成朋友圈文案

内容生成(Path B)

触发词 说明
/chartlet + 微信链接 微信文章转微贴图轮播图
"转微贴图" + 微信链接 同上
"做成微贴图" + 微信链接 同上
"转微博" + 微信链接 生成微博文案
"转博客园" + 微信链接 生成博客园文案
"做视频" + 微信链接 触发品牌视频管线
"做视频画布" + 任意素材 生成可录制的 Prezi 风格视频画布(微信链接/md/pdf/html/文本均可)
"录屏画布" + 任意素材 同上
"手账视频" + 任意素材 同上
"多平台分发" + 微信链接 一次生成所有平台内容
"转微贴图并发布" + 微信链接 生成 + 自动触发分发

文章阅读

触发词 说明
/read-gzh + 微信链接 抓取并总结公众号文章
"帮我读一下这篇公众号" 同上
"总结一下这篇文章" 同上

排版与配图

触发词 说明
"排版" 用 oddmeta 主题排版 Markdown → 公众号 HTML
"做头图" / "封面图" 生成公众号头图 HTML(浏览器下载 PNG)
"做竖版封面" / "竖版头图" 从公众号封面 → 生成 3:4 竖版封面(1080×1440),适合微贴图/视频号
"做配图" / "准备配图" 生成文章配图 HTML(浏览器下载 PNG)
"排版+配图" / "全套排版" 排版 + 头图 + 配图一起生成

分发

触发词 说明
/distribute 读取 manifest 一键发布
"发布到博客园" 将 Markdown 文件发布到博客园(→ 详细说明)
"一键发布" 全平台发布
"全平台发布" 同上
"发布到微博" 单平台发布
"发布到微贴图" 单平台发布
"发布到博客园" 单平台发布

存档

触发词 说明
"/archive" 将 OUTPUT_DIR 下的历史文档归档到 ARCHIVE_DIR
"存档" 同上
"归档" 同上

博客园发布(独立工具)

不依赖 manifest,可直接发布 Markdown 文件到博客园。具体请参考:references/publishing_to_cnblogs.md


存档功能(独立工具)

将 OUTPUT_DIR 目录下的历史文档文件(.md, .html, .png, manifest.json)移动到 ARCHIVE_DIR 目录下,按日期归档。具体请参考:references/archive_outputs.md


两条输入路径

Path A:日常素材收集 → 出稿

边干活边记录 → 说"出稿" → 写文章 → 排版 → 封面图 → 朋友圈文案 → manifest

适用场景:日常和 cc 协作时,自动积累素材,攒够了一键出稿。

Path B:微信链接 → 多平台内容

微信链接 → 抓取文章 → 分析结构 → 生成微贴图/博客园/微博/视频 → manifest → 分发

适用场景:已有公众号文章,一键转为多平台内容并发布。


Path A 流程:素材收集 → 出稿

自动记录(默认开启)

cc 在对话中主动识别有料瞬间并自动记录,无需手动触发。

识别信号:

类型 识别信号 示例
踩坑翻车 预期≠结果、报错、折腾半天 "试了三种方案都不行"
意外发现 "没想到"、"原来可以"、意外有效 "居然这样就解决了"
迭代打磨 改了多版、从复杂到简洁 "200行改成20行还能跑"
搞笑时刻 对话金句、AI抽风、神奇bug "它认真地给我写了一堆错的"
突破时刻 卡了很久终于通 "困扰一周的bug终于找到了"
方法沉淀 可复用的技巧、心得 "以后遇到这种情况就这么办"

自动记录时:不打断对话,段落结尾标记 (✓ 素材+1)

手动记录

用户说"记一笔:xxx"或"素材+1:xxx"时记录。

current.json 格式

{
  "topic": "主题(可选,出稿时自动提取)",
  "materials": [
    {
      "time": "2026-01-30 14:30",
      "content": "素材内容",
      "type": "搞笑时刻",
      "context": "可选的上下文备注",
      "auto": true
    }
  ],
  "created": "2026-01-30"
}

出稿步骤

STEP 1: 读取素材**

  1. 读取素材 — 读取输出目录下 drafts/current.json
  2. 分析提炼 — 提炼主题和故事线

STEP 2: 确定写作框架

  1. 判断内容类型 → 选择写作框架:
内容类型 判断信号 使用框架 参考文件
教程类 教人安装/使用/配置工具、Skill 介绍、技术实战、"怎么做 xxx" 六段式教程框架 references/framework_tutorial_articles.md
深度长文 行业分析、人物故事、趋势判断、观点输出、"为什么 xxx" 四幕式深度框架 references/framework_in_depth_articles.md
其他 描述、分享、建议、建议、建议、建议 纯文本 references/frameworks.md

STEP 3: 写作

读取: `references/writing-guide.md`
读取: `playbook.md`(如果存在,按 confidence 分级执行)
读取: `history.yaml`(最近 3 篇的 dimensions + closing_type 字段)
读取: `references/exemplars/index.yaml`(如果存在)
  1. 写文章 — 按对应框架写文章
  2. 保存 — 保存 Markdown 文件,文件名格式为 {{date}}-{{title}}.md,{{title}} 为文章标题的拼音,保存到 OUTPUT_DIR 目录下。
  3. 排版 — 调用排版工具生成 HTML 预览(oddmeta 主题)
  4. 头图 + 配图 — 生成可下载的 HTML 文件(→ 读 references/cover_template.md)
    • 竖版封面(可选):用户说"做竖版封面"时,从已生成的公众号头图 HTML 转换 → 读 references/cover_vertical_spec.md
  5. 朋友圈文案 — 生成朋友圈推广文案(→ 读 references/platform_copy.md)

STEP 4: 推广文案

  1. manifest — 生成 manifest.json,供 /distribute 使用。wechat 部分必须包含:
  • wechat.markdown:文章 Markdown 路径
  • wechat.html:排版后的 _preview.html 路径
  • wechat.cover_image:封面 PNG 路径(用户需先从浏览器下载)
  • wechat.title:文章标题
  • wechat.author:作者名(默认 曹操同学)
  • wechat.digest:文章摘要(120 字内)
  • wechat.images:配图 PNG 路径列表(如有)
  1. 询问 — 是否存档并清空当前素材

排版命令

cd "$MD_FORMATTER_DIR"
python3 md2wechat.py [文章路径] --theme [主题]

$MD_FORMATTER_DIR 需在 local/.env 或环境变量中配置。

推荐主题:default(oddmeta 品牌色,默认)、chinese(中国风)、apple(极简优雅) 推荐字号:medium(15px 默认)、large(16px 长文推荐)

oddmeta 主题说明:基于 chinese 主题,使用 oddmeta 品牌色(墨绿 #1A3328 + 鱼红 #C44536 + 宣纸底 #F2EDE3) 执行排版命令报错说明:请参考 references/running_python_script_guide.md


Path B 流程:微信链接 → 多平台内容

第 1 步:抓取文章

使用 Python 抓取脚本(微信有反爬验证,WebFetch 会被拦):

python3 "${SKILL_DIR}/scripts/wechat_download.py" "<URL>" --json

超时 30 秒。失败则提示用户手动复制文章正文。

如果用户只是说"帮我读一下这篇公众号"(/read-gzh 触发),执行抓取后直接生成结构化总结,不进入后续内容生成流程。总结格式:

# 文章总结
## 基本信息(标题/作者/类型/配图数)
## 核心观点(3条)
## 关键信息
## 金句摘录
## 图片内容(下载并识别配图中的文字)
## 思考/迭代点

第 2 步:分析文章结构

提取:标题、副标题/金句、核心概念、关键数据、步骤/流程、亮点/特色、方法论/金句、行动召唤。

第 3 步:拆分为卡片

8-10 张卡片,遵循chartlet阅读节奏(→ 读 references/generate_chartlet.md):

位置 卡片类型 内容
第 1 张 封面 大标题 + hook + 迷你视觉元素
第 2 张 先看结果 成品展示 + 核心数据
第 3-4 张 概念解释 核心概念拆解
第 5-7 张 流程/实战 步骤、对比、流程图
第 8 张 亮点/特色 产品/作品亮点卡片
第 9 张 方法论 一句话金句提炼
第 10 张 行动召唤 链接 + 社区引导

第 4 步:生成图片 HTML

输出路径:文章同目录下 [简短主题]-chartlet.html,未指定目录放 /tmp/。浏览器自动打开预览。

最后一张行动召唤页必须包含:微信号 [你的微信号](强调色大字)、备注关键词、核心链接。

在 local/SKILL.local.md 中配置你的实际微信号。

📚 重要:生成前必读范例

参考 references/examples-chartlet/example-chartlet.html 的质量标准:

✅ 卡片设计要求

  • 纯信息图设计,无文章截图
  • 像素风/游戏化界面展示(适用时)
  • 流程图、卡片网格、编号列表等丰富视觉元素
  • 品牌色克制使用(墨绿85% + 鱼红5%)

✅ 文案质量要求

  • 真人分享感,有真实场景和个人感受
  • 口语化表达:"玩疯了"、"上头了"、"然后我就..."
  • 298-350字 + 8-12个标签

生成的内容应达到范例的专业水准。

第 5 步:生成微贴图发布文案

根据内容类型选择风格:

  • 个人 IP 风格(真人分享、产品开发、踩坑记录)

    • → 读 local/SKILL.local.md 中指定的个人品牌风格文件(如有)
    • 流水账式真实感 + 具体时间细节 + 口语化表达
    • 300-350字,8-12个标签
    • 人设:在 local/SKILL.local.md 中自定义
  • oddmeta风格(方法论总结、深度分析)

    • → 读 references/platform_copy.md 的微贴图部分
    • 结构化拆解 + 干货密度高
    • 适合转载公众号文章

第 6 步:生成博客园发布文案

→ 读 references/platform_copy.md 的博客园部分。

第 7 步:生成播客脚本

→ 读 references/platform_copy.md 的播客部分。

第 7.5 步:生成微博文案

→ 读 references/platform_copy.md 的微博部分。

第 8 步:AI 语音生成

使用 Fish Audio TTS 将播客脚本转为 MP3(→ 读 references/tts_config.md)。

文件命名:[播客标题].mp3 + [播客标题]-播客脚本.txt

第 8.5 步:输出 manifest.json

所有内容生成完毕后,自动输出 manifest.json 到输出目录。格式:

{
  "version": "1.0",
  "created": "<ISO时间戳>",
  "source": "<微信链接>",
  "title": "<文章标题>",
  "outputs": {
    "chartlet": { "html": "...", "copy": { "title": "...", "body": "...", "tags": [...] } },
    "cnblogs": { "copy": { "body": "...", "circles": [...] } },
    "xiaoyuzhou": { "audio": "...", "script": "...", "copy": { "title": "...", "description": "...", "show_notes": "..." } },
    "video_canvas": { "html": "...", "teleprompter_md": "...", "cover_html": "..." },
    "weibo": { "copy": { "title": "...", "body": "...", "tags": [...] } }
  }
}

如果用户说"转微贴图并发布",生成 manifest 后自动执行 /distribute。

第 9 步:品牌视频生成(可选)

仅当用户提到"视频"、"抖音"、"视频号"或"品牌视频"时执行:

A. Remotion 品牌片头片尾

cd "$REMOTION_DIR"
npx remotion render src/index.ts Intro --output /tmp/brand-intro.mp4
npx remotion render src/index.ts Outro --output /tmp/brand-outro.mp4

$REMOTION_DIR 需在 local/.env 或环境变量中配置。

B. AI 视频 Prompt — 为 Seedance 2.0 或 Google Veo 生成 4 段视频 prompt

C. ffmpeg 拼接指令 — 生成拼接命令供用户手动执行

第 9B 步:视频画布生成(可选)

仅当用户说"做视频画布"、"录屏画布"、"手账视频"时执行。接受任意素材输入:微信链接、Markdown 文件、PDF、HTML 文件、纯文本、用户口述内容均可。

  1. 获取内容 — 根据输入类型自动处理:
    • 微信链接:调用 scripts/wechat_download.py 抓取
    • 文件路径(md/pdf/html/txt):直接读取
    • 用户粘贴的文本:直接使用
  2. 分析结构 — 提取标题、核心数据、痛点、步骤、原理、对比、金句、亮点
  3. 拆分为 9 张卡片 — 读取 references/video_canvas_template.md 获取完整 CSS+JS 模板和卡片规范
  4. 生成 9 段提词器脚本 — 口语化,每段 80-150 字,含 [提示] cue 标记
  5. 输出提词器脚本 md — [简短主题]-提词器脚本.md,用户可直接编辑
  6. 组装 HTML — CSS 框架 + HTML 骨架 + 填充内容 + JS 框架(SCRIPTS 与 md 一致)
  7. 输出文件 — [简短主题]-视频画布.html,保存到文章同目录或 /tmp/
  8. 生成封面图 — [简短主题]-封面.html,手账风格 + 人像圆框,浏览器下载 PNG
  9. 提示用户 — 先检查提词器脚本 md,再在浏览器中打开 HTML 录制。16:9 固定比例,各平台直接上传

第 10 步:用户微调

告知用户所有产出物路径,提示可调整,输入 /distribute 可一键发布。

公众号同步提示:封面 PNG 从浏览器下载后,直接 /distribute --platforms wechat 即可同步到草稿箱(API 模式,无需打开 Chrome)。

一次性产出五样东西,不需要额外要求:

  1. 微贴图图片 HTML(含一键下载工具栏)
  2. 微贴图发布文案(标题 + 正文 + 标签)
  3. 博客园发布文案(正文 + 圈子标签)
  4. 微博发布文案(录制脚本 + AI 语音 MP3)
  5. manifest.json(供 /distribute 一键发布)

第 9B 步可选追加(说"视频画布"时): 6. 视频画布 HTML(含录制 + 提词器 + 美颜,16:9 固定) 7. 提词器脚本 md(可编辑,修改后说"更新提词器"同步到 HTML) 8. 封面图 HTML(手账风格 + 人像圆框,浏览器下载 PNG)


分发流程(/distribute)

读取 manifest.json,通过 Chrome CDP 自动化发布到各平台(→ 读 references/distribute-platforms.md)。

用法

# 全平台发布
npx -y bun "${SKILL_DIR}/scripts/distribute/distribute.ts" --manifest /path/to/manifest.json

# 选择平台
npx -y bun "${SKILL_DIR}/scripts/distribute/distribute.ts" --manifest /path/to/manifest.json --platforms chartlet,weibo

# 预览模式(不提交,只预填内容)
npx -y bun "${SKILL_DIR}/scripts/distribute/distribute.ts" --manifest /path/to/manifest.json --platforms chartlet --preview

平台缩写

缩写 平台 状态
wechat 公众号 可用
chartlet 贴图 可用
cnblogs 博客园 可用
weibo 微博 实验性
douyin 抖音 实验性
shipinhao 视频号 待开发

执行顺序

公众号 → 微贴图 → 博客园 → 微博 → 抖音 → 视频号 → 微博(顺序执行,避免 Chrome 端口冲突)

四级降级

级别 模式 触发条件
L0 API 直推 公众号 API 直接推草稿箱,无需 Chrome
L1 自动发布 CDP 完全自动化
L2 辅助发布 登录态失效/选择器失效/--preview
L3 手动模式 CDP 连接失败

公众号优先 L0(API),凭证缺失或失败时自动降级 L1(CDP)。


品牌设计规范

两套品牌色体系:

  • oddmeta:专业内容品牌(公众号、深度文章、方法论)
  • OPEN365:真人IP品牌(微贴图、微博、博客园、日常分享)

单一真相源:在 local/SKILL.local.md 中指定你的品牌色文档路径。 如果色值冲突,以品牌文档为准。以下色板作为默认示例。

oddmeta 色板(墨绿体系)

比例法则:墨绿 85% : 鱼红 5% : 其余 10%

名称 色值 用途
墨绿主色 #1A3328 暗底卡片背景
宣纸底 #F2EDE3 浅底卡片背景
鱼红 #C44536 强调色、数字、标签(仅点睛)
半透白 rgba(255,255,255,0.5) 暗底上的品牌名
半透墨绿 rgba(26,51,40,0.4) 浅底上的品牌名
苔灰 #7A8C80 次要文字
深墨 #0F1F18 更深背景
淡青 #D4DDD7 分割线、边框

OPEN365 色板(桃粉体系)

比例法则:桃气粉 15% : 奶油黄 40% : 暮光紫 10% : 灰色 35%

名称 色值 用途
桃气粉 #FF6B9D 主强调色、标题、关键数据
奶油黄底 #FFF9E6 浅底背景、卡片底色
暮光紫 #9D7BA8 辅助色、次要信息、品牌名
温灰 #6B6B6B 正文文字
浅灰底 #F5F5F5 现代感背景
深夜蓝 #2D3047 暗底背景(少用)

品牌选择规则

内容类型 使用品牌 原因
公众号深度文章 oddmeta 专业、权威、内容品牌
行业分析报告 oddmeta 冷静客观
微贴图真人分享 oddmeta 温暖、真实、真人IP
博客园日常动态 oddmeta 活泼、亲和
微博日常动态 oddmeta 真实过程展示
产品开发记录 oddmeta 真实过程展示
B端产品介绍 oddmeta 专业可信赖

双品牌联动:同一篇内容,公众号用oddmeta色,微贴图转发用奥德元色

字体

font-family: -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif;

品牌角标

每页左上角 oddmeta logo + 文字,暗底页用 .light,浅底页用 .dark。

页码

右下角 1/N,暗底页 rgba(255,255,255,0.2),浅底页 rgba(26,51,40,0.2)。


内容改写原则

微信 → 微贴图不是照搬,需适配:

维度 微信 微贴图
篇幅 2000-3000 字 每页 50-80 字
结构 线性阅读 卡片式跳读
语气 技术向、深度 简洁、直观、有冲击力
视觉 文字为主 视觉为主、文字点缀

改写要点:标题要炸、数字要大、一页一个点、视觉替代文字、保留核心链接。


完整模板参考

首次生成微贴图图片时,参考 references/examples-chartlet/exampe.html 范例文件获取完整 CSS + JS。

如果有额外的本地模板参考,在 local/SKILL.local.md 中指定路径,格式为 extra_examples: ["references/examples-chartlet/exampe-chartlet.html"]。

生成新内容时复用范例文件的 CSS + JS 部分,只替换卡片内容。


Script Directory

Agent Execution: Determine this SKILL.md directory as SKILL_DIR, then use ${SKILL_DIR}/scripts/<name>.

Script Purpose
scripts/distribute/distribute.ts 分发主编排器
scripts/distribute/cdp-utils.ts 共享 CDP 工具
scripts/distribute/platforms/*.ts 各平台发布模块
scripts/archive_outputs.py 存档历史文档(Python)(按日期归档)(可选)(默认不执行)
scripts/md2wechat.py 将Markdown转换为微信文章格式(Python,根据范例)
scripts/publish_to_cnblogs.py 博客园发布(Python)
scripts/wechat_download.py 微信文章抓取(Python,模拟微信 UA)

Reference 文件索引

cc 按需读取,不要一次性加载所有 reference。

场景 读取文件
存档历史文档 references/archive_outputs.md — 存档历史文档(按日期归档)(可选)(默认不执行)
生成头图/配图 references/cover_template.md — oddmeta 风格排版规范(头图 + 配图 + 视觉组件)
横版→竖版封面 references/cover_vertical_spec.md — 公众号封面转竖版的 CSS 转换规范
生成微贴图卡片 references/generate_chartlet.md — 微贴图轮播图设计规范
生成各平台文案 references/platform_copy.md — 微贴图/微博/博客园/朋友圈文案规范
生成视频画布 references/video_canvas_template.md — 手账拼贴视频画布模板(CSS+JS+卡片规范)
出稿写深度长文 references/framework_in_depth_articles.md — 人设 + 写作规范 + 格式(四幕式,8000-12000 字)
出稿写教程类文章 references/framework_tutorial_articles.md — 六段式教程框架(先看结果→概念→操作→实战→拿走即用,2000-4000 字)
出稿其它类型文章 references/frameworks.md — 人设 + 写作规范 + 格式(四幕式)
生成播客音频 references/tts_config.md — Fish Audio 配置 + 生成脚本
分发到各平台 references/distribute_platforms.md — 平台配置 + manifest 格式 + 降级策略
生成微贴图轮播图 references/xiaohongshu-format.md — HTML 模板 + 视觉组件库

故障处理

问题 处理
运行Python报错 优先参考 references/running_python_script_guide.md
微信抓取失败 提示用户手动复制文章正文
文章太短(<500字) 压缩为 5-6 张卡片
文章太长(>5000字) 精选核心,控制 10 张以内
导出图片模糊 检查 SCALE=2,浏览器缩放 100%
manifest 不存在 提示先运行内容生成
Chrome 启动失败 降级 L3(手动模式)
TTS 402 余额不足 提示去 fish.audio 充值
TTS 生成失败 只输出脚本文本,提示手动录制
代码块在公众号编辑器中无换行 修改 md2wechat.py 脚本,用 <br/> 替换换行符