# Character / Look 设计

## 目录

1. 分工
2. Character：最小稳定识别集
3. Look：一次相容的外观组合
4. 可选声音方向：身份锚点不等于本场 delivery
5. 制作形态与身份锚点的可表达性
6. 合成例：顾禾
7. 角色视觉设定的实用检查

## 分工

- **Character** 回答“这个人持续是谁、怎样被再次认出”。
- **Look** 回答“这个人在一个明确时段以怎样的完整外观出现”。

把两者拆开，是为了换装、受伤、湿污和年龄变化时仍能复用人物身份，同时让图片提示
词与分镜精确选择一个相容造型。Character/Look 是身份与造型的分层概念；当前产物仍是
`视觉设定.md` 中的人物/造型条目，不另建角色或造型 JSON 文件。


## 画面代称要覆盖每一种正文语言

名称覆盖检查按条目名或显式 `画面代称` 匹配冻结/收尾关键帧和文生视频静态锚点，来源引文另按
条目名核对；它不做翻译，也不检查普通图片或视频提示词正文中的全部名称。未声明代称时回退到
条目名；显式声明后，按代称核对的位置只使用所列写法。

三份正文的语言可能不同：图片提示词与冻结关键帧跟 `format/prompt_language`，视频提示词
优先跟已接受的 `video_prompt_language`。检查器以这一解析结果判断是否要求人物填写代称，
但显式列表仍需覆盖各份正文的实际写法；只填英文代称时，中文正文中的条目名不会自动参与匹配。

未匹配到名称时，相应的名称覆盖核对不会触发。因此：

- 一个资产的 `画面代称` 要**把它在各份正文里实际会出现的写法都列上**（中文名与英文代称并列），
  不能只保留其中一种；
- 正文里确实不该靠名字识别时才写 `画面代称：无`，那是明确的弃权，不是省事。

## Character：最小稳定识别集

从剧本与 creator reference 中选择足以区别此人的持久锚点：

- 叙事身份与关系（用于消歧，不是外观替代品）；
- 稳定的面部/头部比例、体态轮廓、永久特征；
- 基础发质/发际等稳定部分；具体梳法可属于 Look；
- 永久性饰物仅在确实不随 Look 变化时作为 anchor；
- 表演/声音的持续事实可写入视觉设定，供后续提示词或选角参考，并与可见外观分开。

锚点要**有区分度且能被观察**。“漂亮年轻女性”“霸总气质”“电影感”都不足以认人。
也不要过度指定剧本没有要求的肤色、年龄、五官或身体特征；以
`creator_decision_needed` 暴露空缺。

**`craft_default`**：需要侧面、背面或远景识别时，为这些方向各选可读的锚点，避免只靠正脸
特征（眉眼间距、瞳色、唇形）认人。轮廓与重心、发型剪影与发际形状、肩背线、固定配饰的
外形都可以承担侧面与背面的识别。写法示例：
`["方额窄下颌", "后颈发际收成尖角", "右肩比左肩低约两指、起步时先出右肩"]`——第一条正面
成立，第二条背面成立，第三条侧面与背影都成立。

同时写出全组**可比较的尺度次序**：谁高于谁、差多少量级，并给一个绝对参照点。示例：
「甲最高，乙比甲矮约一个头，丙比乙再矮半头；甲站直时头顶与门框上沿齐平」。这条次序由
Character 拥有，换鞋、加厚外套、盘发都不改写它（那些属于 Look）。剧本没有给出身高
关系时，以 `creator_decision_needed` 暴露，由创作者定，不由角色表模板的默认体型补齐。

人物关系帮助理解谁控制空间、谁观察谁、谁会保护或攻击谁，但**不自动决定美丑、肤色、
体型或面部善恶感**。主角不因“主角”字段自动变漂亮，反派也不因“反派”字段自动变丑。
需要视觉层级时，从创作者已接受的社会位置、职业使用痕迹、轮廓区别、服装职责、姿态和
调度中取证；审美理想化、夸张或反类型都是创作者选择，不能由关系标签偷偷补完。

