{"id":"c4aa5efb-9911-4658-a2a3-4ceabd8653ae","shortId":"pMud2J","kind":"skill","title":"aws-wechat-article-assets","tagline":"公众号素材与预设包：图片入库到 `.aws-article/assets/stock/images`（中文名 + 同名 .md）；或导入 `.aws` 预设包（ZIP）合并到 `.aws-article/presets/`；`config.yaml` 仅本地不存在时从包内复制，已存在则 stdout 输出与包内差异 JSON、不覆盖。触发词含「素材库入库」「stock images」「上传图到素材库」「.aws」「预设包」「导入预设」「主题包」。","description":"# 公众号素材与预设（Assets）\n\n| 能力 | 说明 |\n|------|------|\n| **图片入库** | 用户图 → `assets/stock/images/`，供其它 skill 引用 |\n| **预设包 `.aws`** | ZIP 包 → 合并 `presets/` 子目录；`config.yaml` 见下 |\n\n---\n\n## 一、图片入库（Stock Images）\n\n### 目录\n\n| 路径 | 作用 |\n|------|------|\n| `.aws-article/assets/stock/images/` | 入库图片 + 同名 `.md`（固定：**图片路径** / **图片描述**） |\n\n### 工作流\n\n1. 用户上传或给出本地图片路径。\n2. **Agent 读图**（多模态能力在本对话侧）：确定**中文主文件名**（如 `淘米`），并写出**客观画面描述**（供 `.md` 与后续配图检索使用）。\n3. 在**仓库根**执行（**推荐**带上 `--content`，与第 2 步描述一致）：\n\n```bash\npython {baseDir}/scripts/stock_image_ingest.py <源图片路径> --stem \"中文名\" --content \"客观中文描述，一两句即可\"\n```\n\n若暂未写描述，也可只传 `--stem`（见下「图片描述与占位」）。\n\n4. 生成 `淘米.png` + `淘米.md`（格式见下）。\n\n### 图片描述与占位 ⛔\n\n- **`stock_image_ingest.py` 不会读图**：无视觉/多模态，只负责**复制图片**并**按模板写 `.md`**。\n- **未传 `--content`（或为空）** 时，「**图片描述**」会写入固定占位句：**「请根据图片补全（客观描述画面内容即可）。」**——这是预期行为，不是脚本故障。\n- **要直接得到可用描述**：入库命令必须带 **`--content \"……\"`**（由 Agent 读图后填写），或入库后**手动/由 Agent 编辑**同名 `.md` 替换占位段。\n\n### `.md` 固定格式\n\n```markdown\n**图片路径**：`.aws-article/assets/stock/images/示例.png`\n\n**图片描述**：……\n```\n\n### 脚本 `stock_image_ingest.py`\n\n- `source`、`--stem`（必填）、`--content`（可选，**强烈建议由 Agent 读图后传入**）、`--repo`（可选）\n\n---\n\n## 二、预设包导入（`.aws`）\n\n扩展名 **`.aws`**，实质为 **ZIP**。解压后根目录应包含与仓库一致的预设文件夹（可多出其它文件，脚本只处理下列目录）：\n\n`closing-blocks`、`cover-styles`、`formatting`、`image-styles`、`sticker-styles`、`structures`、`title-styles`\n\n另可有根级 **`config.yaml`**、**`writing-spec.md`**。\n\n### 合并规则\n\n- 每个上述目录：**递归合并**到 `.aws-article/presets/<同名>/`（推荐 **`presets/<上述名>/`**；若包根下**同时**存在 **`presets/<名>/`** 与 **`<名>/`**，脚本**优先合并前者**（避免误用包根多一层同名子目录）。若目录内仅有一层多余 **`<名>/<名>/`**，脚本会自动以内层为合并根）；**同名文件覆盖**，新路径则**新增**。\n- **`config.yaml`**：若包内存在且本地**尚无** `.aws-article/config.yaml`，则从包内**复制**；若本地**已有**，则**不覆盖**，按包内字段与本地**同名键**递归比对，将差异以 **JSON 数组** 打印到 **stdout**（`{\"key\":\"点分路径\",\"old\":…,\"new\":…}`），供智能体询问用户后再手改配置；说明日志在 stderr。\n- **`writing-spec.md`**：若包内存在，**始终覆盖**写入 **`.aws-article/writing-spec.md`**（与 `config.yaml` 不同，不做差异比对）。\n- 解压目录：**`.aws-article/tmp/`**（固定路径；运行前若无 `.aws-article` 会创建）。**每次执行前**若 `tmp` 已存在则**整目录删除后重建**，再解压本次 `.aws`；合并到 `presets/` 后**保留**解压结果便于核对，下次导入会再次清空 `tmp` 并覆盖为新包内容。\n\n### 密钥与配置\n\n- **预设包内的 `config.yaml` 不应、也不会包含** `aws.env` 中的密钥；仓库密钥始终在仓库根 **`aws.env`**。\n- 本地已有 `config.yaml` 时导入不会自动改配置；请根据 stdout 差异与用户确认后再更新字段（或对照 `.aws-article/tmp/` 解压结果）。\n\n### 工作流\n\n1. 用户上传或提供本地 **`*.aws`** 路径。\n2. 可先 **`--dry-run`** 查看将写入的路径。\n3. 在**仓库根**执行：\n\n```bash\npython {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws\npython {baseDir}/scripts/import_presets_aws.py path/to/bundle.aws --dry-run\n```\n\n### 脚本 `import_presets_aws.py`\n\n- 参数：`bundle`（`.aws` 文件路径）、`--dry-run`、`--repo`\n\n---\n\n## 脚本一览\n\n| 脚本 | 路径 |\n|------|------|\n| `stock_image_ingest.py` | `{baseDir}/scripts/stock_image_ingest.py` |\n| `import_presets_aws.py` | `{baseDir}/scripts/import_presets_aws.py` |\n\n## 过程文件\n\n| 场景 | 产出 |\n|------|------|\n| 图片入库 | `assets/stock/images/*.{png,...}` + 同名 `*.md` |\n| `.aws` 导入 | 更新 `.aws-article/presets/**`；`config.yaml` 首次复制或 stdout 差异 JSON；解压缓存在 `.aws-article/tmp/` |","tags":["aws","wechat","article","assets","skills","aiworkskills","agent-skills","ai-skills","ai-writing","chinese-nlp","codex","content-automation"],"capabilities":["skill","source-aiworkskills","skill-aws-wechat-article-assets","topic-agent-skills","topic-ai-skills","topic-ai-writing","topic-chinese-nlp","topic-codex","topic-content-automation","topic-content-creation","topic-copywriting","topic-llm","topic-markdown-to-html","topic-openclaw","topic-wechat"],"categories":["wechat-article-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/aiworkskills/wechat-article-skills/aws-wechat-article-assets","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add aiworkskills/wechat-article-skills","source_repo":"https://github.com/aiworkskills/wechat-article-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 14 github stars · SKILL.md body (2,961 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T01:02:22.281Z","embedding":null,"createdAt":"2026-04-21T19:04:11.478Z","updatedAt":"2026-04-22T01:02:22.281Z","lastSeenAt":"2026-04-22T01:02:22.281Z","tsv":"'/assets/stock/images':11,69,165 '/config.yaml':246 '/presets':23,218,387 '/scripts/import_presets_aws.py':345,349,372 '/scripts/stock_image_ingest.py':105,369 '/tmp':284,325,397 '/writing-spec.md':275 '1':77,328 '2':79,100,332 '3':92,338 '4':117 'agent':80,148,153,177 'articl':4,10,22,68,164,217,245,274,283,289,324,386,396 'asset':5,41 'assets/stock/images':46,377 'aw':2,9,16,21,36,51,67,163,183,185,216,244,273,282,288,297,323,330,358,381,385,395 'aws-articl':8,20,66,162,215,243,272,281,287,322,384,394 'aws-wechat-article-asset':1 'aws.env':311,314 'basedir':104,344,348,368,371 'bash':102,342 'block':193 'bundl':357 'close':192 'closing-block':191 'config.yaml':24,57,209,240,277,308,316,388 'content':98,109,135,146,174 'cover':195 'cover-styl':194 'dri':335,352,361 'dry-run':334,351,360 'format':197 'imag':34,62,199 'image-styl':198 'import_presets_aws.py':355,370 'json':29,257,392 'key':261 'markdown':160 'md':14,72,90,122,133,156,158,380 'new':264 'old':263 'path/to/bundle.aws':346,350 'png':120,167,378 'preset':55,221,226,299 'python':103,343,347 'repo':179,363 'run':336,353,362 'skill':48 'skill-aws-wechat-article-assets' 'sourc':171 'source-aiworkskills' 'stderr':267 'stdout':27,260,319,390 'stem':107,114,172 'sticker':202 'sticker-styl':201 'stock':33,61 'stock_image_ingest.py':125,170,367 'structur':204 'style':196,200,203,207 'titl':206 'title-styl':205 'tmp':293,304 'topic-agent-skills' 'topic-ai-skills' 'topic-ai-writing' 'topic-chinese-nlp' 'topic-codex' 'topic-content-automation' 'topic-content-creation' 'topic-copywriting' 'topic-llm' 'topic-markdown-to-html' 'topic-openclaw' 'topic-wechat' 'wechat':3 'writing-spec.md':210,268 'zip':18,52,187 '一':59 '一两句即可':111 '上传图到素材库':35 '上述名':222 '下次导入会再次清空':303 '不会读图':126 '不做差异比对':279 '不同':278 '不应':309 '不是脚本故障':143 '不覆盖':30,252 '与':228,276 '与后续配图检索使用':91 '与第':99 '中文主文件名':84 '中文名':12,108 '中的密钥':312 '主题包':39 '也不会包含':310 '也可只传':113 '二':181 '产出':375 '仅本地不存在时从包内复制':25 '仓库密钥始终在仓库根':313 '仓库根':94,340 '优先合并前者':231 '会写入固定占位句':139 '会创建':290 '作用':65 '供':89 '供其它':47 '供智能体询问用户后再手改配置':265 '保留':301 '入库命令必须带':145 '入库图片':70 '公众号素材与预设':40 '公众号素材与预设包':6 '再解压本次':296 '写入':271 '则':251 '则从包内':247 '到':214 '包':53 '参数':356 '另可有根级':208 '只负责':129 '可先':333 '可多出其它文件':189 '可选':175,180 '合并':54 '合并到':19,298 '合并规则':211 '同名':13,71,155,219,379 '同名文件覆盖':237 '同名键':254 '同时':224 '名':227,229,234,235 '后':300 '固定':73 '固定格式':159 '固定路径':285 '图片入库':44,60,376 '图片入库到':7 '图片描述':75,138,168 '图片描述与占位':116,124 '图片路径':74,161 '在':93,339 '场景':374 '复制':248 '复制图片':130 '多模态':128 '多模态能力在本对话侧':82 '如':85 '始终覆盖':270 '子目录':56 '存在':225 '实质为':186 '客观中文描述':110 '客观描述画面内容即可':141 '客观画面描述':88 '密钥与配置':306 '导入':382 '导入预设':38 '将差异以':256 '尚无':242 '工作流':76,327 '差异':391 '差异与用户确认后再更新字段':320 '已存在则':26,294 '已有':250 '带上':97 '并':131 '并写出':87 '并覆盖为新包内容':305 '引用':49 '强烈建议由':176 '必填':173 '或为空':136 '或入库后':150 '或对照':321 '或导入':15 '手动':151 '打印到':259 '执行':95,341 '扩展名':184 '按包内字段与本地':253 '按模板写':132 '推荐':96,220 '数组':258 '整目录删除后重建':295 '文件路径':359 '新增':239 '新路径则':238 '无视觉':127 '时':137 '时导入不会自动改配置':317 '更新':383 '替换占位段':157 '未传':134 '本地已有':315 '查看将写入的路径':337 '格式见下':123 '步描述一致':101 '每个上述目录':212 '每次执行前':291 '淘米':86,119,121 '源图片路径':106 '点分路径':262 '生成':118 '用户上传或提供本地':329 '用户上传或给出本地图片路径':78 '用户图':45 '由':147,152 '目录':63 '确定':83 '示例':166 '素材库入库':32 '编辑':154 '能力':42 '脚本':169,230,354,365 '脚本一览':364 '脚本会自动以内层为合并根':236 '脚本只处理下列目录':190 '若':292 '若包内存在':269 '若包内存在且本地':241 '若包根下':223 '若暂未写描述':112 '若本地':249 '若目录内仅有一层多余':233 '要直接得到可用描述':144 '见下':58,115 '解压后根目录应包含与仓库一致的预设文件夹':188 '解压目录':280 '解压结果':326 '解压结果便于核对':302 '解压缓存在':393 '触发词含':31 '说明':43 '说明日志在':266 '请根据':318 '请根据图片补全':140 '读图':81 '读图后传入':178 '读图后填写':149 '路径':64,331,366 '输出与包内差异':28 '过程文件':373 '运行前若无':286 '这是预期行为':142 '递归合并':213 '递归比对':255 '避免误用包根多一层同名子目录':232 '预设包':17,37,50 '预设包内的':307 '预设包导入':182 '首次复制或':389","prices":[{"id":"b98643ad-4973-4423-a04e-75676bca4f85","listingId":"c4aa5efb-9911-4658-a2a3-4ceabd8653ae","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"aiworkskills","category":"wechat-article-skills","install_from":"skills.sh"},"createdAt":"2026-04-21T19:04:11.478Z"}],"sources":[{"listingId":"c4aa5efb-9911-4658-a2a3-4ceabd8653ae","source":"github","sourceId":"aiworkskills/wechat-article-skills/aws-wechat-article-assets","sourceUrl":"https://github.com/aiworkskills/wechat-article-skills/tree/main/skills/aws-wechat-article-assets","isPrimary":false,"firstSeenAt":"2026-04-21T19:04:11.478Z","lastSeenAt":"2026-04-22T01:02:22.281Z"}],"details":{"listingId":"c4aa5efb-9911-4658-a2a3-4ceabd8653ae","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"aiworkskills","slug":"aws-wechat-article-assets","github":{"repo":"aiworkskills/wechat-article-skills","stars":14,"topics":["agent-skills","ai-skills","ai-writing","chinese-nlp","codex","content-automation","content-creation","copywriting","llm","markdown-to-html","openclaw","wechat","wechat-api","wechat-official-account"],"license":"apache-2.0","html_url":"https://github.com/aiworkskills/wechat-article-skills","pushed_at":"2026-04-21T06:27:58Z","description":"微信公众号 AI 运营助手 | 选题、写稿、审稿、排版、配图、发布全流程 Skill，支持 OpenClaw / Claude Code / Cursor / Codex","skill_md_sha":"026bda40fbd65f87ad781a2b74ecb83f47cae97c","skill_md_path":"skills/aws-wechat-article-assets/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/aiworkskills/wechat-article-skills/tree/main/skills/aws-wechat-article-assets"},"layout":"multi","source":"github","category":"wechat-article-skills","frontmatter":{"name":"aws-wechat-article-assets","description":"公众号素材与预设包：图片入库到 `.aws-article/assets/stock/images`（中文名 + 同名 .md）；或导入 `.aws` 预设包（ZIP）合并到 `.aws-article/presets/`；`config.yaml` 仅本地不存在时从包内复制，已存在则 stdout 输出与包内差异 JSON、不覆盖。触发词含「素材库入库」「stock images」「上传图到素材库」「.aws」「预设包」「导入预设」「主题包」。"},"skills_sh_url":"https://skills.sh/aiworkskills/wechat-article-skills/aws-wechat-article-assets"},"updatedAt":"2026-04-22T01:02:22.281Z"}}