{"id":"4112a75c-a8ef-41c1-bf87-fb19be7b7c45","entityType":"agent","slug":"clawhub-aiworkskills-aws-wechat-article-images","name":"公众号封面 & AI 配图","canonicalUrl":"https://www.xpersona.co/agent/clawhub-aiworkskills-aws-wechat-article-images","canonicalPath":"/agent/clawhub-aiworkskills-aws-wechat-article-images","generatedAt":"2026-10-10T14:47:04.525Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":null},"description":"公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。 Skill: 公众号封面 & AI 配图 Owner: aiworkskills Summary: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。 Tags: aigc:1.0.17, chinese:1.0.17, claude-code:1.0.17, cover:1.0.17, design:1.0.17, illustration:1.0.17, image:1.0.17, latest:1.0.24, wechat:1.0.17 Version h","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s170f08a9xbhfkfp1vjv33y1ph842r9a:aws-wechat-article-images","sourceUrl":"https://clawhub.ai/aiworkskills/aws-wechat-article-images","homepage":"https://clawhub.ai/aiworkskills/skills/aws-wechat-article-images","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/aiworkskills/aws-wechat-article-images","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/aiworkskills/skills/aws-wechat-article-images","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-st"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":null},"stars":null,"forks":null,"downloads":1435,"packageName":null,"latestVersion":"1.0.24","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T12:22:56.632Z","lastCrawledAt":"2026-10-10T12:22:56.632Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T12:22:56.632Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.24","createdAt":"2026-09-06T07:24:40.185Z","changelog":"封面与正文配图改为方法驱动的内容形态（封面 9 个 / 正文 8 个），清除 Type × Style 残留；媒介池扩到 8 个且必须篇间轮换；出图后加纯代码检查与可选标题合成；修重跑覆盖成更差的图、换后缀断引用、重试次数不足；统一 {python} 解释器占位符。","fileCount":53,"zipByteSize":82752},{"version":"1.0.23","createdAt":"2026-04-24T13:04:14.886Z","changelog":"引入 .aws-article/products/{产品名}/ 业务资料库：涉及自家产品的写稿/配图前先查 products/；AI 生成的业务介绍引导保存到 products/{产品名}/*.md。assets 的图片入库脚本重命名 stock_image_ingest.py → product_image_ingest.py（按产品分目录）。","fileCount":16,"zipByteSize":34144},{"version":"1.0.22","createdAt":"2026-04-22T23:24:16.467Z","changelog":"软化版套件完整性提示：说明工作流会读跨 skill 共享文档、单独安装时会 file-not-found；纯信息性语气，无 shell 循环、无 Agent 强指令","fileCount":15,"zipByteSize":32727},{"version":"1.0.21","createdAt":"2026-04-22T23:06:20.579Z","changelog":"修 SSRF 漏洞：image_create.py 下载 API 返回的图片 URL 前加 hostname 校验（仅允许 http/https 公网地址；拒绝内网/环回/保留/链路本地）；SKILL.md 披露","fileCount":15,"zipByteSize":32551},{"version":"1.0.20","createdAt":"2026-04-22T22:35:46.895Z","changelog":"修 scanner 精准点名：移除'不外传/不读仓库外'假陈述；补凭证/内容外发披露；sticker+review 补 WECHAT 凭证声明；空 env 的 skill 移除 primaryEnv；3 个脚本不再遍历父目录","fileCount":15,"zipByteSize":31636},{"version":"1.0.19","createdAt":"2026-04-22T16:36:20.271Z","changelog":"能力披露：frontmatter 加 metadata.openclaw.requires；body 加 Capabilities 段；降温前置依赖块（去 shell 循环与强指令语气）；article_init.py 不再读 Path.home()","fileCount":15,"zipByteSize":31483},{"version":"1.0.18","createdAt":"2026-04-22T15:53:22.810Z","changelog":"清理 tags 只留 latest；frontmatter 加 homepage+url；main/publish 加 automation 关键词","fileCount":15,"zipByteSize":31623},{"version":"1.0.17","createdAt":"2026-04-22T08:45:24.032Z","changelog":"加前置依赖检查：任一 skill 启动前要求 9 个套件全装，否则停止工作流","fileCount":15,"zipByteSize":31569}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170f08a9xbhfkfp1vjv33y1ph842r9a:aws-wechat-article-images","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T14:47:04.521Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-aiworkskills-aws-wechat-article-images/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":null},"readme":"Skill: 公众号封面 & AI 配图\n\nOwner: aiworkskills\n\nSummary: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\n\nTags: aigc:1.0.17, chinese:1.0.17, claude-code:1.0.17, cover:1.0.17, design:1.0.17, illustration:1.0.17, image:1.0.17, latest:1.0.24, wechat:1.0.17\n\nVersion history:\n\nv1.0.24 | 2026-09-06T07:24:40.185Z | user\n\n封面与正文配图改为方法驱动的内容形态（封面 9 个 / 正文 8 个），清除 Type × Style 残留；媒介池扩到 8 个且必须篇间轮换；出图后加纯代码检查与可选标题合成；修重跑覆盖成更差的图、换后缀断引用、重试次数不足；统一 {python} 解释器占位符。\n\nv1.0.23 | 2026-04-24T13:04:14.886Z | user\n\n引入 .aws-article/products/{产品名}/ 业务资料库：涉及自家产品的写稿/配图前先查 products/；AI 生成的业务介绍引导保存到 products/{产品名}/*.md。assets 的图片入库脚本重命名 stock_image_ingest.py → product_image_ingest.py（按产品分目录）。\n\nv1.0.22 | 2026-04-22T23:24:16.467Z | user\n\n软化版套件完整性提示：说明工作流会读跨 skill 共享文档、单独安装时会 file-not-found；纯信息性语气，无 shell 循环、无 Agent 强指令\n\nv1.0.21 | 2026-04-22T23:06:20.579Z | user\n\n修 SSRF 漏洞：image_create.py 下载 API 返回的图片 URL 前加 hostname 校验（仅允许 http/https 公网地址；拒绝内网/环回/保留/链路本地）；SKILL.md 披露\n\nv1.0.20 | 2026-04-22T22:35:46.895Z | user\n\n修 scanner 精准点名：移除'不外传/不读仓库外'假陈述；补凭证/内容外发披露；sticker+review 补 WECHAT 凭证声明；空 env 的 skill 移除 primaryEnv；3 个脚本不再遍历父目录\n\nv1.0.19 | 2026-04-22T16:36:20.271Z | user\n\n能力披露：frontmatter 加 metadata.openclaw.requires；body 加 Capabilities 段；降温前置依赖块（去 shell 循环与强指令语气）；article_init.py 不再读 Path.home()\n\nv1.0.18 | 2026-04-22T15:53:22.810Z | user\n\n清理 tags 只留 latest；frontmatter 加 homepage+url；main/publish 加 automation 关键词\n\nv1.0.17 | 2026-04-22T08:45:24.032Z | user\n\n加前置依赖检查：任一 skill 启动前要求 9 个套件全装，否则停止工作流\n\nv1.0.16 | 2026-04-22T05:13:29.968Z | user\n\n压缩 description 做 SEO 密度优化\n\nv1.0.15 | 2026-04-22T04:49:55.982Z | user\n\nSEO 优化：补关键词/友好名/价值主张/GitHub 链接\n\nv1.0.14 | 2026-04-22T04:35:07.898Z | user\n\n对齐 git tag v1.0.14\n\nv1.0.1 | 2026-04-22T04:25:43.805Z | user\n\n首发/补套件说明：跨 skill 相对引用需同 skills/ 目录一起安装\n\nv1.0.0 | 2026-04-01T03:44:42.617Z | auto\n\n- Initial release of aws-wechat-article-images skill.\n- Automatically generates cover and article images for WeChat articles based on content, supporting flexible Type × Style combinations.\n- Enforces strict environment and config checks before image generation; main workflow steps and error handling are clearly defined.\n- Uses dedicated image generation API (`scripts/image_create.py`); falls back to prompts or agent if config or network issues occur, and always informs the user of the chosen method and errors.\n- Integrates with article writing and sticker skills for a full publishing workflow.\n- Outputs structured files and follows detailed conventions for prompts, style selection, and workflow steps.\n\nArchive index:\n\nArchive v1.0.24: 53 files, 82752 bytes\n\nFiles: references/cover-examples/README.md (530b), references/cover-examples/书脊阶梯.md (445b), references/cover-examples/剖面.md (505b), references/cover-examples/双生.md (481b), references/cover-examples/双轨.md (499b), references/cover-examples/层积.md (504b), references/cover-examples/山峰折线.md (451b), references/cover-examples/引力汇聚.md (568b), references/cover-examples/折叠纸境.md (523b), references/cover-examples/星图.md (472b), references/cover-examples/根系电路.md (517b), references/cover-examples/沙漏城市.md (481b), references/cover-examples/涟漪.md (521b), references/cover-examples/潮线.md (500b), references/cover-examples/灯下.md (491b), references/cover-examples/破土.md (574b), references/cover-examples/空椅.md (482b), references/cover-examples/逆光剪影.md (554b), references/cover-examples/钥匙迷宫.md (424b), references/cover-examples/长廊尽头.md (546b), references/cover-examples/静物台.md (522b), references/cover-method.md (10607b), references/cover-styles/README.md (2417b), references/cover-styles/产品实拍.example.md (1012b), references/cover-styles/人物出镜.example.md (951b), references/cover-styles/信息表.example.md (984b), references/cover-styles/剧照氛围.example.md (888b), references/cover-styles/图上压字.example.md (946b), references/cover-styles/场景实拍.example.md (945b), references/cover-styles/对比式.example.md (1059b), references/cover-styles/截图标注.example.md (1080b), references/cover-styles/扁平插画.example.md (965b), references/cover-styles/数字冲击.example.md (1113b), references/cover-styles/纯色大字.example.md (1029b), references/cover-styles/菜品特写.example.md (1066b), references/image-method.md (9726b), references/image-styles/prompt-construction.md (5216b), references/image-styles/README.md (3227b), references/image-styles/场景还原.example.md (1675b), references/image-styles/对比两栏.example.md (1115b), references/image-styles/数据图表.example.md (1214b), references/image-styles/概念隐喻.example.md (1953b), references/image-styles/流程步骤.example.md (1227b), references/image-styles/清单要点.example.md (1338b), references/image-styles/结构分层.example.md (1122b), references/image-styles/金句卡片.example.md (1467b), references/specs.md (1273b), scripts/image_create.py (60480b), scripts/user_image_prepare.py (3287b), skill-card.md (2410b), skill.json (500b), SKILL.md (25355b), _meta.json (145b)\n\nFile v1.0.24:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **下图 SSRF 防御**：若 API 响应返回图片 URL（而非 base64），脚本**仅允许下载 http/https 公网地址**；内网 / 环回 / 链路本地 / 保留地址全部拒绝（防止恶意或被劫持的模型端点把脚本当作 SSRF 跳板）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、`references/cover-method.md`、`references/image-method.md`、`references/cover-examples/*.md`、`.aws-article/products/{产品名}/images/*`（业务配图库，本篇涉及用户业务时优先复用）\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `{python} {baseDir}/scripts/image_create.py`、`user_image_prepare.py`（`{python}` = 本机 Python 3 解释器，见 [main SKILL 第 0 步](../aws-wechat-article-main/SKILL.md)：Windows 用 `py -3 -X utf8`，macOS / Linux 用 `python3`）\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的**配图环节**（入口 `aws-wechat-article-main`）。工作流中的若干步骤会读取同级 `../aws-wechat-article-main/references/*.md` 等共享文档（首次引导、env/config 示例、articlescreening schema 等）。\n\n- **套件完整装齐到同一 `skills/` 根目录**时，跨 skill 引用都能读到。\n- **单独安装本 skill** 时，跨 skill 引用的步骤会在读取阶段遇到 `file not found`；本 skill 内的生图脚本仍可用。\n\n完整 9 slug 清单见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按内容形态生成图片：封面 12 个形态、正文配图 8 个形态，均按内容判断而非账号审美。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**比例怎么传（因端点而异）**：`/v1/images/generations` 用 `size` 像素串；Gemini 系模型走 `/v1/chat/completions` 时用 `extra_body.imageConfig`（比例 + 分辨率档位），这是 Gemini 特有结构，**只对识别为 Gemini 系的模型发送**（模型名含 gemini / nano-banana / imagen），其余模型保持「尺寸并入提示 + 生成后裁切」以免严格网关报 400。可用 **`image_model.aspect_mode`**（`auto` / `imageconfig` / `none`）显式覆盖。无论走哪条路径，最终都会按 `aspect` 校正到目标比例。\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面**：按 [cover-method.md](references/cover-method.md) 七步推导——找张力、定关系、找隐喻、套视觉语言、2.35:1 布局、写成散文、回看。封面模板（[references/cover-styles/](references/cover-styles/)）提供第四步的内容形态与**文案规格**（字号/颜色/位置），共 12 个，默认全选为候选池，Agent 按文章内容挑一个。范例见 [cover-examples/](references/cover-examples/)。\n- **先分工再选形态** ⛔：排版侧的[版式组件](../aws-wechat-article-formatting/references/components/)和信息位配图干同一件事，同一份内容只能给其中一个。判据是**内容里有没有空间关系**（大小/流向/嵌套 → 图；纯文字并列/对照/枚举 → 组件）。五个形态的实测归属见 [image-method.md 第一步半](references/image-method.md)。\n- **正文配图**：8 个内容形态，见 [references/image-styles/](references/image-styles/)。判断只有一条——删掉这张图，读者会**看不懂**（信息位，必须带文章真实内容）还是**读不下去**（节奏位，不加字）？都不影响就不要这张图。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/products/{产品名}/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **优先使用业务配图库**：`.aws-article/products/{相关产品}/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地业务配图库**，避免**业务相关文章**（教程 / 产品介绍 / 案例 / 自家界面截图）「有现成业务配图却重新生成」：\n\n1. **仓库业务配图库**：若本篇涉及用户业务，先 `ls .aws-article/products/`，进入相关产品的 **`images/`** 子目录，列出并阅读 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再按 [image-method.md](references/image-method.md) 选形态、写 `imgs/prompts/`、执行 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：业务配图库属「仓库内业务资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/products/{相关产品}/images/` 搜索（业务配图库）。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/products/{产品名}/images/`：业务配图库（产品截图、品牌素材等）；本篇涉及用户业务时**优先读同名 `.md` 再选图**。若已用业务配图满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装；文件名形如 `简约.example.md`，预设名取 `.example.md` 之前的部分即 `简约`，可直接引用无需复制）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：`custom_cover_image_style` 为空即全选，Agent 按 [cover-method.md](references/cover-method.md) 第四步从 12 个形态里挑——判断只有一条：主体在 345px 缩略图里能否被一眼认出。\n\n每个封面模板 `.md` 含五个字段：用于 / 主体 / 影调 / **文案** / 版式。「文案」不可缺省——缺了产出的是背景图而不是成品封面。画什么由 [cover-method.md](references/cover-method.md) 从文章推导。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：内置 8 个于 `{baseDir}/references/image-styles/`（`<名>.example.md`，预设名取 `.example.md` 之前的部分），用户自定义放 `.aws-article/presets/image-styles/<名>.md`，同名覆盖。默认全选为候选池，Agent 按每个图位的作用挑形态。schema 与判断标准见 [image-styles/README.md](references/image-styles/README.md)。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：`custom_article_image_style` 为空即全选，Agent 按 [image-method.md](references/image-method.md) 逐个图位判断——删掉它读者会看不懂（信息位）还是读不下去（节奏位）？都不影响就删掉该图位。\n\n### 第4步：生成配图方案\n\n**封面**：按 [cover-method.md](references/cover-method.md) 走完前六步，产出一个 prompt 文件：frontmatter 含 `aspect`，正文是 150–300 字的散文，标题文案（4–7 字，从文章标题提炼钩子；字高占画面 25–35%，是画面第一元素）连同位置、字体感、颜色、大小一起写在里面。不要关键词清单，不要写「不要 X」，不要照抄预设或范例里的场景。\n\n**正文配图**：按 [image-method.md](references/image-method.md) 六步逐个图位处理。信息位的内容**必须从文章里取**，不能让模型自由发挥——实测会生成无关鸡汤并自带 emoji。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此映射到 API 支持的最接近尺寸生成，装有 Pillow 时再居中裁切到该比例（如 2.35:1 → 1792x763）。**值须加引号**（`aspect: \"2.35:1\"`），未加引号的 `16:9` 会被 YAML 解析成整数。缺少 aspect 时退回 `config.yaml` 的 `image_model.default_size`（默认 1024x1024）。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：封面见 [cover-method.md](references/cover-method.md)，正文配图见 [image-method.md](references/image-method.md)；通用规则（图中文字、构图要求、高级布局）见 [prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n- **一条龙流程**且用户对风格无特殊要求：与 main 约定一致，按默认预设自动执行，**不单独确认**，但须在结果里列出每张图的类型、风格与 prompt 文件路径。\n- **单独触发本 skill**、用户明确提出风格要求、或方案涉及用业务配图库替换正文图位：先展示方案（每图：位置、Type、Style、prompt 要点、来源），**等待用户确认后**再进入第 6 步。\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**封面回看（必做）**：`cover.*` 生成后打开图片，按 [cover-method.md 第七步](references/cover-method.md) 对五条：标题字对不对全不全、主体位置与标题区、元素 ≤3、缩略图可读、与文章相关。不过关**回到出问题的那一步改 prompt** 再生成——标题错了改文案写法，主体乱跑改布局描述，与文章无关是张力没找准；不要不改 prompt 盲目重跑。当前环境看不了图时，退而运行 `{python} {baseDir}/scripts/image_create.py check cover.png` 做纯代码检查——**只有尺寸与近单色两项**。标题区干净度只对「先出底图再用 `--title-font` 合成标题」那条路有效；本方法的标题由模型画进图里，文字本身就是高边缘密度，套这项会把正确的封面判为不合格。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\n{python} {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`{python} {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`{python} {baseDir}/scripts/image_create.py test`（失败时退出码 1 并打印分类提示，可按下方表格处理）\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n**⛔ 插图入正文之后又重跑生图时，必须复核引用。** 端点返回的格式会变（同一 prompt 这次 PNG 下次 JPEG），脚本会删掉同名旧后缀的图并打 `[WARN]`，`article.md` / `article.html` 里的 `imgs/xxx.png` 就指向了不存在的文件。实测踩过：补跑两张分辨率不达标的图，其中一张换成了 `.jpg`，正文引用当场断掉且不报错。重跑后按文件名主干（`05-金句卡片`）重新匹配实际存在的文件，两个文件一起改。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.24:references/cover-examples/README.md\n\n# 封面范例\n\n这里是 20 段按 [cover-method.md](../cover-method.md) 第六步写出来的封面散文，每段对应一个已验证能出好图的视觉隐喻。\n\n**它们是范例，不是模板。** 用途是让你看清「一段合格的封面散文长什么样」：场景 → 主体细节 → 光 → 氛围 → 像什么不像什么。写自己的封面时照这个密度和顺序写，不要照抄场景。\n\n文件名即隐喻名。方法文档第三步的范例表列了其中 8 个，附带「为什么成立」。\n\nFile v1.0.24:references/cover-styles/README.md\n\n# 封面模板\n\n本目录下的 `<名>.example.md` 是**内置封面模板**，预设名取 `.example.md` 之前的部分。用户自定义放 `.aws-article/presets/cover-styles/<名>.md`，同名覆盖内置。\n\n## 模板是「内容形态」，不是「美学风格」\n\n按 83 张真实公众号封面（11 个品类）统计得出：封面形态由**内容类型**决定，不由账号审美决定。同品类的号封面高度雷同，跨品类几乎不重叠。所以模板按形态划分，不按风格划分。\n\n蒸汽波、孟菲斯、复古潮流、新中式、图文混排、品牌模板在那 83 张里出现 **0 次**，已下架。\n\n## 核心判断：主体在缩略图里自不自明\n\n信息流封面只有 **345×147px**，而文章标题本来就显示在封面旁边。所以封面**不需要重复标题**——除非它自己说不清在讲什么。\n\n| | 模板 | 文案 |\n|---|---|---|\n| **自明** | 菜品特写 · 人物出镜 · 场景实拍 · 剧照氛围 | 默认不加字，加了挡主体 |\n| **不自明** | 纯色大字 · 图上压字 · 信息表 · 数字冲击 · 对比式 · 截图标注 | 字就是全部 |\n| **中间** | 扁平插画 · 产品实拍 | 建议加短钩子 |\n\n后三个来自 100 个大号的封面分析：**数字冲击**（放大数字做视觉焦点）与**对比式**\n（前后/好坏并置）是该分析里排前两位的方法；**截图标注**是工具教程号的标配。\n\n实测：78 张里仅约 28% 带醒目文字，且集中在职场、理财、AI 这类抽象内容。美食、育儿、情感几乎不加字。\n\n## Schema\n\n五个字段，**一个都不能缺**：\n\n```markdown\n# 模板名\n\n## 用于\n[什么内容用它；主体自不自明]\n\n## 主体\n[画面主角是什么，占画面多大比例]\n\n## 影调\n[色、光、媒介、质感]\n\n## 文案\n[加不加字。加：字数、字重、颜色、字高占比、位置。\n 不加：写明「默认不加字」及原因。**此项不可缺省**]\n\n## 版式\n[主体和文字各在哪]\n```\n\n缺「文案」和「主体占比」，产出的就是背景图而不是成品封面——线上旧版 12 个模板正是缺这两项。\n\n## 用法\n\n模板是**默认候选池**，`custom_cover_image_style` 默认全选。Agent 按 [cover-method.md](../cover-method.md) 读文章判断内容类型，从池中挑最合适的一个，不需要用户每篇指定。用户取消勾选即排除该形态。\n\nFile v1.0.24:references/image-styles/README.md\n\n# 正文配图模板\n\n本目录下的 `<名>.example.md` 是**内置正文配图模板**。用户自定义放 `.aws-article/presets/image-styles/<名>.md`，同名覆盖内置。\n\n## 正文配图和封面的标准不同\n\n封面抢点击，正文配图帮阅读。两条硬区别：\n\n| | 封面 | 正文配图 |\n|---|---|---|\n| 尺寸 | 2.35:1，信息流里 345×147px | 16:9，宽 1080px，占满手机屏宽 |\n| 信息密度 | 必须极简，元素 ≤3 | **可以高**，允许文字与细节 |\n| 目的 | 三秒抢注意力 | 降低阅读成本 |\n\n## 核心判断：信息位还是节奏位\n\n> **删掉这张图，读者会「看不懂」还是「读不下去」？**\n\n| | 模板 | 文案 |\n|---|---|---|\n| **信息位**（看不懂） | 流程步骤 · 结构分层 · 数据图表 · 对比两栏 · 清单要点 | **必须有，且必须是文章里的真实内容** |\n| **节奏位**（读不下去） | 概念隐喻 · 场景还原 · 金句卡片 | 前两者**不加字**，金句卡片整张就是那句话 |\n\n**都不影响就删掉。** 无信息量的氛围图会稀释信息密度，让读者划得更快、退出更早。\n\n信息位的内容**必须由 Agent 从文章里取**，不能让模型自由发挥——实测让模型自己填清单内容，它会生成「保持高效工作状态」这类无关鸡汤，还自带 emoji。\n\n## Schema\n\n与封面模板一致的五个字段：**用于 / 主体 / 影调 / 文案 / 版式**，「文案」不可缺省。信息位模板另有 **媒介** 字段。\n\n「手绘」不在这张表里，因为它不是形态而是**媒介**——任何信息位形态都能用手绘画出来，\n它不该和流程步骤并列成为二选一。媒介是每篇一次的决策，见\n[image-method.md](../image-method.md) 第四步。\n\n## 两条实测经验\n\n**AI 味来自媒介，不是信息密度。** 同样的四个步骤、同样的信息量，扁平矢量版一眼是 AI\n生成，白板手写版看着像刚开完会。\n\n但原因不是「手绘不完美」——把同样内容画成终端窗口，等宽字、纯色底、像素级整齐，\n一点不完美都没有，照样零 AI 味。真正的原因是：**白板、牛皮纸、黑板、终端、批注过的\n打印稿，都是读者在生活里真见过的载体**，而「扁平矢量信息图」不是任何人会遇到的实物。\n\n**模板不钉死媒介**：媒介是每篇一次的决策，按账号调性圈定集合后**排除最近 3 篇用过的**。\n只做「篇内统一」不做「篇间轮换」，整个号会只剩一种长相——这是踩过的坑。见\n[image-method.md](../image-method.md) 第四步。\n\n清单类版式在模型的训练分布里有很强的默认形态（卡片阴影 + emoji + 说明小字）。**负向指令压不住**——写「不要 emoji」「不要卡片」无效，必须正面描述一个不含这些元素的具体画面：「纯米白背景，背景与画布融为一体」「画面上除这几行中文外没有任何图形、符号或图标」。\n\n## 用法\n\n模板是**默认候选池**，`custom_article_image_style` 默认全选。Agent 按每个图位的作用挑形态：这一处是解释复杂信息（信息位），还是给眼睛休息（节奏位）。\n\nFile v1.0.24:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.24\",\n  \"publishedAt\": 1788679480185\n}\n\nFile v1.0.24:references/cover-examples/书脊阶梯.md\n\n---\naspect: \"2.35:1\"\n---\n一张超宽幅封面。暖褐背景，画面左侧一摞书侧放堆叠，书脊朝向观者——而这些错落的书脊侧面正好构成一段向右上方延伸的阶梯，每一级都是一本书的厚度。阶梯尽头没入柔和的高光里。窗光从右上斜射，投下清晰的阶梯状阴影。质感厚实，纸页边缘可见。右侧上方留白。\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/剖面.md\n\n---\naspect: \"2.35:1\"\n---\n一张超宽幅封面。画面左侧是一个被整齐剖开的球体，切面朝向观者，露出内部一层套一层的同心结构，每层材质不同：外层粗糙，中层纤维状，核心是发光的致密晶体。切口边缘干净利落，像被精密仪器切开。深灰背景，单一顶光。右侧留出大片空场。冷静、解剖学式的精确感，像一张科学图鉴的内页，而不是渲染图。\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/双生.md\n\n---\naspect: \"2.35:1\"\n---\n一张超宽幅封面。画面被一条极细的垂直光缝分成左右两半，同一个几何体在两侧各出现一次：左侧那个是粗糙的、未打磨的、暗哑的原石质感；右侧那个是同样形状但已被打磨成通透的水晶，内部有光。背景是统一的深灰渐变，两侧光线方向一致，让人一眼看出是同一物体的两种状态。对称但不呆板。\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/双轨.md\n\n---\naspect: \"2.35:1\"\n---\nAn ultra-wide cover. Two parallel tracks run from the lower left toward the upper right, side by side and equally spaced. The left one is a natural game trail worn into pale grass by animals; the right one is a precise set of steel rails on gravel. Their curves echo each other exactly. Overcast diffused light, no harsh shadows, muted green-gray palette. The upper right third is empty sky. Quiet observation, no drama.\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/层积.md\n\n---\naspect: \"2.35:1\"\n---\nAn ultra-wide macro of stratified rock, cut clean and vertical like a core sample laid on its side. Dozens of horizontal layers in ochre, rust, bone white and charcoal, each a different thickness and grain — some compressed thin, others thick and porous. Raking side light emphasizes the texture of every band. The layers run the full width but the upper third is empty sky-gray. Geological, patient, evidence of long time.\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/山峰折线.md\n\n---\naspect: \"2.35:1\"\n---\n一张超宽幅封面。淡青灰的晨雾里，一道远山的天际线横贯画面——但这道山脊同时是一条数据折线：峰顶是数据高点，山谷是低谷，山体轮廓上有几个几乎看不见的圆形节点。山是真实的山，线是真实的线，两者是同一条边缘。前景大片空雾。极简、冷静，水墨与信息图的合体。\n\n画面中不出现任何文字、字母或数字。\n\nFile v1.0.24:references/cover-examples/引力汇聚.md\n\n---\naspect: \"2.35:1\"\n---\n一张超宽幅编辑级封面。近黑的深空背景向右缓缓过渡为墨蓝。画面左侧三分之一，无数细小光点正从四周汇聚成一个发光的核心，像洋流汇入漩涡，留下极细的青色轨迹。越靠近中心光点越密，核心亮到发白，把周围微尘照亮成一层薄雾。右侧三分之二是干净的暗场，只有几条几乎看不见的网格线。冷峻、克制、有纵深，像天文台的长曝光观测图，而不是科技海报。\n\n画面中不出现任何文字、字母或数字。\n\nArchive v1.0.23: 16 files, 34144 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (28148b), scripts/user_image_prepare.py (3287b), skill-card.md (2672b), skill.json (500b), SKILL.md (20065b), _meta.json (145b)\n\nFile v1.0.23:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **下图 SSRF 防御**：若 API 响应返回图片 URL（而非 base64），脚本**仅允许下载 http/https 公网地址**；内网 / 环回 / 链路本地 / 保留地址全部拒绝（防止恶意或被劫持的模型端点把脚本当作 SSRF 跳板）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、`.aws-article/products/{产品名}/images/*`（业务配图库，本篇涉及用户业务时优先复用）\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `python3 {baseDir}/scripts/image_create.py`、`user_image_prepare.py`\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的**配图环节**（入口 `aws-wechat-article-main`）。工作流中的若干步骤会读取同级 `../aws-wechat-article-main/references/*.md` 等共享文档（首次引导、env/config 示例、articlescreening schema 等）。\n\n- **套件完整装齐到同一 `skills/` 根目录**时，跨 skill 引用都能读到。\n- **单独安装本 skill** 时，跨 skill 引用的步骤会在读取阶段遇到 `file not found`；本 skill 内的生图脚本仍可用。\n\n完整 9 slug 清单见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按 Type × Style 体系生成图片。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面风格**：独立预设体系，见 [references/cover-styles/](references/cover-styles/)。每个预设 `.md` 自包含视觉关键词。\n- **正文配图**：Type（画面构成）决定\"画什么\"，Style（视觉风格）由 Agent 根据 tone/category 内部选择。Type 列表与 prompt 模板见 [references/image-styles/](references/image-styles/) 目录。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/products/{产品名}/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **优先使用业务配图库**：`.aws-article/products/{相关产品}/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地业务配图库**，避免**业务相关文章**（教程 / 产品介绍 / 案例 / 自家界面截图）「有现成业务配图却重新生成」：\n\n1. **仓库业务配图库**：若本篇涉及用户业务，先 `ls .aws-article/products/`，进入相关产品的 **`images/`** 子目录，列出并阅读 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再进入 **Type × Style**、`imgs/prompts/` 与 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：业务配图库属「仓库内业务资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/products/{相关产品}/images/` 搜索（业务配图库）。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/products/{产品名}/images/`：业务配图库（产品截图、品牌素材等）；本篇涉及用户业务时**优先读同名 `.md` 再选图**。若已用业务配图满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：根据 `tone` / `article_category` 从可用封面预设中自动推荐（规则见 [auto-selection.md](references/image-styles/auto-selection.md)）\n\n每个封面预设 `.md` 自包含视觉关键词（`Prompt 要点`），无须引用外部 Style 维度。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：Agent 扫描 `.aws-article/presets/image-styles/` 获取可用正文配图预设。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：根据正文内容信号与 `tone` 自动推荐 Type 和视觉风格（规则见 [auto-selection.md](references/image-styles/auto-selection.md)），视觉风格为 Agent 内部决策\n\n### 第4步：生成配图方案\n\n为每张图生成方案（类型、风格、prompt 要点）。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此转换为实际像素尺寸；**缺少 aspect 会导致 fallback 到 1:1**。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：[references/image-styles/prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\npython {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`python {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`python {baseDir}/scripts/image_create.py test`\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.23:references/cover-styles/README.md\n\n# 封面风格预设\n\n本目录下的 `.md` 文件为**封面风格预设**（内置）。用户自定义预设放在 `.aws-article/presets/cover-styles/` 下。\n\n## 加载规则\n\n生成封面时按 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后的预设名加载对应 `.md`（`custom_*` 非空时覆盖同名 `default_*`；须收窄为单元素列表后再执行配图）。\n\n**预设发现**：Agent 运行时扫描两个目录合并可用列表：\n\n1. **内置**：`skills/aws-wechat-article-images/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或由 `.aws` 预设包导入）\n\n用户自定义同名文件优先于内置。\n\n## Schema\n\n每个 `.md` 文件描述一种封面视觉风格：\n\n```markdown\n# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n```\n\n- 文件名即预设名（不含后缀），如 `简约.md` → 预设名 `简约`。\n- `Prompt 要点` 部分会被 Agent 直接嵌入封面 prompt 的「风格」字段。\n- 每个预设自包含视觉风格描述，无须引用外部 Style 维度。\n\n## 示例\n\n见同目录下的 `.example.md` 文件。复制到 `.aws-article/presets/cover-styles/` 并重命名为 `.md` 后按需修改。\n\nFile v1.0.23:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.23\",\n  \"publishedAt\": 1777035854886\n}\n\nFile v1.0.23:references/cover-styles/大字报.example.md\n\n# 大字报\n\n## 描述\n\n大胆醒目的排印设计，超大字号占据画面主体，强对比色块，海报感十足。适合观点鲜明、需要吸引眼球的文章。\n\n## 适用场景\n\n观点文章、评论、热点话题、犀利文风。适合个人 IP 或自媒体调性的账号。\n\n## Prompt 要点\n\n- bold typography-driven layout, oversized Chinese characters as main visual\n- high contrast color blocks, 2-3 strong colors, no subtle gradients\n- poster-like composition, graphic and punchy\n- minimal imagery, text IS the visual; background supports readability\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.23:references/cover-styles/插画.example.md\n\n# 插画\n\n## 描述\n\n扁平化插画风格，色块分明，几何化人物或物品，清新明快的配色。兼顾趣味性与信息传达。\n\n## 适用场景\n\n教程、科普、知识分享、生活方式类文章。适合轻松或专业调性的账号。\n\n## Prompt 要点\n\n- flat illustration style, vector-like shapes, solid color blocks, minimal gradients\n- stylized characters or objects with geometric simplification\n- bright and fresh color palette, 2-4 main colors\n- clear visual hierarchy, one main scene or concept\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.23:references/cover-styles/科技风.example.md\n\n# 科技风\n\n## 描述\n\n深色背景搭配科技感光效，数据流、电路纹理、HUD 元素，营造前沿技术氛围。\n\n## 适用场景\n\nAI、前沿科技、系统设计、技术深度文章。适合科技类或极客调性的账号。\n\n## Prompt 要点\n\n- dark background (deep blue, black, dark gray), neon or electric accent colors\n- tech elements: circuit patterns, data streams, holographic overlays, grid lines\n- glowing edges, light trails, subtle particle effects\n- futuristic and sleek, high contrast between dark base and bright accents\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.23:references/cover-styles/简约.example.md\n\n# 简约\n\n## 描述\n\n干净利落的极简设计，大面积留白，单一焦点元素，低饱和度配色。适合传递专业、可信赖的视觉印象。\n\n## 适用场景\n\n科技、商业、知识分享、专业分析类文章。适合正式或专业调性的账号。\n\n## Prompt 要点\n\n- minimal design, clean composition, ample whitespace, single focal point\n- muted or monochromatic color palette, subtle gradients allowed\n- geometric or abstract shapes preferred over literal illustrations\n- no clutter, no decorative elements, breathing space around subject\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.23:references/image-styles/auto-selection.md\n\n# 自动推荐规则\n\n当用户未指定风格时，根据文章内容自动推荐。\n\n> 本文件主要用于**正文配图**的 Type 和 Style 自动推荐。封面风格的 fallback 见末尾「封面风格 fallback」节。\n\n## 按文章调性（正文配图）\n\n| 调性（config `tone`） | 推荐风格 |\n|----------------------|---------|\n| 正式、专业 | 扁平矢量、蓝图、商务 |\n| 轻松、幽默 | 手绘、温暖、活泼 |\n| 犀利 | 海报、极简 |\n\n## 按文章内容信号\n\n| 内容信号 | 推荐 Type | 推荐 Style |\n|---------|-----------|-----------|\n| 抽象概念、原理、隐喻 | concept | 扁平矢量、简约线条、手绘 |\n| 教程、步骤、操作指南 | process | 扁平矢量、简约线条 |\n| 知识框架、原理讲解、课程 | whiteboard | 手绘、简约线条 |\n| 数据、统计、趋势、报告 | data-viz | 扁平矢量、商务 |\n| 对比、评测、方案选择 | comparison | 扁平矢量、商务 |\n| 架构、系统、模型、体系 | architecture | 蓝图、扁平矢量 |\n| 知识全景、关系梳理、概览 | mindmap | 扁平矢量、简约线条 |\n| 历程、里程碑、路线图 | timeline | 简约线条、商务 |\n| Tips、要点列表、注意事项 | checklist | 扁平矢量、温暖 |\n| 金句、核心观点、名言 | quote-card | 温暖、海报、极简 |\n| 使用场景、产品展示、代入感 | scene | 温暖、水彩、手绘 |\n| 故事、情感、散文、视觉呼吸 | atmosphere | 温暖、水彩、海报 |\n\n## 按 config `article_category`（正文配图）\n\n| 账号类型 | 默认风格基调 |\n|---------|------------|\n| 科技 | 蓝图 / 扁平矢量 |\n| 职场 | 商务 / 简约线条 |\n| 情感 | 温暖 / 水彩 |\n| 教育 | 扁平矢量 / 手绘 |\n| 品牌号 | 按品牌调性 |\n| 个人IP | 温暖 / 手绘 |\n\n## 配图密度\n\n按 config `image_density`：\n\n| 配置值 | 规则 |\n|--------|------|\n| 每节一图 | 每个 H2 小标题后一张 |\n| 少图 | 仅封面 + 1-2 张关键配图 |\n| 多图 | 每 2-3 段一张 |\n\nwriting 阶段已按此密度插入标记，images 阶段按标记执行即可。\n\n## 封面风格 fallback\n\n当 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后**无有效单选预设**（空列表或未收窄为单元素）时，Agent 从可用封面预设（扫描内置 + **`.aws-article/presets/cover-styles/`**）中按以下规则推荐：\n\n| 调性 / 类型 | 推荐封面预设 |\n|------------|------------|\n| 科技、专业 | 科技风、简约 |\n| 轻松、幽默 | 插画、漫画 |\n| 犀利、观点 | 大字报 |\n| 正式、商业 | 简约、品牌模板 |\n| 通用 / 无明确信号 | 简约 |\n\n注：推荐的预设名须在可用列表中存在。若推荐的预设不存在，从已有预设中择一最接近的。\n\nFile v1.0.23:references/image-styles/prompt-construction.md\n\n# Prompt 构建指南\n\n## 图片内文字语言（必守）\n\n**公众号配图画面中出现的所有文字必须为中文。**\n\n- 在 prompt 里**直接写出要显示的中文文案**（例如：左侧「传统对话AI」、右侧「OpenClaw」、步骤「立项」「开发」「上线」）。\n- **禁止**只写 \"labels in Chinese\" 或 \"Chinese or English OK\" 等元描述——多数模型会默认生成英文。\n- Prompt 本身可中英混排（描述构图用英文亦可），但「会出现在图上的字」必须用中文写出。\n\n## 通用规则\n\n所有 prompt 必须包含：\n\n1. **布局结构**：描述构图、区域划分、视觉流向\n2. **具体内容**：使用文章中的实际数据、术语、关键词（不要泛泛而谈）\n3. **视觉关系**：元素之间如何连接、对比、层次\n4. **语义颜色**：基于含义选色（红=警告、绿=增长、蓝=科技）\n5. **风格特征**：线条处理、纹理、氛围\n6. **比例**：封面按 config `cover_aspect`，正文配图 16:9 或 4:3\n\n## 通用构图要求\n\n所有 prompt 默认附加：\n\n```\n构图要求：\n- 干净简洁，不堆砌元素\n- 充足留白，主体元素呼吸感\n- 纯色或轻微渐变背景，不要复杂纹理\n- 主视觉居中或按内容需要布局\n- 突出核心信息\n```\n\n## 人物表现\n\n如需画人物：\n\n```\n人物表现：简化风格的人物剪影或符号化表达，不要写实人脸。\n通过姿态和简单手势传达情绪。\n```\n\n## 文字处理\n\n如画面中需要文字：\n\n```\n文字要求：大而醒目，手写风字体优先，仅保留核心关键词。所有图中文字必须为中文；在 prompt 中写出要显示的中文原文（如「传统对话AI」「OpenClaw」），不要写 \"label in Chinese\"。\n```\n\n---\n\n## Type 专用模板\n\n### concept 概念讲解\n\n```\n[标题] - 概念可视化\n\n核心概念：[要解释的抽象概念]\n视觉隐喻：[映射为什么具体事物，如\"技术债\"→堆积的砖块]\n\n布局：[居中/对称/层级]\n主体：[隐喻场景的核心画面]\n辅助元素：[标注、箭头、小图标]\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### process 流程步骤\n\n```\n[标题] - 流程可视化\n\n流向：[从左到右/从上到下]\n步骤数：[N]\n\n步骤：\n1. [步骤名] → [简要说明]\n2. [步骤名] → [简要说明]\n3. [步骤名] → [简要说明]\n\n连接方式：[箭头/线条/渐变过渡]\n高亮：[哪个步骤需要突出]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### whiteboard 板书白板\n\n```\n[标题] - 板书白板风\n\n背景：白色或浅米色白板\n笔触：手写体 + 马克笔风格\n\n知识要点：\n- [要点1]：[简要说明]\n- [要点2]：[简要说明]\n- [要点3]：[简要说明]\n\n辅助：[箭头、圈注、下划线、简笔画]\n配色：[马克笔配色，2-3 种主色]\n比例：[比例]\n```\n\n### data-viz 数据可视化\n\n```\n[标题] - 数据可视化\n\n图表类型：[柱状图/折线图/饼图/面积图]\n\n数据标签：\n- [具体数据点1：实际数字和术语]\n- [具体数据点2：实际数字和术语]\n- [具体数据点3：实际数字和术语]\n\n布局：[网格/放射/层级]\n区域：\n- 顶部：标题区\n- 中部主区域：[核心数据/图表]\n- 底部：总结/来源\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### comparison 对比说明\n\n```\n[标题] - 对比可视化\n\n布局：[左右分栏/上下分栏]\n\n左侧/A项：\n- 名称：[A]\n- 特点：[关键差异点]\n\n右侧/B项：\n- 名称：[B]\n- 特点：[关键差异点]\n\n对比维度：[列出 3-5 个对比维度]\n倾向：[中立/偏向某一方]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### architecture 架构图\n\n```\n[标题] - 架构/模型可视化\n\n结构：[层级/环形/矩阵/树状]\n\n层级/模块：\n- [顶层/核心]：[名称和说明]\n- [第二层]：[名称和说明]\n- [第三层]：[名称和说明]\n\n连接关系：[包含/依赖/双向/单向]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### mindmap 思维导图\n\n```\n[标题] - 思维导图\n\n中心主题：[核心主题词]\n\n一级分支：\n- [分支1]：[关键词]\n- [分支2]：[关键词]\n- [分支3]：[关键词]\n\n二级分支（可选）：\n- [分支1] → [子项1]、[子项2]\n- [分支2] → [子项1]、[子项2]\n\n布局：[放射状/右侧展开/上下对称]\n配色：每条主分支一个色系\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### timeline 时间线\n\n```\n[标题] - 时间线\n\n方向：[横向/纵向]\n节点数：[N]\n\n节点：\n1. [时间点]：[事件/里程碑]\n2. [时间点]：[事件/里程碑]\n3. [时间点]：[事件/里程碑]\n\n高亮：[哪个节点需要突出]\n连接线：[实线/虚线/渐变]\n配色：[时间推进用渐变色]\n风格：[选定的风格特征]\n比例：[比例，通常 16:9 或 4:3]\n```\n\n### checklist 清单图\n\n```\n[标题] - 清单图\n\n条目数：[N]\n\n清单项：\n- [✓/✗] [要点1]：[一句话说明]\n- [✓/✗] [要点2]：[一句话说明]\n- [✓/✗] [要点3]：[一句话说明]\n\n每项配：[图标/编号/勾选框]\n布局：[单列/双列/卡片网格]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### quote-card 金句卡片\n\n```\n[标题] - 金句卡片\n\n金句：「[完整中文金句]」\n出处：[作者/来源]（可选）\n\n布局：文字居中，大字号\n装饰：[引号装饰/底纹/边框]\n背景：[纯色/轻渐变/纹理]\n配色：[与金句情绪匹配]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n### scene 场景还原\n\n```\n[标题] - 场景还原\n\n场景：[描述具体使用/生活场景]\n主体：[人物动作或产品使用画面]\n环境：[场景环境细节]\n视角：[第一人称/俯视/平视]\n\n情绪：[代入感/真实感/日常感]\n色调：[暖色/冷色/自然色]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### atmosphere 氛围烘托\n\n```\n[标题] - 场景氛围\n\n场景：[描述画面场景]\n情绪：[要传达的情感]\n主体：[画面中心元素]\n色调：[暖色/冷色/具体色彩倾向]\n光线：[光源方向和质感]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### 封面\n\n封面 prompt 的「风格」关键词直接来自封面预设 `.md` 文件的「Prompt 要点」部分（见 [cover-styles/](../cover-styles/)），无须引用 Style 维度。\n\n**YAML frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 frontmatter，`image_create.py` 据此转换为实际尺寸。缺少 frontmatter 的 aspect 会导致 fallback 到 1:1。\n\n```yaml\n---\naspect: \"2.35:1\"   # ← 必须：取自 config cover_aspect\nquality: standard\n---\n```\n\n```\n[文章标题] - 封面图\n\n核心意象：[从标题提取的抽象视觉概念]\n情绪：[文章整体调性]\n色调：[主色和辅色]\n\n要求：\n- 不包含文字（标题会单独叠加）\n- 画面简洁有焦点\n- 适合作为公众号封面缩略图（小尺寸也清晰）\n\n风格：[从封面预设 .md 的 Prompt 要点加载]\n```\n\n---\n\n## 高级布局（适用于复杂信息可视化）\n\n在标记描述中指定布局类型：`![data-viz-漏斗：...]`、`![data-viz-冰山：...]`。\n\n**布局类型一览**：\n\n| 布局 | 适用场景 | Prompt 要点 |\n|------|---------|-------------|\n| `九宫格/bento` | 多主题概览 | 3×3 网格，每格一个主题，统一色调 |\n| `漏斗/funnel` | 转化、筛选 | 上宽下窄，每层标注数据和标签 |\n| `冰山/iceberg` | 表象 vs 本质 | 水面上下分区，上方简单下方复杂 |\n| `金字塔/pyramid` | 层级、优先级 | 从底到顶，每层标注 |\n| `环形/circular` | 循环流程 | 顺时针箭头连接的环形节点 |\n| `矩阵/matrix` | 多维度对比 | 2×2 或 N×N 象限，轴标签 |\n| `树状/tree` | 分类、层级 | 根节点→分支→叶节点 |\n| `仪表盘/dashboard` | 关键指标 | 数字卡片 + 趋势图 + 状态灯 |\n| `路线图/roadmap` | 规划、里程碑 | 蜿蜒路径 + 节点标注 |\n\n**九宫格模板**：\n\n```\n[标题] - 九宫格信息图\n\n布局：3×3 网格（或 2×3、2×4）\n\n格子内容：\n| [主题1] | [主题2] | [主题3] |\n| [主题4] | [主题5] | [主题6] |\n| [主题7] | [主题8] | [主题9] |\n\n每格包含：图标 + 标题 + 一句话说明\n统一风格：[圆角卡片/方格/无边框]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n**漏斗模板**：\n\n```\n[标题] - 漏斗图\n\n层数：[N]\n方向：从上到下\n\n各层（从宽到窄）：\n1. [层名]：[数据/标签]（100%）\n2. [层名]：[数据/标签]（60%）\n3. [层名]：[数据/标签]（30%）\n4. [层名]：[数据/标签]（10%）\n\n配色：渐变色，从顶到底逐渐加深\n风格：[选定的风格特征]\n比例：[比例，通常 3:4 或 9:16]\n```\n\n**冰山模板**：\n\n```\n[标题] - 冰山图\n\n水面以上（表象/可见）：\n- [可见现象1]\n- [可见现象2]\n\n水面以下（本质/隐藏）：\n- [隐藏原因1]\n- [隐藏原因2]\n- [深层逻辑]\n\n水面线：明确标注\n配色：水面上明亮，水面下深色\n风格：[选定的风格特征]\n比例：[比例，通常 3:4]\n```\n\n---\n\n## 关键原则\n\n- **补充而非重复**：文字讲道理，图给感觉；文字列数据，图给直觉\n- **抽象优于具象**：「AI 赋能」→ 光线连接感 ✅，不要画机器人 ❌\n- **情感对齐**：严肃段落配冷色调，轻松段落配暖色明快风\n- **一图一个焦点**：不要塞太多元素\n- **用文章中的真实数据**：信息图里要放实际数字和术语，不要 placeholder\n\nFile v1.0.23:references/image-styles/style-presets.md\n\n# 正文配图风格预设\n\n> 封面风格预设见 [cover-styles/](../cover-styles/)，本文件仅用于正文配图的自动推荐。\n\n按文章类型推荐 Type + Style 组合（Style 为 Agent 内部选择，非用户配置维度）。用户也可手动覆盖其中任一维度。\n\n## 按文章类型\n\n### 科技与技术\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `科技解析` | concept | 蓝图 | 技术原理、AI 概念、抽象概念具象化 |\n| `系统设计` | architecture | 蓝图 | 架构图、系统设计、技术栈 |\n| `工具评测` | comparison | 扁平矢量 | 工具对比、框架评测、方案PK |\n\n### 知识与教程\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `知识科普` | concept | 扁平矢量 | 概念解释、入门指南、隐喻科普 |\n| `操作指南` | process | 简约线条 | 分步教程、操作流程、工作流 |\n| `效率工具` | checklist | 简约线条 | 产品指南、SaaS 介绍、Tips 列表 |\n| `课堂笔记` | whiteboard | 手绘 | 知识框架、原理讲解、课程笔记 |\n| `知识全景` | mindmap | 扁平矢量 | 知识框架、主题概览、关系梳理 |\n\n### 数据与分析\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `数据报告` | data-viz | 商务 | 数据新闻、指标报告、统计分析 |\n| `趋势对比` | comparison | 扁平矢量 | 行业对比、趋势分析 |\n| `发展历程` | timeline | 简约线条 | 里程碑、产品路线图、年度总结 |\n\n### 故事与情感\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `故事叙述` | scene | 温暖 | 个人随笔、成长故事、用户场景 |\n| `生活方式` | atmosphere | 水彩 | 旅行、生活、文艺、散文 |\n| `金句传播` | quote-card | 温暖 | 核心观点、名言金句、截图转发 |\n\n### 观点与评论\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `观点文章` | atmosphere | 海报 | 社论、评论、犀利观点 |\n\n## 文章内容 → 预设推荐\n\n根据文章类型（由 topics 或 writing 确定）自动推荐：\n\n| 文章内容信号 | 推荐预设 | 备选 |\n|-------------|---------|------|\n| API、代码、技术原理 | `科技解析` | `系统设计` |\n| 概念、科普、入门指南 | `知识科普` | `课堂笔记` |\n| 教程、步骤、操作 | `操作指南` | `知识科普` |\n| 对比、评测、选择 | `工具评测` | `趋势对比` |\n| 数据、报告、指标 | `数据报告` | `趋势对比` |\n| 知识框架、关系梳理 | `知识全景` | `课堂笔记` |\n| 历程、里程碑、路线 | `发展历程` | `数据报告` |\n| Tips、要点、注意事项 | `效率工具` | `知识科普` |\n| 故事、经历、场景 | `故事叙述` | `生活方式` |\n| 金句、核心观点 | `金句传播` | `观点文章` |\n| 观点、评论、争议 | `观点文章` | — |\n| 工具、产品、SaaS | `效率工具` | `知识科普` |\n\nFile v1.0.23:references/image-styles/styles.md\n\n# 正文配图风格库\n\n> 本文件用于**正文配图**的 Type 分类与 Style 内部参考。**封面风格**由独立预设体系管理，见 [cover-styles/](../cover-styles/)。\n\n## Type（画面构成）\n\n12 种图片类型，描述\"画什么\"：\n\n| Type | 名称 | 说明 | 适用场景 |\n|------|------|------|---------|\n| `concept` | 概念讲解 | 视觉隐喻把抽象概念具象化 | 原理解释、概念科普、隐喻 |\n| `process` | 流程步骤 | 分步引导图，1-2-3 清晰明了 | 教程、操作指南、工作流 |\n| `whiteboard` | 板书白板 | 像老师在白板上手写画图 | 知识科普、原理讲解、课程笔记 |\n| `data-viz` | 数据可视化 | 数字变图表，让数据说话 | 趋势分析、统计、报告 |\n| `comparison` | 对比说明 | 左右/上下并排，一眼看清差异 | 方案对比、产品PK、改版前后 |\n| `architecture` | 架构图 | 分层结构图，展示组成关系 | 系统架构、产品架构、技术栈 |\n| `mindmap` | 思维导图 | 中心主题向外发散分支 | 知识框架、主题概览、关系梳理 |\n| `timeline` | 时间线 | 按时间轴排列事件或里程碑 | 发展历程、路线图、年度总结 |\n| `checklist` | 清单图 | 条目化要点配图标 | Tips、注意事项、最佳实践 |\n| `quote-card` | 金句卡片 | 突出核心观点或名言金句 | 金句、核心结论、截图转发 |\n| `scene` | 场景还原 | 还原真实使用场景，代入感 | 用户场景、产品展示、生活方式 |\n| `atmosphere` | 氛围烘托 | 营造情绪氛围，视觉呼吸 | 情感渲染、散文配图、阅读节奏 |\n\n封面图不属于以上 Type，由独立的封面预设体系管理（见 [cover-styles/](../cover-styles/)）。\n\n## Style（视觉风格）— Agent 内部参考\n\n以下风格供 Agent 在自动选择正文配图视觉风格时参考，**不作为用户配置维度**。\n\n| 核心风格 | 描述 | 适用场景 |\n|---------|------|---------|\n| `扁平矢量` | 扁平化设计，清晰几何形状 | 知识科普、教程、科技 |\n| `简约线条` | 极简手绘线条 | 通用、知识分享、SaaS |\n| `蓝图` | 技术蓝图风 | 架构设计、系统设计 |\n| `手绘` | 手绘涂鸦风 | 轻松、随笔 |\n| `水彩` | 水彩柔和 | 生活方式、情感 |\n| `海报` | 海报丝印风 | 观点、社论 |\n| `温暖` | 温暖亲切 | 个人成长、教育 |\n| `极简` | 极简留白 | 哲学、极简主义 |\n| `商务` | 精致商务 | 商业、深度报道 |\n\n## 按 Type 的默认风格\n\n| Type | 首选风格 | 备选 |\n|------|---------|------|\n| concept 概念讲解 | 扁平矢量 | 简约线条、手绘 |\n| process 流程步骤 | 扁平矢量 | 简约线条、蓝图 |\n| whiteboard 板书白板 | 手绘 | 简约线条 |\n| data-viz 数据可视化 | 扁平矢量 | 商务、极简 |\n| comparison 对比说明 | 扁平矢量 | 简约线条、商务 |\n| architecture 架构图 | 蓝图 | 扁平矢量、简约线条 |\n| mindmap 思维导图 | 扁平矢量 | 简约线条、手绘 |\n| timeline 时间线 | 简约线条 | 扁平矢量、商务 |\n| checklist 清单图 | 扁平矢量 | 简约线条、温暖 |\n| quote-card 金句卡片 | 温暖 | 手绘、海报、极简 |\n| scene 场景还原 | 温暖 | 水彩、手绘 |\n| atmosphere 氛围烘托 | 温暖 | 水彩、手绘 |\n| 封面 | 由封面预设体系管理 | 见 [cover-styles/](../cover-styles/) |\n\nFile v1.0.23:references/specs.md\n\n# 图片规格\n\n## 图中文字\n\n画面内出现的文字**默认使用中文**。生成 prompt 时须直接写出要显示的中文文案，勿用 “labels in Chinese” 等元描述，否则多数模型会渲染成英文。\n\n## 封面图\n\n| 比例 | 尺寸参考 | 适用场景 |\n|------|---------|---------|\n| 2.35:1 | 900×383 | 宽幅电影感，适合科技/商务 |\n| 16:9 | 1080×608 | 标准宽屏，通用 |\n| 1:1 | 1080×1080 | 方形，适合品牌/人物 |\n\n- 格式：JPG / PNG\n- 单张建议 ≤ 2MB\n- 风格按 `custom_cover_image_style` 指定的封面预设决定（见 `cover-styles/`）\n\n## 正文配图\n\n- 宽度建议：1080px（适配公众号正文区）\n- 比例可按内容灵活调整\n- 图注格式按配置 `caption_style`（如「图：XXX」）\n\n## 多图推送\n\n- 单条最多 9 张\n- 张数偏好按配置 `multi_image_count`\n- 每张需配文 + 顺序编号\n\n## 品牌头图/尾图\n\n- 路径按配置 `header_image` / `footer_image`\n- 可固定版式复用\n\nArchive v1.0.22: 15 files, 32727 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (28148b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (19765b), _meta.json (145b)\n\nFile v1.0.22:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **下图 SSRF 防御**：若 API 响应返回图片 URL（而非 base64），脚本**仅允许下载 http/https 公网地址**；内网 / 环回 / 链路本地 / 保留地址全部拒绝（防止恶意或被劫持的模型端点把脚本当作 SSRF 跳板）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、可选 `.aws-article/assets/stock/images/*`\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `python3 {baseDir}/scripts/image_create.py`、`user_image_prepare.py`\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的**配图环节**（入口 `aws-wechat-article-main`）。工作流中的若干步骤会读取同级 `../aws-wechat-article-main/references/*.md` 等共享文档（首次引导、env/config 示例、articlescreening schema 等）。\n\n- **套件完整装齐到同一 `skills/` 根目录**时，跨 skill 引用都能读到。\n- **单独安装本 skill** 时，跨 skill 引用的步骤会在读取阶段遇到 `file not found`；本 skill 内的生图脚本仍可用。\n\n完整 9 slug 清单见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按 Type × Style 体系生成图片。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面风格**：独立预设体系，见 [references/cover-styles/](references/cover-styles/)。每个预设 `.md` 自包含视觉关键词。\n- **正文配图**：Type（画面构成）决定\"画什么\"，Style（视觉风格）由 Agent 根据 tone/category 内部选择。Type 列表与 prompt 模板见 [references/image-styles/](references/image-styles/) 目录。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/assets/stock/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **可直接使用参考资料库**：`.aws-article/assets/stock/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地素材库**，避免教程类、产品界面类文章「有截图资源却重新生成」：\n\n1. **仓库素材库（参考资料库）**：列出并阅读 **`.aws-article/assets/stock/images/`** 下 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再进入 **Type × Style**、`imgs/prompts/` 与 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：素材库属「仓库内预设资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/assets/` 搜索。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/assets/stock/images/`：本地参考/产品截图目录；**优先读同名 `.md` 再选图**。若已用素材库满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：根据 `tone` / `article_category` 从可用封面预设中自动推荐（规则见 [auto-selection.md](references/image-styles/auto-selection.md)）\n\n每个封面预设 `.md` 自包含视觉关键词（`Prompt 要点`），无须引用外部 Style 维度。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：Agent 扫描 `.aws-article/presets/image-styles/` 获取可用正文配图预设。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：根据正文内容信号与 `tone` 自动推荐 Type 和视觉风格（规则见 [auto-selection.md](references/image-styles/auto-selection.md)），视觉风格为 Agent 内部决策\n\n### 第4步：生成配图方案\n\n为每张图生成方案（类型、风格、prompt 要点）。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此转换为实际像素尺寸；**缺少 aspect 会导致 fallback 到 1:1**。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：[references/image-styles/prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\npython {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`python {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`python {baseDir}/scripts/image_create.py test`\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.22:references/cover-styles/README.md\n\n# 封面风格预设\n\n本目录下的 `.md` 文件为**封面风格预设**（内置）。用户自定义预设放在 `.aws-article/presets/cover-styles/` 下。\n\n## 加载规则\n\n生成封面时按 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后的预设名加载对应 `.md`（`custom_*` 非空时覆盖同名 `default_*`；须收窄为单元素列表后再执行配图）。\n\n**预设发现**：Agent 运行时扫描两个目录合并可用列表：\n\n1. **内置**：`skills/aws-wechat-article-images/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或由 `.aws` 预设包导入）\n\n用户自定义同名文件优先于内置。\n\n## Schema\n\n每个 `.md` 文件描述一种封面视觉风格：\n\n```markdown\n# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n```\n\n- 文件名即预设名（不含后缀），如 `简约.md` → 预设名 `简约`。\n- `Prompt 要点` 部分会被 Agent 直接嵌入封面 prompt 的「风格」字段。\n- 每个预设自包含视觉风格描述，无须引用外部 Style 维度。\n\n## 示例\n\n见同目录下的 `.example.md` 文件。复制到 `.aws-article/presets/cover-styles/` 并重命名为 `.md` 后按需修改。\n\nFile v1.0.22:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.22\",\n  \"publishedAt\": 1776900256467\n}\n\nFile v1.0.22:references/cover-styles/大字报.example.md\n\n# 大字报\n\n## 描述\n\n大胆醒目的排印设计，超大字号占据画面主体，强对比色块，海报感十足。适合观点鲜明、需要吸引眼球的文章。\n\n## 适用场景\n\n观点文章、评论、热点话题、犀利文风。适合个人 IP 或自媒体调性的账号。\n\n## Prompt 要点\n\n- bold typography-driven layout, oversized Chinese characters as main visual\n- high contrast color blocks, 2-3 strong colors, no subtle gradients\n- poster-like composition, graphic and punchy\n- minimal imagery, text IS the visual; background supports readability\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.22:references/cover-styles/插画.example.md\n\n# 插画\n\n## 描述\n\n扁平化插画风格，色块分明，几何化人物或物品，清新明快的配色。兼顾趣味性与信息传达。\n\n## 适用场景\n\n教程、科普、知识分享、生活方式类文章。适合轻松或专业调性的账号。\n\n## Prompt 要点\n\n- flat illustration style, vector-like shapes, solid color blocks, minimal gradients\n- stylized characters or objects with geometric simplification\n- bright and fresh color palette, 2-4 main colors\n- clear visual hierarchy, one main scene or concept\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.22:references/cover-styles/科技风.example.md\n\n# 科技风\n\n## 描述\n\n深色背景搭配科技感光效，数据流、电路纹理、HUD 元素，营造前沿技术氛围。\n\n## 适用场景\n\nAI、前沿科技、系统设计、技术深度文章。适合科技类或极客调性的账号。\n\n## Prompt 要点\n\n- dark background (deep blue, black, dark gray), neon or electric accent colors\n- tech elements: circuit patterns, data streams, holographic overlays, grid lines\n- glowing edges, light trails, subtle particle effects\n- futuristic and sleek, high contrast between dark base and bright accents\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.22:references/cover-styles/简约.example.md\n\n# 简约\n\n## 描述\n\n干净利落的极简设计，大面积留白，单一焦点元素，低饱和度配色。适合传递专业、可信赖的视觉印象。\n\n## 适用场景\n\n科技、商业、知识分享、专业分析类文章。适合正式或专业调性的账号。\n\n## Prompt 要点\n\n- minimal design, clean composition, ample whitespace, single focal point\n- muted or monochromatic color palette, subtle gradients allowed\n- geometric or abstract shapes preferred over literal illustrations\n- no clutter, no decorative elements, breathing space around subject\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.22:references/image-styles/auto-selection.md\n\n# 自动推荐规则\n\n当用户未指定风格时，根据文章内容自动推荐。\n\n> 本文件主要用于**正文配图**的 Type 和 Style 自动推荐。封面风格的 fallback 见末尾「封面风格 fallback」节。\n\n## 按文章调性（正文配图）\n\n| 调性（config `tone`） | 推荐风格 |\n|----------------------|---------|\n| 正式、专业 | 扁平矢量、蓝图、商务 |\n| 轻松、幽默 | 手绘、温暖、活泼 |\n| 犀利 | 海报、极简 |\n\n## 按文章内容信号\n\n| 内容信号 | 推荐 Type | 推荐 Style |\n|---------|-----------|-----------|\n| 抽象概念、原理、隐喻 | concept | 扁平矢量、简约线条、手绘 |\n| 教程、步骤、操作指南 | process | 扁平矢量、简约线条 |\n| 知识框架、原理讲解、课程 | whiteboard | 手绘、简约线条 |\n| 数据、统计、趋势、报告 | data-viz | 扁平矢量、商务 |\n| 对比、评测、方案选择 | comparison | 扁平矢量、商务 |\n| 架构、系统、模型、体系 | architecture | 蓝图、扁平矢量 |\n| 知识全景、关系梳理、概览 | mindmap | 扁平矢量、简约线条 |\n| 历程、里程碑、路线图 | timeline | 简约线条、商务 |\n| Tips、要点列表、注意事项 | checklist | 扁平矢量、温暖 |\n| 金句、核心观点、名言 | quote-card | 温暖、海报、极简 |\n| 使用场景、产品展示、代入感 | scene | 温暖、水彩、手绘 |\n| 故事、情感、散文、视觉呼吸 | atmosphere | 温暖、水彩、海报 |\n\n## 按 config `article_category`（正文配图）\n\n| 账号类型 | 默认风格基调 |\n|---------|------------|\n| 科技 | 蓝图 / 扁平矢量 |\n| 职场 | 商务 / 简约线条 |\n| 情感 | 温暖 / 水彩 |\n| 教育 | 扁平矢量 / 手绘 |\n| 品牌号 | 按品牌调性 |\n| 个人IP | 温暖 / 手绘 |\n\n## 配图密度\n\n按 config `image_density`：\n\n| 配置值 | 规则 |\n|--------|------|\n| 每节一图 | 每个 H2 小标题后一张 |\n| 少图 | 仅封面 + 1-2 张关键配图 |\n| 多图 | 每 2-3 段一张 |\n\nwriting 阶段已按此密度插入标记，images 阶段按标记执行即可。\n\n## 封面风格 fallback\n\n当 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后**无有效单选预设**（空列表或未收窄为单元素）时，Agent 从可用封面预设（扫描内置 + **`.aws-article/presets/cover-styles/`**）中按以下规则推荐：\n\n| 调性 / 类型 | 推荐封面预设 |\n|------------|------------|\n| 科技、专业 | 科技风、简约 |\n| 轻松、幽默 | 插画、漫画 |\n| 犀利、观点 | 大字报 |\n| 正式、商业 | 简约、品牌模板 |\n| 通用 / 无明确信号 | 简约 |\n\n注：推荐的预设名须在可用列表中存在。若推荐的预设不存在，从已有预设中择一最接近的。\n\nFile v1.0.22:references/image-styles/prompt-construction.md\n\n# Prompt 构建指南\n\n## 图片内文字语言（必守）\n\n**公众号配图画面中出现的所有文字必须为中文。**\n\n- 在 prompt 里**直接写出要显示的中文文案**（例如：左侧「传统对话AI」、右侧「OpenClaw」、步骤「立项」「开发」「上线」）。\n- **禁止**只写 \"labels in Chinese\" 或 \"Chinese or English OK\" 等元描述——多数模型会默认生成英文。\n- Prompt 本身可中英混排（描述构图用英文亦可），但「会出现在图上的字」必须用中文写出。\n\n## 通用规则\n\n所有 prompt 必须包含：\n\n1. **布局结构**：描述构图、区域划分、视觉流向\n2. **具体内容**：使用文章中的实际数据、术语、关键词（不要泛泛而谈）\n3. **视觉关系**：元素之间如何连接、对比、层次\n4. **语义颜色**：基于含义选色（红=警告、绿=增长、蓝=科技）\n5. **风格特征**：线条处理、纹理、氛围\n6. **比例**：封面按 config `cover_aspect`，正文配图 16:9 或 4:3\n\n## 通用构图要求\n\n所有 prompt 默认附加：\n\n```\n构图要求：\n- 干净简洁，不堆砌元素\n- 充足留白，主体元素呼吸感\n- 纯色或轻微渐变背景，不要复杂纹理\n- 主视觉居中或按内容需要布局\n- 突出核心信息\n```\n\n## 人物表现\n\n如需画人物：\n\n```\n人物表现：简化风格的人物剪影或符号化表达，不要写实人脸。\n通过姿态和简单手势传达情绪。\n```\n\n## 文字处理\n\n如画面中需要文字：\n\n```\n文字要求：大而醒目，手写风字体优先，仅保留核心关键词。所有图中文字必须为中文；在 prompt 中写出要显示的中文原文（如「传统对话AI」「OpenClaw」），不要写 \"label in Chinese\"。\n```\n\n---\n\n## Type 专用模板\n\n### concept 概念讲解\n\n```\n[标题] - 概念可视化\n\n核心概念：[要解释的抽象概念]\n视觉隐喻：[映射为什么具体事物，如\"技术债\"→堆积的砖块]\n\n布局：[居中/对称/层级]\n主体：[隐喻场景的核心画面]\n辅助元素：[标注、箭头、小图标]\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### process 流程步骤\n\n```\n[标题] - 流程可视化\n\n流向：[从左到右/从上到下]\n步骤数：[N]\n\n步骤：\n1. [步骤名] → [简要说明]\n2. [步骤名] → [简要说明]\n3. [步骤名] → [简要说明]\n\n连接方式：[箭头/线条/渐变过渡]\n高亮：[哪个步骤需要突出]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### whiteboard 板书白板\n\n```\n[标题] - 板书白板风\n\n背景：白色或浅米色白板\n笔触：手写体 + 马克笔风格\n\n知识要点：\n- [要点1]：[简要说明]\n- [要点2]：[简要说明]\n- [要点3]：[简要说明]\n\n辅助：[箭头、圈注、下划线、简笔画]\n配色：[马克笔配色，2-3 种主色]\n比例：[比例]\n```\n\n### data-viz 数据可视化\n\n```\n[标题] - 数据可视化\n\n图表类型：[柱状图/折线图/饼图/面积图]\n\n数据标签：\n- [具体数据点1：实际数字和术语]\n- [具体数据点2：实际数字和术语]\n- [具体数据点3：实际数字和术语]\n\n布局：[网格/放射/层级]\n区域：\n- 顶部：标题区\n- 中部主区域：[核心数据/图表]\n- 底部：总结/来源\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### comparison 对比说明\n\n```\n[标题] - 对比可视化\n\n布局：[左右分栏/上下分栏]\n\n左侧/A项：\n- 名称：[A]\n- 特点：[关键差异点]\n\n右侧/B项：\n- 名称：[B]\n- 特点：[关键差异点]\n\n对比维度：[列出 3-5 个对比维度]\n倾向：[中立/偏向某一方]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### architecture 架构图\n\n```\n[标题] - 架构/模型可视化\n\n结构：[层级/环形/矩阵/树状]\n\n层级/模块：\n- [顶层/核心]：[名称和说明]\n- [第二层]：[名称和说明]\n- [第三层]：[名称和说明]\n\n连接关系：[包含/依赖/双向/单向]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### mindmap 思维导图\n\n```\n[标题] - 思维导图\n\n中心主题：[核心主题词]\n\n一级分支：\n- [分支1]：[关键词]\n- [分支2]：[关键词]\n- [分支3]：[关键词]\n\n二级分支（可选）：\n- [分支1] → [子项1]、[子项2]\n- [分支2] → [子项1]、[子项2]\n\n布局：[放射状/右侧展开/上下对称]\n配色：每条主分支一个色系\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### timeline 时间线\n\n```\n[标题] - 时间线\n\n方向：[横向/纵向]\n节点数：[N]\n\n节点：\n1. [时间点]：[事件/里程碑]\n2. [时间点]：[事件/里程碑]\n3. [时间点]：[事件/里程碑]\n\n高亮：[哪个节点需要突出]\n连接线：[实线/虚线/渐变]\n配色：[时间推进用渐变色]\n风格：[选定的风格特征]\n比例：[比例，通常 16:9 或 4:3]\n```\n\n### checklist 清单图\n\n```\n[标题] - 清单图\n\n条目数：[N]\n\n清单项：\n- [✓/✗] [要点1]：[一句话说明]\n- [✓/✗] [要点2]：[一句话说明]\n- [✓/✗] [要点3]：[一句话说明]\n\n每项配：[图标/编号/勾选框]\n布局：[单列/双列/卡片网格]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### quote-card 金句卡片\n\n```\n[标题] - 金句卡片\n\n金句：「[完整中文金句]」\n出处：[作者/来源]（可选）\n\n布局：文字居中，大字号\n装饰：[引号装饰/底纹/边框]\n背景：[纯色/轻渐变/纹理]\n配色：[与金句情绪匹配]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n### scene 场景还原\n\n```\n[标题] - 场景还原\n\n场景：[描述具体使用/生活场景]\n主体：[人物动作或产品使用画面]\n环境：[场景环境细节]\n视角：[第一人称/俯视/平视]\n\n情绪：[代入感/真实感/日常感]\n色调：[暖色/冷色/自然色]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### atmosphere 氛围烘托\n\n```\n[标题] - 场景氛围\n\n场景：[描述画面场景]\n情绪：[要传达的情感]\n主体：[画面中心元素]\n色调：[暖色/冷色/具体色彩倾向]\n光线：[光源方向和质感]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### 封面\n\n封面 prompt 的「风格」关键词直接来自封面预设 `.md` 文件的「Prompt 要点」部分（见 [cover-styles/](../cover-styles/)），无须引用 Style 维度。\n\n**YAML frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 frontmatter，`image_create.py` 据此转换为实际尺寸。缺少 frontmatter 的 aspect 会导致 fallback 到 1:1。\n\n```yaml\n---\naspect: \"2.35:1\"   # ← 必须：取自 config cover_aspect\nquality: standard\n---\n```\n\n```\n[文章标题] - 封面图\n\n核心意象：[从标题提取的抽象视觉概念]\n情绪：[文章整体调性]\n色调：[主色和辅色]\n\n要求：\n- 不包含文字（标题会单独叠加）\n- 画面简洁有焦点\n- 适合作为公众号封面缩略图（小尺寸也清晰）\n\n风格：[从封面预设 .md 的 Prompt 要点加载]\n```\n\n---\n\n## 高级布局（适用于复杂信息可视化）\n\n在标记描述中指定布局类型：`![data-viz-漏斗：...]`、`![data-viz-冰山：...]`。\n\n**布局类型一览**：\n\n| 布局 | 适用场景 | Prompt 要点 |\n|------|---------|-------------|\n| `九宫格/bento` | 多主题概览 | 3×3 网格，每格一个主题，统一色调 |\n| `漏斗/funnel` | 转化、筛选 | 上宽下窄，每层标注数据和标签 |\n| `冰山/iceberg` | 表象 vs 本质 | 水面上下分区，上方简单下方复杂 |\n| `金字塔/pyramid` | 层级、优先级 | 从底到顶，每层标注 |\n| `环形/circular` | 循环流程 | 顺时针箭头连接的环形节点 |\n| `矩阵/matrix` | 多维度对比 | 2×2 或 N×N 象限，轴标签 |\n| `树状/tree` | 分类、层级 | 根节点→分支→叶节点 |\n| `仪表盘/dashboard` | 关键指标 | 数字卡片 + 趋势图 + 状态灯 |\n| `路线图/roadmap` | 规划、里程碑 | 蜿蜒路径 + 节点标注 |\n\n**九宫格模板**：\n\n```\n[标题] - 九宫格信息图\n\n布局：3×3 网格（或 2×3、2×4）\n\n格子内容：\n| [主题1] | [主题2] | [主题3] |\n| [主题4] | [主题5] | [主题6] |\n| [主题7] | [主题8] | [主题9] |\n\n每格包含：图标 + 标题 + 一句话说明\n统一风格：[圆角卡片/方格/无边框]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n**漏斗模板**：\n\n```\n[标题] - 漏斗图\n\n层数：[N]\n方向：从上到下\n\n各层（从宽到窄）：\n1. [层名]：[数据/标签]（100%）\n2. [层名]：[数据/标签]（60%）\n3. [层名]：[数据/标签]（30%）\n4. [层名]：[数据/标签]（10%）\n\n配色：渐变色，从顶到底逐渐加深\n风格：[选定的风格特征]\n比例：[比例，通常 3:4 或 9:16]\n```\n\n**冰山模板**：\n\n```\n[标题] - 冰山图\n\n水面以上（表象/可见）：\n- [可见现象1]\n- [可见现象2]\n\n水面以下（本质/隐藏）：\n- [隐藏原因1]\n- [隐藏原因2]\n- [深层逻辑]\n\n水面线：明确标注\n配色：水面上明亮，水面下深色\n风格：[选定的风格特征]\n比例：[比例，通常 3:4]\n```\n\n---\n\n## 关键原则\n\n- **补充而非重复**：文字讲道理，图给感觉；文字列数据，图给直觉\n- **抽象优于具象**：「AI 赋能」→ 光线连接感 ✅，不要画机器人 ❌\n- **情感对齐**：严肃段落配冷色调，轻松段落配暖色明快风\n- **一图一个焦点**：不要塞太多元素\n- **用文章中的真实数据**：信息图里要放实际数字和术语，不要 placeholder\n\nFile v1.0.22:references/image-styles/style-presets.md\n\n# 正文配图风格预设\n\n> 封面风格预设见 [cover-styles/](../cover-styles/)，本文件仅用于正文配图的自动推荐。\n\n按文章类型推荐 Type + Style 组合（Style 为 Agent 内部选择，非用户配置维度）。用户也可手动覆盖其中任一维度。\n\n## 按文章类型\n\n### 科技与技术\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `科技解析` | concept | 蓝图 | 技术原理、AI 概念、抽象概念具象化 |\n| `系统设计` | architecture | 蓝图 | 架构图、系统设计、技术栈 |\n| `工具评测` | comparison | 扁平矢量 | 工具对比、框架评测、方案PK |\n\n### 知识与教程\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `知识科普` | concept | 扁平矢量 | 概念解释、入门指南、隐喻科普 |\n| `操作指南` | process | 简约线条 | 分步教程、操作流程、工作流 |\n| `效率工具` | checklist | 简约线条 | 产品指南、SaaS 介绍、Tips 列表 |\n| `课堂笔记` | whiteboard | 手绘 | 知识框架、原理讲解、课程笔记 |\n| `知识全景` | mindmap | 扁平矢量 | 知识框架、主题概览、关系梳理 |\n\n### 数据与分析\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `数据报告` | data-viz | 商务 | 数据新闻、指标报告、统计分析 |\n| `趋势对比` | comparison | 扁平矢量 | 行业对比、趋势分析 |\n| `发展历程` | timeline | 简约线条 | 里程碑、产品路线图、年度总结 |\n\n### 故事与情感\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `故事叙述` | scene | 温暖 | 个人随笔、成长故事、用户场景 |\n| `生活方式` | atmosphere | 水彩 | 旅行、生活、文艺、散文 |\n| `金句传播` | quote-card | 温暖 | 核心观点、名言金句、截图转发 |\n\n### 观点与评论\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `观点文章` | atmosphere | 海报 | 社论、评论、犀利观点 |\n\n## 文章内容 → 预设推荐\n\n根据文章类型（由 topics 或 writing 确定）自动推荐：\n\n| 文章内容信号 | 推荐预设 | 备选 |\n|-------------|---------|------|\n| API、代码、技术原理 | `科技解析` | `系统设计` |\n| 概念、科普、入门指南 | `知识科普` | `课堂笔记` |\n| 教程、步骤、操作 | `操作指南` | `知识科普` |\n| 对比、评测、选择 | `工具评测` | `趋势对比` |\n| 数据、报告、指标 | `数据报告` | `趋势对比` |\n| 知识框架、关系梳理 | `知识全景` | `课堂笔记` |\n| 历程、里程碑、路线 | `发展历程` | `数据报告` |\n| Tips、要点、注意事项 | `效率工具` | `知识科普` |\n| 故事、经历、场景 | `故事叙述` | `生活方式` |\n| 金句、核心观点 | `金句传播` | `观点文章` |\n| 观点、评论、争议 | `观点文章` | — |\n| 工具、产品、SaaS | `效率工具` | `知识科普` |\n\nFile v1.0.22:references/image-styles/styles.md\n\n# 正文配图风格库\n\n> 本文件用于**正文配图**的 Type 分类与 Style 内部参考。**封面风格**由独立预设体系管理，见 [cover-styles/](../cover-styles/)。\n\n## Type（画面构成）\n\n12 种图片类型，描述\"画什么\"：\n\n| Type | 名称 | 说明 | 适用场景 |\n|------|------|------|---------|\n| `concept` | 概念讲解 | 视觉隐喻把抽象概念具象化 | 原理解释、概念科普、隐喻 |\n| `process` | 流程步骤 | 分步引导图，1-2-3 清晰明了 | 教程、操作指南、工作流 |\n| `whiteboard` | 板书白板 | 像老师在白板上手写画图 | 知识科普、原理讲解、课程笔记 |\n| `data-viz` | 数据可视化 | 数字变图表，让数据说话 | 趋势分析、统计、报告 |\n| `comparison` | 对比说明 | 左右/上下并排，一眼看清差异 | 方案对比、产品PK、改版前后 |\n| `architecture` | 架构图 | 分层结构图，展示组成关系 | 系统架构、产品架构、技术栈 |\n| `mindmap` | 思维导图 | 中心主题向外发散分支 | 知识框架、主题概览、关系梳理 |\n| `timeline` | 时间线 | 按时间轴排列事件或里程碑 | 发展历程、路线图、年度总结 |\n| `checklist` | 清单图 | 条目化要点配图标 | Tips、注意事项、最佳实践 |\n| `quote-card` | 金句卡片 | 突出核心观点或名言金句 | 金句、核心结论、截图转发 |\n| `scene` | 场景还原 | 还原真实使用场景，代入感 | 用户场景、产品展示、生活方式 |\n| `atmosphere` | 氛围烘托 | 营造情绪氛围，视觉呼吸 | 情感渲染、散文配图、阅读节奏 |\n\n封面图不属于以上 Type，由独立的封面预设体系管理（见 [cover-styles/](../cover-styles/)）。\n\n## Style（视觉风格）— Agent 内部参考\n\n以下风格供 Agent 在自动选择正文配图视觉风格时参考，**不作为用户配置维度**。\n\n| 核心风格 | 描述 | 适用场景 |\n|---------|------|---------|\n| `扁平矢量` | 扁平化设计，清晰几何形状 | 知识科普、教程、科技 |\n| `简约线条` | 极简手绘线条 | 通用、知识分享、SaaS |\n| `蓝图` | 技术蓝图风 | 架构设计、系统设计 |\n| `手绘` | 手绘涂鸦风 | 轻松、随笔 |\n| `水彩` | 水彩柔和 | 生活方式、情感 |\n| `海报` | 海报丝印风 | 观点、社论 |\n| `温暖` | 温暖亲切 | 个人成长、教育 |\n| `极简` | 极简留白 | 哲学、极简主义 |\n| `商务` | 精致商务 | 商业、深度报道 |\n\n## 按 Type 的默认风格\n\n| Type | 首选风格 | 备选 |\n|------|---------|------|\n| concept 概念讲解 | 扁平矢量 | 简约线条、手绘 |\n| process 流程步骤 | 扁平矢量 | 简约线条、蓝图 |\n| whiteboard 板书白板 | 手绘 | 简约线条 |\n| data-viz 数据可视化 | 扁平矢量 | 商务、极简 |\n| comparison 对比说明 | 扁平矢量 | 简约线条、商务 |\n| architecture 架构图 | 蓝图 | 扁平矢量、简约线条 |\n| mindmap 思维导图 | 扁平矢量 | 简约线条、手绘 |\n| timeline 时间线 | 简约线条 | 扁平矢量、商务 |\n| checklist 清单图 | 扁平矢量 | 简约线条、温暖 |\n| quote-card 金句卡片 | 温暖 | 手绘、海报、极简 |\n| scene 场景还原 | 温暖 | 水彩、手绘 |\n| atmosphere 氛围烘托 | 温暖 | 水彩、手绘 |\n| 封面 | 由封面预设体系管理 | 见 [cover-styles/](../cover-styles/) |\n\nFile v1.0.22:references/specs.md\n\n# 图片规格\n\n## 图中文字\n\n画面内出现的文字**默认使用中文**。生成 prompt 时须直接写出要显示的中文文案，勿用 “labels in Chinese” 等元描述，否则多数模型会渲染成英文。\n\n## 封面图\n\n| 比例 | 尺寸参考 | 适用场景 |\n|------|---------|---------|\n| 2.35:1 | 900×383 | 宽幅电影感，适合科技/商务 |\n| 16:9 | 1080×608 | 标准宽屏，通用 |\n| 1:1 | 1080×1080 | 方形，适合品牌/人物 |\n\n- 格式：JPG / PNG\n- 单张建议 ≤ 2MB\n- 风格按 `custom_cover_image_style` 指定的封面预设决定（见 `cover-styles/`）\n\n## 正文配图\n\n- 宽度建议：1080px（适配公众号正文区）\n- 比例可按内容灵活调整\n- 图注格式按配置 `caption_style`（如「图：XXX」）\n\n## 多图推送\n\n- 单条最多 9 张\n- 张数偏好按配置 `multi_image_count`\n- 每张需配文 + 顺序编号\n\n## 品牌头图/尾图\n\n- 路径按配置 `header_image` / `footer_image`\n- 可固定版式复用\n\nArchive v1.0.21: 15 files, 32551 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (28148b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (19341b), _meta.json (145b)\n\nFile v1.0.21:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **下图 SSRF 防御**：若 API 响应返回图片 URL（而非 base64），脚本**仅允许下载 http/https 公网地址**；内网 / 环回 / 链路本地 / 保留地址全部拒绝（防止恶意或被劫持的模型端点把脚本当作 SSRF 跳板）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、可选 `.aws-article/assets/stock/images/*`\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `python3 {baseDir}/scripts/image_create.py`、`user_image_prepare.py`\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的配图环节（入口 `aws-wechat-article-main`）。完整说明见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按 Type × Style 体系生成图片。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面风格**：独立预设体系，见 [references/cover-styles/](references/cover-styles/)。每个预设 `.md` 自包含视觉关键词。\n- **正文配图**：Type（画面构成）决定\"画什么\"，Style（视觉风格）由 Agent 根据 tone/category 内部选择。Type 列表与 prompt 模板见 [references/image-styles/](references/image-styles/) 目录。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/assets/stock/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **可直接使用参考资料库**：`.aws-article/assets/stock/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地素材库**，避免教程类、产品界面类文章「有截图资源却重新生成」：\n\n1. **仓库素材库（参考资料库）**：列出并阅读 **`.aws-article/assets/stock/images/`** 下 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再进入 **Type × Style**、`imgs/prompts/` 与 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：素材库属「仓库内预设资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/assets/` 搜索。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/assets/stock/images/`：本地参考/产品截图目录；**优先读同名 `.md` 再选图**。若已用素材库满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：根据 `tone` / `article_category` 从可用封面预设中自动推荐（规则见 [auto-selection.md](references/image-styles/auto-selection.md)）\n\n每个封面预设 `.md` 自包含视觉关键词（`Prompt 要点`），无须引用外部 Style 维度。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：Agent 扫描 `.aws-article/presets/image-styles/` 获取可用正文配图预设。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：根据正文内容信号与 `tone` 自动推荐 Type 和视觉风格（规则见 [auto-selection.md](references/image-styles/auto-selection.md)），视觉风格为 Agent 内部决策\n\n### 第4步：生成配图方案\n\n为每张图生成方案（类型、风格、prompt 要点）。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此转换为实际像素尺寸；**缺少 aspect 会导致 fallback 到 1:1**。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：[references/image-styles/prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\npython {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`python {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`python {baseDir}/scripts/image_create.py test`\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.21:references/cover-styles/README.md\n\n# 封面风格预设\n\n本目录下的 `.md` 文件为**封面风格预设**（内置）。用户自定义预设放在 `.aws-article/presets/cover-styles/` 下。\n\n## 加载规则\n\n生成封面时按 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后的预设名加载对应 `.md`（`custom_*` 非空时覆盖同名 `default_*`；须收窄为单元素列表后再执行配图）。\n\n**预设发现**：Agent 运行时扫描两个目录合并可用列表：\n\n1. **内置**：`skills/aws-wechat-article-images/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或由 `.aws` 预设包导入）\n\n用户自定义同名文件优先于内置。\n\n## Schema\n\n每个 `.md` 文件描述一种封面视觉风格：\n\n```markdown\n# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n```\n\n- 文件名即预设名（不含后缀），如 `简约.md` → 预设名 `简约`。\n- `Prompt 要点` 部分会被 Agent 直接嵌入封面 prompt 的「风格」字段。\n- 每个预设自包含视觉风格描述，无须引用外部 Style 维度。\n\n## 示例\n\n见同目录下的 `.example.md` 文件。复制到 `.aws-article/presets/cover-styles/` 并重命名为 `.md` 后按需修改。\n\nFile v1.0.21:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.21\",\n  \"publishedAt\": 1776899180579\n}\n\nFile v1.0.21:references/cover-styles/大字报.example.md\n\n# 大字报\n\n## 描述\n\n大胆醒目的排印设计，超大字号占据画面主体，强对比色块，海报感十足。适合观点鲜明、需要吸引眼球的文章。\n\n## 适用场景\n\n观点文章、评论、热点话题、犀利文风。适合个人 IP 或自媒体调性的账号。\n\n## Prompt 要点\n\n- bold typography-driven layout, oversized Chinese characters as main visual\n- high contrast color blocks, 2-3 strong colors, no subtle gradients\n- poster-like composition, graphic and punchy\n- minimal imagery, text IS the visual; background supports readability\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.21:references/cover-styles/插画.example.md\n\n# 插画\n\n## 描述\n\n扁平化插画风格，色块分明，几何化人物或物品，清新明快的配色。兼顾趣味性与信息传达。\n\n## 适用场景\n\n教程、科普、知识分享、生活方式类文章。适合轻松或专业调性的账号。\n\n## Prompt 要点\n\n- flat illustration style, vector-like shapes, solid color blocks, minimal gradients\n- stylized characters or objects with geometric simplification\n- bright and fresh color palette, 2-4 main colors\n- clear visual hierarchy, one main scene or concept\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.21:references/cover-styles/科技风.example.md\n\n# 科技风\n\n## 描述\n\n深色背景搭配科技感光效，数据流、电路纹理、HUD 元素，营造前沿技术氛围。\n\n## 适用场景\n\nAI、前沿科技、系统设计、技术深度文章。适合科技类或极客调性的账号。\n\n## Prompt 要点\n\n- dark background (deep blue, black, dark gray), neon or electric accent colors\n- tech elements: circuit patterns, data streams, holographic overlays, grid lines\n- glowing edges, light trails, subtle particle effects\n- futuristic and sleek, high contrast between dark base and bright accents\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.21:references/cover-styles/简约.example.md\n\n# 简约\n\n## 描述\n\n干净利落的极简设计，大面积留白，单一焦点元素，低饱和度配色。适合传递专业、可信赖的视觉印象。\n\n## 适用场景\n\n科技、商业、知识分享、专业分析类文章。适合正式或专业调性的账号。\n\n## Prompt 要点\n\n- minimal design, clean composition, ample whitespace, single focal point\n- muted or monochromatic color palette, subtle gradients allowed\n- geometric or abstract shapes preferred over literal illustrations\n- no clutter, no decorative elements, breathing space around subject\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.21:references/image-styles/auto-selection.md\n\n# 自动推荐规则\n\n当用户未指定风格时，根据文章内容自动推荐。\n\n> 本文件主要用于**正文配图**的 Type 和 Style 自动推荐。封面风格的 fallback 见末尾「封面风格 fallback」节。\n\n## 按文章调性（正文配图）\n\n| 调性（config `tone`） | 推荐风格 |\n|----------------------|---------|\n| 正式、专业 | 扁平矢量、蓝图、商务 |\n| 轻松、幽默 | 手绘、温暖、活泼 |\n| 犀利 | 海报、极简 |\n\n## 按文章内容信号\n\n| 内容信号 | 推荐 Type | 推荐 Style |\n|---------|-----------|-----------|\n| 抽象概念、原理、隐喻 | concept | 扁平矢量、简约线条、手绘 |\n| 教程、步骤、操作指南 | process | 扁平矢量、简约线条 |\n| 知识框架、原理讲解、课程 | whiteboard | 手绘、简约线条 |\n| 数据、统计、趋势、报告 | data-viz | 扁平矢量、商务 |\n| 对比、评测、方案选择 | comparison | 扁平矢量、商务 |\n| 架构、系统、模型、体系 | architecture | 蓝图、扁平矢量 |\n| 知识全景、关系梳理、概览 | mindmap | 扁平矢量、简约线条 |\n| 历程、里程碑、路线图 | timeline | 简约线条、商务 |\n| Tips、要点列表、注意事项 | checklist | 扁平矢量、温暖 |\n| 金句、核心观点、名言 | quote-card | 温暖、海报、极简 |\n| 使用场景、产品展示、代入感 | scene | 温暖、水彩、手绘 |\n| 故事、情感、散文、视觉呼吸 | atmosphere | 温暖、水彩、海报 |\n\n## 按 config `article_category`（正文配图）\n\n| 账号类型 | 默认风格基调 |\n|---------|------------|\n| 科技 | 蓝图 / 扁平矢量 |\n| 职场 | 商务 / 简约线条 |\n| 情感 | 温暖 / 水彩 |\n| 教育 | 扁平矢量 / 手绘 |\n| 品牌号 | 按品牌调性 |\n| 个人IP | 温暖 / 手绘 |\n\n## 配图密度\n\n按 config `image_density`：\n\n| 配置值 | 规则 |\n|--------|------|\n| 每节一图 | 每个 H2 小标题后一张 |\n| 少图 | 仅封面 + 1-2 张关键配图 |\n| 多图 | 每 2-3 段一张 |\n\nwriting 阶段已按此密度插入标记，images 阶段按标记执行即可。\n\n## 封面风格 fallback\n\n当 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后**无有效单选预设**（空列表或未收窄为单元素）时，Agent 从可用封面预设（扫描内置 + **`.aws-article/presets/cover-styles/`**）中按以下规则推荐：\n\n| 调性 / 类型 | 推荐封面预设 |\n|------------|------------|\n| 科技、专业 | 科技风、简约 |\n| 轻松、幽默 | 插画、漫画 |\n| 犀利、观点 | 大字报 |\n| 正式、商业 | 简约、品牌模板 |\n| 通用 / 无明确信号 | 简约 |\n\n注：推荐的预设名须在可用列表中存在。若推荐的预设不存在，从已有预设中择一最接近的。\n\nFile v1.0.21:references/image-styles/prompt-construction.md\n\n# Prompt 构建指南\n\n## 图片内文字语言（必守）\n\n**公众号配图画面中出现的所有文字必须为中文。**\n\n- 在 prompt 里**直接写出要显示的中文文案**（例如：左侧「传统对话AI」、右侧「OpenClaw」、步骤「立项」「开发」「上线」）。\n- **禁止**只写 \"labels in Chinese\" 或 \"Chinese or English OK\" 等元描述——多数模型会默认生成英文。\n- Prompt 本身可中英混排（描述构图用英文亦可），但「会出现在图上的字」必须用中文写出。\n\n## 通用规则\n\n所有 prompt 必须包含：\n\n1. **布局结构**：描述构图、区域划分、视觉流向\n2. **具体内容**：使用文章中的实际数据、术语、关键词（不要泛泛而谈）\n3. **视觉关系**：元素之间如何连接、对比、层次\n4. **语义颜色**：基于含义选色（红=警告、绿=增长、蓝=科技）\n5. **风格特征**：线条处理、纹理、氛围\n6. **比例**：封面按 config `cover_aspect`，正文配图 16:9 或 4:3\n\n## 通用构图要求\n\n所有 prompt 默认附加：\n\n```\n构图要求：\n- 干净简洁，不堆砌元素\n- 充足留白，主体元素呼吸感\n- 纯色或轻微渐变背景，不要复杂纹理\n- 主视觉居中或按内容需要布局\n- 突出核心信息\n```\n\n## 人物表现\n\n如需画人物：\n\n```\n人物表现：简化风格的人物剪影或符号化表达，不要写实人脸。\n通过姿态和简单手势传达情绪。\n```\n\n## 文字处理\n\n如画面中需要文字：\n\n```\n文字要求：大而醒目，手写风字体优先，仅保留核心关键词。所有图中文字必须为中文；在 prompt 中写出要显示的中文原文（如「传统对话AI」「OpenClaw」），不要写 \"label in Chinese\"。\n```\n\n---\n\n## Type 专用模板\n\n### concept 概念讲解\n\n```\n[标题] - 概念可视化\n\n核心概念：[要解释的抽象概念]\n视觉隐喻：[映射为什么具体事物，如\"技术债\"→堆积的砖块]\n\n布局：[居中/对称/层级]\n主体：[隐喻场景的核心画面]\n辅助元素：[标注、箭头、小图标]\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### process 流程步骤\n\n```\n[标题] - 流程可视化\n\n流向：[从左到右/从上到下]\n步骤数：[N]\n\n步骤：\n1. [步骤名] → [简要说明]\n2. [步骤名] → [简要说明]\n3. [步骤名] → [简要说明]\n\n连接方式：[箭头/线条/渐变过渡]\n高亮：[哪个步骤需要突出]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### whiteboard 板书白板\n\n```\n[标题] - 板书白板风\n\n背景：白色或浅米色白板\n笔触：手写体 + 马克笔风格\n\n知识要点：\n- [要点1]：[简要说明]\n- [要点2]：[简要说明]\n- [要点3]：[简要说明]\n\n辅助：[箭头、圈注、下划线、简笔画]\n配色：[马克笔配色，2-3 种主色]\n比例：[比例]\n```\n\n### data-viz 数据可视化\n\n```\n[标题] - 数据可视化\n\n图表类型：[柱状图/折线图/饼图/面积图]\n\n数据标签：\n- [具体数据点1：实际数字和术语]\n- [具体数据点2：实际数字和术语]\n- [具体数据点3：实际数字和术语]\n\n布局：[网格/放射/层级]\n区域：\n- 顶部：标题区\n- 中部主区域：[核心数据/图表]\n- 底部：总结/来源\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### comparison 对比说明\n\n```\n[标题] - 对比可视化\n\n布局：[左右分栏/上下分栏]\n\n左侧/A项：\n- 名称：[A]\n- 特点：[关键差异点]\n\n右侧/B项：\n- 名称：[B]\n- 特点：[关键差异点]\n\n对比维度：[列出 3-5 个对比维度]\n倾向：[中立/偏向某一方]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### architecture 架构图\n\n```\n[标题] - 架构/模型可视化\n\n结构：[层级/环形/矩阵/树状]\n\n层级/模块：\n- [顶层/核心]：[名称和说明]\n- [第二层]：[名称和说明]\n- [第三层]：[名称和说明]\n\n连接关系：[包含/依赖/双向/单向]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### mindmap 思维导图\n\n```\n[标题] - 思维导图\n\n中心主题：[核心主题词]\n\n一级分支：\n- [分支1]：[关键词]\n- [分支2]：[关键词]\n- [分支3]：[关键词]\n\n二级分支（可选）：\n- [分支1] → [子项1]、[子项2]\n- [分支2] → [子项1]、[子项2]\n\n布局：[放射状/右侧展开/上下对称]\n配色：每条主分支一个色系\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### timeline 时间线\n\n```\n[标题] - 时间线\n\n方向：[横向/纵向]\n节点数：[N]\n\n节点：\n1. [时间点]：[事件/里程碑]\n2. [时间点]：[事件/里程碑]\n3. [时间点]：[事件/里程碑]\n\n高亮：[哪个节点需要突出]\n连接线：[实线/虚线/渐变]\n配色：[时间推进用渐变色]\n风格：[选定的风格特征]\n比例：[比例，通常 16:9 或 4:3]\n```\n\n### checklist 清单图\n\n```\n[标题] - 清单图\n\n条目数：[N]\n\n清单项：\n- [✓/✗] [要点1]：[一句话说明]\n- [✓/✗] [要点2]：[一句话说明]\n- [✓/✗] [要点3]：[一句话说明]\n\n每项配：[图标/编号/勾选框]\n布局：[单列/双列/卡片网格]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### quote-card 金句卡片\n\n```\n[标题] - 金句卡片\n\n金句：「[完整中文金句]」\n出处：[作者/来源]（可选）\n\n布局：文字居中，大字号\n装饰：[引号装饰/底纹/边框]\n背景：[纯色/轻渐变/纹理]\n配色：[与金句情绪匹配]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n### scene 场景还原\n\n```\n[标题] - 场景还原\n\n场景：[描述具体使用/生活场景]\n主体：[人物动作或产品使用画面]\n环境：[场景环境细节]\n视角：[第一人称/俯视/平视]\n\n情绪：[代入感/真实感/日常感]\n色调：[暖色/冷色/自然色]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### atmosphere 氛围烘托\n\n```\n[标题] - 场景氛围\n\n场景：[描述画面场景]\n情绪：[要传达的情感]\n主体：[画面中心元素]\n色调：[暖色/冷色/具体色彩倾向]\n光线：[光源方向和质感]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### 封面\n\n封面 prompt 的「风格」关键词直接来自封面预设 `.md` 文件的「Prompt 要点」部分（见 [cover-styles/](../cover-styles/)），无须引用 Style 维度。\n\n**YAML frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 frontmatter，`image_create.py` 据此转换为实际尺寸。缺少 frontmatter 的 aspect 会导致 fallback 到 1:1。\n\n```yaml\n---\naspect: \"2.35:1\"   # ← 必须：取自 config cover_aspect\nquality: standard\n---\n```\n\n```\n[文章标题] - 封面图\n\n核心意象：[从标题提取的抽象视觉概念]\n情绪：[文章整体调性]\n色调：[主色和辅色]\n\n要求：\n- 不包含文字（标题会单独叠加）\n- 画面简洁有焦点\n- 适合作为公众号封面缩略图（小尺寸也清晰）\n\n风格：[从封面预设 .md 的 Prompt 要点加载]\n```\n\n---\n\n## 高级布局（适用于复杂信息可视化）\n\n在标记描述中指定布局类型：`![data-viz-漏斗：...]`、`![data-viz-冰山：...]`。\n\n**布局类型一览**：\n\n| 布局 | 适用场景 | Prompt 要点 |\n|------|---------|-------------|\n| `九宫格/bento` | 多主题概览 | 3×3 网格，每格一个主题，统一色调 |\n| `漏斗/funnel` | 转化、筛选 | 上宽下窄，每层标注数据和标签 |\n| `冰山/iceberg` | 表象 vs 本质 | 水面上下分区，上方简单下方复杂 |\n| `金字塔/pyramid` | 层级、优先级 | 从底到顶，每层标注 |\n| `环形/circular` | 循环流程 | 顺时针箭头连接的环形节点 |\n| `矩阵/matrix` | 多维度对比 | 2×2 或 N×N 象限，轴标签 |\n| `树状/tree` | 分类、层级 | 根节点→分支→叶节点 |\n| `仪表盘/dashboard` | 关键指标 | 数字卡片 + 趋势图 + 状态灯 |\n| `路线图/roadmap` | 规划、里程碑 | 蜿蜒路径 + 节点标注 |\n\n**九宫格模板**：\n\n```\n[标题] - 九宫格信息图\n\n布局：3×3 网格（或 2×3、2×4）\n\n格子内容：\n| [主题1] | [主题2] | [主题3] |\n| [主题4] | [主题5] | [主题6] |\n| [主题7] | [主题8] | [主题9] |\n\n每格包含：图标 + 标题 + 一句话说明\n统一风格：[圆角卡片/方格/无边框]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n**漏斗模板**：\n\n```\n[标题] - 漏斗图\n\n层数：[N]\n方向：从上到下\n\n各层（从宽到窄）：\n1. [层名]：[数据/标签]（100%）\n2. [层名]：[数据/标签]（60%）\n3. [层名]：[数据/标签]（30%）\n4. [层名]：[数据/标签]（10%）\n\n配色：渐变色，从顶到底逐渐加深\n风格：[选定的风格特征]\n比例：[比例，通常 3:4 或 9:16]\n```\n\n**冰山模板**：\n\n```\n[标题] - 冰山图\n\n水面以上（表象/可见）：\n- [可见现象1]\n- [可见现象2]\n\n水面以下（本质/隐藏）：\n- [隐藏原因1]\n- [隐藏原因2]\n- [深层逻辑]\n\n水面线：明确标注\n配色：水面上明亮，水面下深色\n风格：[选定的风格特征]\n比例：[比例，通常 3:4]\n```\n\n---\n\n## 关键原则\n\n- **补充而非重复**：文字讲道理，图给感觉；文字列数据，图给直觉\n- **抽象优于具象**：「AI 赋能」→ 光线连接感 ✅，不要画机器人 ❌\n- **情感对齐**：严肃段落配冷色调，轻松段落配暖色明快风\n- **一图一个焦点**：不要塞太多元素\n- **用文章中的真实数据**：信息图里要放实际数字和术语，不要 placeholder\n\nFile v1.0.21:references/image-styles/style-presets.md\n\n# 正文配图风格预设\n\n> 封面风格预设见 [cover-styles/](../cover-styles/)，本文件仅用于正文配图的自动推荐。\n\n按文章类型推荐 Type + Style 组合（Style 为 Agent 内部选择，非用户配置维度）。用户也可手动覆盖其中任一维度。\n\n## 按文章类型\n\n### 科技与技术\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `科技解析` | concept | 蓝图 | 技术原理、AI 概念、抽象概念具象化 |\n| `系统设计` | architecture | 蓝图 | 架构图、系统设计、技术栈 |\n| `工具评测` | comparison | 扁平矢量 | 工具对比、框架评测、方案PK |\n\n### 知识与教程\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `知识科普` | concept | 扁平矢量 | 概念解释、入门指南、隐喻科普 |\n| `操作指南` | process | 简约线条 | 分步教程、操作流程、工作流 |\n| `效率工具` | checklist | 简约线条 | 产品指南、SaaS 介绍、Tips 列表 |\n| `课堂笔记` | whiteboard | 手绘 | 知识框架、原理讲解、课程笔记 |\n| `知识全景` | mindmap | 扁平矢量 | 知识框架、主题概览、关系梳理 |\n\n### 数据与分析\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `数据报告` | data-viz | 商务 | 数据新闻、指标报告、统计分析 |\n| `趋势对比` | comparison | 扁平矢量 | 行业对比、趋势分析 |\n| `发展历程` | timeline | 简约线条 | 里程碑、产品路线图、年度总结 |\n\n### 故事与情感\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `故事叙述` | scene | 温暖 | 个人随笔、成长故事、用户场景 |\n| `生活方式` | atmosphere | 水彩 | 旅行、生活、文艺、散文 |\n| `金句传播` | quote-card | 温暖 | 核心观点、名言金句、截图转发 |\n\n### 观点与评论\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `观点文章` | atmosphere | 海报 | 社论、评论、犀利观点 |\n\n## 文章内容 → 预设推荐\n\n根据文章类型（由 topics 或 writing 确定）自动推荐：\n\n| 文章内容信号 | 推荐预设 | 备选 |\n|-------------|---------|------|\n| API、代码、技术原理 | `科技解析` | `系统设计` |\n| 概念、科普、入门指南 | `知识科普` | `课堂笔记` |\n| 教程、步骤、操作 | `操作指南` | `知识科普` |\n| 对比、评测、选择 | `工具评测` | `趋势对比` |\n| 数据、报告、指标 | `数据报告` | `趋势对比` |\n| 知识框架、关系梳理 | `知识全景` | `课堂笔记` |\n| 历程、里程碑、路线 | `发展历程` | `数据报告` |\n| Tips、要点、注意事项 | `效率工具` | `知识科普` |\n| 故事、经历、场景 | `故事叙述` | `生活方式` |\n| 金句、核心观点 | `金句传播` | `观点文章` |\n| 观点、评论、争议 | `观点文章` | — |\n| 工具、产品、SaaS | `效率工具` | `知识科普` |\n\nFile v1.0.21:references/image-styles/styles.md\n\n# 正文配图风格库\n\n> 本文件用于**正文配图**的 Type 分类与 Style 内部参考。**封面风格**由独立预设体系管理，见 [cover-styles/](../cover-styles/)。\n\n## Type（画面构成）\n\n12 种图片类型，描述\"画什么\"：\n\n| Type | 名称 | 说明 | 适用场景 |\n|------|------|------|---------|\n| `concept` | 概念讲解 | 视觉隐喻把抽象概念具象化 | 原理解释、概念科普、隐喻 |\n| `process` | 流程步骤 | 分步引导图，1-2-3 清晰明了 | 教程、操作指南、工作流 |\n| `whiteboard` | 板书白板 | 像老师在白板上手写画图 | 知识科普、原理讲解、课程笔记 |\n| `data-viz` | 数据可视化 | 数字变图表，让数据说话 | 趋势分析、统计、报告 |\n| `comparison` | 对比说明 | 左右/上下并排，一眼看清差异 | 方案对比、产品PK、改版前后 |\n| `architecture` | 架构图 | 分层结构图，展示组成关系 | 系统架构、产品架构、技术栈 |\n| `mindmap` | 思维导图 | 中心主题向外发散分支 | 知识框架、主题概览、关系梳理 |\n| `timeline` | 时间线 | 按时间轴排列事件或里程碑 | 发展历程、路线图、年度总结 |\n| `checklist` | 清单图 | 条目化要点配图标 | Tips、注意事项、最佳实践 |\n| `quote-card` | 金句卡片 | 突出核心观点或名言金句 | 金句、核心结论、截图转发 |\n| `scene` | 场景还原 | 还原真实使用场景，代入感 | 用户场景、产品展示、生活方式 |\n| `atmosphere` | 氛围烘托 | 营造情绪氛围，视觉呼吸 | 情感渲染、散文配图、阅读节奏 |\n\n封面图不属于以上 Type，由独立的封面预设体系管理（见 [cover-styles/](../cover-styles/)）。\n\n## Style（视觉风格）— Agent 内部参考\n\n以下风格供 Agent 在自动选择正文配图视觉风格时参考，**不作为用户配置维度**。\n\n| 核心风格 | 描述 | 适用场景 |\n|---------|------|---------|\n| `扁平矢量` | 扁平化设计，清晰几何形状 | 知识科普、教程、科技 |\n| `简约线条` | 极简手绘线条 | 通用、知识分享、SaaS |\n| `蓝图` | 技术蓝图风 | 架构设计、系统设计 |\n| `手绘` | 手绘涂鸦风 | 轻松、随笔 |\n| `水彩` | 水彩柔和 | 生活方式、情感 |\n| `海报` | 海报丝印风 | 观点、社论 |\n| `温暖` | 温暖亲切 | 个人成长、教育 |\n| `极简` | 极简留白 | 哲学、极简主义 |\n| `商务` | 精致商务 | 商业、深度报道 |\n\n## 按 Type 的默认风格\n\n| Type | 首选风格 | 备选 |\n|------|---------|------|\n| concept 概念讲解 | 扁平矢量 | 简约线条、手绘 |\n| process 流程步骤 | 扁平矢量 | 简约线条、蓝图 |\n| whiteboard 板书白板 | 手绘 | 简约线条 |\n| data-viz 数据可视化 | 扁平矢量 | 商务、极简 |\n| comparison 对比说明 | 扁平矢量 | 简约线条、商务 |\n| architecture 架构图 | 蓝图 | 扁平矢量、简约线条 |\n| mindmap 思维导图 | 扁平矢量 | 简约线条、手绘 |\n| timeline 时间线 | 简约线条 | 扁平矢量、商务 |\n| checklist 清单图 | 扁平矢量 | 简约线条、温暖 |\n| quote-card 金句卡片 | 温暖 | 手绘、海报、极简 |\n| scene 场景还原 | 温暖 | 水彩、手绘 |\n| atmosphere 氛围烘托 | 温暖 | 水彩、手绘 |\n| 封面 | 由封面预设体系管理 | 见 [cover-styles/](../cover-styles/) |\n\nFile v1.0.21:references/specs.md\n\n# 图片规格\n\n## 图中文字\n\n画面内出现的文字**默认使用中文**。生成 prompt 时须直接写出要显示的中文文案，勿用 “labels in Chinese” 等元描述，否则多数模型会渲染成英文。\n\n## 封面图\n\n| 比例 | 尺寸参考 | 适用场景 |\n|------|---------|---------|\n| 2.35:1 | 900×383 | 宽幅电影感，适合科技/商务 |\n| 16:9 | 1080×608 | 标准宽屏，通用 |\n| 1:1 | 1080×1080 | 方形，适合品牌/人物 |\n\n- 格式：JPG / PNG\n- 单张建议 ≤ 2MB\n- 风格按 `custom_cover_image_style` 指定的封面预设决定（见 `cover-styles/`）\n\n## 正文配图\n\n- 宽度建议：1080px（适配公众号正文区）\n- 比例可按内容灵活调整\n- 图注格式按配置 `caption_style`（如「图：XXX」）\n\n## 多图推送\n\n- 单条最多 9 张\n- 张数偏好按配置 `multi_image_count`\n- 每张需配文 + 顺序编号\n\n## 品牌头图/尾图\n\n- 路径按配置 `header_image` / `footer_image`\n- 可固定版式复用\n\nArchive v1.0.20: 15 files, 31636 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (19080b), _meta.json (145b)\n\nFile v1.0.20:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、可选 `.aws-article/assets/stock/images/*`\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `python3 {baseDir}/scripts/image_create.py`、`user_image_prepare.py`\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的配图环节（入口 `aws-wechat-article-main`）。完整说明见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按 Type × Style 体系生成图片。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面风格**：独立预设体系，见 [references/cover-styles/](references/cover-styles/)。每个预设 `.md` 自包含视觉关键词。\n- **正文配图**：Type（画面构成）决定\"画什么\"，Style（视觉风格）由 Agent 根据 tone/category 内部选择。Type 列表与 prompt 模板见 [references/image-styles/](references/image-styles/) 目录。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/assets/stock/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **可直接使用参考资料库**：`.aws-article/assets/stock/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地素材库**，避免教程类、产品界面类文章「有截图资源却重新生成」：\n\n1. **仓库素材库（参考资料库）**：列出并阅读 **`.aws-article/assets/stock/images/`** 下 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再进入 **Type × Style**、`imgs/prompts/` 与 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：素材库属「仓库内预设资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/assets/` 搜索。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/assets/stock/images/`：本地参考/产品截图目录；**优先读同名 `.md` 再选图**。若已用素材库满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：根据 `tone` / `article_category` 从可用封面预设中自动推荐（规则见 [auto-selection.md](references/image-styles/auto-selection.md)）\n\n每个封面预设 `.md` 自包含视觉关键词（`Prompt 要点`），无须引用外部 Style 维度。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：Agent 扫描 `.aws-article/presets/image-styles/` 获取可用正文配图预设。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：根据正文内容信号与 `tone` 自动推荐 Type 和视觉风格（规则见 [auto-selection.md](references/image-styles/auto-selection.md)），视觉风格为 Agent 内部决策\n\n### 第4步：生成配图方案\n\n为每张图生成方案（类型、风格、prompt 要点）。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此转换为实际像素尺寸；**缺少 aspect 会导致 fallback 到 1:1**。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：[references/image-styles/prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\npython {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`python {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`python {baseDir}/scripts/image_create.py test`\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.20:references/cover-styles/README.md\n\n# 封面风格预设\n\n本目录下的 `.md` 文件为**封面风格预设**（内置）。用户自定义预设放在 `.aws-article/presets/cover-styles/` 下。\n\n## 加载规则\n\n生成封面时按 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后的预设名加载对应 `.md`（`custom_*` 非空时覆盖同名 `default_*`；须收窄为单元素列表后再执行配图）。\n\n**预设发现**：Agent 运行时扫描两个目录合并可用列表：\n\n1. **内置**：`skills/aws-wechat-article-images/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或由 `.aws` 预设包导入）\n\n用户自定义同名文件优先于内置。\n\n## Schema\n\n每个 `.md` 文件描述一种封面视觉风格：\n\n```markdown\n# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n```\n\n- 文件名即预设名（不含后缀），如 `简约.md` → 预设名 `简约`。\n- `Prompt 要点` 部分会被 Agent 直接嵌入封面 prompt 的「风格」字段。\n- 每个预设自包含视觉风格描述，无须引用外部 Style 维度。\n\n## 示例\n\n见同目录下的 `.example.md` 文件。复制到 `.aws-article/presets/cover-styles/` 并重命名为 `.md` 后按需修改。\n\nFile v1.0.20:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1776897346895\n}\n\nFile v1.0.20:references/cover-styles/大字报.example.md\n\n# 大字报\n\n## 描述\n\n大胆醒目的排印设计，超大字号占据画面主体，强对比色块，海报感十足。适合观点鲜明、需要吸引眼球的文章。\n\n## 适用场景\n\n观点文章、评论、热点话题、犀利文风。适合个人 IP 或自媒体调性的账号。\n\n## Prompt 要点\n\n- bold typography-driven layout, oversized Chinese characters as main visual\n- high contrast color blocks, 2-3 strong colors, no subtle gradients\n- poster-like composition, graphic and punchy\n- minimal imagery, text IS the visual; background supports readability\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.20:references/cover-styles/插画.example.md\n\n# 插画\n\n## 描述\n\n扁平化插画风格，色块分明，几何化人物或物品，清新明快的配色。兼顾趣味性与信息传达。\n\n## 适用场景\n\n教程、科普、知识分享、生活方式类文章。适合轻松或专业调性的账号。\n\n## Prompt 要点\n\n- flat illustration style, vector-like shapes, solid color blocks, minimal gradients\n- stylized characters or objects with geometric simplification\n- bright and fresh color palette, 2-4 main colors\n- clear visual hierarchy, one main scene or concept\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.20:references/cover-styles/科技风.example.md\n\n# 科技风\n\n## 描述\n\n深色背景搭配科技感光效，数据流、电路纹理、HUD 元素，营造前沿技术氛围。\n\n## 适用场景\n\nAI、前沿科技、系统设计、技术深度文章。适合科技类或极客调性的账号。\n\n## Prompt 要点\n\n- dark background (deep blue, black, dark gray), neon or electric accent colors\n- tech elements: circuit patterns, data streams, holographic overlays, grid lines\n- glowing edges, light trails, subtle particle effects\n- futuristic and sleek, high contrast between dark base and bright accents\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.20:references/cover-styles/简约.example.md\n\n# 简约\n\n## 描述\n\n干净利落的极简设计，大面积留白，单一焦点元素，低饱和度配色。适合传递专业、可信赖的视觉印象。\n\n## 适用场景\n\n科技、商业、知识分享、专业分析类文章。适合正式或专业调性的账号。\n\n## Prompt 要点\n\n- minimal design, clean composition, ample whitespace, single focal point\n- muted or monochromatic color palette, subtle gradients allowed\n- geometric or abstract shapes preferred over literal illustrations\n- no clutter, no decorative elements, breathing space around subject\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.20:references/image-styles/auto-selection.md\n\n# 自动推荐规则\n\n当用户未指定风格时，根据文章内容自动推荐。\n\n> 本文件主要用于**正文配图**的 Type 和 Style 自动推荐。封面风格的 fallback 见末尾「封面风格 fallback」节。\n\n## 按文章调性（正文配图）\n\n| 调性（config `tone`） | 推荐风格 |\n|----------------------|---------|\n| 正式、专业 | 扁平矢量、蓝图、商务 |\n| 轻松、幽默 | 手绘、温暖、活泼 |\n| 犀利 | 海报、极简 |\n\n## 按文章内容信号\n\n| 内容信号 | 推荐 Type | 推荐 Style |\n|---------|-----------|-----------|\n| 抽象概念、原理、隐喻 | concept | 扁平矢量、简约线条、手绘 |\n| 教程、步骤、操作指南 | process | 扁平矢量、简约线条 |\n| 知识框架、原理讲解、课程 | whiteboard | 手绘、简约线条 |\n| 数据、统计、趋势、报告 | data-viz | 扁平矢量、商务 |\n| 对比、评测、方案选择 | comparison | 扁平矢量、商务 |\n| 架构、系统、模型、体系 | architecture | 蓝图、扁平矢量 |\n| 知识全景、关系梳理、概览 | mindmap | 扁平矢量、简约线条 |\n| 历程、里程碑、路线图 | timeline | 简约线条、商务 |\n| Tips、要点列表、注意事项 | checklist | 扁平矢量、温暖 |\n| 金句、核心观点、名言 | quote-card | 温暖、海报、极简 |\n| 使用场景、产品展示、代入感 | scene | 温暖、水彩、手绘 |\n| 故事、情感、散文、视觉呼吸 | atmosphere | 温暖、水彩、海报 |\n\n## 按 config `article_category`（正文配图）\n\n| 账号类型 | 默认风格基调 |\n|---------|------------|\n| 科技 | 蓝图 / 扁平矢量 |\n| 职场 | 商务 / 简约线条 |\n| 情感 | 温暖 / 水彩 |\n| 教育 | 扁平矢量 / 手绘 |\n| 品牌号 | 按品牌调性 |\n| 个人IP | 温暖 / 手绘 |\n\n## 配图密度\n\n按 config `image_density`：\n\n| 配置值 | 规则 |\n|--------|------|\n| 每节一图 | 每个 H2 小标题后一张 |\n| 少图 | 仅封面 + 1-2 张关键配图 |\n| 多图 | 每 2-3 段一张 |\n\nwriting 阶段已按此密度插入标记，images 阶段按标记执行即可。\n\n## 封面风格 fallback\n\n当 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后**无有效单选预设**（空列表或未收窄为单元素）时，Agent 从可用封面预设（扫描内置 + **`.aws-article/presets/cover-styles/`**）中按以下规则推荐：\n\n| 调性 / 类型 | 推荐封面预设 |\n|------------|------------|\n| 科技、专业 | 科技风、简约 |\n| 轻松、幽默 | 插画、漫画 |\n| 犀利、观点 | 大字报 |\n| 正式、商业 | 简约、品牌模板 |\n| 通用 / 无明确信号 | 简约 |\n\n注：推荐的预设名须在可用列表中存在。若推荐的预设不存在，从已有预设中择一最接近的。\n\nFile v1.0.20:references/image-styles/prompt-construction.md\n\n# Prompt 构建指南\n\n## 图片内文字语言（必守）\n\n**公众号配图画面中出现的所有文字必须为中文。**\n\n- 在 prompt 里**直接写出要显示的中文文案**（例如：左侧「传统对话AI」、右侧「OpenClaw」、步骤「立项」「开发」「上线」）。\n- **禁止**只写 \"labels in Chinese\" 或 \"Chinese or English OK\" 等元描述——多数模型会默认生成英文。\n- Prompt 本身可中英混排（描述构图用英文亦可），但「会出现在图上的字」必须用中文写出。\n\n## 通用规则\n\n所有 prompt 必须包含：\n\n1. **布局结构**：描述构图、区域划分、视觉流向\n2. **具体内容**：使用文章中的实际数据、术语、关键词（不要泛泛而谈）\n3. **视觉关系**：元素之间如何连接、对比、层次\n4. **语义颜色**：基于含义选色（红=警告、绿=增长、蓝=科技）\n5. **风格特征**：线条处理、纹理、氛围\n6. **比例**：封面按 config `cover_aspect`，正文配图 16:9 或 4:3\n\n## 通用构图要求\n\n所有 prompt 默认附加：\n\n```\n构图要求：\n- 干净简洁，不堆砌元素\n- 充足留白，主体元素呼吸感\n- 纯色或轻微渐变背景，不要复杂纹理\n- 主视觉居中或按内容需要布局\n- 突出核心信息\n```\n\n## 人物表现\n\n如需画人物：\n\n```\n人物表现：简化风格的人物剪影或符号化表达，不要写实人脸。\n通过姿态和简单手势传达情绪。\n```\n\n## 文字处理\n\n如画面中需要文字：\n\n```\n文字要求：大而醒目，手写风字体优先，仅保留核心关键词。所有图中文字必须为中文；在 prompt 中写出要显示的中文原文（如「传统对话AI」「OpenClaw」），不要写 \"label in Chinese\"。\n```\n\n---\n\n## Type 专用模板\n\n### concept 概念讲解\n\n```\n[标题] - 概念可视化\n\n核心概念：[要解释的抽象概念]\n视觉隐喻：[映射为什么具体事物，如\"技术债\"→堆积的砖块]\n\n布局：[居中/对称/层级]\n主体：[隐喻场景的核心画面]\n辅助元素：[标注、箭头、小图标]\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### process 流程步骤\n\n```\n[标题] - 流程可视化\n\n流向：[从左到右/从上到下]\n步骤数：[N]\n\n步骤：\n1. [步骤名] → [简要说明]\n2. [步骤名] → [简要说明]\n3. [步骤名] → [简要说明]\n\n连接方式：[箭头/线条/渐变过渡]\n高亮：[哪个步骤需要突出]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### whiteboard 板书白板\n\n```\n[标题] - 板书白板风\n\n背景：白色或浅米色白板\n笔触：手写体 + 马克笔风格\n\n知识要点：\n- [要点1]：[简要说明]\n- [要点2]：[简要说明]\n- [要点3]：[简要说明]\n\n辅助：[箭头、圈注、下划线、简笔画]\n配色：[马克笔配色，2-3 种主色]\n比例：[比例]\n```\n\n### data-viz 数据可视化\n\n```\n[标题] - 数据可视化\n\n图表类型：[柱状图/折线图/饼图/面积图]\n\n数据标签：\n- [具体数据点1：实际数字和术语]\n- [具体数据点2：实际数字和术语]\n- [具体数据点3：实际数字和术语]\n\n布局：[网格/放射/层级]\n区域：\n- 顶部：标题区\n- 中部主区域：[核心数据/图表]\n- 底部：总结/来源\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### comparison 对比说明\n\n```\n[标题] - 对比可视化\n\n布局：[左右分栏/上下分栏]\n\n左侧/A项：\n- 名称：[A]\n- 特点：[关键差异点]\n\n右侧/B项：\n- 名称：[B]\n- 特点：[关键差异点]\n\n对比维度：[列出 3-5 个对比维度]\n倾向：[中立/偏向某一方]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### architecture 架构图\n\n```\n[标题] - 架构/模型可视化\n\n结构：[层级/环形/矩阵/树状]\n\n层级/模块：\n- [顶层/核心]：[名称和说明]\n- [第二层]：[名称和说明]\n- [第三层]：[名称和说明]\n\n连接关系：[包含/依赖/双向/单向]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### mindmap 思维导图\n\n```\n[标题] - 思维导图\n\n中心主题：[核心主题词]\n\n一级分支：\n- [分支1]：[关键词]\n- [分支2]：[关键词]\n- [分支3]：[关键词]\n\n二级分支（可选）：\n- [分支1] → [子项1]、[子项2]\n- [分支2] → [子项1]、[子项2]\n\n布局：[放射状/右侧展开/上下对称]\n配色：每条主分支一个色系\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### timeline 时间线\n\n```\n[标题] - 时间线\n\n方向：[横向/纵向]\n节点数：[N]\n\n节点：\n1. [时间点]：[事件/里程碑]\n2. [时间点]：[事件/里程碑]\n3. [时间点]：[事件/里程碑]\n\n高亮：[哪个节点需要突出]\n连接线：[实线/虚线/渐变]\n配色：[时间推进用渐变色]\n风格：[选定的风格特征]\n比例：[比例，通常 16:9 或 4:3]\n```\n\n### checklist 清单图\n\n```\n[标题] - 清单图\n\n条目数：[N]\n\n清单项：\n- [✓/✗] [要点1]：[一句话说明]\n- [✓/✗] [要点2]：[一句话说明]\n- [✓/✗] [要点3]：[一句话说明]\n\n每项配：[图标/编号/勾选框]\n布局：[单列/双列/卡片网格]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### quote-card 金句卡片\n\n```\n[标题] - 金句卡片\n\n金句：「[完整中文金句]」\n出处：[作者/来源]（可选）\n\n布局：文字居中，大字号\n装饰：[引号装饰/底纹/边框]\n背景：[纯色/轻渐变/纹理]\n配色：[与金句情绪匹配]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n### scene 场景还原\n\n```\n[标题] - 场景还原\n\n场景：[描述具体使用/生活场景]\n主体：[人物动作或产品使用画面]\n环境：[场景环境细节]\n视角：[第一人称/俯视/平视]\n\n情绪：[代入感/真实感/日常感]\n色调：[暖色/冷色/自然色]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### atmosphere 氛围烘托\n\n```\n[标题] - 场景氛围\n\n场景：[描述画面场景]\n情绪：[要传达的情感]\n主体：[画面中心元素]\n色调：[暖色/冷色/具体色彩倾向]\n光线：[光源方向和质感]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### 封面\n\n封面 prompt 的「风格」关键词直接来自封面预设 `.md` 文件的「Prompt 要点」部分（见 [cover-styles/](../cover-styles/)），无须引用 Style 维度。\n\n**YAML frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 frontmatter，`image_create.py` 据此转换为实际尺寸。缺少 frontmatter 的 aspect 会导致 fallback 到 1:1。\n\n```yaml\n---\naspect: \"2.35:1\"   # ← 必须：取自 config cover_aspect\nquality: standard\n---\n```\n\n```\n[文章标题] - 封面图\n\n核心意象：[从标题提取的抽象视觉概念]\n情绪：[文章整体调性]\n色调：[主色和辅色]\n\n要求：\n- 不包含文字（标题会单独叠加）\n- 画面简洁有焦点\n- 适合作为公众号封面缩略图（小尺寸也清晰）\n\n风格：[从封面预设 .md 的 Prompt 要点加载]\n```\n\n---\n\n## 高级布局（适用于复杂信息可视化）\n\n在标记描述中指定布局类型：`![data-viz-漏斗：...]`、`![data-viz-冰山：...]`。\n\n**布局类型一览**：\n\n| 布局 | 适用场景 | Prompt 要点 |\n|------|---------|-------------|\n| `九宫格/bento` | 多主题概览 | 3×3 网格，每格一个主题，统一色调 |\n| `漏斗/funnel` | 转化、筛选 | 上宽下窄，每层标注数据和标签 |\n| `冰山/iceberg` | 表象 vs 本质 | 水面上下分区，上方简单下方复杂 |\n| `金字塔/pyramid` | 层级、优先级 | 从底到顶，每层标注 |\n| `环形/circular` | 循环流程 | 顺时针箭头连接的环形节点 |\n| `矩阵/matrix` | 多维度对比 | 2×2 或 N×N 象限，轴标签 |\n| `树状/tree` | 分类、层级 | 根节点→分支→叶节点 |\n| `仪表盘/dashboard` | 关键指标 | 数字卡片 + 趋势图 + 状态灯 |\n| `路线图/roadmap` | 规划、里程碑 | 蜿蜒路径 + 节点标注 |\n\n**九宫格模板**：\n\n```\n[标题] - 九宫格信息图\n\n布局：3×3 网格（或 2×3、2×4）\n\n格子内容：\n| [主题1] | [主题2] | [主题3] |\n| [主题4] | [主题5] | [主题6] |\n| [主题7] | [主题8] | [主题9] |\n\n每格包含：图标 + 标题 + 一句话说明\n统一风格：[圆角卡片/方格/无边框]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n**漏斗模板**：\n\n```\n[标题] - 漏斗图\n\n层数：[N]\n方向：从上到下\n\n各层（从宽到窄）：\n1. [层名]：[数据/标签]（100%）\n2. [层名]：[数据/标签]（60%）\n3. [层名]：[数据/标签]（30%）\n4. [层名]：[数据/标签]（10%）\n\n配色：渐变色，从顶到底逐渐加深\n风格：[选定的风格特征]\n比例：[比例，通常 3:4 或 9:16]\n```\n\n**冰山模板**：\n\n```\n[标题] - 冰山图\n\n水面以上（表象/可见）：\n- [可见现象1]\n- [可见现象2]\n\n水面以下（本质/隐藏）：\n- [隐藏原因1]\n- [隐藏原因2]\n- [深层逻辑]\n\n水面线：明确标注\n配色：水面上明亮，水面下深色\n风格：[选定的风格特征]\n比例：[比例，通常 3:4]\n```\n\n---\n\n## 关键原则\n\n- **补充而非重复**：文字讲道理，图给感觉；文字列数据，图给直觉\n- **抽象优于具象**：「AI 赋能」→ 光线连接感 ✅，不要画机器人 ❌\n- **情感对齐**：严肃段落配冷色调，轻松段落配暖色明快风\n- **一图一个焦点**：不要塞太多元素\n- **用文章中的真实数据**：信息图里要放实际数字和术语，不要 placeholder\n\nFile v1.0.20:references/image-styles/style-presets.md\n\n# 正文配图风格预设\n\n> 封面风格预设见 [cover-styles/](../cover-styles/)，本文件仅用于正文配图的自动推荐。\n\n按文章类型推荐 Type + Style 组合（Style 为 Agent 内部选择，非用户配置维度）。用户也可手动覆盖其中任一维度。\n\n## 按文章类型\n\n### 科技与技术\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `科技解析` | concept | 蓝图 | 技术原理、AI 概念、抽象概念具象化 |\n| `系统设计` | architecture | 蓝图 | 架构图、系统设计、技术栈 |\n| `工具评测` | comparison | 扁平矢量 | 工具对比、框架评测、方案PK |\n\n### 知识与教程\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `知识科普` | concept | 扁平矢量 | 概念解释、入门指南、隐喻科普 |\n| `操作指南` | process | 简约线条 | 分步教程、操作流程、工作流 |\n| `效率工具` | checklist | 简约线条 | 产品指南、SaaS 介绍、Tips 列表 |\n| `课堂笔记` | whiteboard | 手绘 | 知识框架、原理讲解、课程笔记 |\n| `知识全景` | mindmap | 扁平矢量 | 知识框架、主题概览、关系梳理 |\n\n### 数据与分析\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `数据报告` | data-viz | 商务 | 数据新闻、指标报告、统计分析 |\n| `趋势对比` | comparison | 扁平矢量 | 行业对比、趋势分析 |\n| `发展历程` | timeline | 简约线条 | 里程碑、产品路线图、年度总结 |\n\n### 故事与情感\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `故事叙述` | scene | 温暖 | 个人随笔、成长故事、用户场景 |\n| `生活方式` | atmosphere | 水彩 | 旅行、生活、文艺、散文 |\n| `金句传播` | quote-card | 温暖 | 核心观点、名言金句、截图转发 |\n\n### 观点与评论\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `观点文章` | atmosphere | 海报 | 社论、评论、犀利观点 |\n\n## 文章内容 → 预设推荐\n\n根据文章类型（由 topics 或 writing 确定）自动推荐：\n\n| 文章内容信号 | 推荐预设 | 备选 |\n|-------------|---------|------|\n| API、代码、技术原理 | `科技解析` | `系统设计` |\n| 概念、科普、入门指南 | `知识科普` | `课堂笔记` |\n| 教程、步骤、操作 | `操作指南` | `知识科普` |\n| 对比、评测、选择 | `工具评测` | `趋势对比` |\n| 数据、报告、指标 | `数据报告` | `趋势对比` |\n| 知识框架、关系梳理 | `知识全景` | `课堂笔记` |\n| 历程、里程碑、路线 | `发展历程` | `数据报告` |\n| Tips、要点、注意事项 | `效率工具` | `知识科普` |\n| 故事、经历、场景 | `故事叙述` | `生活方式` |\n| 金句、核心观点 | `金句传播` | `观点文章` |\n| 观点、评论、争议 | `观点文章` | — |\n| 工具、产品、SaaS | `效率工具` | `知识科普` |\n\nFile v1.0.20:references/image-styles/styles.md\n\n# 正文配图风格库\n\n> 本文件用于**正文配图**的 Type 分类与 Style 内部参考。**封面风格**由独立预设体系管理，见 [cover-styles/](../cover-styles/)。\n\n## Type（画面构成）\n\n12 种图片类型，描述\"画什么\"：\n\n| Type | 名称 | 说明 | 适用场景 |\n|------|------|------|---------|\n| `concept` | 概念讲解 | 视觉隐喻把抽象概念具象化 | 原理解释、概念科普、隐喻 |\n| `process` | 流程步骤 | 分步引导图，1-2-3 清晰明了 | 教程、操作指南、工作流 |\n| `whiteboard` | 板书白板 | 像老师在白板上手写画图 | 知识科普、原理讲解、课程笔记 |\n| `data-viz` | 数据可视化 | 数字变图表，让数据说话 | 趋势分析、统计、报告 |\n| `comparison` | 对比说明 | 左右/上下并排，一眼看清差异 | 方案对比、产品PK、改版前后 |\n| `architecture` | 架构图 | 分层结构图，展示组成关系 | 系统架构、产品架构、技术栈 |\n| `mindmap` | 思维导图 | 中心主题向外发散分支 | 知识框架、主题概览、关系梳理 |\n| `timeline` | 时间线 | 按时间轴排列事件或里程碑 | 发展历程、路线图、年度总结 |\n| `checklist` | 清单图 | 条目化要点配图标 | Tips、注意事项、最佳实践 |\n| `quote-card` | 金句卡片 | 突出核心观点或名言金句 | 金句、核心结论、截图转发 |\n| `scene` | 场景还原 | 还原真实使用场景，代入感 | 用户场景、产品展示、生活方式 |\n| `atmosphere` | 氛围烘托 | 营造情绪氛围，视觉呼吸 | 情感渲染、散文配图、阅读节奏 |\n\n封面图不属于以上 Type，由独立的封面预设体系管理（见 [cover-styles/](../cover-styles/)）。\n\n## Style（视觉风格）— Agent 内部参考\n\n以下风格供 Agent 在自动选择正文配图视觉风格时参考，**不作为用户配置维度**。\n\n| 核心风格 | 描述 | 适用场景 |\n|---------|------|---------|\n| `扁平矢量` | 扁平化设计，清晰几何形状 | 知识科普、教程、科技 |\n| `简约线条` | 极简手绘线条 | 通用、知识分享、SaaS |\n| `蓝图` | 技术蓝图风 | 架构设计、系统设计 |\n| `手绘` | 手绘涂鸦风 | 轻松、随笔 |\n| `水彩` | 水彩柔和 | 生活方式、情感 |\n| `海报` | 海报丝印风 | 观点、社论 |\n| `温暖` | 温暖亲切 | 个人成长、教育 |\n| `极简` | 极简留白 | 哲学、极简主义 |\n| `商务` | 精致商务 | 商业、深度报道 |\n\n## 按 Type 的默认风格\n\n| Type | 首选风格 | 备选 |\n|------|---------|------|\n| concept 概念讲解 | 扁平矢量 | 简约线条、手绘 |\n| process 流程步骤 | 扁平矢量 | 简约线条、蓝图 |\n| whiteboard 板书白板 | 手绘 | 简约线条 |\n| data-viz 数据可视化 | 扁平矢量 | 商务、极简 |\n| comparison 对比说明 | 扁平矢量 | 简约线条、商务 |\n| architecture 架构图 | 蓝图 | 扁平矢量、简约线条 |\n| mindmap 思维导图 | 扁平矢量 | 简约线条、手绘 |\n| timeline 时间线 | 简约线条 | 扁平矢量、商务 |\n| checklist 清单图 | 扁平矢量 | 简约线条、温暖 |\n| quote-card 金句卡片 | 温暖 | 手绘、海报、极简 |\n| scene 场景还原 | 温暖 | 水彩、手绘 |\n| atmosphere 氛围烘托 | 温暖 | 水彩、手绘 |\n| 封面 | 由封面预设体系管理 | 见 [cover-styles/](../cover-styles/) |\n\nFile v1.0.20:references/specs.md\n\n# 图片规格\n\n## 图中文字\n\n画面内出现的文字**默认使用中文**。生成 prompt 时须直接写出要显示的中文文案，勿用 “labels in Chinese” 等元描述，否则多数模型会渲染成英文。\n\n## 封面图\n\n| 比例 | 尺寸参考 | 适用场景 |\n|------|---------|---------|\n| 2.35:1 | 900×383 | 宽幅电影感，适合科技/商务 |\n| 16:9 | 1080×608 | 标准宽屏，通用 |\n| 1:1 | 1080×1080 | 方形，适合品牌/人物 |\n\n- 格式：JPG / PNG\n- 单张建议 ≤ 2MB\n- 风格按 `custom_cover_image_style` 指定的封面预设决定（见 `cover-styles/`）\n\n## 正文配图\n\n- 宽度建议：1080px（适配公众号正文区）\n- 比例可按内容灵活调整\n- 图注格式按配置 `caption_style`（如「图：XXX」）\n\n## 多图推送\n\n- 单条最多 9 张\n- 张数偏好按配置 `multi_image_count`\n- 每张需配文 + 顺序编号\n\n## 品牌头图/尾图\n\n- 路径按配置 `header_image` / `footer_image`\n- 可固定版式复用\n\nArchive v1.0.19: 15 files, 31483 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (18780b), _meta.json (145b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` 调外部图像 API 生成封面与正文配图。\n\n- **凭证**：读取仓库根 `aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **网络**：对 `config.yaml` 里 `image_model.base_url` 指定的端点（由用户配置，常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型的 `/v1/chat/completions` 端点）发 POST 请求\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、本篇 `imgs/prompts/*.md`、可选 `.aws-article/assets/stock/images/*`（参考素材）\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `python3 {baseDir}/scripts/image_create.py`、`user_image_prepare.py`\n\n凭证由用户本地保管；API 返回的图片仅写入本篇目录。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的配图环节（入口 `aws-wechat-article-main`）。完整说明见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按 Type × Style 体系生成图片。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明确书面确认「本次不检查」）：\n\n从选题到发布的**前置规则**见 [aws-wechat-article-main/SKILL.md](../aws-wechat-article-main/SKILL.md)；本 skill 只描述配图步骤。\n\n**图片模型**：**`image_model`**（`provider`、`base_url`、`model`、`default_size`、`default_quality` 等）在 **`config.yaml`**；**`IMAGE_MODEL_API_KEY`** 在 **`aws.env`**。键名对照 **`{baseDir}/../aws-wechat-article-main/references/env.example.yaml`**。\n\n**`base_url` 须为完整端点路径**，脚本根据路径判断调用模式：\n- `https://xxx.com/v1/images/generations` — DALL-E / gpt-image 等\n- `https://xxx.com/v1/chat/completions` — Gemini 等多模态模型（通过中转站生图）\n\n**交互约定**：可提示用户上述项是否已填；**一条龙**下通常已通过 **`validate_env.py`**。须遵守 main 的**智能体行为约束**——未通过环境校验且未获用户明确「本次例外」时，不得假装已走专用生图 API。\n\n## 封面风格 + 正文配图\n\n- **封面风格**：独立预设体系，见 [references/cover-styles/](references/cover-styles/)。每个预设 `.md` 自包含视觉关键词。\n- **正文配图**：Type（画面构成）决定\"画什么\"，Style（视觉风格）由 Agent 根据 tone/category 内部选择。Type 列表与 prompt 模板见 [references/image-styles/](references/image-styles/) 目录。\n\n### 封面 vs 正文（资源策略）⛔\n\n| 类型 | 要求 |\n|------|------|\n| **封面** | **必须**通过 **`image_create.py`** 生成（`generate` 或 `batch` 读 `imgs/prompts/*.md`），产出并保存为文章目录下的 **`cover.png`**（或 `cover.jpg` / `cover.jpeg` / `cover.webp`）。**禁止**将 `.aws-article/assets/stock/images/`（或其它素材库文件）**直接复制**为 `cover.*` 充当封面。**例外**：用户**明确上传**封面文件并声明「封面只用这一张」时，可跳过脚本，须在 **`img_analysis.md`** 与审稿记录中注明「用户指定封面」。 |\n| **正文** | **可直接使用参考资料库**：`.aws-article/assets/stock/images/`（先读同名 `.md` 再复制到本篇 `imgs/` 或引用路径），见下文「正文配图来源优先级」。缺图时再走 **`image_create.py`** 或 Agent 降级生图。 |\n\n> 说明：全局 `config.yaml` 的 **`image_source: user`** 表示「正文以用户/素材引用为主」；**不豁免**上述「封面须脚本生成」规则，除非用户同时提供了封面文件并声明仅用该封面。\n\n## 工作流\n\n```\n配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章\n```\n\n### 正文配图来源优先级（Agent）⛔\n\n**仅适用于正文插图**（不含封面；封面见上文「封面 vs 正文」）。**在**为正文 `placeholder` 调用 `image_create.py`、写入 `imgs/prompts/` **之前**，须先判断是否可用**本地素材库**，避免教程类、产品界面类文章「有截图资源却重新生成」：\n\n1. **仓库素材库（参考资料库）**：列出并阅读 **`.aws-article/assets/stock/images/`** 下 **同名 `.md`**（含路径与画面说明），按主题匹配后，在 `article.md` 中直接引用对应 **`.png` / `.webp`**（或复制到本篇 `imgs/` 再引用）。**与正文严格相关才用**，避免硬凑。\n2. **用户上传 / 本篇 `image_source: user`**：用户提供的图或上述引用策略，走「用户供图模式」与 `img_analysis.md`（正文部分）。\n3. **仍缺图或须原创插画**：再进入 **Type × Style**、`imgs/prompts/` 与 **`image_create.py`**（或 Agent 降级生图）。\n\n> 说明：素材库属「仓库内预设资源」，**不必**等用户手动上传才查；与「用户供图模式」并列，而非仅附属于后者。\n\n### 第1步：环境检查 + 本篇约束与文章\n\n- **全局**：读 **`.aws-article/config.yaml`** — `cover_aspect`、`cover_style`、`image_density`、`caption_style`、`multi_image_count`、`tone` 等以之为准（完整字段见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md) 与 **`config.example.yaml`**）。\n- **本篇**：若同目录有 **`article.yaml`**，读取 **`default_cover_image_style`**、**`default_article_image_style`**（应为单元素列表，代表本篇已选预设）及 `cover_image` 等字段。\n- 读取 **`article.md`**（或当前流程规定的正文来源）。\n- 当 `image_source: user`（全局或本篇）时，进入「用户供图模式」：先创建本篇 `imgs/` 并生成/更新 `img_analysis.md`，记录每张图的内容分析、建议章节与推荐用途。\n\n### 第2步：解析配图标记\n\n提取所有 `![类型：描述](placeholder)`。`实证` 类型提示用户提供素材或从 `.aws-article/assets/` 搜索。\n\n### 用户供图模式（新增分支）\n\n当用户上传图片并指定主题时，按以下顺序执行：\n\n1. 立即确保 `{article_dir}/imgs/` 存在，并将用户图片放入该目录。\n2. 生成/维护 `{article_dir}/img_analysis.md`（每图至少包含：文件名、图片内容、建议章节、推荐用途、图注建议）。\n3. **硬性约束**：`img_analysis.md` 中“推荐用途：封面”**必须且只能出现 1 次**；其余图片用途应为“正文”。\n4. 同步更新本篇 `article.yaml`：`image_source: user`（从模型生图切换到用户供图状态）。\n   - 字段取值只允许 `generated` / `user`。\n5. 写稿阶段直接使用用户图片路径（如 `imgs/淘米.png`），**不再使用 placeholder**。\n\n**顺序说明**：`imgs/` 落图 → 分析并写好 `img_analysis.md` → 再跑 `write.py`；写稿时以 `img_analysis.md` 为准，把图片插到与内容匹配的章节位置。\n\n### 发布后换图重发（新增分支）\n\n当用户明确说「这篇文章配图不满意，换成我上传的新图并重新发草稿箱」时，按以下流程：\n\n1. 用户指定目标文章目录（`drafts/YYYYMMDD-slug/`）。\n2. 将新图放入该目录 `imgs/`，并更新 `img_analysis.md`（仍需满足“封面仅 1 张”）。\n   - 同步把本篇 `article.yaml.image_source` 更新为 `user`。\n3. 按 `img_analysis.md` 重新映射图片到 `article.md` 对应章节（允许重排章节以匹配图序）。\n4. 运行 `format.py` 重新生成 `article.html`（不要只改旧 html 局部）。\n5. 进入终审：确认 `article.md` / `article.html` 无 `placeholder`，且引用图片文件均存在。\n6. 回到发布步骤执行 `publish.py full`（`publish_method: draft` 时写入草稿箱）。\n\n**可用素材库**（与上文「配图来源优先级」一致）：\n\n- `.aws-article/assets/stock/images/`：本地参考/产品截图目录；**优先读同名 `.md` 再选图**。若已用素材库满足正文，可不再走生图 API。\n\n### 第3步：确定风格\n\n封面与正文配图**分别**确定风格，走各自的预设目录。\n\n#### 封面风格\n\n**预设发现**：Agent 扫描两个目录合并可用封面预设列表：\n1. **内置**：`{baseDir}/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或预设包导入）\n\n**加载优先级**：\n1. 用户当次指定（如「封面要简约风」）\n2. **本篇 `article.yaml.default_cover_image_style`**（单元素列表）→ 从内置或 **`.aws-article/presets/cover-styles/<名>.md`** 加载（用户文件同名优先于内置）\n3. **fallback**：根据 `tone` / `article_category` 从可用封面预设中自动推荐（规则见 [auto-selection.md](references/image-styles/auto-selection.md)）\n\n每个封面预设 `.md` 自包含视觉关键词（`Prompt 要点`），无须引用外部 Style 维度。Schema 见 [cover-styles/README.md](references/cover-styles/README.md)。\n\n#### 正文配图风格\n\n**预设发现**：Agent 扫描 `.aws-article/presets/image-styles/` 获取可用正文配图预设。\n\n**加载优先级**：\n1. 用户当次指定（如「正文要扁平插画」）\n2. **本篇 `article.yaml.default_article_image_style`**（单元素列表）→ 加载 **`.aws-article/presets/image-styles/<名>.md`**\n3. **fallback**：根据正文内容信号与 `tone` 自动推荐 Type 和视觉风格（规则见 [auto-selection.md](references/image-styles/auto-selection.md)），视觉风格为 Agent 内部决策\n\n### 第4步：生成配图方案\n\n为每张图生成方案（类型、风格、prompt 要点）。\n\n**封面 prompt frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 YAML frontmatter。`image_create.py` 据此转换为实际像素尺寸；**缺少 aspect 会导致 fallback 到 1:1**。\n\n**图片内文字**：画面中出现的文字必须为中文。在 prompt 里**直接写出要显示的中文文案**（如「传统对话AI」「OpenClaw」），禁止只写 “labels in Chinese” 或 “Chinese or English OK”，否则模型会生成英文。\n\nPrompt 构建：[references/image-styles/prompt-construction.md](references/image-styles/prompt-construction.md)\n\n### 第5步：展示方案并等待确认 ⛔\n\n### 第6步：生成图片\n\n**封面**：见「封面 vs 正文」— **默认必须先**写好 **`imgs/prompts/`** 中封面 prompt（含 `aspect` 与 `config.yaml` 的 **`cover_aspect`** 一致），再执行 **`image_create.py generate … -o ../cover.png`**（或等价输出路径）。\n\n**生成方式（优先级，正文）**：\n\n0. **已在「正文配图来源优先级」中用尽素材库 / 用户图**：本节不再对**该图位**重复生图（封面仍须单独按上款处理）。\n1. **缺图时优先：调用专用生图 API**（`scripts/image_create.py`）— 依赖 **`config.yaml` 的 `image_model` + `aws.env` 的 `IMAGE_MODEL_API_KEY`**\n2. **自动降级：模型未配置**（退出码 2、stderr 含 `[NO_MODEL]`）且当前 Agent 支持图片生成、并已获用户明确同意代生图 → Agent 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按**相同 prompt** 生图 → 告知用户 `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）` → 生成后**正常执行第 7 步**（插入文章）\n3. **故障降级**（退出码 1）→ 按本节下方「调用失败」表格分类处理\n4. **用户供图：跳过生图** — 当 `image_source=user` 或用户明确”使用我上传的图片”时，不调用 `image_create.py`，改为”读图分析 + 写稿引用 + 重排版”\n\n**必须告知用户当前使用的方式**：\n\n- 已配置且调用脚本 → `ℹ️ 使用 image_create.py 调用专用生图模型（{model}）`\n- Agent 降级生图（退出码 2）→ `ℹ️ 图片模型未配置，本次由当前对话模型直接生图（使用相同配图方案）`\n- 故障降级 / 仅 prompts → `ℹ️ 本次未走 image_create.py（原因：…）`\n\n**⛔ 故障降级（退出码 1）时的终点**：只做到第 4 步（或第 5 步）。产出 `imgs/prompts/*.md` 与方案；**不执行**「替换 article 中的 placeholder」或「修复 HTML」。若 `imgs/README.md` 尚不存在或需补充当前方案的说明，可创建/更新（如何配置 **`aws.env` / `config.yaml`**、如何跑 `image_create.py batch`、如何在 `article.html` 中替换）；若已存在且已涵盖当前方案，**不必重写**。\n\n**注意**：退出码 2（模型未配置）且 Agent 支持图片生成、并已获用户明确同意代生图时，**不受上述终点限制**——Agent 降级生图后继续执行第 7 步。\n\n**调用专用 API 时**（在**仓库根**执行，`{baseDir}` 按上表解析；路径按本篇 `imgs/` 调整）：\n\n```bash\npython {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/\n```\n\n单张：`python {baseDir}/scripts/image_create.py generate imgs/prompts/01-cover.md -o imgs/01-cover.png`\n\n连通性自检：`python {baseDir}/scripts/image_create.py test`\n\n图片规格：[references/specs.md](references/specs.md)\n\n#### `image_create.py` 调用失败时（智能体必选分支）\n\n只要执行了 `image_create.py` 且**非零退出或 stderr 有 API/网络错误**，就必须走本节，**不得**只说「生图失败」而不分类、不摘要报错。\n\n运行脚本后**须把终端 stderr 中的具体报错摘要给用户**（含 `❌`、HTTP 状态码、`【配置/认证】`、`网络错误（可重试）`、`[NO_MODEL]` 等关键行），勿只说「失败」。\n\n| 类型 | 判断线索 | 智能体动作 |\n|------|----------|------------|\n| **未配置** | 退出码 2、`[NO_MODEL]` | Agent 支持图片生成且用户明确同意代生图 → 读取 `imgs/prompts/*.md` 中的 prompt + frontmatter（size/quality），用自身多模态能力按相同 prompt 生图并继续第 7 步。Agent 不支持图片生成，或 Agent 代生图失败 → 明确告知“我当前不能完成生图”，给用户二选一：**配置图片模型后重试**，或**本篇不配图继续**（保留 prompts 并在结果中标注无配图）。 |\n| **网络类** | `URLError`、`网络错误（可重试）`、超时、临时 502/503 | **必须自动再试 1 次**（可短暂等待后重跑同一命令）。**第二次仍为网络类** → 可降级为 **Agent 多模态生图** 或仅保留 prompts；**须明确告知**用户本次未走专用 API。 |\n| **配置/凭证类** | 401/403、图片模型配置不完整、`【配置/认证】` | **不要**静默降级。**列出须检查项**（**`config.yaml` 的 `image_model`**、**`aws.env` 的 `IMAGE_MODEL_API_KEY`**、端点、权限），请用户改正后重跑。用户**明确打字**接受本次仅用 Agent/仅 prompts 时，再按 main「本次例外」处理。 |\n| **业务/参数类** | `【请求参数】`、400、返回体提示 model/size 不支持 | 将响应摘要给用户；可改 **`config.yaml` 或 env** 中的 model/尺寸后再试；仍失败则与用户商定是否 Agent 生图。 |\n\n**禁止**：配置明显错误时静默改用 Agent 却不说明；网络降级后不告知「本次未走专用生图」。\n\n### 第7步：插入文章\n\n仅当**已生成图片**时执行：替换 placeholder 为实际图片路径，输出到 `imgs/`。\n\n**封面排除**：封面图（`![封面：...]`）**仅用于微信文章封面上传**，**禁止**作为 `<img>` 嵌入 HTML 正文。替换 placeholder 时**跳过封面标记行**（或直接删除该行），封面图单独复制到文章根目录 `cover.{ext}`。`publish.py` 也支持从 `imgs/` 目录自动发现封面图（`cover.*` 或 `*-cover.*`）。\n\n**修复 HTML 的触发条件**：仅当在 `article.html` 中**确实存在** `href=\"placeholder\"` 或 placeholder 被渲染成可点击链接时，才将误转的 `<a>` 改为 `<img>` 或占位说明；**不要**默认每次都执行「修复流程图占位」或「修复 HTML」。\n\n## 过程文件\n\n| 读取 | 产出 |\n|------|------|\n| **`article.md`**、**`.aws-article/config.yaml`**、本篇可选 **`article.yaml`** 中的标记与配图约束 | `imgs/`（outline + prompts + 图片；未走 API 时为 prompts + 可选 imgs/README.md） |\n\nFile v1.0.19:references/cover-styles/README.md\n\n# 封面风格预设\n\n本目录下的 `.md` 文件为**封面风格预设**（内置）。用户自定义预设放在 `.aws-article/presets/cover-styles/` 下。\n\n## 加载规则\n\n生成封面时按 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后的预设名加载对应 `.md`（`custom_*` 非空时覆盖同名 `default_*`；须收窄为单元素列表后再执行配图）。\n\n**预设发现**：Agent 运行时扫描两个目录合并可用列表：\n\n1. **内置**：`skills/aws-wechat-article-images/references/cover-styles/`（随 skill 安装）\n2. **用户自定义**：`.aws-article/presets/cover-styles/`（用户创建或由 `.aws` 预设包导入）\n\n用户自定义同名文件优先于内置。\n\n## Schema\n\n每个 `.md` 文件描述一种封面视觉风格：\n\n```markdown\n# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n```\n\n- 文件名即预设名（不含后缀），如 `简约.md` → 预设名 `简约`。\n- `Prompt 要点` 部分会被 Agent 直接嵌入封面 prompt 的「风格」字段。\n- 每个预设自包含视觉风格描述，无须引用外部 Style 维度。\n\n## 示例\n\n见同目录下的 `.example.md` 文件。复制到 `.aws-article/presets/cover-styles/` 并重命名为 `.md` 后按需修改。\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1776875780271\n}\n\nFile v1.0.19:references/cover-styles/大字报.example.md\n\n# 大字报\n\n## 描述\n\n大胆醒目的排印设计，超大字号占据画面主体，强对比色块，海报感十足。适合观点鲜明、需要吸引眼球的文章。\n\n## 适用场景\n\n观点文章、评论、热点话题、犀利文风。适合个人 IP 或自媒体调性的账号。\n\n## Prompt 要点\n\n- bold typography-driven layout, oversized Chinese characters as main visual\n- high contrast color blocks, 2-3 strong colors, no subtle gradients\n- poster-like composition, graphic and punchy\n- minimal imagery, text IS the visual; background supports readability\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.19:references/cover-styles/插画.example.md\n\n# 插画\n\n## 描述\n\n扁平化插画风格，色块分明，几何化人物或物品，清新明快的配色。兼顾趣味性与信息传达。\n\n## 适用场景\n\n教程、科普、知识分享、生活方式类文章。适合轻松或专业调性的账号。\n\n## Prompt 要点\n\n- flat illustration style, vector-like shapes, solid color blocks, minimal gradients\n- stylized characters or objects with geometric simplification\n- bright and fresh color palette, 2-4 main colors\n- clear visual hierarchy, one main scene or concept\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.19:references/cover-styles/科技风.example.md\n\n# 科技风\n\n## 描述\n\n深色背景搭配科技感光效，数据流、电路纹理、HUD 元素，营造前沿技术氛围。\n\n## 适用场景\n\nAI、前沿科技、系统设计、技术深度文章。适合科技类或极客调性的账号。\n\n## Prompt 要点\n\n- dark background (deep blue, black, dark gray), neon or electric accent colors\n- tech elements: circuit patterns, data streams, holographic overlays, grid lines\n- glowing edges, light trails, subtle particle effects\n- futuristic and sleek, high contrast between dark base and bright accents\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.19:references/cover-styles/简约.example.md\n\n# 简约\n\n## 描述\n\n干净利落的极简设计，大面积留白，单一焦点元素，低饱和度配色。适合传递专业、可信赖的视觉印象。\n\n## 适用场景\n\n科技、商业、知识分享、专业分析类文章。适合正式或专业调性的账号。\n\n## Prompt 要点\n\n- minimal design, clean composition, ample whitespace, single focal point\n- muted or monochromatic color palette, subtle gradients allowed\n- geometric or abstract shapes preferred over literal illustrations\n- no clutter, no decorative elements, breathing space around subject\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案\n\nFile v1.0.19:references/image-styles/auto-selection.md\n\n# 自动推荐规则\n\n当用户未指定风格时，根据文章内容自动推荐。\n\n> 本文件主要用于**正文配图**的 Type 和 Style 自动推荐。封面风格的 fallback 见末尾「封面风格 fallback」节。\n\n## 按文章调性（正文配图）\n\n| 调性（config `tone`） | 推荐风格 |\n|----------------------|---------|\n| 正式、专业 | 扁平矢量、蓝图、商务 |\n| 轻松、幽默 | 手绘、温暖、活泼 |\n| 犀利 | 海报、极简 |\n\n## 按文章内容信号\n\n| 内容信号 | 推荐 Type | 推荐 Style |\n|---------|-----------|-----------|\n| 抽象概念、原理、隐喻 | concept | 扁平矢量、简约线条、手绘 |\n| 教程、步骤、操作指南 | process | 扁平矢量、简约线条 |\n| 知识框架、原理讲解、课程 | whiteboard | 手绘、简约线条 |\n| 数据、统计、趋势、报告 | data-viz | 扁平矢量、商务 |\n| 对比、评测、方案选择 | comparison | 扁平矢量、商务 |\n| 架构、系统、模型、体系 | architecture | 蓝图、扁平矢量 |\n| 知识全景、关系梳理、概览 | mindmap | 扁平矢量、简约线条 |\n| 历程、里程碑、路线图 | timeline | 简约线条、商务 |\n| Tips、要点列表、注意事项 | checklist | 扁平矢量、温暖 |\n| 金句、核心观点、名言 | quote-card | 温暖、海报、极简 |\n| 使用场景、产品展示、代入感 | scene | 温暖、水彩、手绘 |\n| 故事、情感、散文、视觉呼吸 | atmosphere | 温暖、水彩、海报 |\n\n## 按 config `article_category`（正文配图）\n\n| 账号类型 | 默认风格基调 |\n|---------|------------|\n| 科技 | 蓝图 / 扁平矢量 |\n| 职场 | 商务 / 简约线条 |\n| 情感 | 温暖 / 水彩 |\n| 教育 | 扁平矢量 / 手绘 |\n| 品牌号 | 按品牌调性 |\n| 个人IP | 温暖 / 手绘 |\n\n## 配图密度\n\n按 config `image_density`：\n\n| 配置值 | 规则 |\n|--------|------|\n| 每节一图 | 每个 H2 小标题后一张 |\n| 少图 | 仅封面 + 1-2 张关键配图 |\n| 多图 | 每 2-3 段一张 |\n\nwriting 阶段已按此密度插入标记，images 阶段按标记执行即可。\n\n## 封面风格 fallback\n\n当 **`article.yaml` > `custom_cover_image_style` > `default_cover_image_style`** 合并后**无有效单选预设**（空列表或未收窄为单元素）时，Agent 从可用封面预设（扫描内置 + **`.aws-article/presets/cover-styles/`**）中按以下规则推荐：\n\n| 调性 / 类型 | 推荐封面预设 |\n|------------|------------|\n| 科技、专业 | 科技风、简约 |\n| 轻松、幽默 | 插画、漫画 |\n| 犀利、观点 | 大字报 |\n| 正式、商业 | 简约、品牌模板 |\n| 通用 / 无明确信号 | 简约 |\n\n注：推荐的预设名须在可用列表中存在。若推荐的预设不存在，从已有预设中择一最接近的。\n\nFile v1.0.19:references/image-styles/prompt-construction.md\n\n# Prompt 构建指南\n\n## 图片内文字语言（必守）\n\n**公众号配图画面中出现的所有文字必须为中文。**\n\n- 在 prompt 里**直接写出要显示的中文文案**（例如：左侧「传统对话AI」、右侧「OpenClaw」、步骤「立项」「开发」「上线」）。\n- **禁止**只写 \"labels in Chinese\" 或 \"Chinese or English OK\" 等元描述——多数模型会默认生成英文。\n- Prompt 本身可中英混排（描述构图用英文亦可），但「会出现在图上的字」必须用中文写出。\n\n## 通用规则\n\n所有 prompt 必须包含：\n\n1. **布局结构**：描述构图、区域划分、视觉流向\n2. **具体内容**：使用文章中的实际数据、术语、关键词（不要泛泛而谈）\n3. **视觉关系**：元素之间如何连接、对比、层次\n4. **语义颜色**：基于含义选色（红=警告、绿=增长、蓝=科技）\n5. **风格特征**：线条处理、纹理、氛围\n6. **比例**：封面按 config `cover_aspect`，正文配图 16:9 或 4:3\n\n## 通用构图要求\n\n所有 prompt 默认附加：\n\n```\n构图要求：\n- 干净简洁，不堆砌元素\n- 充足留白，主体元素呼吸感\n- 纯色或轻微渐变背景，不要复杂纹理\n- 主视觉居中或按内容需要布局\n- 突出核心信息\n```\n\n## 人物表现\n\n如需画人物：\n\n```\n人物表现：简化风格的人物剪影或符号化表达，不要写实人脸。\n通过姿态和简单手势传达情绪。\n```\n\n## 文字处理\n\n如画面中需要文字：\n\n```\n文字要求：大而醒目，手写风字体优先，仅保留核心关键词。所有图中文字必须为中文；在 prompt 中写出要显示的中文原文（如「传统对话AI」「OpenClaw」），不要写 \"label in Chinese\"。\n```\n\n---\n\n## Type 专用模板\n\n### concept 概念讲解\n\n```\n[标题] - 概念可视化\n\n核心概念：[要解释的抽象概念]\n视觉隐喻：[映射为什么具体事物，如\"技术债\"→堆积的砖块]\n\n布局：[居中/对称/层级]\n主体：[隐喻场景的核心画面]\n辅助元素：[标注、箭头、小图标]\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### process 流程步骤\n\n```\n[标题] - 流程可视化\n\n流向：[从左到右/从上到下]\n步骤数：[N]\n\n步骤：\n1. [步骤名] → [简要说明]\n2. [步骤名] → [简要说明]\n3. [步骤名] → [简要说明]\n\n连接方式：[箭头/线条/渐变过渡]\n高亮：[哪个步骤需要突出]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### whiteboard 板书白板\n\n```\n[标题] - 板书白板风\n\n背景：白色或浅米色白板\n笔触：手写体 + 马克笔风格\n\n知识要点：\n- [要点1]：[简要说明]\n- [要点2]：[简要说明]\n- [要点3]：[简要说明]\n\n辅助：[箭头、圈注、下划线、简笔画]\n配色：[马克笔配色，2-3 种主色]\n比例：[比例]\n```\n\n### data-viz 数据可视化\n\n```\n[标题] - 数据可视化\n\n图表类型：[柱状图/折线图/饼图/面积图]\n\n数据标签：\n- [具体数据点1：实际数字和术语]\n- [具体数据点2：实际数字和术语]\n- [具体数据点3：实际数字和术语]\n\n布局：[网格/放射/层级]\n区域：\n- 顶部：标题区\n- 中部主区域：[核心数据/图表]\n- 底部：总结/来源\n\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### comparison 对比说明\n\n```\n[标题] - 对比可视化\n\n布局：[左右分栏/上下分栏]\n\n左侧/A项：\n- 名称：[A]\n- 特点：[关键差异点]\n\n右侧/B项：\n- 名称：[B]\n- 特点：[关键差异点]\n\n对比维度：[列出 3-5 个对比维度]\n倾向：[中立/偏向某一方]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### architecture 架构图\n\n```\n[标题] - 架构/模型可视化\n\n结构：[层级/环形/矩阵/树状]\n\n层级/模块：\n- [顶层/核心]：[名称和说明]\n- [第二层]：[名称和说明]\n- [第三层]：[名称和说明]\n\n连接关系：[包含/依赖/双向/单向]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### mindmap 思维导图\n\n```\n[标题] - 思维导图\n\n中心主题：[核心主题词]\n\n一级分支：\n- [分支1]：[关键词]\n- [分支2]：[关键词]\n- [分支3]：[关键词]\n\n二级分支（可选）：\n- [分支1] → [子项1]、[子项2]\n- [分支2] → [子项1]、[子项2]\n\n布局：[放射状/右侧展开/上下对称]\n配色：每条主分支一个色系\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### timeline 时间线\n\n```\n[标题] - 时间线\n\n方向：[横向/纵向]\n节点数：[N]\n\n节点：\n1. [时间点]：[事件/里程碑]\n2. [时间点]：[事件/里程碑]\n3. [时间点]：[事件/里程碑]\n\n高亮：[哪个节点需要突出]\n连接线：[实线/虚线/渐变]\n配色：[时间推进用渐变色]\n风格：[选定的风格特征]\n比例：[比例，通常 16:9 或 4:3]\n```\n\n### checklist 清单图\n\n```\n[标题] - 清单图\n\n条目数：[N]\n\n清单项：\n- [✓/✗] [要点1]：[一句话说明]\n- [✓/✗] [要点2]：[一句话说明]\n- [✓/✗] [要点3]：[一句话说明]\n\n每项配：[图标/编号/勾选框]\n布局：[单列/双列/卡片网格]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### quote-card 金句卡片\n\n```\n[标题] - 金句卡片\n\n金句：「[完整中文金句]」\n出处：[作者/来源]（可选）\n\n布局：文字居中，大字号\n装饰：[引号装饰/底纹/边框]\n背景：[纯色/轻渐变/纹理]\n配色：[与金句情绪匹配]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n### scene 场景还原\n\n```\n[标题] - 场景还原\n\n场景：[描述具体使用/生活场景]\n主体：[人物动作或产品使用画面]\n环境：[场景环境细节]\n视角：[第一人称/俯视/平视]\n\n情绪：[代入感/真实感/日常感]\n色调：[暖色/冷色/自然色]\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### atmosphere 氛围烘托\n\n```\n[标题] - 场景氛围\n\n场景：[描述画面场景]\n情绪：[要传达的情感]\n主体：[画面中心元素]\n色调：[暖色/冷色/具体色彩倾向]\n光线：[光源方向和质感]\n\n风格：[选定的风格特征]\n比例：[比例]\n```\n\n### 封面\n\n封面 prompt 的「风格」关键词直接来自封面预设 `.md` 文件的「Prompt 要点」部分（见 [cover-styles/](../cover-styles/)），无须引用 Style 维度。\n\n**YAML frontmatter 必须包含 `aspect`**：从 `config.yaml` 的 `cover_aspect` 读取（如 `2.35:1`），写入 frontmatter，`image_create.py` 据此转换为实际尺寸。缺少 frontmatter 的 aspect 会导致 fallback 到 1:1。\n\n```yaml\n---\naspect: \"2.35:1\"   # ← 必须：取自 config cover_aspect\nquality: standard\n---\n```\n\n```\n[文章标题] - 封面图\n\n核心意象：[从标题提取的抽象视觉概念]\n情绪：[文章整体调性]\n色调：[主色和辅色]\n\n要求：\n- 不包含文字（标题会单独叠加）\n- 画面简洁有焦点\n- 适合作为公众号封面缩略图（小尺寸也清晰）\n\n风格：[从封面预设 .md 的 Prompt 要点加载]\n```\n\n---\n\n## 高级布局（适用于复杂信息可视化）\n\n在标记描述中指定布局类型：`![data-viz-漏斗：...]`、`![data-viz-冰山：...]`。\n\n**布局类型一览**：\n\n| 布局 | 适用场景 | Prompt 要点 |\n|------|---------|-------------|\n| `九宫格/bento` | 多主题概览 | 3×3 网格，每格一个主题，统一色调 |\n| `漏斗/funnel` | 转化、筛选 | 上宽下窄，每层标注数据和标签 |\n| `冰山/iceberg` | 表象 vs 本质 | 水面上下分区，上方简单下方复杂 |\n| `金字塔/pyramid` | 层级、优先级 | 从底到顶，每层标注 |\n| `环形/circular` | 循环流程 | 顺时针箭头连接的环形节点 |\n| `矩阵/matrix` | 多维度对比 | 2×2 或 N×N 象限，轴标签 |\n| `树状/tree` | 分类、层级 | 根节点→分支→叶节点 |\n| `仪表盘/dashboard` | 关键指标 | 数字卡片 + 趋势图 + 状态灯 |\n| `路线图/roadmap` | 规划、里程碑 | 蜿蜒路径 + 节点标注 |\n\n**九宫格模板**：\n\n```\n[标题] - 九宫格信息图\n\n布局：3×3 网格（或 2×3、2×4）\n\n格子内容：\n| [主题1] | [主题2] | [主题3] |\n| [主题4] | [主题5] | [主题6] |\n| [主题7] | [主题8] | [主题9] |\n\n每格包含：图标 + 标题 + 一句话说明\n统一风格：[圆角卡片/方格/无边框]\n配色：[语义配色说明]\n风格：[选定的风格特征]\n比例：[比例，通常 1:1 或 4:3]\n```\n\n**漏斗模板**：\n\n```\n[标题] - 漏斗图\n\n层数：[N]\n方向：从上到下\n\n各层（从宽到窄）：\n1. [层名]：[数据/标签]（100%）\n2. [层名]：[数据/标签]（60%）\n3. [层名]：[数据/标签]（30%）\n4. [层名]：[数据/标签]（10%）\n\n配色：渐变色，从顶到底逐渐加深\n风格：[选定的风格特征]\n比例：[比例，通常 3:4 或 9:16]\n```\n\n**冰山模板**：\n\n```\n[标题] - 冰山图\n\n水面以上（表象/可见）：\n- [可见现象1]\n- [可见现象2]\n\n水面以下（本质/隐藏）：\n- [隐藏原因1]\n- [隐藏原因2]\n- [深层逻辑]\n\n水面线：明确标注\n配色：水面上明亮，水面下深色\n风格：[选定的风格特征]\n比例：[比例，通常 3:4]\n```\n\n---\n\n## 关键原则\n\n- **补充而非重复**：文字讲道理，图给感觉；文字列数据，图给直觉\n- **抽象优于具象**：「AI 赋能」→ 光线连接感 ✅，不要画机器人 ❌\n- **情感对齐**：严肃段落配冷色调，轻松段落配暖色明快风\n- **一图一个焦点**：不要塞太多元素\n- **用文章中的真实数据**：信息图里要放实际数字和术语，不要 placeholder\n\nFile v1.0.19:references/image-styles/style-presets.md\n\n# 正文配图风格预设\n\n> 封面风格预设见 [cover-styles/](../cover-styles/)，本文件仅用于正文配图的自动推荐。\n\n按文章类型推荐 Type + Style 组合（Style 为 Agent 内部选择，非用户配置维度）。用户也可手动覆盖其中任一维度。\n\n## 按文章类型\n\n### 科技与技术\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `科技解析` | concept | 蓝图 | 技术原理、AI 概念、抽象概念具象化 |\n| `系统设计` | architecture | 蓝图 | 架构图、系统设计、技术栈 |\n| `工具评测` | comparison | 扁平矢量 | 工具对比、框架评测、方案PK |\n\n### 知识与教程\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `知识科普` | concept | 扁平矢量 | 概念解释、入门指南、隐喻科普 |\n| `操作指南` | process | 简约线条 | 分步教程、操作流程、工作流 |\n| `效率工具` | checklist | 简约线条 | 产品指南、SaaS 介绍、Tips 列表 |\n| `课堂笔记` | whiteboard | 手绘 | 知识框架、原理讲解、课程笔记 |\n| `知识全景` | mindmap | 扁平矢量 | 知识框架、主题概览、关系梳理 |\n\n### 数据与分析\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `数据报告` | data-viz | 商务 | 数据新闻、指标报告、统计分析 |\n| `趋势对比` | comparison | 扁平矢量 | 行业对比、趋势分析 |\n| `发展历程` | timeline | 简约线条 | 里程碑、产品路线图、年度总结 |\n\n### 故事与情感\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `故事叙述` | scene | 温暖 | 个人随笔、成长故事、用户场景 |\n| `生活方式` | atmosphere | 水彩 | 旅行、生活、文艺、散文 |\n| `金句传播` | quote-card | 温暖 | 核心观点、名言金句、截图转发 |\n\n### 观点与评论\n\n| 预设 | Type | Style | 适用 |\n|------|------|-------|------|\n| `观点文章` | atmosphere | 海报 | 社论、评论、犀利观点 |\n\n## 文章内容 → 预设推荐\n\n根据文章类型（由 topics 或 writing 确定）自动推荐：\n\n| 文章内容信号 | 推荐预设 | 备选 |\n|-------------|---------|------|\n| API、代码、技术原理 | `科技解析` | `系统设计` |\n| 概念、科普、入门指南 | `知识科普` | `课堂笔记` |\n| 教程、步骤、操作 | `操作指南` | `知识科普` |\n| 对比、评测、选择 | `工具评测` | `趋势对比` |\n| 数据、报告、指标 | `数据报告` | `趋势对比` |\n| 知识框架、关系梳理 | `知识全景` | `课堂笔记` |\n| 历程、里程碑、路线 | `发展历程` | `数据报告` |\n| Tips、要点、注意事项 | `效率工具` | `知识科普` |\n| 故事、经历、场景 | `故事叙述` | `生活方式` |\n| 金句、核心观点 | `金句传播` | `观点文章` |\n| 观点、评论、争议 | `观点文章` | — |\n| 工具、产品、SaaS | `效率工具` | `知识科普` |\n\nFile v1.0.19:references/image-styles/styles.md\n\n# 正文配图风格库\n\n> 本文件用于**正文配图**的 Type 分类与 Style 内部参考。**封面风格**由独立预设体系管理，见 [cover-styles/](../cover-styles/)。\n\n## Type（画面构成）\n\n12 种图片类型，描述\"画什么\"：\n\n| Type | 名称 | 说明 | 适用场景 |\n|------|------|------|---------|\n| `concept` | 概念讲解 | 视觉隐喻把抽象概念具象化 | 原理解释、概念科普、隐喻 |\n| `process` | 流程步骤 | 分步引导图，1-2-3 清晰明了 | 教程、操作指南、工作流 |\n| `whiteboard` | 板书白板 | 像老师在白板上手写画图 | 知识科普、原理讲解、课程笔记 |\n| `data-viz` | 数据可视化 | 数字变图表，让数据说话 | 趋势分析、统计、报告 |\n| `comparison` | 对比说明 | 左右/上下并排，一眼看清差异 | 方案对比、产品PK、改版前后 |\n| `architecture` | 架构图 | 分层结构图，展示组成关系 | 系统架构、产品架构、技术栈 |\n| `mindmap` | 思维导图 | 中心主题向外发散分支 | 知识框架、主题概览、关系梳理 |\n| `timeline` | 时间线 | 按时间轴排列事件或里程碑 | 发展历程、路线图、年度总结 |\n| `checklist` | 清单图 | 条目化要点配图标 | Tips、注意\n\nArchive v1.0.18: 15 files, 31623 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (19151b), _meta.json (145b)\n\nArchive v1.0.17: 15 files, 31569 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (19030b), _meta.json (145b)\n\nArchive v1.0.16: 15 files, 31036 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (17447b), _meta.json (145b)\n\nArchive v1.0.15: 15 files, 31078 bytes\n\nFiles: references/cover-styles/README.md (1523b), references/cover-styles/大字报.example.md (662b), references/cover-styles/插画.example.md (615b), references/cover-styles/科技风.example.md (642b), references/cover-styles/简约.example.md (656b), references/image-styles/auto-selection.md (2810b), references/image-styles/prompt-construction.md (9685b), references/image-styles/style-presets.md (2957b), references/image-styles/styles.md (3401b), references/specs.md (992b), scripts/image_create.py (26255b), scripts/user_image_prepare.py (3287b), skill.json (500b), SKILL.md (17505b), _meta.json (145b)","readmeExcerpt":"Skill: 公众号封面 & AI 配图 Owner: aiworkskills Summary: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。 Tags: aigc:1.0.17, chinese:1.0.17, claude-code:1.0.17, cover:1.0.17, design:1.0.17, illustration:1.0.17, image:1.0.17, latest:1.0.24, wechat:1.0.17 Version h","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章"},{"language":"bash","snippet":"{python} {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/"},{"language":"markdown","snippet":"# 模板名\n\n## 用于\n[什么内容用它；主体自不自明]\n\n## 主体\n[画面主角是什么，占画面多大比例]\n\n## 影调\n[色、光、媒介、质感]\n\n## 文案\n[加不加字。加：字数、字重、颜色、字高占比、位置。\n 不加：写明「默认不加字」及原因。**此项不可缺省**]\n\n## 版式\n[主体和文字各在哪]"},{"language":"text","snippet":"配图进度：\n- [ ] 第1步：环境检查 + 本篇约束与文章\n- [ ] 第2步：解析配图标记\n- [ ] 第3步：确定风格\n- [ ] 第4步：生成配图方案\n- [ ] 第5步：展示方案并等待确认 ⛔\n- [ ] 第6步：生成图片（**脚本失败时**见同节「调用失败」分支，勿静默吞掉报错）\n- [ ] 第7步：插入文章"},{"language":"bash","snippet":"python {baseDir}/scripts/image_create.py batch drafts/YYYYMMDD-slug/imgs/prompts/ -o drafts/YYYYMMDD-slug/imgs/"},{"language":"markdown","snippet":"# 风格名\n\n## 描述\n[1-2 句视觉风格描述]\n\n## 适用场景\n[适合什么类型的文章/账号]\n\n## Prompt 要点\n- [视觉关键词，直接用于生图 prompt]\n- [构图/色彩/氛围等具体指导]\n- 画面内文字必须为中文，在 prompt 中直接写出要显示的中文文案"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: aws-wechat-article-images\ndescription: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。\nhomepage: https://aiworkskills.cn\nurl: https://github.com/aiworkskills/wechat-article-skills\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - IMAGE_MODEL_API_KEY\n      bins:\n        - python3\n    primaryEnv: aws.env\n---\n\n# 配图\n\n**公众号封面 & 配图 AI 生成** —— 按文章内容自动匹配画风，一稿多方案，风格体系可复用。\n\n> **套件说明** · 本 skill 属 `aws-wechat-article-*` 一条龙套件（共 9 个 slug，入口 `aws-wechat-article-main`）。跨 skill 的相对引用依赖同一 `skills/` 目录，建议一并 `clawhub install` 全套。源码：<https://github.com/aiworkskills/wechat-article-skills>\n\n## 能力披露（Capabilities）\n\n本 skill 调 `image_create.py` **调外部图像 API** 生成封面与正文配图。**会把图片提示词（可能含文章主题片段）发给用户配置的图像生成端点。** 具体行为：\n\n- **凭证读取**：`aws.env` 的 `IMAGE_MODEL_API_KEY`\n- **凭证外发**：该 key 以 `Authorization: Bearer` 头发送到 `image_model.base_url` 指定端点（常见为 DALL-E、gpt-image 兼容 `/v1/images/generations`，或多模态模型 `/v1/chat/completions`，具体由用户配置）\n- **内容外发**：每张图片的 prompt（文本）作为 JSON POST body 发送；prompt 内容来自本篇 `imgs/prompts/*.md`（可能包含文章标题、章节摘要）\n- **下图 SSRF 防御**：若 API 响应返回图片 URL（而非 base64），脚本**仅允许下载 http/https 公网地址**；内网 / 环回 / 链路本地 / 保留地址全部拒绝（防止恶意或被劫持的模型端点把脚本当作 SSRF 跳板）\n- **文件读**：仓库内 `.aws-article/config.yaml`、本篇 `article.yaml`、`article.md`、`imgs/prompts/*.md`、`references/cover-method.md`、`references/image-method.md`、`references/cover-examples/*.md`、`.aws-article/products/{产品名}/images/*`（业务配图库，本篇涉及用户业务时优先复用）\n- **文件写**：本篇 `imgs/*.{png,webp}`、可选 `img_analysis.md`\n- **shell**：仅 `{python} {baseDir}/scripts/image_create.py`、`user_image_prepare.py`（`{python}` = 本机 Python 3 解释器，见 [main SKILL 第 0 步](../aws-wechat-article-main/SKILL.md)：Windows 用 `py -3 -X utf8`，macOS / Linux 用 `python3`）\n\n**建议**：用专用 key（最低权限、独立计费），避免使用 account 级 master key。\n\n## 配套 skill（informational）\n\n本 skill 是 `aws-wechat-article-*` 一条龙公众号套件的**配图环节**（入口 `aws-wechat-article-main`）。工作流中的若干步骤会读取同级 `../aws-wechat-article-main/references/*.md` 等共享文档（首次引导、env/config 示例、articlescreening schema 等）。\n\n- **套件完整装齐到同一 `skills/` 根目录**时，跨 skill 引用都能读到。\n- **单独安装本 skill** 时，跨 skill 引用的步骤会在读取阶段遇到 `file not found`；本 skill 内的生图脚本仍可用。\n\n完整 9 slug 清单见 [源码仓库](https://github.com/aiworkskills/wechat-article-skills)。\n\n## 路由\n\n完整长文从选题到发布 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)；图片消息/九宫格等多图推送 → [aws-wechat-sticker](../aws-wechat-sticker/SKILL.md)。\n\n读取文章中的配图标记，按内容形态生成图片：封面 12 个形态、正文配图 8 个形态，均按内容判断而非账号审美。专注于**长文配图**，贴图请用 sticker。\n\n## 脚本目录\n\n**Agent 执行**：确定本 SKILL.md 所在目录为 `{baseDir}`。\n\n| 脚本 | 用途 |\n|------|------|\n| `scripts/image_create.py` | 专用生图 API：读 **`.aws-article/config.yaml`** 的 **`image_model`** + 仓库根 **`aws.env`** 的 **`IMAGE_MODEL_API_KEY`**|\n| `scripts/user_image_prepare.py` | 用户供图模式：确保本篇 `imgs/` 存在并生成 `img_analysis.md` 模板（封面仅 1 张） |\n\n## 配置检查 ⛔\n\n任何操作执行前，**必须**按 **[首次引导](../aws-wechat-article-main/references/first-time-setup.md)** 执行其中的 **「检测顺序」**。检测通过后才能进行以下操作（或用户明"},{"path":"references/cover-examples/README.md","content":"# 封面范例\n\n这里是 20 段按 [cover-method.md](../cover-method.md) 第六步写出来的封面散文，每段对应一个已验证能出好图的视觉隐喻。\n\n**它们是范例，不是模板。** 用途是让你看清「一段合格的封面散文长什么样」：场景 → 主体细节 → 光 → 氛围 → 像什么不像什么。写自己的封面时照这个密度和顺序写，不要照抄场景。\n\n文件名即隐喻名。方法文档第三步的范例表列了其中 8 个，附带「为什么成立」。"},{"path":"references/cover-styles/README.md","content":"# 封面模板\n\n本目录下的 `<名>.example.md` 是**内置封面模板**，预设名取 `.example.md` 之前的部分。用户自定义放 `.aws-article/presets/cover-styles/<名>.md`，同名覆盖内置。\n\n## 模板是「内容形态」，不是「美学风格」\n\n按 83 张真实公众号封面（11 个品类）统计得出：封面形态由**内容类型**决定，不由账号审美决定。同品类的号封面高度雷同，跨品类几乎不重叠。所以模板按形态划分，不按风格划分。\n\n蒸汽波、孟菲斯、复古潮流、新中式、图文混排、品牌模板在那 83 张里出现 **0 次**，已下架。\n\n## 核心判断：主体在缩略图里自不自明\n\n信息流封面只有 **345×147px**，而文章标题本来就显示在封面旁边。所以封面**不需要重复标题**——除非它自己说不清在讲什么。\n\n| | 模板 | 文案 |\n|---|---|---|\n| **自明** | 菜品特写 · 人物出镜 · 场景实拍 · 剧照氛围 | 默认不加字，加了挡主体 |\n| **不自明** | 纯色大字 · 图上压字 · 信息表 · 数字冲击 · 对比式 · 截图标注 | 字就是全部 |\n| **中间** | 扁平插画 · 产品实拍 | 建议加短钩子 |\n\n后三个来自 100 个大号的封面分析：**数字冲击**（放大数字做视觉焦点）与**对比式**\n（前后/好坏并置）是该分析里排前两位的方法；**截图标注**是工具教程号的标配。\n\n实测：78 张里仅约 28% 带醒目文字，且集中在职场、理财、AI 这类抽象内容。美食、育儿、情感几乎不加字。\n\n## Schema\n\n五个字段，**一个都不能缺**：\n\n```markdown\n# 模板名\n\n## 用于\n[什么内容用它；主体自不自明]\n\n## 主体\n[画面主角是什么，占画面多大比例]\n\n## 影调\n[色、光、媒介、质感]\n\n## 文案\n[加不加字。加：字数、字重、颜色、字高占比、位置。\n 不加：写明「默认不加字」及原因。**此项不可缺省**]\n\n## 版式\n[主体和文字各在哪]\n```\n\n缺「文案」和「主体占比」，产出的就是背景图而不是成品封面——线上旧版 12 个模板正是缺这两项。\n\n## 用法\n\n模板是**默认候选池**，`custom_cover_image_style` 默认全选。Agent 按 [cover-method.md](../cover-method.md) 读文章判断内容类型，从池中挑最合适的一个，不需要用户每篇指定。用户取消勾选即排除该形态。"},{"path":"references/image-styles/README.md","content":"# 正文配图模板\n\n本目录下的 `<名>.example.md` 是**内置正文配图模板**。用户自定义放 `.aws-article/presets/image-styles/<名>.md`，同名覆盖内置。\n\n## 正文配图和封面的标准不同\n\n封面抢点击，正文配图帮阅读。两条硬区别：\n\n| | 封面 | 正文配图 |\n|---|---|---|\n| 尺寸 | 2.35:1，信息流里 345×147px | 16:9，宽 1080px，占满手机屏宽 |\n| 信息密度 | 必须极简，元素 ≤3 | **可以高**，允许文字与细节 |\n| 目的 | 三秒抢注意力 | 降低阅读成本 |\n\n## 核心判断：信息位还是节奏位\n\n> **删掉这张图，读者会「看不懂」还是「读不下去」？**\n\n| | 模板 | 文案 |\n|---|---|---|\n| **信息位**（看不懂） | 流程步骤 · 结构分层 · 数据图表 · 对比两栏 · 清单要点 | **必须有，且必须是文章里的真实内容** |\n| **节奏位**（读不下去） | 概念隐喻 · 场景还原 · 金句卡片 | 前两者**不加字**，金句卡片整张就是那句话 |\n\n**都不影响就删掉。** 无信息量的氛围图会稀释信息密度，让读者划得更快、退出更早。\n\n信息位的内容**必须由 Agent 从文章里取**，不能让模型自由发挥——实测让模型自己填清单内容，它会生成「保持高效工作状态」这类无关鸡汤，还自带 emoji。\n\n## Schema\n\n与封面模板一致的五个字段：**用于 / 主体 / 影调 / 文案 / 版式**，「文案」不可缺省。信息位模板另有 **媒介** 字段。\n\n「手绘」不在这张表里，因为它不是形态而是**媒介**——任何信息位形态都能用手绘画出来，\n它不该和流程步骤并列成为二选一。媒介是每篇一次的决策，见\n[image-method.md](../image-method.md) 第四步。\n\n## 两条实测经验\n\n**AI 味来自媒介，不是信息密度。** 同样的四个步骤、同样的信息量，扁平矢量版一眼是 AI\n生成，白板手写版看着像刚开完会。\n\n但原因不是「手绘不完美」——把同样内容画成终端窗口，等宽字、纯色底、像素级整齐，\n一点不完美都没有，照样零 AI 味。真正的原因是：**白板、牛皮纸、黑板、终端、批注过的\n打印稿，都是读者在生活里真见过的载体**，而「扁平矢量信息图」不是任何人会遇到的实物。\n\n**模板不钉死媒介**：媒介是每篇一次的决策，按账号调性圈定集合后**排除最近 3 篇用过的**。\n只做「篇内统一」不做「篇间轮换」，整个号会只剩一种长相——这是踩过的坑。见\n[image-method.md](../image-method.md) 第四步。\n\n清单类版式在模型的训练分布里有很强的默认形态（卡片阴影 + emoji + 说明小字）。**负向指令压不住**——写「不要 emoji」「不要卡片」无效，必须正面描述一个不含这些元素的具体画面：「纯米白背景，背景与画布融为一体」「画面上除这几行中文外没有任何图形、符号或图标」。\n\n## 用法\n\n模板是**默认候选池**，`custom_article_image_style` 默认全选。Agent 按每个图位的作用挑形态：这一处是解释复杂信息（信息位），还是给眼睛休息（节奏位）。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7f5hvxj1x2ctd5vqnec5x1zs82ce6h\",\n  \"slug\": \"aws-wechat-article-images\",\n  \"version\": \"1.0.24\",\n  \"publishedAt\": 1788679480185\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。 Skill: 公众号封面 & AI 配图 Owner: aiworkskills Summary: 公众号封面｜公众号配图｜公众号插图｜AI 生图 — 公众号 AI 封面与配图生成，按文章标题与内容自动匹配画风，一稿多方案，多风格预设可复用。面向公众号编辑、自媒体、品牌设计。触发词：「封面」「配图」「插图」「生成图片」「给文章加图」「做个封面」「文章插图」「配个图」。不写正文只发一组图请走 aws-wechat-sticker；需要多环节串联（写+审+排+配图+发）请走 aws-wechat-article-main。 Tags: aigc:1.0.17, chinese:1.0.17, claude-code:1.0.17, cover:1.0.17, design:1.0.17, illustration:1.0.17, image:1.0.17, latest:1.0.24, wechat:1.0.17 Version h","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":723,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:22:56.632Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:47:04.525Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}