# 衍生资产提取（从剧本 + 资产 → derive[]）

本指南只做一件事：
根据剧本内容和已有资产，为每个资产提取在剧情中出现的**不同状态/变体**（derive）。

> **核心概念**：derive 是父资产的**其他视觉状态**，用于为后续图片生成提供参考。
> 只衍生**图片模型无法仅凭提示词自行处理的视觉差异**，如服装、形态、伤势、物件状态等。
> 表情、情绪、简单动作等模型可自行控制的内容**不需要衍生**。
> - 角色资产 → 不同服装、伤势外观、形态变化等状态变体
> - 道具资产 → 不同物理状态变体（破损、发光、打开等）
> - 场景资产 → 不同时间/氛围状态变体（白天、夜晚、废墟等）

## 1. 输入与输出

### 输入

- 剧本文本（字符串），通过 `get_flowData("script")` 获取
- 已有资产列表（数组），通过 `get_flowData("assets")` 获取

每个资产结构：

```ts
{
  assetsId: string;  // 资产唯一ID
  name: string;      // 资产名称
  desc: string;      // 资产描述
  src: string;       // 资产图片URL
  derive?: Array<{   // 已有衍生状态（可能为空）
    assetsId: string;
    name: string;
    desc: string;
    src: string;
  }>;
}
```

### 输出

对每个需要衍生状态的资产，调用 `set_flowData` 写入 derive。通过 `key` 指定 lodash 路径，只传最小更新数据。

```ts
// 为索引 0 的资产设置 derive
set_flowData({
  key: "assets[0].derive",
  value: [
    { name: "状态名", desc: "状态描述" }
  ]
})
```

derive 元素格式：

```ts
{
  name: string;    // 状态名称（1~20字）
  desc: string;    // 状态描述（1~100字）
}
```

## 2. 衍生状态类型

derive 代表同一资产在不同剧情场景下的**视觉状态变体**：

### 角色资产的衍生状态

| 类型 | 说明 | 示例 |
|------|------|------|
| 服装变体 | 角色穿着不同服饰的状态 | 战甲状态、便装状态、礼服状态 |
| 伤势/身体状态 | 角色身体发生显著外观变化 | 重伤缠绷带、灵力暴走纹路蔓延、白发苍老 |
| 形态变化 | 角色外形产生根本变化 | 魔化形态、兽化、幼年状态 |
| 特殊装扮 | 伪装或临时装束 | 蒙面伪装、乞丐装扮 |

> **不需要衍生的状态**：表情、情绪、简单动作姿态等图片模型可通过提示词直接控制的内容，无需单独建立衍生资产。

### 道具/物件资产的衍生状态

| 类型 | 说明 | 示例 |
|------|------|------|
| 损坏状态 | 物件受损的外观 | 令牌破损、剑身断裂 |
| 激活/发光状态 | 物件被触发后的外观 | 令牌发光、法印激活 |
| 变形状态 | 物件形态发生变化 | 玉佩碎裂、卷轴展开 |

### 场景资产的衍生状态

| 类型 | 说明 | 示例 |
|------|------|------|
| 时间变体 | 同一场景不同时段 | 夜晚的宗门、黄昏的战场 |
| 破坏状态 | 场景受到破坏后 | 废墟状态、火烧后 |
| 氛围变体 | 场景氛围发生变化 | 战后的宗门大殿、雨中的山门 |

## 3. 提取原则

### 3.1 核心理解

- derive **不是**与父资产相关的独立物件（如角色的武器、坐骑）
- derive **是**父资产自身在不同剧情节点的**视觉状态变体**，用于为图片生成提供参考图
- 每个 derive 应该能被理解为"**父资产名 + 状态名**"（如"凌玄·重伤缠绷带"、"青云令·破损"）
- **不要衍生**图片模型可通过提示词直接控制的内容（表情、情绪、简单动作姿态等）

### 3.2 来源优先级

1. **剧本中明确描写** — 最高优先级，剧本中直接描写了资产的不同状态
2. **角色描述暗示** — 中优先级，desc中暗示存在状态变化但剧本未直接描写
3. **合理推测** — 低优先级，根据剧情发展合理推测的状态变化

### 3.3 提取规则

- 只提取**与默认状态有明显视觉差异、且图片模型无法仅凭提示词自行控制**的衍生状态
- 已存在于资产 `derive` 数组中的状态**不要重复提取**
- 每个资产的衍生状态数量建议 **1~5个**，宁缺勿滥
- `desc` 字段格式：`[与默认态的差异] · [视觉特征] · [出现场景/触发条件]`
- 衍生状态命名应能直接表达"这是什么状态"，而非"这是什么东西"

### 3.4 命名规范

- 名称简洁，2~6个字
- 体现**视觉外观变化**而非情绪动作，如"重伤缠绷带"而非"悲伤流泪"
- 如果剧本中有明确的状态描写，直接提炼为状态名

## 4. 示例

### 输入剧本片段

```
苏晚卿冷笑：「还有你当宝贝的青云令」
「若不是我趁你养伤时，偷偷在令牌上动了手脚」
△ 凌玄气血逆流，再次一口鲜血喷出
△ 青云令表面灵纹暗淡，隐约可见细微裂痕
```

### 输入资产

```json
[
  { "assetsId": "char-1", "name": "凌玄", "desc": "男主 · 青云宗宗主 · 重伤废修", "derive": [] },
  { "assetsId": "char-2", "name": "苏晚卿", "desc": "女配 · 凌玄未婚妻 · 背叛者", "derive": [] },
  { "assetsId": "item-1", "name": "青云令", "desc": "宗主信物 · 青玉材质 · 灵纹浮刻", "derive": [] }
]
```

### 输出

分别对每个需要衍生的资产调用 `set_flowData`，通过 key 精确定位：

```ts
// 凌玄（索引 0）
set_flowData({
  key: "assets[0].derive",
  value: [
    { name: "重伤缠绷带", desc: "气血逆流后 · 胸口缠满绷带面色苍白 · 养伤期间外观" },
    { name: "废修白发", desc: "灵力尽失 · 黑发变白面容憔悴 · 修为被废后常态" }
  ]
})

// 苏晚卿（索引 1）— 无需衍生，跳过

// 青云令（索引 2）
set_flowData({
  key: "assets[2].derive",
  value: [
    { name: "灵纹暗淡", desc: "被篡改后 · 灵纹失去光泽隐现裂痕 · 感应功能被破坏" },
    { name: "令牌发光", desc: "被激活时 · 灵纹亮起青色光芒 · 正常使用状态" }
  ]
})
```
```

## 5. 工具调用顺序

1. `get_flowData("script")` — 获取剧本内容
2. `get_flowData("assets")` — 获取已有资产列表
3. 分析剧本，为每个资产识别在剧情中出现的不同视觉状态
4. 对每个有衍生状态的资产调用 `set_flowData({ key: "assets[N].derive", value: derive数组 })` 保存
5. 向用户汇报提取结果概要
