article-to-wechat-cover

star 219

从飞书文档或本地 Markdown 提炼文章主题与风格,调用 OpenRouter 的 Nano Banana / Gemini Flash Image 生成 2.35:1 的微信公众号封面图,并可选上传为微信封面素材。

dracohu2025-cloud By dracohu2025-cloud schedule Updated 5/15/2026

name: article-to-wechat-cover description: 从飞书文档或本地 Markdown 提炼文章主题与风格,调用 OpenRouter 的 Nano Banana / Gemini Flash Image 生成 2.35:1 的微信公众号封面图,并可选上传为微信封面素材。 version: 0.1.0 author: Hermes Agent license: MIT metadata: hermes: tags: [wechat, cover, feishu, lark, markdown, nano-banana, openrouter, image-generation]


Article to WeChat Cover

当用户想要:

  • 为一篇飞书文档生成微信公众号封面图
  • 为一篇本地 Markdown 文章自动生成公众号头图
  • 让封面图主题跟随文章内容自动变化
  • 复用 Nano Banana / OpenRouter 图片生成链路做公众号封面
  • 在用户确认最终 prompt 后,把生成图片自动插入飞书文档最顶部作为 Hero 图

就用这个 skill。

目标

这个 skill 会做三件事:

  1. 读取文章内容(飞书文档 URL / token,或本地 Markdown)
  2. 用 OpenRouter 文本模型提炼:
    • 文章核心主题
    • 文章视觉风格
    • 适合公众号封面的构图与主视觉
  3. 先输出最终版生图 prompt 给用户确认
  4. 只有确认后,才用 OpenRouter 图片模型(Nano Banana / Gemini Flash Image)生成 2.35:1 微信公众号封面图

默认要求:

  • 宽高比固定 2.35:1
  • 画面体现文章核心主题
  • 风格由文章内容语气、领域、表达风格共同决定
  • 默认不渲染多余文字,避免把公众号封面做成低质海报

新增封面方法:汤底 + 佐料 + 文章巧思

这次吸收小小东 X 文章里的封面方法:封面生成不要每篇都从零发散,而是固定一套“汤底”,再从可复用“佐料库”里选一种风格,最后只根据标题/主题改一两个关键元素。

固定汤底

核心规则:

  • 先理解文章为什么值得被看见。
  • 把复杂信息收束成一个清晰、有力、耐看的推荐理由。
  • 手机端 3 秒可读。
  • 信息少而准,留白有呼吸感。
  • 主视觉来自文章/对象本身的气质,不做泛化 AI 科技图。

内置 10 组佐料

当前脚本内置:

  • 建筑图纸美学
  • 科技莫兰迪
  • 力量编辑感
  • 东方文人
  • 电影片头
  • 园艺手账
  • 治愈线条
  • 产品手册
  • 艺术展览
  • 综艺预告

文本模型会先从这 10 组中选 1 组,输出:

  • selected_recipe_id
  • selected_recipe_reason
  • recipe_adaptations:只允许 1-3 个文章专属改动
  • cover_message:封面 3 秒内要传达的一句话

Prompt 分层

生成链路现在分三层:

  1. analysis brief:理解文章。
  2. review_spec:给人审的结构化封面方案,包含汤底、佐料、巧思。
  3. execution_spec:真正喂给图片模型的瘦身 JSON,只保留会影响画面的字段。

这样能避免把流程说明、内部字段、解释文字一股脑塞给图片模型。少点废话,图更稳。

输入来源

支持两种:

1) 飞书文档

python3 scripts/run.py from-feishu-doc \
  --doc 'https://xxx.feishu.cn/docx/xxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt

2) 本地 Markdown

python3 scripts/run.py from-markdown \
  --input ./article.md \
  --final-prompt-output /tmp/wechat-cover-prompt.txt

输出

成功后会输出:

  • 本地封面图路径(仅在已确认并真正生图后)
  • 主题分析 JSON 路径(可选)
  • 图片 JSON spec 路径(可选)
  • 最终版生图 prompt(可打印,也可写入文件)
  • 可选 feishu_url
  • 可选 thumb_media_id

必须先确认最终 prompt

这个 skill 现在默认采用两阶段流程:

阶段 1:先生成最终版生图 prompt,给用户确认

推荐:

python3 scripts/run.py from-feishu-doc \
  --doc 'https://g1mu6da08l.feishu.cn/docx/xxxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt

或:

python3 scripts/run.py from-markdown \
  --input ./article.md \
  --final-prompt-output /tmp/wechat-cover-prompt.txt

这一步会:

  • 先分析文章主题与风格
  • 生成最终版生图 prompt
  • 在终端打印 prompt 预览
  • 可选写入 --final-prompt-output
  • 不会真的调用图片模型生图

如果命令输出里看到:

generation_skipped=pending_user_confirmation

说明流程正常停在“待确认”阶段。

阶段 2:确认后,再真正生图

只有在用户确认最终 prompt 没问题后,才重新执行并加上:

--confirm-generate

例如:

python3 scripts/run.py from-feishu-doc \
  --doc 'https://g1mu6da08l.feishu.cn/docx/xxxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt \
  --output ./wechat-cover.jpg \
  --confirm-generate

