{"id":"a7dc1b43-372a-4110-a22f-87f8c5de8c86","entityType":"agent","slug":"clawhub-mebusw-ins-style-img-bulk-gen","name":"Ins Style Image Bulk Generate","canonicalUrl":"https://www.xpersona.co/agent/clawhub-mebusw-ins-style-img-bulk-gen","canonicalPath":"/agent/clawhub-mebusw-ins-style-img-bulk-gen","generatedAt":"2026-10-11T14:17:01.115Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T10:49:45.461Z","emptyReason":null},"description":"Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly. Skill: Ins Style Image Bulk Generate Owner: mebusw Summary: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cove","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17fqnnawywqwp37410y5w9r1h83pwab:ins-style-img-bulk-gen","sourceUrl":"https://clawhub.ai/mebusw/ins-style-img-bulk-gen","homepage":"https://clawhub.ai/mebusw/skills/ins-style-img-bulk-gen","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/mebusw/ins-style-img-bulk-gen","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/mebusw/skills/ins-style-img-bulk-gen","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then di"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:49:45.461Z","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-11T10:49:45.461Z","emptyReason":null},"stars":null,"forks":null,"downloads":1083,"packageName":null,"latestVersion":"0.1.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:49:45.388Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T10:49:45.461Z","lastCrawledAt":"2026-10-11T10:49:45.388Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T10:49:45.388Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.1","createdAt":"2026-09-21T02:59:51.309Z","changelog":"ins-style-img-bulk-gen v0.1.1 - Major update with new scripts for overlay and collage creation: added `add_ins_overlay.py` and `compose_collage.py` for robust post-processing. - Hard requirements and strict layout/typography rules added directly to SKILL.md, outlining cover/INS body structure, sizing, and model priorities. - Enforced cover creation as a 2x2 collage grid, with consistent styles and new shell/text processing specifications for overlays. - Documented CLI usage and workflow in detail; expanded support for custom cover/ins workflows with sample commands and parameter explanations. - README and help documentation updated; new demo/reference images and initial test script added for better reproducibility.","fileCount":13,"zipByteSize":181190},{"version":"0.1.0","createdAt":"2026-08-25T08:12:00.876Z","changelog":"Initial release of ins-style-img-bulk-gen. - Generate batches of INS-style (Instagram/Xiaohongshu/lifestyle flat-lay) images using randomized prompts from an 80+ element library. - Automatically composes 5 prompts (unless specified) with 12 unique elements each; ensures no element duplicates within a prompt. - Sends prompts in parallel to available image generation skills and saves results to a timestamped local folder. - Handles failed image generations gracefully by skipping failed prompts without aborting the batch. - Designed for bulk requests including lifestyle, scene-based marketing, and cover art, even if \"Instagram\" isn't mentioned.","fileCount":8,"zipByteSize":7465}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17fqnnawywqwp37410y5w9r1h83pwab:ins-style-img-bulk-gen","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","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-mebusw-ins-style-img-bulk-gen/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/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-11T14:17:01.114Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mebusw-ins-style-img-bulk-gen/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-11T10:49:45.461Z","emptyReason":null},"readme":"Skill: Ins Style Image Bulk Generate\n\nOwner: mebusw\n\nSummary: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly.\n\nTags: latest:0.1.1\n\nVersion history:\n\nv0.1.1 | 2026-09-21T02:59:51.309Z | auto\n\nins-style-img-bulk-gen v0.1.1\n\n- Major update with new scripts for overlay and collage creation: added `add_ins_overlay.py` and `compose_collage.py` for robust post-processing.\n- Hard requirements and strict layout/typography rules added directly to SKILL.md, outlining cover/INS body structure, sizing, and model priorities.\n- Enforced cover creation as a 2x2 collage grid, with consistent styles and new shell/text processing specifications for overlays.\n- Documented CLI usage and workflow in detail; expanded support for custom cover/ins workflows with sample commands and parameter explanations.\n- README and help documentation updated; new demo/reference images and initial test script added for better reproducibility.\n\nv0.1.0 | 2026-08-25T08:12:00.876Z | auto\n\nInitial release of ins-style-img-bulk-gen.\n\n- Generate batches of INS-style (Instagram/Xiaohongshu/lifestyle flat-lay) images using randomized prompts from an 80+ element library.\n- Automatically composes 5 prompts (unless specified) with 12 unique elements each; ensures no element duplicates within a prompt.\n- Sends prompts in parallel to available image generation skills and saves results to a timestamped local folder.\n- Handles failed image generations gracefully by skipping failed prompts without aborting the batch.\n- Designed for bulk requests including lifestyle, scene-based marketing, and cover art, even if \"Instagram\" isn't mentioned.\n\nArchive index:\n\nArchive v0.1.1: 13 files, 181190 bytes\n\nFiles: .gitignore (534b), HANDOFF-PLAYBOOK.md (7657b), README.md (939b), README.zh-cn.md (1107b), references/cover.jpg (2640618b), references/demo.jpg (7508398b), references/ins-style-elements.md (8694b), scripts/add_ins_overlay.py (40920b), scripts/compose_collage.py (6177b), skill-card.md (2463b), SKILL.md (15610b), tests/test_add_ins_overlay.py (32843b), _meta.json (141b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: ins-style-img-bulk-gen\ndescription: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly.\nallowed-tools: Read, Bash\nauthor: JackyShen\nargument-hint: \"[-s SCENE] [-c COUNT] [-t TEXT]\"\n---\n\n## 硬性要求 / Hard Requirements\n\n执行本 skill 时必须满足以下规范（任何一条不达标 = 产出不合格）：\n\n| # | 规范 | 约束值 / 操作 | 出处 |\n|---|---|---|---|\n| 1 | **封面字号（cover 模式）** | base = `0.07 × 图片高`（≈ 70px @ 1024h，比最初 80px 还小一点），下限 `0.05`，**行距 `0.18 × 字号`**（紧凑）；**2 行结构**（最长行 ≤ 8 字，按重要性递减排列，具体内容由领域决定） — 让标题横向占图宽 ≥ 70% | 2026-09-20 迭代 |\n| 2 | **Shell `\\n` 必须是真换行** | 用 `$'…\\n…'`（ANSI-C）或 `printf '%b'`；**禁止**普通双引号（会把字面 `\\n` 画进图） | 上轮反馈 #1 |\n| 3 | **生图模型优先级** | 首选 `huny-img`（腾讯混元 3.0） → 备选 `mmx` → 最后才用其他模型；huny-img **串行**提交（账号 JobNumExceed 上限 1，并发会限流） | 上轮反馈 #2 |\n| 4 | **内页图（`mode=ins`）body 必须 ≥ 3 行** | 不含 title 的正文至少 3 行，画面才饱满；用户原文不够时主动从他给的文案里拆 3-4 个短句 | 上轮反馈 #3 |\n| 5 | **内页正文 < 标题**（提高对比） | `INS_BODY_RATIO = 0.020`（标题 = 0.035），标题/正文 ≈ 1.75×，层级清晰 | 2026-09-20 迭代 |\n| 6 | **Cover 必须是 2x2 宫格**（4 张拼 1 张） | 4 张图用 `scripts/compose_collage.py` 拼成 `--layout 2x2`，cell 之间建议 `--gap 20~40px`、背景色用 `245,240,232`（暖白，与 INS 色调一致）；4 张图共享视觉风格（色温 / 色调 / 质感）但呈现**不同元素/视角**，避免 4 张图重复 | 2026-09-20 迭代 |\n| 7 | **Cover / 内页默认符合小红书尺寸**（**3:4 竖图**） | `compose_collage.py` 默认 `--cell-aspect 3:4` → cell 居中裁剪到 3:4，再拼成 2x2 → 整体 ≈ **3:4 竖图**；最终输出尺寸默认 `--target-size 1080x1440`（小红书 cover 标准），用 `add_ins_overlay.py` 加标题后直接上传即可。内页图（ins 模式）也按 3:4 生成，单图 768:1024（huny-img 默认 3:4 比例）。如要 4:3 横图或 1:1 方图，传 `--cell-aspect` / `--target-size` 覆盖即可 | 2026-09-20 迭代 |\n\n脚本默认常量已同步：`scripts/add_ins_overlay.py` 的 `COVER_TITLE_RATIO / FLOOR / LINE_GAP` 与本表一致。\n\n---\n\n## ins-style-image [-s SCENE] [-c COUNT] [-t TEXT]\n\n1. Read `./references/ins-style-elements.md` to understand the available element library\n2. Compose prompts. Default to **5 prompts** if the user doesn't specify a `{COUNT}`. Each prompt randomly draws **12 elements** (1-2 per category, no duplicates within one prompt) for `{SCENE}` if specified.\n   - **Cover 模式**（硬性）：**4 个 prompt**，每个对应 1 个宫格 cell（2x2 = 4 格）。4 张图共享视觉风格（同一色温 / 色调 / 质感 / 光照方向）但展示**不同元素或视角**（例如音乐主题：①唱片堆叠 ②耳机特写 ③黄铜烛台与干花 ④复古相机与乐谱），避免 4 张图内容雷同\n   - **内页模式**：1 prompt 1 张，按用户需要的内页数生成；单图默认 3:4 竖图（小红书内页标准），与 cover 视觉风格一致（色温 / 色调 / 质感统一）\n   - User may also ask for 3x3 or other collage layouts or customize with given images — calculate count accordingly.\n3. Iterate the prompt queue and dispatch them **in parallel** to image generation skills in the following priority order:\n   - **🥇 首选 `huny-img`**（腾讯混元生图 3.0）— 详情见 `~/.agents/skills/huny-img/SKILL.md`。`hunyuan3-text-to-image.py` 或 `hunyuan3-batch.py`（多 prompt 调度）\n   - **🥈 备选 `mmx`**（MiniMax 多模态 CLI，`mmx image generate`）— 仅当 huny-img 不可用、缺凭证、或 JobNumExceed 限流时\n   - **🥉 其他模型**（如 `image-01-live` / Midjourney 等）— 最后才考虑\n   \n   ⚠️ **huny-img 串行提交**：腾讯云账户默认 1 个并发任务上限，并发提交会触发 `RequestLimitExceeded.JobNumExceed`。多 prompt 串行调度用 `hunyuan3-batch.py`（内置 5 次退避重试）。\n4. Save all generated images to `~/Download/ins-image-{timestamp}/`\n5. If user specifies `{TEXT}` (or provides a quote/aphorism), you must execute `scripts/add_ins_overlay.py` (using libraries Pillow) to post-process the generated single image or collage. There are **two modes** — pick per the user's intent:\n\n   ### 5A. `mode=ins` (default) — 灰蒙版 + 标题 + 正文\n\n   - **CLI usage**: `python scripts/add_ins_overlay.py -i input.jpg -o output.jpg -t \"title\" -b \"body\" -p {bottom|auto|center}` (use `--body-file` for longer text)\n   - **Default position is `bottom`** — protects top-region visual focal points in collage/single-image scenes, matching INS aesthetic conventions. Override with `--position auto` if the user explicitly wants auto blank-space detection.\n   - **Smart Adaptive Layout**: Automatically analyze the image composition and visual weight to determine the optimal placement for a semi-transparent text box (overlay). Position it in natural blank/negative spaces (留白) if available. If the text is exceptionally long or content density is high, dynamically expand the overlay to cover the full width or entire page.\n   - **Overlay Style**: Apply a neutral gray semi-transparent mask with an opacity of around 0.65-0.7 (matching an elegant lifestyle magazine aesthetic, as referenced in style guides).\n   - **Typography & Hierarchy**:\n     - **Title/Heading**: Bold, clean sans-serif or elegant serif font, crisp white color, accented with a subtle leading symbol (e.g., \"❤\" or numbering like \"3、\") if present in the text.\n     - **Body Text**: Regular weight, smaller font size, comfortable line spacing (leading) for readability, soft off-white or light gray color.\n   - **Drop Shadow & Depth**: Both title and body text carry a soft Gaussian-blurred drop shadow (offset 2–3 px down-right, alpha ≈ 120, blur radius 1.2–2.0 px). The shadow is intentionally subtle — never a hard-edged duplicate — so the white text reads as floating slightly above the gray mask rather than pasted onto it.\n   - **Execution**: Save the processed final image back to the target directory, ensuring high visual quality and natural blending.\n   - 🔴 **【硬性要求】正文 ≥ 3 行**（不含 title）。少于 3 行画面空、信息密度不够。如用户原文 < 3 句，**主动从他给的文案里拆 3-4 个语义完整的短句**（每行 ≤ 18 字，标点收尾），不要默默把短文硬塞进 1-2 行。\n\n   ### 5B. `mode=cover` — 社媒封面：**2x2 宫格 + 无蒙版大字标题**\n\n   Use when the user asks for a **封面 / cover / 社媒封面 / 头图**, or says the image is destined to be a 小红书 / 公众号 / 视频号 cover.\n\n   **两步走**：\n\n   **Step 1：4 张图拼 2x2 宫格**（硬性）：\n   ```bash\n   python scripts/compose_collage.py \\\n     -i cell_topleft.jpg cell_topright.jpg cell_bottomleft.jpg cell_bottomright.jpg \\\n     -o cover_grid.jpg \\\n     --layout 2x2 \\\n     --gap 24 \\\n     --bg 245,240,232 \\\n     --cell-aspect 3:4 \\\n     --target-size 1080x1440\n   ```\n   - `--cell-aspect 3:4` 默认就是 3:4（小红书标准竖图），cell 会先按此比例居中裁剪再拼图\n   - `--target-size 1080x1440` 默认就是小红书 cover 标准尺寸；省略则保留拼图自然尺寸\n   - `--gap 20~40px` 视观感调整（0 = 无缝拼接；推荐 24 让宫格感更明显）\n   - `--bg 245,240,232` 暖白与 INS 色调一致（也可用纯白 `255,255,255`）\n   - 如果要 4:3 横图或 1:1 方图：传 `--cell-aspect 4:3` + `--target-size 1440x1080` 或 `--cell-aspect 1:1` + `--target-size 1080x1080`\n\n   **Step 2：在 2x2 拼图上加 cover 文字**：\n   ```bash\n   python scripts/add_ins_overlay.py \\\n     -i cover_grid.jpg \\\n     -o cover_with_title.jpg \\\n     -m cover \\\n     -t $'第一句\\n第二句'\n   ```\n   - 字号自动按拼图尺寸缩放（cover 字号 = `0.07 × 拼图高`），拼图比单图大 → 字号同比放大；如觉得太大，把标题改成更短/调 `--bg`/或在拼图前 resize\n   - 🔴 **只有 title，没有 body**。cover 模式**忽略** `-b` / `--body-file`。不要把金句正文塞进封面。\n   - 🔴 **只有 title，没有 body**。cover 模式**忽略** `-b` / `--body-file`，CLI 在 cover 模式下也不再强制要求正文。不要把金句正文塞进封面。\n   - **不加灰色蒙版** —— 改为**居中大字标题 + 黑白描边 + 加强阴影**，靠粗描边保证在任何背景上都读得清（这是封面图与内页图的根本区别）。\n   - **【硬性】字号规格**（与 `scripts/add_ins_overlay.py` 常量一致）：\n     - base = `0.07 × 图片高`（≈ 70px @ 1024h，比最初 80px 还小一点，更克制）\n     - floor = `0.05 × 图片高`（≈ 51px @ 1024h，下限保护）\n     - **行距 = `0.18 × 字号`**（紧凑，约 13px @ 70px；三行收紧成块，避免\"太大太松\"）\n     - 实际字号随图片宽高自动在 base ↔ floor 之间缩档\n   - **【硬性】2 行结构**（与具体领域无关 — 音乐 / 美食 / 旅行 / 商业皆适用）：\n     - **2 行**，最长行 ≤ 8 字（按 base ratio 0.07 的实测上限；超过会被脚本自动缩档）\n     - 行间排序按重要性：第 1 行 = 最核心标识符（品牌 / 主体 / 人名 / 概念名等），第 2 行 = 关键信息 / 钩子 / 金句\n     - 长关键词必须单独成行，**绝不**挤压到上一行末尾（这会触发脚本的语义断行猜错）\n     - **目标：最长行占图宽 ≥ 70%**（保证标题\"横向撑得开\"，不被夹在中间像孤岛）\n     - 例外：标题 ≤ 8 字 → 1 行；标题过长（> 16 字）→ 3 行（仍是上限）\n   - **位置恒为居中**（水平+垂直），`-p/--position` 被忽略。\n   - 🔴 **Shell 调用必须把 `\\n` 传成真换行**。zsh / bash 普通双引号里的 `\\n` 是字面量（两个字符 `\\` + `n`），脚本会把它们原样画进图里。正确写法：\n     - ✅ zsh / bash ANSI-C 引号：`$'背叛情歌\\n电吉他\\n比牛仔还忙'`\n     - ✅ `printf '%b' '背叛情歌\\n电吉他\\n比牛仔还忙'`\n     - ❌ 普通双引号：`\"背叛情歌\\n电吉他\\n比牛仔还忙\"`（实测渲染出可见的 `\\n` 字符）\n   - 🔴 **你必须自己用 `\\n` 指定断行**。脚本**不做语义断句** —— 它只会在你没给 `\\n` 时按显示宽度均衡切分，并保证禁则不出错（不断标点、不切断 `40+` 这类数字串）。像「40+后才明白 ｜ 女人越来越差的9个原因」这种主谓边界，脚本**猜不出来**（实测它会断成「40+后才明白女人 ｜ 越来越差的9个原因」）。**判断语义是你的职责**：\n     - 标题 ≤ 8 字 → 一行，不写 `\\n`\n     - 更长 → 切成 2 行（最多 3 行），在**语义完整处**断开\n     - 每行显示宽度尽量接近（CJK 算 2，ASCII 算 1）\n     - 正例：`-t \"40+后才明白\\n女人越来越差的9个原因\"`\n     - 反例：`-t \"40+后才明白女人越来越差的9个原因\"`（全靠脚本猜 → 断得不好看）\n\n## Font Recommendations\n\n- **Title (Bold)**: PingFang SC Semibold, Microsoft YaHei Bold, Source Han Sans CN Bold, Hiragino Sans GB W6.\n- **Body (Regular)**: Source Han Serif CN, LXGW WenKai (霞鹜文楷), Songti SC, Arial, SimHei.\n- **Cross-platform fallback**: `Arial Unicode MS` — pre-installed on both macOS (`/Library/Fonts/Arial Unicode.ttf`) and Windows (`C:\\Windows\\Fonts\\Arialuni.ttf`). Covers nearly all Unicode including ❤ ★ ♡ → and full CJK.\n- The script auto-detects platform fonts via `ImageFont.truetype(...)` and runs a CJK width sanity check (`textlength(\"中文\") >= 1.2 × textlength(\"AA\")`) to skip fonts that would render tofu boxes. Pass `title_font_path` / `body_font_path` to override.\n  - ⚠️ The threshold is **1.2, not 1.5**. Measured at 40 px, real CJK fonts score 1.33–1.50 (Hiragino 1.333, Songti 1.443, Arial Unicode 1.499) while a tofu font scores ≈0.95 (Helvetica 0.950). A 1.5 threshold rejects *every* real CJK font — don't \"tighten\" it back.\n\n### ⚠️ Pillow Gotcha — No automatic cross-font fallback\n\nPillow's `ImageDraw.text()` renders every character in a run using **the same font**. It does NOT perform Unicode-fallback (unlike CSS font-family stacks). Practical consequences:\n\n- CJK fonts (Hiragino Sans GB / Source Han Sans / 思源黑体) often lack decorative symbols: `❤ ★ ♡ → ◆ ✓` — Pillow renders them as a tofu rectangle with an X (a \"missing glyph box\"), which looks like garbage on top of an otherwise clean image.\n- Detection is non-trivial: `font.getmask(ch).getbbox()` returns non-None for tofu; alpha values are non-zero. The only reliable signal is **checking the character class** and explicitly routing decorative symbols to a font that contains them.\n- The script implements this via `_pick_font_for_char(ch, main_font, sym_font)`: CJK / ASCII / digits / Latin → main font; anything outside those ranges (decorative Unicode blocks) → symbol font (`Arial Unicode MS` first, then Apple Symbols / Segoe UI Symbol / Noto Sans Symbols 2).\n\n**Rule of thumb when adding new glyphs**: don't trust \"looks fine in my test image\" — always verify by rendering `font.getmask(ch)` and comparing the mask to a known-good one. Or just route anything outside Latin/CJK through `symbol_font`.\n\n## Prompt Skeleton\n\nFill each prompt using the following template:\n\n```\n[Subject scene, 3-4 sentences, incorporating elements 1-12]. Unified Morandi / cream / wood-tone palette. 3:4 aspect ratio. Relaxed INS aesthetic.\n```\n\n## setup python library\n\n```bash\npip install --break-system-packages Pillow\n```\n\n## Gotchas\n\n- **Must return to this flow** ⚠️: The image generation skill is only a sub-step. After generation completes, return to this skill and execute step 4 (archiving). Do not leave control inside the sub-skill.\n- **Avoid duplicate elements**: Don't repeat the same element within one prompt (e.g. \"vintage book stack\" + \"open book\").\n- **Sub-skill failures**: Skip the failed prompt and continue with the remaining queue. Don't abort the entire batch.\n- **Shell `\\n` 字面量陷阱**：调用 `add_ins_overlay.py` 时，**务必**用 `$'…'` 把 `\\n` 传成真换行（详见 5B 的硬性要求第 1 条）。普通双引号会把字面 `\\n` 字符画进图里。\n\n## 小红书尺寸速查（默认即下表第一行）\n\n| 用途 | 比例 | 像素尺寸 | 备注 |\n|---|---|---|---|\n| **Cover（默认）** | **3:4** | **1080x1440** | 小红书主页封面/头图推荐尺寸，最常见 |\n| 内页（默认） | 3:4 | 768x1024 | huny-img 3:4 默认输出，单图直接发 |\n| 视频封面 | 1:1 | 1080x1080 | 方图，少见但合法 |\n| 横图（少见） | 4:3 | 1440x1080 | 横幅，需要 `--cell-aspect 4:3` |\n\n调用 `compose_collage.py` 时不传 `--target-size` 会保留拼图自然尺寸（按 cell 实际像素算），如要严格 1080x1440 必须显式传。\n\nFile v0.1.1:README.md\n\n# ins-style-img-bulk-gen SKILL\n\n![](./references/demo.jpg)\n\nBulk-generate Instagram-style images by randomly composing elements from an curated element library, then dispatching prompts to image generation skills in parallel.\n\nAlso may generate 2x2 collage, and add text in two modes:\n\n| Mode | Result | Use for |\n|---|---|---|\n| `ins` (default) | Semi-transparent gray mask + title + body | Inner-page / content images |\n| `cover` | No mask. Oversized centered title (~2×) with black outline + shadow. Title only | Social covers (Xiaohongshu / WeChat / Video) |\n\n```bash\n# ins: gray mask + title + body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -t \"❤ 富婆的 12 个隐秘爱好\" -b \"1、…\"\n\n# cover: no mask, big outlined title, no body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -m cover -t \"40+后才明白\\n女人越来越差的9个原因\"\n```\n\n![](./references/cover.jpg)\n\n[中文 →](README.zh-cn.md)\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn75w6500mvryv9p0k3czdfww982r5xh\",\n  \"slug\": \"ins-style-img-bulk-gen\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1789959591309\n}\n\nFile v0.1.1:references/ins-style-elements.md\n\n# 📸 INS风构图元素清单\n\n\n\n## 高流量INS风元素总表\n\n### 📚 书籍文具类\n\n1. **复古书籍堆叠** - 知识分子气息\n2. **摊开的书籍** - 营造阅读氛围\n3. **立起展示的艺术书籍** - 封面作为视觉焦点\n4. **银色金属笔** - 精致文具\n5. **手写英文卡片** - 个性化文字\n6. **黑白励志文字卡片** - 态度标语\n7. **皮质笔记本** - 复古文具\n8. **水彩笔/马克笔** - 创作工具\n9. **木质字母装饰** - 个性化元素\n\n### 🌸 花卉植物类\n\n10. **干花花束** - 莫兰迪色系最佳\n11. **红色毛茛花束** - 鲜艳色彩点缀\n12. **绿色球形鲜花** - 新鲜质感\n13. **多肉植物盆栽** - 小清新元素\n14. **绿植枝叶** - 尤加利/橄榄枝\n15. **干花/蒲苇** - 自然元素\n16. **水果切片** - 柠檬/橙子最上镜\n17. **鲜花** - 粉玫瑰/白玫瑰/多头小玫瑰/郁金香/小雏菊\n\n### 🏺 容器器皿类\n\n17. **透明玻璃花瓶** - 简约透明质感\n18. **玻璃花瓶** - 简约透明质感\n19. **白色陶瓷花盆** - 简约盛器\n20. **手工陶瓷茶杯** - 褐色质感器皿\n21. **白色陶瓷杯组** - 复古图案杯具\n22. **陶瓷餐具套装** - 哑光质感最佳\n23. **手工陶瓷碗** - 不规则美感\n24. **透明玻璃杯** - 盛装饮品\n25. **白色马克杯** - 经典款\n26. **琥珀色玻璃瓶** - 复古感\n27. **磨砂玻璃瓶** - 现代感\n28. **透明收纳罐** - 展示谷物/干货\n29. **透明玻璃瓶** - 装饰小物\n30. **喝水玻璃杯**\n\n### 🛋️ 纺织布艺类\n\n30. **白色纱帘** - 柔和光线背景\n31. **亚麻材质抱枕** - 奶油色/米色\n32. **白色棉麻桌布** - 打底必备\n33. **羊毛地毯** - 温暖质感\n34. **蕾丝桌旗** - 法式浪漫\n35. **米色针织开衫** - 慵懒风\n36. **天鹅绒抱枕** - 质感丰富\n37. **棉麻围裙** - 生活气息\n38. **白色床品** - 简约高级\n39. **花卉图案床单** - 温馨感\n40. **深灰色针织毛毯** - 质感层次\n\n### 🪵 木质元素类\n\n41. **深色木纹桌面** - 质感底板\n42. **原木托盘** - 承载其他物品\n43. **木质相框** - 展示照片/艺术画\n44. **木质圆盘** - 摆放食物\n45. **木质砧板** - 厨房场景\n46. **原木边几** - 家居场景\n47. **木质衣架** - 展示服饰\n48. **木珠串** - 自然装饰\n\n### 🎨 装饰配饰类\n\n49. **复古胶片相机** - 增加文艺氛围\n50. **毛绒玩偶** - 可爱装饰（如穿红衣小熊）\n51. **珍珠装饰小物** - 精致配饰\n52. **珍珠项链** - 精致配饰\n53. **蜡烛香薰** - 营造氛围感\n54. **铜质烛台** - 复古金属感\n55. **黄铜小物件** - 点缀用\n56. **黄铜镜子** - 复古精致\n57. **羽毛装饰** - 波西米亚风\n58. **羊毛毡球** - 可爱装饰\n59. **水晶摆件** - 灵性氛围\n60. **黑框眼镜**\n\n### 📱 数码科技类\n\n60. **平板电脑** - 数字生活感\n61. **白色无线耳机** - 现代科技感\n62. **蓝色海浪图案手机壳** - 艺术装饰\n63. **白色头戴式耳机** - 音乐元素\n\n### 🧺 收纳编织类\n\n64. **编织篮筐** - 自然田园风\n65. **藤编收纳盒** - 自然材质\n66. **棉绳编织篮** - 收纳装饰两用\n67. **草编帽** - 度假感\n68. **帆布包** - 文艺必备\n69. **牛皮纸袋** - 复古包装感\n\n### 🍵 食物饮品类\n\n70. **咖啡豆/咖啡粉** - 生活仪式感\n71. **零食** - 生活气息，巧克力\n72. **褐色茶水/咖啡** - 饮品展示\n\n### 🏠 背景材质类\n\n73. **白色瓷砖** - 极简背景\n74. **大理石纹理板** - 高级背景\n75. **白色桌面** - 简约底板\n76. **白色百叶窗** - 光影效果\n\n### ⚙️ 金属配件类\n\n77. **金属置物架** - 增加层次\n78. **银色餐具** - 精致细节\n79. **麻绳/缎带** - 装饰细节\n\n---\n\n## 💡 元素搭配黄金公式\n\n### 公式1: 书香气息\n\n**书籍 + 花卉 + 饮品 + 文具 + 木质底板**\n\n### 公式2: 数字生活\n\n**电子设备 + 饮品 + 毛绒玩偶 + 纱帘背景 + 木纹桌面**\n\n### 公式3: 清新文艺\n\n**立起的书 + 鲜花 + 陶瓷器皿 + 文字卡片 + 白色底板**\n\n### 公式4: 温暖慵懒\n\n**纺织品 + 干花 + 复古相机 + 蜡烛 + 原木托盘**\n\n### 公式5: 极简高级\n\n**单色容器 + 绿植枝叶 + 大理石纹 + 金属小物 + 留白背景**\n\n---\n\n## 🎯 选品建议\n\n- **新手必备10件**: 白纱帘、木质托盘、透明花瓶、干花、白陶杯、摊开书籍、金属笔、亚麻抱枕、鲜花、木纹桌面\n- **进阶提升**: 复古相机、蜡烛香薰、手写卡片、毛绒玩偶、艺术书籍、励志标语卡\n- **高级质感**: 手工陶瓷、黄铜配件、珍珠装饰、大理石底板、天鹅绒抱枕\n\n\n## 构图小tips\n\n- 主体物品占画面1/3,留白营造呼吸感\n- 色调统一在莫兰迪/奶油/原木色系\n- 用手部动作增加生活感和互动性\n- 自然光侧光最出片,避免顶光\n- 物品高低错落,营造层次感\n------\n\n## 🎨 精选提示词方案\n\n### 慵懒午后咖啡时光\n\n```\n原木托盘上放着一台复古胶片相机,旁边是一束浅粉色干花插在玻璃花瓶中。托盘边缘摆着一本摊开的复古书籍,书页微微翻起。一只手轻轻握着装有拿铁的透明玻璃杯,杯口冒着细腻的奶泡。背景是奶油色亚麻抱枕,自然光从侧面洒入。比例3:4。松弛感ins风\n```\n\n### 文艺早餐桌面\n\n```\n白色棉麻桌布上铺着原木托盘,托盘中央放着一台复古胶片相机。旁边散落几张手写英文卡片,墨迹未干。一束干花斜靠在哑光质感的陶瓷杯旁,杯中是深棕色咖啡。画面角落可见奶油色亚麻抱枕的一角,自然光影柔和。比例3:4。松弛感ins风\n```\n\n### 温暖阅读角落\n\n```\n复古胶片相机放置在堆叠的三本复古书籍上,书脊显露出斑驳质感。旁边插着一小束莫兰迪紫色干花的玻璃花瓶,花瓣微垂。手写英文卡片斜靠在书堆旁,米色亚麻抱枕作为背景,营造出慵懒氛围。侧面光线勾勒出物品轮廓。比例3:4。松弛感ins风\n```\n\n### 浪漫氛围感夜晚\n\n```\n原木托盘居中摆放,上面是一台银色复古胶片相机。托盘左侧是玻璃花瓶装着香槟色干花,右侧燃烧着米白色蜡烛香薰,烛光温柔跳跃。几张手写英文卡片散落在托盘边缘,深灰色亚麻抱枕作为柔软背景。暖光氛围。比例3:4。松弛感ins风\n```\n\n### 清新早晨仪式感\n\n```\n白色棉麻桌布上,复古胶片相机斜靠在摊开的复古书籍上。玻璃花瓶中插着白色和浅黄色干花,花瓣纤细。原木托盘一角放着手写英文卡片,笔迹优雅。奶油色亚麻抱枕在画面后方,阳光从左侧窗户洒入,光影斑驳。比例3:4。松弛感ins风\n```\n\n### 文艺学习桌面\n\n```\n深色木纹桌面上,​摊开的书籍占据画面左侧,​银色金属笔斜放在书页上。​右侧透明玻璃花瓶中插着鲜红色毛茛花,​花瓣层叠饱满。​旁边放着显示蓝色屏保的平板电脑,​白色无线耳机随意摆在一旁。​背景是柔和的白色纱帘,​自然光透过窗纱洒入。​比例3:4。​松弛感ins风\n```\n\n### 温暖下午茶时光\n\n```\n深色木质桌面上,​手工褐色陶瓷茶杯盛着热茶,​杯口蒸汽缭绕。​杯旁是摊开的书籍,​银色笔压在书页边缘。​透明玻璃花瓶装着红色鲜花和灰绿色蒲苇,​错落有致。​画面角落可见蓝色海浪图案手机壳,​白色纱帘背景营造柔和氛围。​比例3:4。​松弛感ins风\n```\n\n### 清新阅读角落\n\n```\n白色桌面上立起展示的艺术书籍,​封面大字清晰可见。​前方摆着三只白色陶瓷杯,​杯身印有复古图案。​旁边躺着一支黑白水彩笔,​笔帽未盖。​一束绿色球形鲜花斜靠在书旁,​花朵饱满新鲜。​黑白励志文字卡片点缀画面。​顶光照射,​阴影清晰。​比例3:4。​松弛感ins风\n```\n\n### 慵懒数字生活\n\n```\n深色木纹桌上,​平板电脑屏幕显示蓝色天空壁纸,​时间13:00清晰可见。​旁边是手工陶瓷茶杯,​杯中褐色茶水半满。​白色无线耳机放在蓝色海浪图案手机壳上,​透明玻璃瓶装饰一角。​背景白色纱帘飘逸,​一只穿红衣的毛绒小熊靠在花瓶旁。​比例3:4。​松弛感ins风\n```\n\n### 创作灵感桌面\n\n```\n白色桌面中央立起白色艺术书籍,​书名\"生成式叙画\"字体现代。​前方散落三只复古图案陶瓷杯,​杯内是奶白色液体。​一支黑白马克笔笔尖朝外,​旁边是带珍珠装饰的粉色小物件。​绿色球形鲜花枝叶舒展,​占据画面右侧。​黑色励志标语卡片增加态度感。​自然光从上方照射。​比例3:4。​松弛感ins风\n```\n\nFile v0.1.1:HANDOFF-PLAYBOOK.md\n\n# Skill ↔ Script Handoff Playbook\n\n> Reusable lessons from building `ins-style-img-bulk-gen` against `huny-img` + `add_ins_overlay.py`.\n> Use this when designing any skill that delegates work to a sub-skill or external API.\n\n---\n\n## The 5 Failure Modes We Hit\n\n| # | Failure | Symptom | Diagnosis | Fix |\n|---|---------|---------|-----------|-----|\n| 1 | Parallel dispatch to rate-limited API | 3 of 4 image jobs return `RequestLimitExceeded.JobNumExceed` | Read the sub-skill's SKILL.md for concurrency hints; run a probe with 2 parallel calls and watch for limit errors | Dispatch **sequentially** when the sub-skill's API is single-threaded; pass `--poll-interval` / `--timeout` to control cadence |\n| 2 | `.ttc` font loaded without `index` → fallback to 1-bit default | Chinese text renders as tofu rectangles | `python3 -c \"from PIL import ImageFont; f = ImageFont.truetype('/path/font.ttc', 30); f.getmask('中').getbbox() == None\"` | Always pass `index=0` (or specific index for bold/italic variants) when loading `.ttc` |\n| 3 | CJK font missing decorative glyphs (❤ ★ ♡ →) | Hollow-X tofu box appears in the title | Render the suspect char to a 200×200 PNG with the chosen font and look at it; don't trust `getmask().getbbox()` (it's non-None for tofu too) | Route decorative Unicode through a **dedicated symbol font** (`Arial Unicode MS` is the cross-platform safety net) |\n| 4 | Shadow rendered at top-left of text instead of bottom-right | White text looks \"flat\" against the gray mask; no depth | Render a single character with shadow, save the image, inspect — pixel diff between expected (dx=+3, dy=+3) and actual position | Inside the shadow layer, use `(margin + dx, margin + dy)` as the text origin, **not** `(margin - bbox[0] + dx, ...)` — the latter double-counts the bbox offset |\n| 5 | `textwrap.wrap(width=N)` overflows on CJK + box height underestimated | Long lines extend past the gray mask; last line gets clipped | `dummy_draw.textlength(long_line, font=font)` and compare against `box_w - 2×padding` | Wrap by **measured pixel width** (`textlength` per char); measure per-line `textbbox` height and sum + `line_extra_gap` |\n\n---\n\n## Pre-Flight Checklist for Any New Skill\n\nBefore shipping a skill that wraps another tool, walk through this:\n\n### 1. Survey the sub-skill's API limits\n```bash\n# Read the sub-skill's SKILL.md / README — note any rate limits, concurrency caps, file size limits\n# Probe: submit 2 jobs in parallel and watch for errors\n```\n\n### 2. Survey platform dependencies\n```bash\n# What fonts/libraries/binaries does the sub-skill need?\n# Is the dependency available on macOS, Linux, Windows?\n# Run a probe script that loads the dependency and confirms it works.\n```\n\n### 3. Build a minimal end-to-end smoke test FIRST\n```bash\n# Before composing fancy prompts / layouts, run ONE round-trip and inspect output\n# Open the generated image. Look for:\n#   - Text rendering correctly (not tofu)\n#   - Layout proportions sensible\n#   - Output dimensions match expectations\n```\n\n### 4. Add visual diagnostics for non-deterministic bugs\n- Shadow rendering?  Save an isolated test image with known content, eyeball it\n- Font coverage?  Render every glyph you'll use to a strip image and inspect\n- Text overflow?  Measure `textlength` and assert against a known bound\n\n### 5. Write a regression test for every fix\n- Use `unittest` or `pytest` (whichever is available)\n- One test per bug class\n- Run them in CI or as a pre-commit hook\n\n---\n\n## Diagnostic Commands\n\n### Detect Chinese tofu (font fallback)\n```python\nfrom PIL import ImageFont, Image, ImageDraw\nf = ImageFont.truetype('/path/font.ttf', 50)\nimg = Image.new('L', f.getmask('中').size)\nimg.putdata(f.getmask('中'))\n# If extrema is (0, 0), the font has no '中' glyph → tofu fallback\nprint(img.getextrema())\n```\n\n### Detect decorative symbol tofu\n```python\n# Same as above but with '❤' or other decorative chars\n# If Pillow has any font at all, it will return SOMETHING for the char\n# (even a hollow-X box). Trust nothing — render and look.\nimg = Image.new('RGB', (200, 150), 'white')\nImageDraw.Draw(img).text((10, 10), '❤', font=f, fill='black')\nimg.save('/tmp/heart_test.png')  # Then eyeball this file\n```\n\n### Verify shadow direction\n```python\nfrom PIL import Image, ImageDraw, ImageFont, ImageFilter\nimg = Image.new('RGBA', (300, 200), (105, 105, 105, 255))\nshadow = Image.new('RGBA', (300, 200), (0, 0, 0, 0))\nImageDraw.Draw(shadow).text((50, 50), 'A', font=font, fill=(0, 0, 0, 120))\nshadow = shadow.filter(ImageFilter.GaussianBlur(2))\nimg.alpha_composite(shadow, (3, 3))  # The shadow offset goes HERE\nImageDraw.Draw(img).text((50, 50), 'A', font=font, fill='white')\nimg.save('/tmp/shadow_test.png')  # Eyeball: is shadow at bottom-right?\n```\n\n### Verify CJK text wrap fits within mask\n```python\nfrom PIL import ImageFont, ImageDraw\nfont = ImageFont.truetype('...', 50)\nd = ImageDraw.Draw(Image.new('RGB', (1, 1)))\nmax_w = 800  # mask width\nfor line in wrapped_lines:\n    assert d.textlength(line, font=font) <= max_w, f\"Overflow: {line!r}\"\n```\n\n---\n\n## Pillow-Specific Gotchas\n\n| Gotcha | What happens | Workaround |\n|--------|-------------|------------|\n| `.ttc` requires `index=` | `IOError`, silent fallback to default font | Always pass `index=0` |\n| `textbbox` returns the bbox **at the given (x, y)** | Using bbox[0]/bbox[1] in offset math produces a double-offset bug | Use `(0, 0)` as anchor when measuring pure dimensions; add offset only at final composition |\n| `ImageDraw.text` does not auto-fallback across fonts | One missing glyph = tofu, even if another font in the system has it | Implement `_pick_font_for_char` (CJK vs decorative) at script level |\n| `getmask(ch).getbbox()` is non-None even for tofu | `if getbbox(): ...` looks like valid coverage check but lies | Render the actual glyph to PNG and inspect — never trust programmatic checks alone |\n| `textwrap.wrap(width=N)` counts chars, not pixels | CJK chars are 2× wider than ASCII; width=N overflows by ~2× | Wrap by measured `textlength` instead |\n| `multiline_textbbox` lies about height when fonts differ across runs | Underestimates total height → mask too short → last line clipped | Measure per-line `textbbox` and sum + line gap |\n\n---\n\n## Cross-Platform Font Safety Net\n\nFor any skill that does Chinese / Japanese / Korean rendering, **always include Arial Unicode MS** in the font candidate list. It's pre-installed on macOS (`/Library/Fonts/Arial Unicode.ttf`) and Windows (`C:\\Windows\\Fonts\\Arialuni.ttf`), covers nearly all Unicode (CJK + decorative symbols + Latin), and is the most reliable fallback when nothing else works.\n\nFor Linux, the equivalent is `Noto Sans CJK` (install via `apt install fonts-noto-cjk`).\n\n---\n\n## Communication Pattern Between Skills\n\nWhen you delegate to a sub-skill, the flow should be:\n\n1. **Survey** — read sub-skill's SKILL.md, identify limits / dependencies / expected output format\n2. **Probe** — run a minimal test before composing complex inputs\n3. **Dispatch** — sequentially if rate-limited, with retries if jobs can fail independently\n4. **Inspect** — always look at the output. Don't trust \"no error returned\" as success\n5. **Archive** — copy outputs to a known location with a timestamp\n6. **Post-process** — overlay / crop / compose with scripts you control\n7. **Verify** — open final output, eyeball it, run regression tests\n\nIf you skip step 1 or 2, you'll hit bug #1, #2, or #3 in the table above.\n\n---\n\n## When Things Break\n\nAdd to this playbook every time you hit a new failure mode. The goal is that the next skill you build starts with a smaller surprise budget.\n\nFile v0.1.1:README.zh-cn.md\n\n# ins-style-img-bulk-gen SKILL\n\n![](./references/demo.jpg)\n\n批量生成 Instagram 风格(INS 风 / 小红书 / 生活方式)的图片——从 80+ 元素的 INS 风素材库中随机搭配提示词,并发调用图像生成能力出图.\n\n还可以生成 2x2 等 4 宫格拼图，并支持两种加字模式：\n\n| 模式 | 效果 | 适用 |\n|---|---|---|\n| `ins`（默认） | 半透明灰色蒙版 + 标题 + 正文 | 内页 / 内容图 |\n| `cover` | 无蒙版，居中大字标题（约 2 倍）+ 黑白描边 + 阴影，**只要标题** | 社媒封面（小红书 / 公众号 / 视频号） |\n\n```bash\n# ins：灰蒙版 + 标题 + 正文\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -t \"❤ 富婆的 12 个隐秘爱好\" -b \"1、…\"\n\n# cover：无蒙版、大字描边标题、不含正文\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -m cover -t \"40+后才明白\\n女人越来越差的9个原因\"\n```\n\n> ⚠️ cover 模式请**自己用 `\\n` 指定断行** —— 脚本不做语义断句，只会按显示宽度均衡切分。\n\n![](./references/cover.jpg)\n\n[← English](README.md)\n\nFile v0.1.1:skill-card.md\n\n## Description:\n\nGenerate batches of Instagram-aesthetic images by composing prompts from an element library, dispatching them to configured image-generation skills, and optionally post-processing outputs into collages or social-cover layouts.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mebusw](https://clawhub.ai/user/mebusw)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nCreators, marketers, and agent users can use this skill to generate batches of INS-style lifestyle, Xiaohongshu, WeChat cover, flat-lay, and scene-based marketing visuals. Developers can also use its scripts to compose 2x2 collages and add text overlays to generated images.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts may be sent to configured image-generation tools or providers.\n\nMitigation: Confirm provider credentials, privacy expectations, and generation costs before running batches.\n\nRisk: The workflow can create timestamped image folders under Downloads and generate multiple outputs per run.\n\nMitigation: Confirm output count and destination path before large batches, and review generated files before sharing.\n\nRisk: The post-processing scripts may require Pillow to be installed locally.\n\nMitigation: Install dependencies in a virtual environment when possible and review package installation commands before execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/mebusw/skills/ins-style-img-bulk-gen)\n- [Server-resolved GitHub source](https://github.com/mebusw/ins-style-img-bulk-gen)\n- [README](README.md)\n- [INS style elements](references/ins-style-elements.md)\n- [Skill/script handoff playbook](HANDOFF-PLAYBOOK.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with prompt text, shell commands, and generated local image files from configured tools]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May create timestamped image folders under Downloads and use Pillow-based scripts for collage composition and text overlays.]\n\n## Skill Version(s):\n\n0.1.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.1.0: 8 files, 7465 bytes\n\nFiles: .gitignore (27b), README.md (228b), README.zh-cn.md (477b), references (0b), references/ins-style-elements.md (8694b), skill-card.md (2073b), SKILL.md (1707b), _meta.json (141b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: ins-style-img-bulk-gen\ndescription: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly.\nallowed-tools: Read, Bash\n---\n\n## Task\n\n1. Read `./references/ins-style-elements.md` to understand the available element library\n2. Compose prompts. Default to **5 prompts** if the user doesn't specify a count. Each prompt randomly draws **12 elements** (1-2 per category, no duplicates within a prompt)\n3. Iterate the prompt queue and dispatch them **in parallel** to whichever image generation skill is available (recommended: `wanx-img` or `huny-img`)\n4. Save all generated images to `~/Download/ins-image-{timestamp}/`\n\n## Prompt Skeleton\n\nFill each prompt using the following template:\n\n```\n[Subject scene, 3-4 sentences, incorporating elements 1-12]. Unified Morandi / cream / wood-tone palette. 3:4 aspect ratio. Relaxed INS aesthetic.\n```\n\n## Gotchas\n\n- **Must return to this flow** ⚠️: The image generation skill is only a sub-step. After generation completes, return to this skill and execute step 4 (archiving). Do not leave control inside the sub-skill.\n- **Avoid duplicate elements**: Don't repeat the same element within one prompt (e.g. \"vintage book stack\" + \"open book\").\n- **Sub-skill failures**: Skip the failed prompt and continue with the remaining queue. Don't abort the entire batch.\n\nFile v0.1.0:README.md\n\n# ins-style-img-bulk-gen\n\nBulk-generate Instagram-style images by randomly composing elements from an curated element library, then dispatching prompts to image generation skills in parallel.\n\n[中文文档 →](README.zh-cn.md)\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75w6500mvryv9p0k3czdfww982r5xh\",\n  \"slug\": \"ins-style-img-bulk-gen\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1787645520876\n}\n\nFile v0.1.0:references/ins-style-elements.md\n\n# 📸 INS风构图元素清单\n\n\n\n## 高流量INS风元素总表\n\n### 📚 书籍文具类\n\n1. **复古书籍堆叠** - 知识分子气息\n2. **摊开的书籍** - 营造阅读氛围\n3. **立起展示的艺术书籍** - 封面作为视觉焦点\n4. **银色金属笔** - 精致文具\n5. **手写英文卡片** - 个性化文字\n6. **黑白励志文字卡片** - 态度标语\n7. **皮质笔记本** - 复古文具\n8. **水彩笔/马克笔** - 创作工具\n9. **木质字母装饰** - 个性化元素\n\n### 🌸 花卉植物类\n\n10. **干花花束** - 莫兰迪色系最佳\n11. **红色毛茛花束** - 鲜艳色彩点缀\n12. **绿色球形鲜花** - 新鲜质感\n13. **多肉植物盆栽** - 小清新元素\n14. **绿植枝叶** - 尤加利/橄榄枝\n15. **干花/蒲苇** - 自然元素\n16. **水果切片** - 柠檬/橙子最上镜\n17. **鲜花** - 粉玫瑰/白玫瑰/多头小玫瑰/郁金香/小雏菊\n\n### 🏺 容器器皿类\n\n17. **透明玻璃花瓶** - 简约透明质感\n18. **玻璃花瓶** - 简约透明质感\n19. **白色陶瓷花盆** - 简约盛器\n20. **手工陶瓷茶杯** - 褐色质感器皿\n21. **白色陶瓷杯组** - 复古图案杯具\n22. **陶瓷餐具套装** - 哑光质感最佳\n23. **手工陶瓷碗** - 不规则美感\n24. **透明玻璃杯** - 盛装饮品\n25. **白色马克杯** - 经典款\n26. **琥珀色玻璃瓶** - 复古感\n27. **磨砂玻璃瓶** - 现代感\n28. **透明收纳罐** - 展示谷物/干货\n29. **透明玻璃瓶** - 装饰小物\n30. **喝水玻璃杯**\n\n### 🛋️ 纺织布艺类\n\n30. **白色纱帘** - 柔和光线背景\n31. **亚麻材质抱枕** - 奶油色/米色\n32. **白色棉麻桌布** - 打底必备\n33. **羊毛地毯** - 温暖质感\n34. **蕾丝桌旗** - 法式浪漫\n35. **米色针织开衫** - 慵懒风\n36. **天鹅绒抱枕** - 质感丰富\n37. **棉麻围裙** - 生活气息\n38. **白色床品** - 简约高级\n39. **花卉图案床单** - 温馨感\n40. **深灰色针织毛毯** - 质感层次\n\n### 🪵 木质元素类\n\n41. **深色木纹桌面** - 质感底板\n42. **原木托盘** - 承载其他物品\n43. **木质相框** - 展示照片/艺术画\n44. **木质圆盘** - 摆放食物\n45. **木质砧板** - 厨房场景\n46. **原木边几** - 家居场景\n47. **木质衣架** - 展示服饰\n48. **木珠串** - 自然装饰\n\n### 🎨 装饰配饰类\n\n49. **复古胶片相机** - 增加文艺氛围\n50. **毛绒玩偶** - 可爱装饰（如穿红衣小熊）\n51. **珍珠装饰小物** - 精致配饰\n52. **珍珠项链** - 精致配饰\n53. **蜡烛香薰** - 营造氛围感\n54. **铜质烛台** - 复古金属感\n55. **黄铜小物件** - 点缀用\n56. **黄铜镜子** - 复古精致\n57. **羽毛装饰** - 波西米亚风\n58. **羊毛毡球** - 可爱装饰\n59. **水晶摆件** - 灵性氛围\n60. **黑框眼镜**\n\n### 📱 数码科技类\n\n60. **平板电脑** - 数字生活感\n61. **白色无线耳机** - 现代科技感\n62. **蓝色海浪图案手机壳** - 艺术装饰\n63. **白色头戴式耳机** - 音乐元素\n\n### 🧺 收纳编织类\n\n64. **编织篮筐** - 自然田园风\n65. **藤编收纳盒** - 自然材质\n66. **棉绳编织篮** - 收纳装饰两用\n67. **草编帽** - 度假感\n68. **帆布包** - 文艺必备\n69. **牛皮纸袋** - 复古包装感\n\n### 🍵 食物饮品类\n\n70. **咖啡豆/咖啡粉** - 生活仪式感\n71. **零食** - 生活气息，巧克力\n72. **褐色茶水/咖啡** - 饮品展示\n\n### 🏠 背景材质类\n\n73. **白色瓷砖** - 极简背景\n74. **大理石纹理板** - 高级背景\n75. **白色桌面** - 简约底板\n76. **白色百叶窗** - 光影效果\n\n### ⚙️ 金属配件类\n\n77. **金属置物架** - 增加层次\n78. **银色餐具** - 精致细节\n79. **麻绳/缎带** - 装饰细节\n\n---\n\n## 💡 元素搭配黄金公式\n\n### 公式1: 书香气息\n\n**书籍 + 花卉 + 饮品 + 文具 + 木质底板**\n\n### 公式2: 数字生活\n\n**电子设备 + 饮品 + 毛绒玩偶 + 纱帘背景 + 木纹桌面**\n\n### 公式3: 清新文艺\n\n**立起的书 + 鲜花 + 陶瓷器皿 + 文字卡片 + 白色底板**\n\n### 公式4: 温暖慵懒\n\n**纺织品 + 干花 + 复古相机 + 蜡烛 + 原木托盘**\n\n### 公式5: 极简高级\n\n**单色容器 + 绿植枝叶 + 大理石纹 + 金属小物 + 留白背景**\n\n---\n\n## 🎯 选品建议\n\n- **新手必备10件**: 白纱帘、木质托盘、透明花瓶、干花、白陶杯、摊开书籍、金属笔、亚麻抱枕、鲜花、木纹桌面\n- **进阶提升**: 复古相机、蜡烛香薰、手写卡片、毛绒玩偶、艺术书籍、励志标语卡\n- **高级质感**: 手工陶瓷、黄铜配件、珍珠装饰、大理石底板、天鹅绒抱枕\n\n\n## 构图小tips\n\n- 主体物品占画面1/3,留白营造呼吸感\n- 色调统一在莫兰迪/奶油/原木色系\n- 用手部动作增加生活感和互动性\n- 自然光侧光最出片,避免顶光\n- 物品高低错落,营造层次感\n------\n\n## 🎨 精选提示词方案\n\n### 慵懒午后咖啡时光\n\n```\n原木托盘上放着一台复古胶片相机,旁边是一束浅粉色干花插在玻璃花瓶中。托盘边缘摆着一本摊开的复古书籍,书页微微翻起。一只手轻轻握着装有拿铁的透明玻璃杯,杯口冒着细腻的奶泡。背景是奶油色亚麻抱枕,自然光从侧面洒入。比例3:4。松弛感ins风\n```\n\n### 文艺早餐桌面\n\n```\n白色棉麻桌布上铺着原木托盘,托盘中央放着一台复古胶片相机。旁边散落几张手写英文卡片,墨迹未干。一束干花斜靠在哑光质感的陶瓷杯旁,杯中是深棕色咖啡。画面角落可见奶油色亚麻抱枕的一角,自然光影柔和。比例3:4。松弛感ins风\n```\n\n### 温暖阅读角落\n\n```\n复古胶片相机放置在堆叠的三本复古书籍上,书脊显露出斑驳质感。旁边插着一小束莫兰迪紫色干花的玻璃花瓶,花瓣微垂。手写英文卡片斜靠在书堆旁,米色亚麻抱枕作为背景,营造出慵懒氛围。侧面光线勾勒出物品轮廓。比例3:4。松弛感ins风\n```\n\n### 浪漫氛围感夜晚\n\n```\n原木托盘居中摆放,上面是一台银色复古胶片相机。托盘左侧是玻璃花瓶装着香槟色干花,右侧燃烧着米白色蜡烛香薰,烛光温柔跳跃。几张手写英文卡片散落在托盘边缘,深灰色亚麻抱枕作为柔软背景。暖光氛围。比例3:4。松弛感ins风\n```\n\n### 清新早晨仪式感\n\n```\n白色棉麻桌布上,复古胶片相机斜靠在摊开的复古书籍上。玻璃花瓶中插着白色和浅黄色干花,花瓣纤细。原木托盘一角放着手写英文卡片,笔迹优雅。奶油色亚麻抱枕在画面后方,阳光从左侧窗户洒入,光影斑驳。比例3:4。松弛感ins风\n```\n\n### 文艺学习桌面\n\n```\n深色木纹桌面上,​摊开的书籍占据画面左侧,​银色金属笔斜放在书页上。​右侧透明玻璃花瓶中插着鲜红色毛茛花,​花瓣层叠饱满。​旁边放着显示蓝色屏保的平板电脑,​白色无线耳机随意摆在一旁。​背景是柔和的白色纱帘,​自然光透过窗纱洒入。​比例3:4。​松弛感ins风\n```\n\n### 温暖下午茶时光\n\n```\n深色木质桌面上,​手工褐色陶瓷茶杯盛着热茶,​杯口蒸汽缭绕。​杯旁是摊开的书籍,​银色笔压在书页边缘。​透明玻璃花瓶装着红色鲜花和灰绿色蒲苇,​错落有致。​画面角落可见蓝色海浪图案手机壳,​白色纱帘背景营造柔和氛围。​比例3:4。​松弛感ins风\n```\n\n### 清新阅读角落\n\n```\n白色桌面上立起展示的艺术书籍,​封面大字清晰可见。​前方摆着三只白色陶瓷杯,​杯身印有复古图案。​旁边躺着一支黑白水彩笔,​笔帽未盖。​一束绿色球形鲜花斜靠在书旁,​花朵饱满新鲜。​黑白励志文字卡片点缀画面。​顶光照射,​阴影清晰。​比例3:4。​松弛感ins风\n```\n\n### 慵懒数字生活\n\n```\n深色木纹桌上,​平板电脑屏幕显示蓝色天空壁纸,​时间13:00清晰可见。​旁边是手工陶瓷茶杯,​杯中褐色茶水半满。​白色无线耳机放在蓝色海浪图案手机壳上,​透明玻璃瓶装饰一角。​背景白色纱帘飘逸,​一只穿红衣的毛绒小熊靠在花瓶旁。​比例3:4。​松弛感ins风\n```\n\n### 创作灵感桌面\n\n```\n白色桌面中央立起白色艺术书籍,​书名\"生成式叙画\"字体现代。​前方散落三只复古图案陶瓷杯,​杯内是奶白色液体。​一支黑白马克笔笔尖朝外,​旁边是带珍珠装饰的粉色小物件。​绿色球形鲜花枝叶舒展,​占据画面右侧。​黑色励志标语卡片增加态度感。​自然光从上方照射。​比例3:4。​松弛感ins风\n```\n\nFile v0.1.0:README.zh-cn.md\n\n# ins-style-img-bulk-gen\n\n批量生成 Instagram 风格(INS 风 / 小红书 / 生活方式)的图片——从 80+ 元素的 INS 风素材库中随机搭配提示词,并发调用图像生成 skill 完成出图,归档到 `~/Download/ins-image-{timestamp}/`。\n\n当用户需要批量产出 INS 风图片、生活方式 flat-lay、小红书 / 公众号配图、或场景化营销图时使用——**即使用户没明确说「Instagram」也可触发**。\n\n[← English](README.md)\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nGenerate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mebusw](https://clawhub.ai/user/mebusw)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nCreators, marketers, and agent users use this skill to bulk-generate lifestyle flat-lay, Xiaohongshu, WeChat cover, or Instagram-style image prompts and generated image files from a curated element library.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Parallel image generation can consume provider credits and local storage.\n\nMitigation: Ask the agent to confirm the image count and output folder before running a batch.\n\nRisk: Prompt examples include minor zero-width-space hygiene issues that can make review harder.\n\nMitigation: Publisher should remove hidden prompt characters before future review or release updates.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/mebusw/skills/ins-style-img-bulk-gen)\n- [Source repository](https://github.com/mebusw/ins-style-img-bulk-gen)\n- [INS style element library](artifact/references/ins-style-elements.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Files, Shell commands]\n\n**Output Format:** [Markdown or plain-text prompts with generated image files saved to a timestamped local folder]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Defaults to 5 prompts with 12 unique elements per prompt, requests 3:4 images, and skips failed generations without aborting the batch.]\n\n## Skill Version(s):\n\n0.1.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: Ins Style Image Bulk Generate Owner: mebusw Summary: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cove","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python scripts/compose_collage.py \\\n     -i cell_topleft.jpg cell_topright.jpg cell_bottomleft.jpg cell_bottomright.jpg \\\n     -o cover_grid.jpg \\\n     --layout 2x2 \\\n     --gap 24 \\\n     --bg 245,240,232 \\\n     --cell-aspect 3:4 \\\n     --target-size 1080x1440"},{"language":"bash","snippet":"python scripts/add_ins_overlay.py \\\n     -i cover_grid.jpg \\\n     -o cover_with_title.jpg \\\n     -m cover \\\n     -t $'第一句\\n第二句'"},{"language":"text","snippet":"[Subject scene, 3-4 sentences, incorporating elements 1-12]. Unified Morandi / cream / wood-tone palette. 3:4 aspect ratio. Relaxed INS aesthetic."},{"language":"bash","snippet":"pip install --break-system-packages Pillow"},{"language":"bash","snippet":"# ins: gray mask + title + body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -t \"❤ 富婆的 12 个隐秘爱好\" -b \"1、…\"\n\n# cover: no mask, big outlined title, no body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -m cover -t \"40+后才明白\\n女人越来越差的9个原因\""},{"language":"text","snippet":"原木托盘上放着一台复古胶片相机,旁边是一束浅粉色干花插在玻璃花瓶中。托盘边缘摆着一本摊开的复古书籍,书页微微翻起。一只手轻轻握着装有拿铁的透明玻璃杯,杯口冒着细腻的奶泡。背景是奶油色亚麻抱枕,自然光从侧面洒入。比例3:4。松弛感ins风"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: ins-style-img-bulk-gen\ndescription: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly.\nallowed-tools: Read, Bash\nauthor: JackyShen\nargument-hint: \"[-s SCENE] [-c COUNT] [-t TEXT]\"\n---\n\n## 硬性要求 / Hard Requirements\n\n执行本 skill 时必须满足以下规范（任何一条不达标 = 产出不合格）：\n\n| # | 规范 | 约束值 / 操作 | 出处 |\n|---|---|---|---|\n| 1 | **封面字号（cover 模式）** | base = `0.07 × 图片高`（≈ 70px @ 1024h，比最初 80px 还小一点），下限 `0.05`，**行距 `0.18 × 字号`**（紧凑）；**2 行结构**（最长行 ≤ 8 字，按重要性递减排列，具体内容由领域决定） — 让标题横向占图宽 ≥ 70% | 2026-09-20 迭代 |\n| 2 | **Shell `\\n` 必须是真换行** | 用 `$'…\\n…'`（ANSI-C）或 `printf '%b'`；**禁止**普通双引号（会把字面 `\\n` 画进图） | 上轮反馈 #1 |\n| 3 | **生图模型优先级** | 首选 `huny-img`（腾讯混元 3.0） → 备选 `mmx` → 最后才用其他模型；huny-img **串行**提交（账号 JobNumExceed 上限 1，并发会限流） | 上轮反馈 #2 |\n| 4 | **内页图（`mode=ins`）body 必须 ≥ 3 行** | 不含 title 的正文至少 3 行，画面才饱满；用户原文不够时主动从他给的文案里拆 3-4 个短句 | 上轮反馈 #3 |\n| 5 | **内页正文 < 标题**（提高对比） | `INS_BODY_RATIO = 0.020`（标题 = 0.035），标题/正文 ≈ 1.75×，层级清晰 | 2026-09-20 迭代 |\n| 6 | **Cover 必须是 2x2 宫格**（4 张拼 1 张） | 4 张图用 `scripts/compose_collage.py` 拼成 `--layout 2x2`，cell 之间建议 `--gap 20~40px`、背景色用 `245,240,232`（暖白，与 INS 色调一致）；4 张图共享视觉风格（色温 / 色调 / 质感）但呈现**不同元素/视角**，避免 4 张图重复 | 2026-09-20 迭代 |\n| 7 | **Cover / 内页默认符合小红书尺寸**（**3:4 竖图**） | `compose_collage.py` 默认 `--cell-aspect 3:4` → cell 居中裁剪到 3:4，再拼成 2x2 → 整体 ≈ **3:4 竖图**；最终输出尺寸默认 `--target-size 1080x1440`（小红书 cover 标准），用 `add_ins_overlay.py` 加标题后直接上传即可。内页图（ins 模式）也按 3:4 生成，单图 768:1024（huny-img 默认 3:4 比例）。如要 4:3 横图或 1:1 方图，传 `--cell-aspect` / `--target-size` 覆盖即可 | 2026-09-20 迭代 |\n\n脚本默认常量已同步：`scripts/add_ins_overlay.py` 的 `COVER_TITLE_RATIO / FLOOR / LINE_GAP` 与本表一致。\n\n---\n\n## ins-style-image [-s SCENE] [-c COUNT] [-t TEXT]\n\n1. Read `./references/ins-style-elements.md` to understand the available element library\n2. Compose prompts. Default to **5 prompts** if the user doesn't specify a `{COUNT}`. Each prompt randomly draws **12 elements** (1-2 per category, no duplicates within one prompt) for `{SCENE}` if specified.\n   - **Cover 模式**（硬性）：**4 个 prompt**，每个对应 1 个宫格 cell（2x2 = 4 格）。4 张图共享视觉风格（同一色温 / 色调 / 质感 / 光照方向）但展示**不同元素或视角**（例如音乐主题：①唱片堆叠 ②耳机特写 ③黄铜烛台与干花 ④复古相机与乐谱），避免 4 张图内容雷同\n   - **内页模式**：1 prompt 1 张，按用户需要的内页数生成；单图默认 3:4 竖图（小红书内页标准），与 cover 视觉风格一致（色温 / 色调 / 质感统一）\n   - User may also ask for 3x3 or other collage layouts or customize with given images — calculate count accordingly.\n3. Iterate the prompt queue and dispatch them **in parallel** to image generation skills in the following priority order:\n   - **🥇 首选 `huny-img`**（腾讯混元生图 3.0）— 详情见 `~/.agents/skills/huny-img/SKILL.md`。`hunyuan3-text-to-image.py` 或 `hunyuan3-batch.py`（多 prompt 调度）\n   - **🥈 备选 `mmx`**（MiniMax 多模态"},{"path":"README.md","content":"# ins-style-img-bulk-gen SKILL\n\n![](./references/demo.jpg)\n\nBulk-generate Instagram-style images by randomly composing elements from an curated element library, then dispatching prompts to image generation skills in parallel.\n\nAlso may generate 2x2 collage, and add text in two modes:\n\n| Mode | Result | Use for |\n|---|---|---|\n| `ins` (default) | Semi-transparent gray mask + title + body | Inner-page / content images |\n| `cover` | No mask. Oversized centered title (~2×) with black outline + shadow. Title only | Social covers (Xiaohongshu / WeChat / Video) |\n\n```bash\n# ins: gray mask + title + body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -t \"❤ 富婆的 12 个隐秘爱好\" -b \"1、…\"\n\n# cover: no mask, big outlined title, no body\npython scripts/add_ins_overlay.py -i in.jpg -o out.jpg -m cover -t \"40+后才明白\\n女人越来越差的9个原因\"\n```\n\n![](./references/cover.jpg)\n\n[中文 →](README.zh-cn.md)"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75w6500mvryv9p0k3czdfww982r5xh\",\n  \"slug\": \"ins-style-img-bulk-gen\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1789959591309\n}"},{"path":"references/ins-style-elements.md","content":"# 📸 INS风构图元素清单\n\n\n\n## 高流量INS风元素总表\n\n### 📚 书籍文具类\n\n1. **复古书籍堆叠** - 知识分子气息\n2. **摊开的书籍** - 营造阅读氛围\n3. **立起展示的艺术书籍** - 封面作为视觉焦点\n4. **银色金属笔** - 精致文具\n5. **手写英文卡片** - 个性化文字\n6. **黑白励志文字卡片** - 态度标语\n7. **皮质笔记本** - 复古文具\n8. **水彩笔/马克笔** - 创作工具\n9. **木质字母装饰** - 个性化元素\n\n### 🌸 花卉植物类\n\n10. **干花花束** - 莫兰迪色系最佳\n11. **红色毛茛花束** - 鲜艳色彩点缀\n12. **绿色球形鲜花** - 新鲜质感\n13. **多肉植物盆栽** - 小清新元素\n14. **绿植枝叶** - 尤加利/橄榄枝\n15. **干花/蒲苇** - 自然元素\n16. **水果切片** - 柠檬/橙子最上镜\n17. **鲜花** - 粉玫瑰/白玫瑰/多头小玫瑰/郁金香/小雏菊\n\n### 🏺 容器器皿类\n\n17. **透明玻璃花瓶** - 简约透明质感\n18. **玻璃花瓶** - 简约透明质感\n19. **白色陶瓷花盆** - 简约盛器\n20. **手工陶瓷茶杯** - 褐色质感器皿\n21. **白色陶瓷杯组** - 复古图案杯具\n22. **陶瓷餐具套装** - 哑光质感最佳\n23. **手工陶瓷碗** - 不规则美感\n24. **透明玻璃杯** - 盛装饮品\n25. **白色马克杯** - 经典款\n26. **琥珀色玻璃瓶** - 复古感\n27. **磨砂玻璃瓶** - 现代感\n28. **透明收纳罐** - 展示谷物/干货\n29. **透明玻璃瓶** - 装饰小物\n30. **喝水玻璃杯**\n\n### 🛋️ 纺织布艺类\n\n30. **白色纱帘** - 柔和光线背景\n31. **亚麻材质抱枕** - 奶油色/米色\n32. **白色棉麻桌布** - 打底必备\n33. **羊毛地毯** - 温暖质感\n34. **蕾丝桌旗** - 法式浪漫\n35. **米色针织开衫** - 慵懒风\n36. **天鹅绒抱枕** - 质感丰富\n37. **棉麻围裙** - 生活气息\n38. **白色床品** - 简约高级\n39. **花卉图案床单** - 温馨感\n40. **深灰色针织毛毯** - 质感层次\n\n### 🪵 木质元素类\n\n41. **深色木纹桌面** - 质感底板\n42. **原木托盘** - 承载其他物品\n43. **木质相框** - 展示照片/艺术画\n44. **木质圆盘** - 摆放食物\n45. **木质砧板** - 厨房场景\n46. **原木边几** - 家居场景\n47. **木质衣架** - 展示服饰\n48. **木珠串** - 自然装饰\n\n### 🎨 装饰配饰类\n\n49. **复古胶片相机** - 增加文艺氛围\n50. **毛绒玩偶** - 可爱装饰（如穿红衣小熊）\n51. **珍珠装饰小物** - 精致配饰\n52. **珍珠项链** - 精致配饰\n53. **蜡烛香薰** - 营造氛围感\n54. **铜质烛台** - 复古金属感\n55. **黄铜小物件** - 点缀用\n56. **黄铜镜子** - 复古精致\n57. **羽毛装饰** - 波西米亚风\n58. **羊毛毡球** - 可爱装饰\n59. **水晶摆件** - 灵性氛围\n60. **黑框眼镜**\n\n### 📱 数码科技类\n\n60. **平板电脑** - 数字生活感\n61. **白色无线耳机** - 现代科技感\n62. **蓝色海浪图案手机壳** - 艺术装饰\n63. **白色头戴式耳机** - 音乐元素\n\n### 🧺 收纳编织类\n\n64. **编织篮筐** - 自然田园风\n65. **藤编收纳盒** - 自然材质\n66. **棉绳编织篮** - 收纳装饰两用\n67. **草编帽** - 度假感\n68. **帆布包** - 文艺必备\n69. **牛皮纸袋** - 复古包装感\n\n### 🍵 食物饮品类\n\n70. **咖啡豆/咖啡粉** - 生活仪式感\n71. **零食** - 生活气息，巧克力\n72. **褐色茶水/咖啡** - 饮品展示\n\n### 🏠 背景材质类\n\n73. **白色瓷砖** - 极简背景\n74. **大理石纹理板** - 高级背景\n75. **白色桌面** - 简约底板\n76. **白色百叶窗** - 光影效果\n\n### ⚙️ 金属配件类\n\n77. **金属置物架** - 增加层次\n78. **银色餐具** - 精致细节\n79. **麻绳/缎带** - 装饰细节\n\n---\n\n## 💡 元素搭配黄金公式\n\n### 公式1: 书香气息\n\n**书籍 + 花卉 + 饮品 + 文具 + 木质底板**\n\n### 公式2: 数字生活\n\n**电子设备 + 饮品 + 毛绒玩偶 + 纱帘背景 + 木纹桌面**\n\n### 公式3: 清新文艺\n\n**立起的书 + 鲜花 + 陶瓷器皿 + 文字卡片 + 白色底板**\n\n### 公式4: 温暖慵懒\n\n**纺织品 + 干花 + 复古相机 + 蜡烛 + 原木托盘**\n\n### 公式5: 极简高级\n\n**单色容器 + 绿植枝叶 + 大理石纹 + 金属小物 + 留白背景**\n\n---\n\n## 🎯 选品建议\n\n- **新手必备10件**: 白纱帘、木质托盘、透明花瓶、干花、白陶杯、摊开书籍、金属笔、亚麻抱枕、鲜花、木纹桌面\n- **进阶提升**: 复古相机、蜡烛香薰、手写卡片、毛绒玩偶、艺术书籍、励志标语卡\n- **高级质感**: 手工陶瓷、黄铜配件、珍珠装饰、大理石底板、天鹅绒抱枕\n\n\n## 构图小tips\n\n- 主体物品占画面1/3,留白营造呼吸感\n- 色调统一在莫兰迪/奶油/原木色系\n- 用手部动作增加生活感和互动性\n- 自然光侧光最出片,避免顶光\n- 物品高低错落,营造层次感\n------\n\n## 🎨 精选提示词方案\n\n### 慵懒午后咖啡时光\n\n```\n原木托盘上放着一台复古胶片相机,旁边是一束浅粉色干花插在玻璃花瓶中。托盘边缘摆着一本摊开的复古书籍,书页微微翻起。一只手轻轻握着装有拿铁的透明玻璃杯,杯口冒着细腻的奶泡。背景是奶油色亚麻抱枕,自然光从侧面洒入。比例3:4。松弛感ins风\n```\n\n### 文艺早餐桌面\n\n```\n白色棉麻桌布上铺着原木托盘,托盘中央放着一台复古胶片相机。旁边散落几张手写英文卡片,墨迹未干。一束干花斜靠在哑光质感的陶瓷杯旁,杯中是深棕色咖啡。画面角落可见奶油色亚麻抱枕的一角,自然光影柔和。比例3:4。松弛感ins风\n```\n\n### 温暖阅读角落\n\n```\n复古胶片相机放置在堆叠的三本复古书籍上,书脊显露出斑驳质感。旁边插着一小束莫兰迪紫色干花的玻璃花瓶,花瓣微垂。手写英文卡片斜靠在书堆旁,米色亚麻抱枕作为背景,营造出慵懒氛围。侧面光线勾勒出物品轮廓。比例3:4。松弛感ins风\n```\n\n### 浪漫氛围感夜晚\n\n```\n原木托盘居中摆放,上面是一台银色复古胶片相机。托盘左侧是玻璃花瓶装着香槟色干花,右侧燃"},{"path":"HANDOFF-PLAYBOOK.md","content":"# Skill ↔ Script Handoff Playbook\n\n> Reusable lessons from building `ins-style-img-bulk-gen` against `huny-img` + `add_ins_overlay.py`.\n> Use this when designing any skill that delegates work to a sub-skill or external API.\n\n---\n\n## The 5 Failure Modes We Hit\n\n| # | Failure | Symptom | Diagnosis | Fix |\n|---|---------|---------|-----------|-----|\n| 1 | Parallel dispatch to rate-limited API | 3 of 4 image jobs return `RequestLimitExceeded.JobNumExceed` | Read the sub-skill's SKILL.md for concurrency hints; run a probe with 2 parallel calls and watch for limit errors | Dispatch **sequentially** when the sub-skill's API is single-threaded; pass `--poll-interval` / `--timeout` to control cadence |\n| 2 | `.ttc` font loaded without `index` → fallback to 1-bit default | Chinese text renders as tofu rectangles | `python3 -c \"from PIL import ImageFont; f = ImageFont.truetype('/path/font.ttc', 30); f.getmask('中').getbbox() == None\"` | Always pass `index=0` (or specific index for bold/italic variants) when loading `.ttc` |\n| 3 | CJK font missing decorative glyphs (❤ ★ ♡ →) | Hollow-X tofu box appears in the title | Render the suspect char to a 200×200 PNG with the chosen font and look at it; don't trust `getmask().getbbox()` (it's non-None for tofu too) | Route decorative Unicode through a **dedicated symbol font** (`Arial Unicode MS` is the cross-platform safety net) |\n| 4 | Shadow rendered at top-left of text instead of bottom-right | White text looks \"flat\" against the gray mask; no depth | Render a single character with shadow, save the image, inspect — pixel diff between expected (dx=+3, dy=+3) and actual position | Inside the shadow layer, use `(margin + dx, margin + dy)` as the text origin, **not** `(margin - bbox[0] + dx, ...)` — the latter double-counts the bbox offset |\n| 5 | `textwrap.wrap(width=N)` overflows on CJK + box height underestimated | Long lines extend past the gray mask; last line gets clipped | `dummy_draw.textlength(long_line, font=font)` and compare against `box_w - 2×padding` | Wrap by **measured pixel width** (`textlength` per char); measure per-line `textbbox` height and sum + `line_extra_gap` |\n\n---\n\n## Pre-Flight Checklist for Any New Skill\n\nBefore shipping a skill that wraps another tool, walk through this:\n\n### 1. Survey the sub-skill's API limits\n```bash\n# Read the sub-skill's SKILL.md / README — note any rate limits, concurrency caps, file size limits\n# Probe: submit 2 jobs in parallel and watch for errors\n```\n\n### 2. Survey platform dependencies\n```bash\n# What fonts/libraries/binaries does the sub-skill need?\n# Is the dependency available on macOS, Linux, Windows?\n# Run a probe script that loads the dependency and confirms it works.\n```\n\n### 3. Build a minimal end-to-end smoke test FIRST\n```bash\n# Before composing fancy prompts / layouts, run ONE round-trip and inspect output\n# Open the generated image. Look for:\n#   - Text rendering correctly (not tofu)\n#   - Layout proportions sensible\n#   - Output dimensions match expe"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cover art, or scene-based marketing visuals — even if they don't say 'Instagram' explicitly. Skill: Ins Style Image Bulk Generate Owner: mebusw Summary: Generate batches of Instagram-aesthetic photos (INS-style / Xiaohongshu / lifestyle flat-lay) by randomly composing prompts from an 80+ element library, then dispatching them in parallel to image generation skills and archiving to ~/Download/ins-image-{timestamp}/. Use when the user wants bulk INS-style images, lifestyle flat-lays, Xiaohongshu or WeChat cove","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1192,"uniquenessScore":53,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T10:49:45.461Z","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-11T10:49:45.461Z","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-11T14:17:01.115Z","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"}]}}}