内容生产和分发统一管线。素材收集→出稿→排版→封面→朋友圈文案→多平台转换→一键分发。涵盖公众号写作、微贴图轮播图、博客园文案、微博文案、品牌视频、Chrome CDP 自动发布。
---
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 文件发布到博客园(→ [详细说明](references/publishing_to_cnblogs.md)) |
| "一键发布" | 全平台发布 |
| "全平台发布" | 同上 |
| "发布到微博" | 单平台发布 |
| "发布到微贴图" | 单平台发布 |
| "发布到博客园" | 单平台发布 |
### 存档
| 触发词 | 说明 |
|-------|------|
| "/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 格式
```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 路径列表(如有)
2. **询问** — 是否存档并清空当前素材
### 排版命令
```bash
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 会被拦):
```bash
python3 "${SKILL_DIR}/scripts/wechat_download.py" "<URL>" --json
```
超时 30 秒。失败则提示用户手动复制文章正文。
如果用户只是说"帮我读一下这篇公众号"(`/read-gzh` 触发),执行抓取后直接生成结构化总结,不进入后续内容生成流程。总结格式:
```markdown
# 文章总结
## 基本信息(标题/作者/类型/配图数)
## 核心观点(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 到输出目录。格式:
```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 品牌片头片尾**
```bash
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`)。
### 用法
```bash
# 全平台发布
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色,微贴图转发用奥德元色
### 字体
```css
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/>` 替换换行符 |don't have the plugin yet? install it then click "run inline in claude" again.