经验规则:

  • 不要在第一次分析出 prompt 后立刻自动生图
  • 必须先把 final prompt 发给用户审阅
  • 用户确认后,才允许 --confirm-generate

补充经验:

  • 图片模型实际可能返回 image/jpeg,即使你手动把输出文件写成 .png
  • 因此脚本应按返回的 mime_type 自动修正输出后缀,避免出现“JPEG 内容却使用 PNG 扩展名”的混淆
  • 如果用户显式传入了一个不匹配的输出路径,CLI 最好打印一个 output_adjusted_from=... 提示,便于排查

统一入口命令

飞书文档 → 生成封面

python3 scripts/run.py from-feishu-doc \
  --doc 'https://g1mu6da08l.feishu.cn/docx/xxxx' \
  --output ./wechat-cover.png

本地 Markdown → 生成封面

python3 scripts/run.py from-markdown \
  --input ./article.md \
  --output ./wechat-cover.png

常用参数

  • --output:输出图片路径
  • --upload-feishu:生成后上传飞书云盘
  • --upload-wechat-cover:直接上传成微信封面素材,返回 thumb_media_id
  • --analysis-json:导出文章主题分析 JSON
  • --dump-json-spec:导出最终图片 JSON 规格
  • --final-prompt-output:导出最终版生图 prompt,便于发给用户确认
  • --confirm-generate:只有用户确认最终 prompt 后,才允许真正生图
  • --insert-into-feishu-doc-top:生成后把 Hero 图自动插到飞书文档正文最顶部
  • --replace-existing-top-image / --no-replace-existing-top-image:插入 Hero 图时是否替换已有顶部图片
  • --image-model:覆盖默认图片模型
  • --text-model:覆盖默认文本模型
  • --provider-order:OpenRouter provider 顺序,默认 Vertex AI
  • --visual-style-hint:人工补充风格偏好
  • --must-include:逗号分隔,指定必须出现的视觉元素
  • --must-avoid:逗号分隔,指定必须避免的视觉元素
  • --allow-text-overlay:允许封面内出现少量标题文字(默认关闭)

与飞书文档 → 微信草稿箱 skill 的关系

这个 skill 不直接替代 feishu-doc-to-wechat-draft,而是作为它的前置封面生成步骤。

推荐组合方式:

  1. 先用本 skill 生成封面图
  2. 若需要,直接 --upload-wechat-cover 拿到 thumb_media_id
  3. 再把这个 thumb_media_id 交给 feishu-doc-to-wechat-draft

例如:

python3 scripts/run.py from-feishu-doc \
  --doc 'https://xxx.feishu.cn/docx/xxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt

确认 prompt 没问题后,如果你想把生成图直接插回飞书文档最顶部:

python3 scripts/run.py from-feishu-doc \
  --doc 'https://xxx.feishu.cn/docx/xxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt \
  --confirm-generate \
  --insert-into-feishu-doc-top

如果还要同时上传成微信封面素材:

python3 scripts/run.py from-feishu-doc \
  --doc 'https://xxx.feishu.cn/docx/xxx' \
  --final-prompt-output /tmp/wechat-cover-prompt.txt \
  --confirm-generate \
  --insert-into-feishu-doc-top \
  --upload-wechat-cover

然后把输出的 thumb_media_id 用于:

python3 ~/.hermes/skills/productivity/feishu-doc-to-wechat-draft/scripts/run.py publish-feishu-doc-default \
  --doc 'https://xxx.feishu.cn/docx/xxx' \
  --thumb-media-id 'MEDIA_ID'

设计原则

1. 主题来自文章,不靠人工硬写 prompt

脚本会先从标题、摘要、正文提炼主题与风格,再生成图片 prompt。

2. 公众号封面优先“像封面”,不是“像 PPT 截图”

默认避免:

  • 杂乱文字
  • UI 截图感
  • 信息图堆砌
  • 水印
  • logo 拼贴

3. 优先横向头图构图

固定 2.35:1,适合公众号封面横幅视觉。

依赖

  • OPENROUTER_API_KEY
  • 可选:OPENROUTER_TEXT(默认 google/gemini-3.1-flash-lite-preview
  • 可选:OPENROUTER_IMAGE
  • 如需读取飞书文档:已可用的 lark-cli
  • 如需上传微信封面素材:
    • WECHAT_APP_ID
    • WECHAT_APP_SECRET

验证建议

先本地跑:

python3 scripts/run.py from-markdown --input ./article.md --analysis-json /tmp/analysis.json --dump-json-spec /tmp/spec.json

确认:

  • analysis 是否抓住主题
  • spec 是否保持 2.35:1
  • 最终图片是否贴合文章主题

适用边界

适合:

  • 技术文章
  • 观点评论
  • 方法论总结
  • 产品/AI/效率类公众号文章

不适合直接拿来做:

  • 强品牌商业广告 KV
  • 多页海报
  • 需要精确排版文字设计的活动主视觉

这类任务应额外提供人工 art direction。

Install via CLI
npx skills add https://github.com/dracohu2025-cloud/draco-skills-collection --skill article-to-wechat-cover
Repository Details
star Stars 219
call_split Forks 37
navigation Branch main
article Path SKILL.md
More from Creator
dracohu2025-cloud
dracohu2025-cloud Explore all skills →