> 本技能默认使用 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/
└── ...
| 触发词 | 说明 |
|---|---|
| ------- | ------ |
/story | 查看当前素材状态 |
| "看看素材" | 查看已记录的素材 |
| "出稿" | 生成文章 + 排版 + 封面图 |
| "清空素材" | 清空当前素材 |
| "记一笔:xxx" | 手动添加素材 |
| "素材+1:xxx" | 手动添加素材 |
| "写个朋友圈" | 根据素材/文章生成朋友圈文案 |
| 触发词 | 说明 |
|---|---|
| ------- | ------ |
/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
边干活边记录 → 说"出稿" → 写文章 → 排版 → 封面图 → 朋友圈文案 → manifest
适用场景:日常和 cc 协作时,自动积累素材,攒够了一键出稿。
微信链接 → 抓取文章 → 分析结构 → 生成微贴图/博客园/微博/视频 → manifest → 分发
适用场景:已有公众号文章,一键转为多平台内容并发布。
cc 在对话中主动识别有料瞬间并自动记录,无需手动触发。
识别信号:
| 类型 | 识别信号 | 示例 |
|---|---|---|
| ----- | --------- | ------ |
| 踩坑翻车 | 预期≠结果、报错、折腾半天 | "试了三种方案都不行" |
| 意外发现 | "没想到"、"原来可以"、意外有效 | "居然这样就解决了" |
| 迭代打磨 | 改了多版、从复杂到简洁 | "200行改成20行还能跑" |
| 搞笑时刻 | 对话金句、AI抽风、神奇bug | "它认真地给我写了一堆错的" |
| 突破时刻 | 卡了很久终于通 | "困扰一周的bug终于找到了" |
| 方法沉淀 | 可复用的技巧、心得 | "以后遇到这种情况就这么办" |
自动记录时:不打断对话,段落结尾标记 (✓ 素材+1)
用户说"记一笔:xxx"或"素材+1:xxx"时记录。
{
"topic": "主题(可选,出稿时自动提取)",
"materials": [
{
"time": "2026-01-30 14:30",
"content": "素材内容",
"type": "搞笑时刻",
"context": "可选的上下文备注",
"auto": true
}
],
"created": "2026-01-30"
}
drafts/current.json| 内容类型 | 判断信号 | 使用框架 | 参考文件 |
|---|---|---|---|
| --------- | --------- | --------- | --------- |
| 教程类 | 教人安装/使用/配置工具、Skill 介绍、技术实战、"怎么做 xxx" | 六段式教程框架 | references/framework_tutorial_articles.md |
| 深度长文 | 行业分析、人物故事、趋势判断、观点输出、"为什么 xxx" | 四幕式深度框架 | references/framework_in_depth_articles.md |
| 其他 | 描述、分享、建议、建议、建议、建议 | 纯文本 | references/frameworks.md |
读取: `references/writing-guide.md`
读取: `playbook.md`(如果存在,按 confidence 分级执行)
读取: `history.yaml`(最近 3 篇的 dimensions + closing_type 字段)
读取: `references/exemplars/index.yaml`(如果存在)
{{date}}-{{title}}.md,{{title}} 为文章标题的拼音,保存到 OUTPUT_DIR 目录下。references/cover_template.md)references/cover_vertical_spec.mdreferences/platform_copy.md)/distribute 使用。wechat 部分必须包含:wechat.markdown:文章 Markdown 路径wechat.html:排版后的 _preview.html 路径wechat.cover_image:封面 PNG 路径(用户需先从浏览器下载)wechat.title:文章标题wechat.author:作者名(默认 曹操同学)wechat.digest:文章摘要(120 字内)wechat.images:配图 PNG 路径列表(如有)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
使用 Python 抓取脚本(微信有反爬验证,WebFetch 会被拦):
python3 "${SKILL_DIR}/scripts/wechat_download.py" "<URL>" --json
超时 30 秒。失败则提示用户手动复制文章正文。
如果用户只是说"帮我读一下这篇公众号"(/read-gzh 触发),执行抓取后直接生成结构化总结,不进入后续内容生成流程。总结格式:
# 文章总结
## 基本信息(标题/作者/类型/配图数)
## 核心观点(3条)
## 关键信息
## 金句摘录
## 图片内容(下载并识别配图中的文字)
## 思考/迭代点
提取:标题、副标题/金句、核心概念、关键数据、步骤/流程、亮点/特色、方法论/金句、行动召唤。
8-10 张卡片,遵循chartlet阅读节奏(→ 读 references/generate_chartlet.md):
| 位置 | 卡片类型 | 内容 |
|---|---|---|
| ------ | --------- | ------ |
| 第 1 张 | 封面 | 大标题 + hook + 迷你视觉元素 |
| 第 2 张 | 先看结果 | 成品展示 + 核心数据 |
| 第 3-4 张 | 概念解释 | 核心概念拆解 |
| 第 5-7 张 | 流程/实战 | 步骤、对比、流程图 |
| 第 8 张 | 亮点/特色 | 产品/作品亮点卡片 |
| 第 9 张 | 方法论 | 一句话金句提炼 |
| 第 10 张 | 行动召唤 | 链接 + 社区引导 |
输出路径:文章同目录下 [简短主题]-chartlet.html,未指定目录放 /tmp/。浏览器自动打开预览。
最后一张行动召唤页必须包含:微信号 [你的微信号](强调色大字)、备注关键词、核心链接。
> 在 local/SKILL.local.md 中配置你的实际微信号。
📚 重要:生成前必读范例
参考 references/examples-chartlet/example-chartlet.html 的质量标准:
✅ 卡片设计要求
✅ 文案质量要求
生成的内容应达到范例的专业水准。
根据内容类型选择风格:
local/SKILL.local.md 中指定的个人品牌风格文件(如有)local/SKILL.local.md 中自定义references/platform_copy.md 的微贴图部分→ 读 references/platform_copy.md 的博客园部分。
→ 读 references/platform_copy.md 的播客部分。
→ 读 references/platform_copy.md 的微博部分。
使用 Fish Audio TTS 将播客脚本转为 MP3(→ 读 references/tts_config.md)。
文件命名:[播客标题].mp3 + [播客标题]-播客脚本.txt
所有内容生成完毕后,自动输出 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。
仅当用户提到"视频"、"抖音"、"视频号"或"品牌视频"时执行:
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 拼接指令 — 生成拼接命令供用户手动执行
仅当用户说"做视频画布"、"录屏画布"、"手账视频"时执行。接受任意素材输入:微信链接、Markdown 文件、PDF、HTML 文件、纯文本、用户口述内容均可。
scripts/wechat_download.py 抓取references/video_canvas_template.md 获取完整 CSS+JS 模板和卡片规范[提示] cue 标记[简短主题]-提词器脚本.md,用户可直接编辑[简短主题]-视频画布.html,保存到文章同目录或 /tmp/[简短主题]-封面.html,手账风格 + 人像圆框,浏览器下载 PNG告知用户所有产出物路径,提示可调整,输入 /distribute 可一键发布。
公众号同步提示:封面 PNG 从浏览器下载后,直接 /distribute --platforms wechat 即可同步到草稿箱(API 模式,无需打开 Chrome)。
一次性产出五样东西,不需要额外要求:
/distribute 一键发布)第 9B 步可选追加(说"视频画布"时):
读取 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)。
两套品牌色体系:
> 单一真相源:在 local/SKILL.local.md 中指定你的品牌色文档路径。
> 如果色值冲突,以品牌文档为准。以下色板作为默认示例。
比例法则:墨绿 85% : 鱼红 5% : 其余 10%
| 名称 | 色值 | 用途 |
|---|---|---|
| ------ | ------ | ------ |
| 墨绿主色 | #1A3328 | 暗底卡片背景 |
| 宣纸底 | #F2EDE3 | 浅底卡片背景 |
| 鱼红 | #C44536 | 强调色、数字、标签(仅点睛) |
| 半透白 | rgba(255,255,255,0.5) | 暗底上的品牌名 |
| 半透墨绿 | rgba(26,51,40,0.4) | 浅底上的品牌名 |
| 苔灰 | #7A8C80 | 次要文字 |
| 深墨 | #0F1F18 | 更深背景 |
| 淡青 | #D4DDD7 | 分割线、边框 |
比例法则:桃气粉 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 部分,只替换卡片内容。
Agent Execution: Determine this SKILL.md directory as SKILL_DIR, then use ${SKILL_DIR}/scripts/.
| 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) |
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 个版本
暂无安全检测报告