**`reviewed_invariant` AST-04**： 临时淤青、制服、雨水、当天妆容不得成为 Character
持久锚点，否则同一人恢复后会被误判成另一身份。

## Look：一次相容的外观组合

一个 Look 只容纳能同时存在的组合：

- 服装层次与鞋履；
- 发型整理、妆容、伪装；
- 伤势、包扎、污渍、湿度、天气化；
- 与身体绑定的可见配件；手持道具仍绑定 Prop，不吞进 Look；
- 变化原因（cause）、生效与结束位置（valid_from / valid_until），以及来源引用。

写 Look 时先点明人物身份，再只写相对基础造型或前一 Look 的差异。不要复制整段
脸部描述形成第二份权威。

## 可选声音方向：身份锚点不等于本场 delivery

**`AST-07 · reviewed_invariant`**：项目需要跨集保持声音时，在人物条目记录声音方向（`voice_direction`）：语言/方言范围、
**创作者授权的参考音频绑定**、用于选型与验收的判据、已接受的专名发音。紧张、淋雨、受伤、
耳语、某句重音和临时音量属于场景/台词 delivery，不要固化成声音身份；变声、年龄跨度或
伪装若跨段持续，则记录有来源和有效范围的变体。

音色以参考音频为载体。没有参考时写 `- 声音参考：待选型`，不把文字选型判据当作已经选定的音色。
参考绑定要写清这次借用它的什么、哪些内容不能跟着来
（那条参考里的情绪、录音空间、背景内容永远不进身份），以及证据到了哪一步——
详见 [声音方向](voice-direction.md)。声音方向直接写在对应人物的 `视觉设定.md` 条目中，不另建
配音表或第二份权威。

文本引用只能保证角色、台词、声音方向与引用关系没有被改写，不能保证任何真实合成结果、
口型或音色复现。引用使用 `视觉设定.md` 内的可见 ID，不把网址、外部任务字段或服务参数写进设定；
参考音频本身留在 `输入/`，不复制进 `视觉设定.md`，也不进公开交付。

**资产阶段不生成音频，也不调用任何语音、合成或克隆服务**。 记录先落进文件、由创作者
确认；实际 TTS 交给 `$short-drama-produce`，并须对它展示的本次任务预览明确确认。

### 什么时候值得新 Look

**`craft_default` AST-03**： 满足任一条件时提议：跨多个 block/scene 持续；会重复使用；
需要独立角色参考图；改变观众识别/剧情信息；下游必须精确绑定。瞬时表情、姿势、
视线和手位由 shot/continuity 处理，通常不新建 Look。

### 造型不能互相污染

- “工作服”和“庆典礼服”如果时空不重叠，就不能在同一 Look 中同时出现；
- 包扎在 source block 后才生效，前面镜头不能提前绑定；
- 外套脱下后仍是同一 Character，但应切换 Look 或记录可追踪的 layer delta；
- 若雨水只造成短暂局部湿痕，可用 delta；若跨集保持并需视觉复现，再升为 Look。

## 制作形态与身份锚点的可表达性

写最小稳定识别集之前，先读 `视觉设定.md` 的“项目视觉方向”和已明确的制作形态；尚未决定且会
实质影响识别通道时，向创作者给出选择，不从对话记忆补造。

原因很直接：**形态决定观众靠什么通道认人**，因而决定哪些锚点在这个项目里根本可被表达。

| 主要识别通道 | 值得写的锚点 | 写了也看不见的锚点 |
|---|---|---|
| 面部结构 | 面部比例、眉眼鼻唇相对关系、下颌与颧骨体积 | 只有大远景才成立的体量差 |
| 剪影与线条 | 轮廓与肩背重心、发型剪影与发际形状、固定配饰外形、服装廓形、步态负重 | 细微的五官不对称、浅色小痣、依赖真实皮肤纹理的痕迹 |
| 材质与表面 | 皮肤/毛发/布料的可比较表面状态、长期使用痕迹 | 需要柔和过渡才能读出的体积差 |

