← 返回
未分类 Key

odd-articles

内容生产和分发统一管线。素材收集→出稿→排版→封面→朋友圈文案→多平台转换→一键分发。涵盖公众号写作、微贴图轮播图、博客园文案、微博文案、品牌视频、Chrome CDP 自动发布。
jackyhwei
未分类 clawhub v1.0.0 100000 Key: 需要
★ 0
Stars
📥 301
下载
💾 0
安装

概述

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 路径列表(如有)
  2. 询问 — 是否存档并清空当前素材

排版命令

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 步可选追加(说"视频画布"时):

  1. 视频画布 HTML(含录制 + 提词器 + 美颜,16:9 固定)
  2. 提词器脚本 md(可编辑,修改后说"更新提词器"同步到 HTML)
  3. 封面图 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 端口冲突)

四级降级

级别模式触发条件
---------------------
L0API 直推公众号 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/.

ScriptPurpose
-----------------
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 脚本,用
替换换行符

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-05-07 23:40 安全

安全检测

暂无安全检测报告