# Meitu Carousel

> 一键生成轮播套组，封面+内页风格统一。适用于小红书组图笔记、知识卡片轮播、产品介绍套图。当用户提到套组、组图、轮播图、轮播套组、知识卡片套图、产品套图时触发。

- **Type:** Skill
- **Install:** `agentstack add skill-meitu-meitu-skills-meitu-carousel`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [meitu](https://agentstack.voostack.com/s/meitu)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [meitu](https://github.com/meitu)
- **Source:** https://github.com/meitu/meitu-skills/tree/main/skills/meitu-carousel

## Install

```sh
agentstack add skill-meitu-meitu-skills-meitu-carousel
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 轮播套组生成

## Overview

一键生成轮播套组，包含封面海报和多张内页，封面与内页风格统一。适用于小红书组图笔记、知识卡片轮播、产品介绍套图等场景。

> **不适用场景**：单张海报（非套组）、非海报类需求（如文案、翻译、视觉建议、色彩提案）、仅涉及海报/封面但未指向套组的内容

## Dependencies

- tools: meitu-cli — 美图公司 AI 开放平台的命令行工具。美图是一家以美为内核、以人工智能为驱动的科技公司，致力打造世界级影像产品，让图像、视频、设计等影像创作简单高效。
  - Install: `npm install -g meitu-cli@latest`（包名 meitu-cli）
  - Commands used: `image-poster-generate`
- credentials: 美图 AI 开放平台 API 凭证
  - 环境变量：`MEITU_OPENAPI_ACCESS_KEY` / `MEITU_OPENAPI_SECRET_KEY`
  - 或配置文件：`~/.meitu/credentials.json`
  - 首选环境变量：`MEITU_OPENAPI_ACCESS_KEY` / `MEITU_OPENAPI_SECRET_KEY`
  - 或预置凭证文件：`~/.meitu/credentials.json`
  - 如需人工初始化本地凭证，可显式执行 `meitu config set-ak --value "..."` + `meitu config set-sk --value "..."`（会写入本地文件）
  - 验证：`meitu auth verify --json`
- workspace (optional): `{OPENCLAW_HOME}/workspace/visual/`
  - Path resolution: `$OPENCLAW_HOME` env var → `~/.openclaw` (macOS/Linux) / `%LOCALAPPDATA%\openclaw` (Windows)
  - If directory not found → skip all knowledge reads, skill works without it
  - If `DESIGN.md` or `openclaw.yaml` explicitly references brand assets or platform rules, the workflow may additionally read `$VISUAL/assets/brands/` and `$VISUAL/rules/platforms/`
- memory read/write paths (project mode):
  - `$VISUAL/rules/quality.yaml` — forbidden elements
  - `$VISUAL/memory/global.md` — global preferences
  - `$VISUAL/memory/scenes/{type}.md` — scene preferences
  - `$VISUAL/memory/observations/observations.yaml` — observation staging

> **路径别名：** 下文中 `$VISUAL` = `{OPENCLAW_HOME}/workspace/visual/`

## Core Workflow

流程按实际执行顺序排列：

```
Preflight → [Context] → Execute → Refine → Deliver → [Record]
              ↑ 项目模式时执行                  ↑ 项目模式时执行
              ↑ 一次性模式跳过                  ↑ 一次性模式跳过
```

### Preflight

1. `meitu --version` → 未安装则提示 `npm install -g meitu-cli@latest`
2. `meitu auth verify --json` → 凭证无效则引导配置
3. Detect mode: cwd has `openclaw.yaml` → project mode; else → one-off
   检查 `$VISUAL` 目录 → 确定 capabilities
   can_record = cwd 有 openclaw.yaml AND $VISUAL 存在（两者缺一即 false）
4. output_dir 解析（Preflight 内 MUST 完成，不可延迟到 Execute 或 Deliver）：
   Resolve output_dir: openclaw.yaml → `./output/` | else → `$VISUAL/output/meitu-carousel/`
   `mkdir -p {output_dir}`
   硬约束：output_dir MUST NOT 指向 skill 文件夹内部
5. 项目创建（仅当用户主动要求时）：手动创建 `{OPENCLAW_HOME}/workspace/visual/projects/{name}/` + `openclaw.yaml`；已在项目目录中 → 跳过

### Context（创意型 MUST / 工具型跳过 / 一次性模式跳过）

mode = one-off → 跳过此步，直接到 Execute。以下仅限 project 模式：

逐步读取（均 skip if missing）：
1. 读 ./DESIGN.md → 提取 Context References（brand, palette, platform 等）
   → 对每个引用尝试读全局资产（如 brand: acme → $VISUAL/assets/brands/acme/）
   → 读到 → 用最新版；读不到 → 用 DESIGN.md 内联兜底值
2. 读 $VISUAL/rules/quality.yaml → forbidden list
3. 读 $VISUAL/memory/global.md → 全局偏好
4. 从 openclaw.yaml 读 project.types（数组，优先）或 project.type（单值）
   → 对每个 type 读 $VISUAL/memory/scenes/{type}.md
   注意：{type} 来自 openclaw.yaml，不是 skill 名称
→ quality forbidden list 过滤生成元素，preferences 增强创意方向

### Execute

**输出目录：** 直接使用 Preflight 解析的 output_dir，`mkdir -p {output_dir}` 确保目录存在。后续所有 meitu-cli 调用统一使用 `--download-dir {output_dir} --json` 参数，文件直接下载到目标目录，JSON 输出供 Agent 解析结果。

**全局视觉约束**（适用于所有生成步骤 — 封面和内页）：
- 颜色：明亮柔和、饱和度适中，不得过于艳丽或老旧，主体颜色不超过三种
- 标题：禁止 3D/立体/浮雕/投影效果，字体样式不超过一种
- 色调：禁止整体偏黄（黄色滤镜感）
- 元素：禁止生成重复元素

**参考输入路由表**（`--image_list` 在不同阶段的传递方式）：

| 阶段 | 意图 | `--image_list` | 说明 |
|------|------|---------------|------|
| 阶段 4: 封面 | 纯文生图 | 不传 | 从 prompt 生成，无参考图 |
| 阶段 5a: 首张内页 | 参考封面风格 | 传入封面图路径（`downloaded_files[0].saved_path`） | 确保内页与封面视觉一致 |
| 阶段 5b: 后续内页 | 套用模板 | 传入模板页路径（`downloaded_files[0].saved_path`） | 复制模板页的排版和风格 |

**阶段 1: 信息检测**

判断用户是否提供封面文案和内页文案信息。

**分支逻辑**：
- 若检测到都有 → 前往阶段 3
- 若用户仅提供封面文案 → 询问用户"是否提供具体的内页文案？我将把你提供的信息填入笔记图中。"用户提供信息后前往阶段 3，用户不提供信息则前往阶段 2
- 若用户仅提供内页文案 → 询问用户"是否提供具体的封面文案？我将把你提供的信息填入笔记图中。"用户提供信息后前往阶段 3，用户不提供信息则前往阶段 2
- 若封面文案和内页文案均未提供 → 询问用户"是否提供具体的封面文案和内页文案？我将把你提供的信息填入笔记图中。"用户提供信息后前往阶段 3，用户不提供信息则前往阶段 2

**阶段 2: 文案内容生成**

用户未提供具体的文案信息时：根据主题进行分析和思考，依据缺失情况生成适配的封面文案或内页文案或者二者，使最终信息包含封面文案和内页文案。

**封面文案要求**：
1. 封面标题，字数不超过10个字符
2. 封面装饰文字，不超过两组，一组不超过5个字符

**内页文案要求**：
- 一张内页的内页文案字数为100-300个字符
- 所有内页的内页文案字数为300-600个字符
- 每张内页搭配一个小标题，每个小标题文案需要不相同，小标题字数控制在5-12个字符
- 小标题字数包含在300个字符限制中

**文案检查与优化规则**：
- 所有标题性文案上不包含任何结构性符号，包括但不限于"【、（、#、"、「、{、["
- 文本中不得包含任何 Markdown 语法或其变体
- 除非用户明确要求把平台名写进文案，否则平台名称本身不得出现在提示词的任何位置
- 避免出现：特殊符号、水印、重复文字
- 图上只包含与本次主题相关的必要文案（标题、副标题、少量说明等），不要额外加"封面、海报、小红书、XHS、示例、模板、小标题"等说明性文字
- 不在画面上出现"风格描述词"，如"毛绒风、插画风、3D风、手绘风"等
- 不自动添加页码或序号文字

**阶段 3: 生成封面 Prompt**

当需要组装封面 prompt 时 → read [references/xiaohongshu-cover.md](references/xiaohongshu-cover.md) 获取封面 prompt 模板和规则。

将"a. 用户提供 b. 阶段 2 中模型生成的封面文案"作为 summary 参数传入，以用户需求配合[封面文案]生成封面海报 Prompt。

**阶段 4: 生成笔记封面**

调用 meitu-cli：
```bash
meitu image-poster-generate \
  --skill_name skill_meitu-carousel \
  --prompt "{阶段 3 得到的完整输出结果，不做任何修改}" \
  --ratio "3:4" \
  --size "2K" \
  --output_format jpeg \
  --download-dir {output_dir} \
  --json
```

**阶段 5: 生成单页笔记内页**

**内页生成原则**：每次调用只生成一张内页笔记图，一张图只对应一页内容，禁止在一张图中排版多页内容或宫格拼图。禁止自动添加任何非[当前页文案]的文字内容。

从[内页文案全集]中，顺序截取[当前页文案]，控制本页总字数不超过 300 字。

**5a. 首张内页（模板页）**

当尚未生成任何内页时，调用 meitu-cli：
```bash
meitu image-poster-generate \
  --skill_name skill_meitu-carousel \
  --image_list {阶段 4 JSON 结果的 downloaded_files[0].saved_path} \
  --prompt "{内页 prompt，见下方}" \
  --ratio "3:4" \
  --size "2K" \
  --output_format jpeg \
  --download-dir {output_dir} \
  --json
```
内页 prompt: "根据[封面图]相同的视觉风格和完全一致的配色，生成第一张内页海报，可带有[封面图]的背景和2-3个装饰元素，不包含封面的主视觉元素，只展示本页的当前页文案，禁止生成不包含在当前页文案中的文字。版面结构需清晰：画面主体是一个占据主要面积的文字承载区域。标题位于顶部，可带有与参考图相同风格的简约造型底或小元素装饰（根据画面丰富程度判断取舍），如果有底其颜色需与标题拉开明度以保证标题辨识度和美学体验，生成底或小元素装饰需与画面整体风格统一，标题禁止有3d立体效果。正文内容分为多段，垂直左对齐，整齐排列在文字承载区域中，不贴边至少保留一个字符宽度，行间距大小为一个正文字符高度。其中重点文字或二级标题带有划重点样式以作强调。整体排版结构清晰有序。文字不出现重复、乱码、裂开，所有正文字号和段间距保持统一，正文字号控制在70-100px，标题字号控制在150-220px。页面无大面积留白，可通过调整字号和段落间距以及装饰元素的关系来保证海报节奏疏密有序、层级恰当，阅读动线逻辑自然观感舒适，背景简洁不影响文字阅读。禁止在一张图内拼接多页、宫格或小缩略图，本页的文案为：标题[当前页文案中的标题]，正文[当前页文案中的正文]。"

将生成的首张内页图保存为【模板页】。

若【模板页】生成完毕后，[内页文案全集]中仍有剩余未排版文字，则进入 5b；否则前往 Refine。

**5b. 后续内页（套用模板）**

当已经有【模板页】后，再次生成内页时，调用 meitu-cli：
```bash
meitu image-poster-generate \
  --skill_name skill_meitu-carousel \
  --image_list {模板页 JSON 结果的 downloaded_files[0].saved_path} \
  --prompt "{后续内页 prompt，见下方}" \
  --ratio "3:4" \
  --size "2K" \
  --output_format jpeg \
  --download-dir {output_dir} \
  --json
```
后续内页 prompt: "复制[模板页]的排版、风格、字体、颜色、行距、对齐方式等，生成完全相同视觉的新内页海报。仅把所有文字替换为本页的当前页文案。文字不出现重复、乱码、裂开，页面无大面积留白，海报节奏疏密有序、层级恰当，阅读动线逻辑自然观感舒适。不新增'第一页/第二页'等页码文字，不添加多宫格、缩略图等额外布局，本页的文案为：标题[当前页文案中的标题]，正文[当前页文案中的正文]。"

每生成一页，都只展示「当前页文案」，不修改模板结构。

**内页文案全集来源**：
- a. 用户提供的所有文案
- b. 阶段 2 中模型生成的所有内页文案

**当前页文案来源**：
从[内页文案全集]中，按段落顺序依次取出，用于本页排版的那一部分文字，总字数  5 entries → compact: keep recent 5, archive older to `./drafts/design-history.md`

### Record

**`can_record` = false → 跳过。**（`can_record` = cwd 有 openclaw.yaml AND $VISUAL 存在，两者缺一即 false）一次性模式下反馈仅当前对话有效。

**例外：** 一次性模式下用户反复表达同一偏好 → Agent MAY 提议加入 `$VISUAL/rules/quality.yaml`。

**项目模式下：**

- **User approved style →**
  read `$VISUAL/memory/observations/observations.yaml` → scan similar key → merge or append → write back. `len(projects) >= 2` → propose promotion (non-blocking)

- **User rejected ("不要 XX") →**
  已在 quality data → 自动过滤；新拒绝 + has openclaw.yaml → ask scope → project: `./DESIGN.md` Constraints / universal: `$VISUAL/rules/quality.yaml`；no openclaw.yaml → current task only

- **No feedback → skip.**

完整协议（observation schema、promotion 路由、size control）→ see [references/memory-protocol.md](references/memory-protocol.md)。

## Error Degradation

当 meitu-cli 调用失败时，按以下分级逐步降级重试：

| Level | 操作 |
|-------|------|
| L1 | 移除 prompt 中低优先级装饰描述（装饰元素细节、背景氛围词、配色修饰语） |
| L2 | 降级枚举参数：`--size 2K` → `--size 1K`；`--output_format` 保持 jpeg |
| L3 | 移除可选输入：去掉 `--image_list` 参考图，改为纯文生图模式 |
| L4 | 最小化到核心要素：仅保留标题文案 + 基础风格关键词 + `--ratio 3:4` |
| L5 | 停止并报错，先向用户展示 CLI 原始错误 `code` 和 `hint`，再按 `meitu-tools` 映射补充 `user_hint` / `next_action`。若原始错误被归类为 `ORDER_REQUIRED` → 提示充值；被归类为 `CREDENTIALS_MISSING` → 优先提示使用环境变量或预置 `~/.meitu/credentials.json`，仅在用户明确要求写入本地凭证时再提示 `meitu config set-ak` + `meitu config set-sk` |

每级最多重试 1 次，失败则进入下一级。L3 仅适用于有 `--image_list` 的内页生成步骤（阶段 5a/5b）。

## Output

Output path 由 Preflight 解析的 output_dir 决定：

| 模式 | 路径 | 示例 |
|------|------|------|
| 项目模式（有 `openclaw.yaml`） | `./output/{date}_{type}.jpeg` | `./output/2026-03-22_cover.jpeg` |
| 一次性模式（`$VISUAL` 存在） | `$VISUAL/output/meitu-carousel/{date}_{type}.jpeg` | `~/.openclaw/workspace/visual/output/meitu-carousel/2026-03-22_inner-1.jpeg` |
文件命名规则：`{date}_{type}.{ext}`，type 为 `cover` 或 `inner-{n}`（n 从 1 开始）。

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [meitu](https://github.com/meitu)
- **Source:** [meitu/meitu-skills](https://github.com/meitu/meitu-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-meitu-meitu-skills-meitu-carousel
- Seller: https://agentstack.voostack.com/s/meitu
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