### 写实细节与身份连续性

**`craft_default`**：写实项目可以在稳定识别特征之外，补充皮肤纹理、自然不对称或使用痕迹。
远景中不易读出的细节，不宜单独承担跨镜识别。

痣、疤和牙齿形态等如果是人物既定特征，仍须保持；不能因它们难生成就允许随镜变化。
毛孔、细纹等微观纹理不必逐像素一致。是否需要这些细节由画面尺度与已接受风格决定。

**`taste_option`**：偶像化、漫画或其他风格可采用更平滑的表面，不以写实程度判错。

### 边界：形态选通道，身份定事实

- **`reviewed_invariant`**：形态可以改变锚点的**表达通道与颗粒度**，不得改写身份事实本身。
  不能因为“不好画”把五十岁写成二十五岁、把厚重体格写成修长，也不能为了轮廓好看新增
  疤痕、异色瞳或不存在的配饰。
- 已确认身份在当前形态下找不到可靠表达通道时，标为“需创作者决定”：由创作者决定
  换形态还是改身份，资产环节不静默调整。
- Look 层同理：形态决定服装层次、材质响应能表达到多细，不决定 Look 由哪些单品组成，也不
  决定 cause、valid_from、valid_until。
- 形态同样不改写地理、持物归属、可读文字政策与故事状态；这四项分别属于 Location/View、
  Prop/State、text policy 与 write/develop owner。

### 模板槽位不得覆盖身份锚点

**`reviewed_invariant`**：模板槽位不得覆盖已确认的身份锚点；当模板默认值与当前身份冲突时，
**身份优先，模板让位**。

合成例：角色甲的锚点是五十岁上下、体格厚重、肩背略沉。若角色表模板对每一条记录
机械填入“九头身黄金比例、极度修长的双腿”，角色甲的身份就在没有任何创作者决定的情况下被
改写；而且因为每个角色都带同一句，下游会把它读成风格统一，不会当成冲突。角色乙即使确实
修长，也应由自己的当前视觉设定写出，不由模板默认值代写。

排查方式：把同一批角色记录并排看，找出**逐字重复且与该角色无关**的描述句；不能追溯到某条
当前视觉设定的，删除或改写成该角色的真实锚点，并在预览里说明改动。

## 合成例：顾禾

Character `CHAR-GUHE` 的当前锚点：窄长脸、左眉尾短缺口、自然卷黑发、肩背略前倾。
这些锚点不会因本集换装改变。

- `LOOK-GUHE-WORK`：灰绿工作夹克、深色长裤、头发低束；渡站值班期有效。
- `LOOK-GUHE-RAIN`：在工作装外加橙色旧雨衣，兜帽放下；从 SC004 出门前穿上，
  到 SC006 脱下。
- SC005 右肩湿痕：若只维持几镜，作为 delta 指向 `LOOK-GUHE-RAIN`，不是
  `CHAR-GUHE-WET`。

反例：“橙色雨衣女人，湿头发，脸上有伤”被直接写成 Character identity。这样雨衣
脱下、头发变干、伤口愈合时，人物就失去所有所谓“身份锚点”。

## 角色视觉设定的实用检查

- 去掉本集服装和伤污后，这个人还能与其他角色区分吗？
- 每个 Look 是否只引用一个 Character，并且内部状态能同时成立？
- 造型变化是否有 source/cause/validity，而不是凭审美换装？
- 相同显示名是否误合并，不同称谓是否误拆分？
- 手持物是否仍由 Prop/State 拥有，未被埋进角色描述？
- 新增身份锚点是否由创作者接受？

群演可以按制作需要使用 group Character；一旦某个个体有台词、关键交接或跨镜连续，
应提议独立身份。此颗粒度是 **`taste_option`**，但选择要能满足故事追踪。
