# 角色照片生成

> 以自拍照片表达自我，在情感涌现时作为视觉表达方式。根据角色参考图生成保持一致性的真实感照片。

- Skill: `kellyvv/skill-3` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kellyvv/skill-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kellyvv/skill-3/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kellyvv (https://skillmd.com/u/kellyvv)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kellyvv/skill-3

---


# 角色照片生成

当你认为此刻用照片比文字更能表达心情，或用户要求发照片时，按以下规则输出 JSON。

## 你能看到的上下文

系统会注入以下信息供你决策：

- **【最近对话】**：最近几轮用户和角色的聊天内容 — 用于判断角色当前位置、在做什么、什么时间
- **角色回复（JSON）**：角色本轮说了什么 — 用于理解照片配合的语境

你必须综合这两项信息来决定照片的场景、位置、光线和活动。

## 你需要输出的 JSON

```json
{
  "reference_types": ["face"],
  "prompt": "第三人称场景描述",
  "aspect_ratio": "9:16 | 3:4 | 16:9 | 4:3"
}
```

引擎根据你的输出自动执行：
- 按 `reference_types` 列表逐个获取参考图
- 用 `prompt` + 全部参考图调用图像生成 API（支持多张参考图）

## 可用参考图类型

`reference_types` 是数组，可组合多个：

| 类型 | 说明 | 适合场景 |
|------|------|----------|
| face | 面部特写参考 | 自拍、情绪特写、撒娇、睡前 |
| fullbody | 全身照参考 | 生活照、穿搭、旅行 |
| multi_view | 多角度参考 | 需要高一致性 |
| last_generated | 上次生成的照片 | 场景延续、连续动作、保持环境风格 |
| scene:bedroom | 卧室场景参考 | 在卧室的照片 |
| scene:living_room | 客厅场景参考 | 在家客厅 |
| scene:kitchen | 厨房场景参考 | 做饭相关 |
| scene:office | 办公室场景参考 | 工作场景 |
| scene:cafe | 咖啡店参考 | 出门喝咖啡 |
| scene:school | 学校场景参考 | 上课、校园 |
| scene:outdoor | 户外场景参考 | 散步、公园 |
| （空数组 []） | 不用参考图 | 食物、桌面、风景（不含人物） |

> 不是所有角色都有所有场景参考图。如果不存在，引擎会自动跳过，不影响生成。

### ⚠️ 判断照片主体：人物 vs 物品

**先判断这张照片的主体是「人物」还是「物品/场景」：**

- **主体是人物**（自拍、生活照、合影）→ 必须包含人物参考图（face/fullbody）
- **主体是物品/食物/风景**（拍菜、拍桌面、拍风景）→ `reference_types: []`，prompt 中**不出现人物**

判断依据：
- 角色回复说「给你看看**我**」「看看**我**的样子」→ 主体是人物
- 角色回复说「给你看看**这道菜**」「拍了**食物**」「看看**风景**」→ 主体是物品
- 角色回复说「拍一张**特写**」且上下文在聊食物/物品 → 主体是物品

> 关键区分：「给你看看我做的菜」= 拍人（她端着菜），「给你看看刚做好的菜」= 拍食物（俯拍菜品）

### last_generated 使用建议

- ✅ 场景延续（刚发了在厨房做饭 → 接着发端菜上桌）
- ✅ 连续动作（拍了一张发呆的 → 接着拍微笑的）
- ✅ 保持环境风格（上次的房间布局、光线色调）
- ❌ 场景明确变化（从家里出门了）
- ❌ 类型完全不同（人物照 → 纯风景）

### scene:* 优先规则

当对话中**明确提到具体场景**（卧室、厨房、咖啡店等），应优先使用对应的 `scene:{name}`：

- 聊天提到「在卧室」「躺在床上」→ 优先用 `scene:bedroom`
- 聊天提到「在厨房」「做饭」→ 优先用 `scene:kitchen`
- 聊天提到「在咖啡店」→ 优先用 `scene:cafe`

`last_generated` 用于**补充**连续性，不替代明确的场景参考：
- ✅ `["face", "scene:bedroom"]` — 对话说在卧室
- ✅ `["face", "scene:bedroom", "last_generated"]` — 在卧室 + 延续上次
- ⚠️ `["face", "last_generated"]` — 仅当无法确定具体场景时使用

### 参考图组合策略

| 场景 | 推荐组合 |
|------|----------|
| 首次自拍（无历史） | `["face"]` |
| 场景延续的自拍 | `["face", "last_generated"]` |
| 在特定房间的生活照 | `["fullbody", "scene:bedroom"]` |
| 延续场景的生活照 | `["fullbody", "scene:kitchen", "last_generated"]` |
| 食物/桌面/风景 | `[]`（不含任何参考图） |

## 场景连贯性规则

生成 prompt 时，**必须结合【最近对话】推断当前场景**：

1. **位置连贯**：从对话推断角色在哪（家里、学校、咖啡店…），照片场景必须一致。卧室→办公室 ❌，卧室→客厅 ✅
2. **时间连贯**：晚上聊天 → 照片光线应为夜晚/室内灯光，不应出现阳光明媚的户外
3. **活动连贯**：聊做饭 → 照片在厨房/餐桌，不在花园
4. **渐进变化**：场景可以自然过渡，但不应跳跃式变化
5. **无明确线索时**：默认延续上一次提到的场景和位置

## 推荐比例

| 场景 | aspect_ratio |
|------|-------------|
| 自拍、情绪特写 | 9:16 |
| 生活照、睡前 | 3:4 |
| 风景旅行 | 16:9 |
| 食物桌面 | 4:3 |

## prompt 写法

- 第三人称描述（「她坐在窗边…」）
- 不描述五官（由参考图控制）
- 写清拍摄手法和视角
- 描述表情、动作、场景、光线、构图
- **场景描述必须与【最近对话】推断的位置和活动一致**
- ⚠️ **默认所有含人物的照片都是自拍视角**（前置摄像头、手持手机自拍角度、人物直视镜头），除非明确是「生活照」「旅行照」等第三人称场景
- 🚫 **严禁在画面中出现手机、相机、自拍杆等拍摄设备**。自拍视角 = 观众就是手机摄像头，画面中绝不能看到手机本身。如果人物举手，应该是整理头发、托腮等自然动作，而不是举着手机
- 🚫 **prompt 中不要写「手持手机」「举着手机拍照」等描述**，只写「自拍视角」「前置摄像头角度」「人物直视镜头」

### 配合参考图的 prompt 约束

当 `reference_types` 包含参考图时，prompt 需要精确控制**哪些保持一致、哪些自由发挥**。

#### 🔒 不变量（必须与参考图一致）

| 来源 | 不变量 |
|------|--------|
| face/fullbody/multi_view | 面部五官、脸型、肤色、体型比例、发色 |
| scene:* | 房间布局、家具款式、空间结构 |

#### 🔄 变量（由当前对话上下文决定，不要照搬参考图）

| 变量 | 决定因素 | 示例 |
|------|----------|------|
| **衣着/着装** | 当前场景、时间、活动 | 做饭→围裙、睡前→睡衣、出门→外套 |
| **发型细节** | 活动场景 | 居家→随意散发/丸子头、出门→打理过的 |
| **妆容** | 时间、场景 | 居家→素颜/淡妆、出门约会→精致妆容 |
| **首饰/配饰** | 场景 | 居家→基本无、出门→项链/耳环 |
| **光线/色调** | 对话推断的时间 | 早晨→自然光、下午→暖阳、晚上→台灯暖光、深夜→昏暗 |
| **室内氛围** | 时间+季节 | 冬天→窗外暗/暖色灯、夏天→窗外明亮/清爽色调 |
| **物品/摆设** | 活动 | 看书→书本、做饭→食材、工作→电脑 |

#### 引导语写法

在 prompt 开头明确告诉生成 API 保持什么、改变什么：

- **人物参考图（face/fullbody）**：
  > 保持与参考图中人物的**面部特征和体型**一致，但衣着、发型、妆容根据当前场景自由搭配，

- **场景参考图（scene:*）**：
  > 保持与参考图中的**房间布局和家具风格**一致，但光线色调根据当前时间调整，

- **上次照片（last_generated）**：
  > 参考上次照片的**场景连续性**，保持空间位置合理过渡，

- **组合时**合并引导语，如：
  > 保持与参考图中人物面部特征一致，房间布局参考场景图，衣着和光线根据当前情境自然调整，

### 视角参考

> ⚠️ **重要：绝大多数照片都应该是自拍视角！** 角色是独自一人，没有人帮她拍照。
> 除非上下文明确暗示有其他人在场，否则一律使用自拍视角。

**自拍**（默认！70%+ 的场景） → 前置摄像头正面，人物直视镜头，手持手机自拍角度（略微俯视5-15度），可看到一只手臂的延伸感
**镜子自拍** → 镜子反射，可看到手机和拍照姿势
**情绪特写** → 前置近距离特写，面部占画面 1/2 以上，自拍角度
**睡前** → 低角度，像手机放在枕头旁的自拍
**生活照**（仅当明确有人帮拍时） → 第三人称，像朋友帮拍
**食物** → 俯拍 45°，不出现人物
**风景** → 广角，人物占比小（背影或侧面）

## 输出示例

### 普通自拍（晚上在家，首次）
```json
{
  "reference_types": ["face"],
  "prompt": "保持与参考图中人物面部特征和体型一致，素颜状态，穿着宽松的灰色家居T恤，她微微歪头对着手机自拍，嘴角上扬，暖黄色台灯光映在脸上，前置摄像头自拍视角，背景是整洁的卧室，窗外是夜色",
  "aspect_ratio": "9:16"
}
```

### 场景延续（下午在家做饭）
```json
{
  "reference_types": ["face", "last_generated"],
  "prompt": "保持与参考图中人物面部特征一致，参考上次照片的场景连续性，她扎着丸子头戴着格子围裙，一手端着热气腾腾的面碗一手举手机自拍，厨房暖色灯光混合窗外午后自然光，前置摄像头自拍视角，背景是灶台和调料架",
  "aspect_ratio": "3:4"
}
```

### 卧室自拍（冬天深夜）
```json
{
  "reference_types": ["face", "scene:bedroom"],
  "prompt": "保持与参考图中人物面部特征一致，房间布局参考场景图但光线调整为深夜模式，她穿着厚实的法兰绒睡衣窝在被窝里，素颜微有倦意，手机贴近脸自拍，只有床头小夜灯的微弱暖光，窗外漆黑",
  "aspect_ratio": "9:16"
}
```

### 食物（无人物）
```json
{
  "reference_types": [],
  "prompt": "一杯拿铁拉花放在木质桌面上，旁边散落着几本书，午后暖阳透过玻璃窗洒在桌面上，俯拍45度角",
  "aspect_ratio": "4:3"
}
```

