aws-wechat-article-images
公众号封面|公众号配图|公众号插图|AI 生图 — 公众号 AI 封面与配图生成,按文章标题与内容自动匹配画风,一稿多方案,多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词:「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 a…
它会碰到什么
逐条看命中(21 条严重或高危)
- 严重
references/branches.md:15cred-paths1. **仓库业务配图库**:若本篇涉及用户业务,先 `ls .aws-article/products/`,进入相关产品的 `images/` 子目录,列出并阅读**同名 `.md`**(含路径与画面说明),按主题匹配后在 `article.md` 中直接引用对应 `.png` / `.webp`(或复制到本篇 `i
- 严重
references/cover-styles/README.md:3cred-paths本目录下的 `<名>.example.md` 是**内置封面模板**,预设名取 `.example.md` 之前的部分。用户自定义放 `.aws-article/presets/cover-styles/<名>.md`,同名覆盖内置。
- 严重
references/image-styles/README.md:3cred-paths本目录下的 `<名>.example.md` 是**内置正文配图模板**。用户自定义放 `.aws-article/presets/image-styles/<名>.md`,同名覆盖内置。
- 严重
scripts/image_create.py:7cred-paths图片模型(可选):`image_model`(base_url / model / default_size / default_quality;provider 可选)须写在 **`.aws-article/config.yaml`**,
- 严重
scripts/image_create.py:124cred-pathsif Path(".aws-article/config.yaml").is_file(): - 严重
scripts/image_create.py:127cred-paths"未在当前工作目录下找到 .aws-article/config.yaml。\n"
- 严重
scripts/image_create.py:129cred-paths" 要么跑错了目录(请在仓库根、即含 .aws-article/ 的目录下运行),\n"
- 严重
scripts/image_create.py:165cred-pathsp = Path(".aws-article/config.yaml") - 严重
scripts/image_create.py:171cred-paths_err(f"无法读取 .aws-article/config.yaml:{e}") - 严重
scripts/image_create.py:173cred-paths_err(f".aws-article/config.yaml 解析失败:{e}") - 严重
scripts/image_create.py:177cred-paths_err(".aws-article/config.yaml 须为 YAML 键值对象") - 严重
scripts/image_create.py:365cred-paths"请在 .aws-article/config.yaml 显式填写 image_model.provider(openai | volcengine | qwen | gemini),"
- 严重
scripts/image_create.py:1108cred-paths"""内置形态名 + 用户自定义(.aws-article/presets/<subdir>/ 同名覆盖)。"""
- 严重
scripts/image_create.py:1114cred-pathsuser = Path(".aws-article") / "presets" / subdir - 严重
scripts/image_create.py:1135cred-pathscfg_path = Path(".aws-article/config.yaml") - 严重
scripts/image_create.py:1161cred-paths"请改 .aws-article/config.yaml 里的名字(或在 "
- 严重
scripts/image_create.py:1162cred-paths".aws-article/presets/<目录>/ 放一个同名 .md 模板)。", file=sys.stderr)
- 严重
SKILL.md:29cred-paths- **文件读**:`.aws-article/config.yaml`、本篇 `article.yaml` / `article.md` / `imgs/prompts/*.md`、本 skill 的 `references/*`、`.aws-article/products/{产品名}/images/*` - 严重
SKILL.md:29cred-paths- **文件读**:`.aws-article/config.yaml`、本篇 `article.yaml` / `article.md` / `imgs/prompts/*.md`、本 skill 的 `references/*`、`.aws-article/products/{产品名}/images/*` - 严重
SKILL.md:73cred-paths- **全局** `.aws-article/config.yaml`:`cover_aspect`、`image_density`、`caption_style`、`tone` 等以它为准(字段见 [articlescreening-schema.md](../aws-wechat-article-main/refe
- 严重
SKILL.md:103cred-paths- **封面**:内置 12 个形态于 `references/cover-styles/`(`<名>.example.md`),用户自定义放 `.aws-article/presets/cover-styles/`,同名覆盖。每个模板含**用于 / 主体 / 影调 / 文案 / 版式**五个字段,**「文案」不可缺省
这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。
技能内容
配图
公众号封面 & 配图 AI 生成 —— 按文章内容自动匹配画风,风格体系可复用。
> 套件说明 · 本 skill 属 aws-wechat-article-* 一条龙套件(共 9 个 slug,入口 aws-wechat-article-main)。跨 skill 的相对引用依赖同一 skills/ 目录,建议一并 clawhub install 全套。源码:<https://github.com/aiworkskills/wechat-article-skills>
能力披露(Capabilities)
本 skill 调 image_create.py 调外部图像 API 生成封面与正文配图,会把图片提示词(可能含文章主题片段)发给用户配置的图像生成端点。
- 凭证:读
aws.env的IMAGE_MODEL_API_KEY,以Authorization: Bearer发往image_model.base_url - 内容外发:每张图的 prompt 作为 JSON POST body 发送,来自本篇
imgs/prompts/*.md - SSRF 防御:API 返回图片 URL 时仅允许下载 http/https 公网地址,内网 / 环回 / 保留地址一律拒绝
- 文件读:
.aws-article/config.yaml、本篇article.yaml/article.md/imgs/prompts/.md、本 skill 的references/、.aws-article/products/{产品名}/images/* - 文件写:本篇
imgs/**、可选img_analysis.md - shell:仅
{python} {baseDir}/scripts/image_create.py、user_image_prepare.py
建议用专用 key(最低权限、独立计费),不要用 account 级 master key。
单独安装本 skill 时,跨 skill 的引用会 file not found,但生图脚本仍可用。完整 9 slug 见 源码仓库。
路由
完整长文从选题到发布 → [main](../aws-wechat-article-main/SKILL.md);图片消息 / 九宫格等多图推送 → [sticker](../aws-wechat-sticker/SKILL.md)。本 skill 专注长文配图。
用户说「这篇配图不满意,换成我上传的新图重发草稿箱」→ 不走下面的工作流,改走 [branches.md 第三节「发布后换图重发」](references/branches.md)。
配置检查按 [首次引导](../aws-wechat-article-main/references/first-time-setup.md) 执行;image_model 在 config.yaml、IMAGE_MODEL_API_KEY 在 aws.env。端点差异与比例传法见 [branches.md 第六节](references/branches.md)。
| 脚本 | 用途 |
|------|------|
| scripts/image_create.py | 调专用生图 API(generate / batch / check / test) |
| scripts/user_image_prepare.py | 用户供图模式:建 imgs/ 并生成 img_analysis.md 模板 |
五条硬规则 ⛔
- 封面必须脚本生成,产出为文章目录下的
cover.png(或.jpg/.jpeg/.webp)。禁止把素材库文件直接复制成cover.*。例外:用户明确上传封面并声明「只用这一张」,须在结果中注明「用户指定封面」。 - 正文优先用业务配图库,缺图才生成。判断顺序见 [branches.md 第一节](references/branches.md)。
- 删图有上限:每篇最多删 1 个图位并写明理由。要删 2 个以上、或把本篇
image_density改小(效果相同),都要先把「本篇内容与密度对不上」这个判断告诉用户。 imgs/目录分工:根目录只放正文引用的最终图;prompts/放生图 prompt,sources/放实证图的来源说明,raw/放截图与裁切的中间产物。- 先分工再选形态:排版组件和信息位配图干同一件事,同一份内容只给其中一个。但只有标准 markdown 够得到的组件才算数——判给够不到的组件等于图和组件两头落空。实测归属见 [image-method 第一步半](references/image-method.md):只有金句卡片归组件,对比两栏与清单要点一律出图。
工作流
配图进度:
- [ ] 第1步:读配置与文章
- [ ] 第2步:解析配图标记
- [ ] 第3步:确定风格
- [ ] 第4步:写 prompt
- [ ] 第5步:展示方案并等待确认 ⛔
- [ ] 第6步:生成图片
- [ ] 第7步:插入文章 + 收尾自检 ⛔
第1步:读配置与文章
- 全局
.aws-article/config.yaml:cover_aspect、image_density、caption_style、tone等以它为准(字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md))。 - 本篇
article.yaml:default_cover_image_style(单元素,本篇已选的封面形态)、default_article_image_style(多元素候选池,正文形态逐个图位选,不收敛成单选——收敛等于整篇配图用同一种形态)。 - 读
article.md。 image_source: user时改走 [branches.md 第二节「用户供图模式」](references/branches.md)。
第2步:解析配图标记
提取所有 。写手只用四个类型,它们定的是图位不是形态:
| 类型 | 含义 | 本 skill 做什么 |
|---|---|---|
| 封面 | 文章封面 | 走 [cover-method.md](references/cover-method.md) |
| 实证 | 官方原帖截图、界面实拍 | 真实素材,不生成;来源说明写进 imgs/sources/ |
| 信息图 | 信息位,解释内容 | 按内容选形态,内容必须取自文章 |
| 氛围 | 节奏位,只为换口气 | 概念隐喻 / 场景还原,不放具体信息 |
存量草稿里的旧类型名(流程图 / 对比)按 信息图 处理。
第3步:确定风格
先跑一次,把候选池里认不出的形态名挑出来(不调 API):
{python} {baseDir}/scripts/image_create.py styles
退出码 1 说明 config.yaml 的候选池里有不存在的名字——先改名再往下走。实测网站导出的 config 写过「对比说明 / 板书白板 / 氛围烘托」,三个都没有对应模板(真名是 对比两栏 / 概念隐喻 / 场景还原,而「板书白板」是媒介不是形态)。挑中这种名字只能让模型自由发挥,整套形态方法论静默失效。
封面与正文分别定,各走各的预设目录。两者的加载优先级相同:用户当次指定 > 本篇 article.yaml > custom_* 候选池(为空即全选)。
- 封面:内置 12 个形态于
references/cover-styles/(<名>.example.md),用户自定义放.aws-article/presets/cover-styles/,同名覆盖。每个模板含用于 / 主体 / 影调 / 文案 / 版式五个字段,「文案」不可缺省——缺了产出的是背景图不是封面。挑选判据只有一条:主体在 345px 缩略图里能否一眼认出。 - 正文:内置 8 个形态于
references/image-styles/。判据只有一条:删掉这张图读者会看不懂(信息位)还是读不下去(节奏位)?都不影响就删掉该图位。
第4步:写 prompt
- 封面:按 [cover-method.md](references/cover-method.md) 走完前六步,产出一个 prompt 文件——frontmatter 含
aspect(取自cover_aspect,值须加引号,未加引号的16:9会被 YAML 解析成整数),正文是 150–300 字散文,标题文案(4–7 字,字高占画面 25–35%)连同位置、字体感、颜色一起写在里面。不要关键词清单,不要写「不要 X」,不要照抄范例场景。 - 正文:按 [image-method.md](references/image-method.md) 六步逐个图位处理。信息位的内容必须从文章里取——让模型自由发挥会生成无关鸡汤并自带 emoji。
- 图中文字必须为中文,且在 prompt 里直接写出要显示的那几个字,不要写 "labels in Chinese"。
- 通用规则(媒介优先、构图要求、禁用绘图库重画)见 [prompt-construction.md](references/image-styles/prompt-construction.md)。
第5步:展示方案并等待确认 ⛔
- 一条龙且用户对风格无特殊要求:按默认预设自动执行不单独确认,但结果里要列出每张图的类型、风格与 prompt 路径。
- 单独触发本 skill、用户提了风格要求、或方案涉及用业务配图库替换图位:先展示方案(位置 / 类型 / 风格 / prompt 要点 / 来源),等用户确认再进第 6 步。
第6步:生成图片
在仓库根执行,stdout 与 stderr 一起落盘:
{python} {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ \
-o drafts/YYYYMMDD-slug/imgs/ > drafts/YYYYMMDD-slug/image-generation.log 2>&1
单张用 generate <prompt.md> -o <out.png>;重跑批量时加 --skip-existing,已生成合格的不重复付费。图片规格见 [specs.md](references/specs.md)。
⛔ 先看日志里有没有「腰斩」告警。 端点会间歇性忽略 aspectRatio 返回方图,脚本再把它居中裁到目标比例——而模型是按方画布构图的(「左侧四成…右侧六成…字高 28%」),砍掉一大半之后主体偏位、标题错位。实测四张封面里三张如此。看到 [WARN] … 只剩 43%……腰斩 就重跑这一张(--retries 1):这和分辨率略低不同,那个读者看不出,这个一眼就看得出。
⛔ 出字问题先改 prompt,不要换工具。 不许因为「API 出来的字有裁切」就改用 matplotlib / PIL 重画——那样媒介和形态整套方法论被绕开,钱还付两遍。理由见 [prompt-construction.md](references/image-styles/prompt-construction.md)。
封面回看(必做):打开图片对四条——主体位置与标题区、元素 ≤3、缩略图可读、与文章相关。不过关回到出问题的那一步改 prompt 再生成,不要不改 prompt 盲目重跑。看不了图时退而用 image_create.py check cover.png(只有尺寸与近单色两项)。
脚本非零退出或 stderr 有 API / 网络错误 → 走 [branches.md 第四节](references/branches.md),必须分类并摘要报错,不得只说「生图失败」。
第7步:插入文章 + 收尾自检
替换 placeholder 为实际图片路径。封面不进正文:![封面:…] 仅用于微信封面上传,替换时跳过或删除该行,封面单独存为文章根目录的 cover.{ext}。
仅当 article.html 里确实存在 href="placeholder" 或 placeholder 被渲染成链接时,才去修 HTML;不要默认每次都执行「修复 HTML」。
⛔ 收尾自检(六条,缺一不可)
- **每张正文图各有一个
imgs/prompts/.md,文件名主干与图片一致。先落 prompt 再生成,不许反过来*——否则出了问题没法复现,想只重跑一张也做不到,只能整批重来(按张计费)。Agent 自己生图时同样要落盘。 - 实证图的说明放
imgs/sources/,不许放prompts/。batch是整目录 glob 的,混在里面会照着「来源:https://x.com/…」生成一张伪造的原帖截图覆盖掉真的那张——而文章正拿它当证据。脚本已有防线(首行「来源:」或 frontmattertype: source会跳过并告警),但目录放对才是根本。 article.yaml的image_medium非空,且等于第四步实际用的媒介。它是下一篇「平手时避开上一篇」的唯一依据。- 正文图数量与
image_density对得上。删过图位要写明删了哪个、为什么。 - 生成日志已落盘且看过有没有腰斩告警。封面为什么难看,正是靠日志里「已按 2.35:1 居中裁切: 1024x1024 → 1024x436」定位到的——屏幕上滚过去就没了。
imgs/根目录只剩正文引用的图,中间产物已归入raw/;本篇所有信息位配图共用同一个媒介,而每个图位的形态各自按内容选。
重跑生图后必须复核引用——返回格式会变(这次 PNG 下次 JPEG),引用会断且不报错。细则见 [branches.md 第五节](references/branches.md)。
分支与异常
不在主路径上的情况全部写在 [references/branches.md](references/branches.md):正文配图来源优先级、用户供图模式、发布后换图重发、调用失败四分类、故障降级终点、重跑复核、端点差异与比例传法。
想直接用这个技能?
本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。
它属于哪个仓库
skills/aws-wechat-article-images/SKILL.md