读书笔记多平台分发(weread-multi-publish)
把一份读书笔记,自动变成 小红书图文 + 抖音视频 + 视频号视频,并在三个平台都存为草稿,最后一步由你手动点「发布」。
设计原则(非常重要):
- 只存草稿,不自动发表。自动化只负责把内容生成好、上传好、填表存草稿;「发表」按钮永远由你本人确认点击。这既规避平台自动化规则风险,也避免误发错账号。
- 账号与合集可配置,不再写死某个具体账号。
- 字体跨平台自动回退(Windows 雅黑 / macOS 苹方 / Linux 文泉驿·Noto)。
前置条件(先检查再开始)
- 微信读书 API Key(书籍模式需要,自由文字模式不需要):环境变量
WEREAD_API_KEY(格式wrk-xxx)。接口文档见references/weread-api.md。 - Python 依赖(生成视频/图片用):
bash pip install pillow imageio-ffmpeg edge-tts # 装不上加清华镜像: -i https://pypi.tuna.tsinghua.edu.cn/simple - 浏览器能力:
- 小红书 / 抖音:依赖 WorkBuddy 内置agent-browser(Chromium 需已登录对应创作者平台)。
- 视频号:npm install playwright-core,且系统已装 Microsoft Edge(Chromium 内核)。 - 各平台登录态:首次使用需在弹出的浏览器窗口里扫码登录对应创作者账号(小红书创作服务平台、抖音创作者平台、视频号助手)。登录态会持久化,后续免扫码。
- 依赖技能(可选增强):
xiaohongshu-write(小红书爆款文案)、humanizer(去AI味)。本技能已内置基础流程,不强制。
配置项(覆盖写死值)
在工作区建 publish_config.json(可选),字段均可留空走默认:
{
"xhs_account": "", // 小红书号(留空=当前已登录账号)
"xhs_collection": "你的合集名(留空不加)", // 加入的合集名(留空不加)
"xhs_original": true, // 是否勾选原创声明
"douyin_account": "", // 抖音号(留空=当前已登录账号)
"shipinhao_account": "", // 视频号(留空=当前已登录账号)
"bgm": "", // 免版权 BGM 文件路径(CC-BY 需在描述署名)
"bgm_sign": "" // BGM 署名信息,如 "Music: Gymnopédie No.1 by Kevin MacLeod (CC-BY)"
}
工作流总览
输入(书名|笔记md|自由文字)
→ [模型写] content.json # 结构化 + 讲故事模型 + 去AI味
→ make_cards.py # 渲染 1080x1440 竖版文字卡片
→ make_tts.py # edge-tts 真人感配音
→ make_final.py # ffmpeg 合成配音版视频
→ (小红书) HTML卡片→PNG + 文案 → agent-browser 存草稿
→ (抖音) 视频 → agent-browser 存草稿
→ (视频号) 视频 → publish_draft_shipinhao.js 存草稿
可选增强:按量付费(支付宝 AI 付 · Machine Pay)
想把本技能做成按次收费的服务(对外暴露端点、调用方付费后取得资源)?billing/ 目录已内置标准实现,严格遵循支付宝 AI 付「AI 按量付费」契约:未付费返回 402 + Payment-Needed,付费后携带 Payment-Proof 验付并触发履约回执。
billing/
├── a2m_server.py # 标准库 http.server 实现的 402 协议服务端
├── order_repository.py # SQLite 订单仓储(生产替换为项目 DB/ORM)
├── config.example.json # 配置模板
└── README.md # 本地自测 / 官方沙箱联调 / 签约入驻 全流程
接入步骤(详见 billing/README.md):
1. pip install alipay-sdk cryptography,复制 config.example.json 为 config.json 并填入应用/密钥/商户 2088。
2. 沙箱联调:gateway 用沙箱地址、service_id=api_mock_service_id(不花真钱);启动后由支付宝 AI 付 Skill 内置 a2m 脚本完成端到端沙箱支付联调。
3. 真实收费:在支付宝开放平台开通「AI 按量付费」、拿到真实 serviceId 回填并切换正式网关,完成商户签约入驻。
> 按量付费是服务端/API 能力。若只是想把技能免费分发到 SkillHub,无需此模块。
Step 1:把输入变成 content.json
输入三种来源,殊途同归到 content.json:
- 书名(书籍模式):WEREAD_API_KEY 拉取该书划线/想法 → 按「核心观点 - 金句摘录 - 我的思考」三段式整理(见 references/weread-api.md)。
- 笔记 md:用户贴来划线/想法/书评,直接整理成三段式再编排。
- 自由文字:以用户文字为素材,只做结构化重组与爆款化,不擅自添加未提及内容。
content.json 由模型亲自生成并落盘到工作区,再被 Python 脚本消费。字段规范见 references/content-format.md(cards/blocks/narration 数量相等、五种样式用法、讲故事模型、去AI味要点)。
Step 2:渲染卡片 + 配音 + 合成视频
在工作区建 build/ 与 outputs/,依次执行(脚本在本 skill 的 scripts/):
python <skill>/scripts/make_cards.py --content content.json --out build/cards
python <skill>/scripts/make_tts.py --content content.json --out build/tts
# BGM 可选;CC-BY 需在描述署名(publish_draft_shipinhao.js 支持 --bgm-sign)
python <skill>/scripts/make_final.py --cards build/cards --tts build/tts \
--bgm <bgm.mp3> --out outputs/<书名>_视频.mp4
注意:
- 字体自动按系统回退;找不到中文字体会告警并回退到默认字体(中文可能显示异常,需装中文字体)。
- edge-tts 网络不稳,脚本内置 6 次重试 + 断点续传,失败重跑即可。
- 合成后用 ffmpeg -ss 60 -t 3 -i out.mp4 -vn -af volumedetect -f null - 抽查音轨确认人声在。
- 卡片渲染后先 Read 抽查 2-3 张 PNG 再合成,避免排版返工。
- 可选宣传页(多平台同款 CTA 海报):python <skill>/scripts/make_promo.py --platform 小红书,抖音,视频号 --book <书名> --out outputs/<书名>_宣传页.png
Step 3:三平台存草稿(均为「存草稿」,不自动发表)
3.1 小红书(图文)
完整避坑见 references/xhs-publish-guide.md。要点:
1. npx -y agent-browser open "https://creator.xiaohongshu.com/publish/publish" --headed
2. upload "input[type=file]" <封面.png> <card1.png> ... (图片统一 1242×1660 3:4,≤10 张)
3. fill 标题、正文(正文只留钩子+话题标签,完整内容在图里)
4. 内容设置:加入配置里的合集、勾选原创声明
5. 点击「存草稿」(不要点「发布」)——发布由用户手动完成
> 小红书图片规格:统一 1242×1660(3:4),单张 ≤10MB,底部 120px 为 UI 遮挡安全区。模板见 assets/card_template.html。
3.2 抖音(视频)
完整命令流见 references/douyin-publish.md。要点:
1. 启动带 --headed --profile <工作区>/.workbuddy/tmp/chrome-profile,登录态可跨会话保留
2. 上传 outputs/<书名>_视频.mp4,填标题/描述/话题
3. 点击「存草稿」(不要点「发布」)+ 勾选原创/合集(按配置)
4. 发布前把视频、标题、描述给用户预览确认
3.3 视频号(视频)
cd <skill>/scripts
npm install playwright-core # 首次
node publish_draft_shipinhao.js \
--video outputs/<书名>_视频.mp4 \
--title "短标题(≤16字,逗号用空格)" \
--desc "描述文案 #话题1 #话题2" \
--bgm-sign "Music: Gymnopédie No.1 by Kevin MacLeod (CC-BY)"
- 首次运行弹 Edge 窗口,手机微信扫码登录视频号;登录态存持久 profile,后续免扫码。
- 脚本自动:连/起浏览器 → 进编辑器 → 上传 → 等转码 → 填描述/短标题 → 点「存草稿」 → 校验草稿已存。
- 短标题禁用坑:含逗号等非法字符会让按钮禁用;脚本已自动把逗号转空格。
- 详细原理与踩坑见
references/shipinhao-publish.md。
Step 4:收尾
- 三平台均存草稿后,提醒用户去各平台后台手动确认并点发布(建议先在小范围/自己账号验证)。
- 发布后建议:在 App 内补互动、置顶评论(书名 + 提问)做冷启动;可贴 Step 2 生成的宣传页作为置顶评论配图。
关键约束
- 永不在用户未确认时自动点「发布」(仅存草稿)。
- 小红书图片不得含任何 AI 生成相关标识;完整内容放图里。
- 视频号/抖音 BGM 若为 CC-BY,必须在描述署名。
- 账号、合集、字体均可配置,禁止写死个人账号。
Resources
scripts/
make_cards.py— 渲染 1080×1440 竖版文字卡片(深青底+山形+金色强调,五种样式,跨平台字体回退)make_tts.py— edge-tts 逐段配音(默认晓晓女声 -12% 语速,断点续传)make_final.py— ffmpeg 合成(卡片时序+人声对位+BGM 低音量循环淡入淡出)make_promo.py— 生成 1080×1920 宣传页海报(固定 CTA 文案,平台主色)publish_draft_shipinhao.js— 视频号「存草稿」(playwright-core + Edge 持久 profile + Wujie iframe 直连)qr_login.js— 视频号登录二维码提取辅助
references/
content-format.md— content.json 编写规范、卡片讲故事模型、去 AI 味要点weread-api.md— 微信读书 API 网关接口文档xhs-publish-guide.md— 小红书发布全流程与避坑douyin-publish.md— 抖音发布命令流与坑shipinhao-publish.md— 视频号发布原理与踩坑
assets/
card_template.html— 小红书正文卡片 HTML 模板(米色纸感排版)cover_crop.html— 封面水印裁切模板