# 无限导演台：给 AI Agent 的手册

> 写给 AI Agent 的说明。用户把它交给你，是想请你用无限图鉴的 MCP 工具在无限导演台里拍东西：从一句梗概做出整场（演员、站位、走位、动作、镜头），读回每一场演了什么、每个镜头拍到了什么，再改演出、换拍法。网页版：<https://wuxianwow.com/director>，使用指南：<https://wuxianwow.com/director/guide>

还没有 `stage` 这些工具：先帮用户接入无限图鉴的 MCP 服务器 <https://wuxianwow.com/mcp>（各客户端的写法见 <https://wuxianwow.com/ai>）。不经 MCP 客户端、直接用 HTTP 调时，请求头见 <https://wuxianwow.com/ai.md> 的「直接用 HTTP 调用」。

## 三个词

- **演出**：谁在场、站在哪、面向谁、做什么动作、什么时候走到哪；还有地面标记、名景（游戏里的真实场景）、灯光、时长。
- **拍法**：同一套演出怎么拍成片——切成几个镜头、每个镜头看谁、多远、从哪一边、跟着谁动。同一场可以有好几种拍法。
- **运镜**：一个镜头里机位怎么动。用**磁吸运镜**：运镜吸在**焦点**（画面围着的那个人或那几个人）上，演员怎么走、模型多大，镜头都跟着对上。

## 工具

- `stage`：从零摆一场。演员（玩家用幻化码，或套装 `set`（ID 或名字）/ 物品 ID 加种族 / 性别——种族可以写名字（暗夜精灵），性别写 男 / 女；首领用首领战 ID 或名字）、站位（阵型，或每人的 x / z / 朝向）、地面标记、景别与角度、名景与灯光（名景里 `camera` 选名景机位：名字、类别或序号）；给 `film` 就是一场影片：时长、走位编排或走位关键帧、动作序列、镜头。戒指、项链、饰品这类角色身上看不到的物品不报警告，列在结果的 `skipped_items`。
- `fetch` `scene:<场景码>`：读回一场：演员、镜头、**故事表**、**画面说明**、**检查**。
- `revise`：在副本上改演出：加人、改人（换装、换套装、只给种族 / 性别就把原来的幻化换到新种族上、挪位置、朝向、姿态）、去掉人，动作、走位、走位编排，标记、名景、灯光、时长。拍法保留。
- `retell`：在副本上写你自己的拍法：换掉镜头、机位、磁吸运镜和焦点轨，演出不变。要署名（`by`）、写明为什么这么拍（`why`）。结果的 `compare_url` 打开是一场两个拍法（原来的和你的），用户在时间轴的「拍法」里切换、对照、把你的某一镜拿进他的拍法。
- `stage_project`：把几场按顺序合成一个项目链接，附导出链接（MP4、AI 视频包、每场一张 PNG）。同一场的另一个拍法（`retell` 的结果）用 `telling_of` 指向那一场，不单独成场。
- **导出链接的参数**（项目链接后加 `&export=…`，打开后等模型到齐自动导出并下载；`stage_project` 的 `export_links` 已经写好常用的几条）：
  - `export=mp4` 视频：`res` = 720p / 1080p，`fps` = 24 / 30，`grey=1` 灰模、`green=1` 绿幕。
  - `export=png` 静帧（影片取第一帧）：整个项目一个 ZIP，`scope=scene` 只导打开的那一场、一张 PNG；`size` = 长边像素 256–8192（默认 2048）；`bg` = scene（这一场的背景）/ transparent / green / #RRGGBB。
  - `export=aipack` AI 视频包：`model` = seedance2.0_vip / seedance2.0fast / seedance2.5，`res` = 这个模型有的分辨率（否则 720p），`mode` = auto / text / first / frames / multi / ref，`clip` = green（绿幕灰模）/ scene（带背景），`plate=1` 附场景空镜。
  - 认不得的值用导出面板的默认值；进行中 `<html data-export="running">`，完成后 `done`、页面标题写「已导出：<文件名>」，失败是 `failed`。

这些工具只产出**新的场景码**，从不改用户已有的东西；每次写入都带回故事表、画面说明和检查，以及和原版并排对照的链接（`compare_url`）。看图要打开链接（这里不渲染画面）。

用浏览器看图或截图时，先等页面的 `<html data-stage="ready">`：每次改动（点按钮、换机位、换名景）它马上变成 `busy`，模型和名景载入完、新的一帧画好才变回 `ready`；在 `busy` 时截图拿到的可能是上一帧。浏览器很慢（没有显卡、软件渲染、无头）时在链接后加 `&quality=low`：预览降到七成分辨率、不画阴影和地面小草，导出的图片和视频不受影响（页面「灯光与背景 › 画质」也能选，默认自动：软件渲染直接用低，画面卡时自动降一档）。

## 旅拍：在游戏世界里拍人像

艾泽拉斯旅拍（/trip）是在 3D 世界里走动拍照的页面；它拍下的照片就是导演台的静帧（照片码 = 场景码），`fetch scene:<码>` 读回、`revise` 接着改。用工具 `trip` 拿链接：
- 地点：区域、子区域（村子、营地）、飞行点、名景、副本、战场的名字或坐标。区域、泽风岛、子区域、飞行点与副本都落在附近开阔平整的空地上（副本朝着副本里面）、朝着那个地方（结果的 `arrive` 是落点与朝向），镜头在人物背后、看得见它。
- 外观：`outfit`（幻化码），或 `set` / `set_id` 加 `race`（名字也行）与 `sex`（男 / 女）。
- 拍法：`preset` 人像（50mm、面向镜头、人物占画面一半）/ 全身 / 环境人像（24mm、背景多）/ 自拍；或分别给 `facing`（camera = 面向镜头，转过来后背后就是那个地方）、`camera`（他拍 / 自拍 / 风景）、`focal`、`aspect`、`subject_scale`（人物身高占画面高度的比例；镜头对着眼睛，0.5 以内拍得到全身）。链接打开就是这个构图，按快门出图。
- 链接参数（自己拼也行，`zone` / `instance` / `bg` / `at` 后面都能接）：`mode`（other 他拍 / selfie 自拍 / landscape 风景；旧的 `cam` 照样认）、`focal`（12–200）、`aspect`（如 16:9、3:4）、`face`（camera 或度数）、`size`（人物占画面高度的比例）。页面记住上次的拍摄方式和每种方式各自的焦距，地址里给了就按地址。
- 页面上：相机条有「面向镜头」「藏头盔」（头盔挡脸时）和自拍的远近；快门按下的那一刻锁定画面，照片就是屏幕上那一帧。截图前等 `data-stage=ready`。

## 工作流程

1. **分场**：先把梗概拆成几场，每场一句话：谁在场、发生什么、在哪里。
2. **摆演出**：每场一个 `stage`。先定站位和地面标记，再写走位编排（谁先走、走到哪、等谁、做什么动作）。
3. **读故事表**：看演出是不是你想的那样：谁走到了哪、面向谁、谁挡了谁的路（编排会绕开别人、等人过去，终点被人占着就停在旁边，结果里都写明）。不对就 `revise`。
4. **分镜**：按故事表的节拍切镜头：每个镜头一句话的目的（交代环境、看清谁的反应、跟着谁走）。写进 `stage` 的 `film.shots`，或对已有的一场用 `retell`。
5. **读画面说明和检查**：每段画面里谁在、多大、在哪、朝哪；有没有跳切、越轴、画面里没人、焦点出画、被挡。改到检查干净、画面说明符合目的。
6. **交付**：把每场的链接、对照链接（一场两个拍法）和你的拍法说明给用户；要成片时用 `stage_project` 合成项目，导出链接交给用户或你能操作的浏览器。生成 AI 视频会花用户的积分，先问。

## 地面与坐标

- 单位是码（约等于米）。`x` 向右为正，`z` 朝**开场机位**为正（开场机位站在 +z 方向看向场地中心）。有首领时机位改为正对（第一位）首领的脸：首领面向哪边，机位就在哪边，首领面向的那位玩家会挡在首领和镜头之间——要两人对峙，让首领朝镜头或侧身、玩家站在身侧。
- 朝向是度数：0 面向开场机位，90 面向右（+x），180 背对机位，270 面向左。`face: n` 让演员面向第 n 位。
- 人形角色约 2 码高、脚下占地半径约 0.5 码，两人并肩约隔 1.2 码，对峙约隔 3–6 码。首领按模型原大，和游戏里一样大：巨龙身长三十米上下、高十几米，脚下占地半径十码以上，别把标记和别人的终点放进它脚下；要小一点就给 `scale`。
- 名景里，`stage` 把整套站位（连同标记和走位编排里的点）转向名景的预设机位：坐标仍按「x 向右、z 朝机位」理解，结果里给的是转过之后的坐标；之后 `revise` 用的就是结果里的坐标。预设机位列在结果的 `world.preset_cameras`，用 `camera` 指定（「俯拍」取第一个俯拍机位，`2` 取第二个）；不给 `camera` 也不给景别与角度时用第一个。
- 名景里的取景按演员实际站的地方来：预设机位保留它的方位和俯仰，对准演员、装得下全体；被建筑挡住时自动绕着演员转、拉近或抬高（按景别与角度取景时只转，俯拍也可抬高），结果的警告写明改了什么；仍挡着、或演员前面只有树和摆件（页面「清场」能藏起来）也会写明。名景中心旁边是坑、水或屋顶时（铁炉堡、藏宝海湾、幽暗城），阵型整体挪到平地上；你自己给的 x / z 不挪，站在坑里、水里、屋顶上会提醒。`revise`、`retell` 与 `fetch scene:` 的检查里也有这些。
- 演员序号从 1 起，按 `actors` 的顺序；`revise` 里的序号是原来那场的，新加的人排在后面，去掉的人最后才去掉。

## 演出：走位编排

`film.blocking`（`revise` 里是 `blocking`）：每位演员按顺序的步骤，从开场站位起，一步做完接下一步。比走位关键帧（`walks`）省事：路线、速度、绕开别人都由编排算。

- `停`：站着（`seconds` 秒；`pose` 是站着时的姿态，如 战斗姿态、跪下）。
- `转向`：原地转向目标。
- `走到` / `跑到`：走到目标。`face` 到了以后转向谁；`via` 途经的点；`group` 同组的人一起出发、一起到达（`formation` 到达时排成的阵型）；`through` 直穿不绕人；`seconds` 指定走多久。
- `做动作`：`pose` 做一次（播完停在最后一帧），`loop` 循环 `seconds` 秒。
- 目标 `to` / `face`：`{mark: 标记编号}`、`{actor: 演员序号}`（走到他身边）、`{point: [x, z]}`、`{heading: 度数}`、`{camera: "A"}`。
- `after: {actor, step, end}`：等第 actor 位演员的第 step 步开始（`end: true` 做完）再开始——让动作互相呼应（等骑士走到门口，矮人才挥手）。
- 编排比时长长时，这场自动加长（`revise` 的 `lock: true` 锁定时长）。

动作（pose）：站立 / 行走 / 奔跑 / 挥手 / 跳舞 / 欢呼 / 鞠躬 / 敬礼 / 大笑 / 秀肌肉 / 咆哮 / 战斗姿态 / 攻击 / 施法 / 战吼 / 跪下 / 指向 / 倒地。模型没有的动作会换成站立，结果里写明。

### 动作与推荐定格

静帧里的动作停在某一帧：不给 `at` 就用下表的推荐值（按 20 个玩家模型的动作文件算出，各种族、首领的动作长短不同，可能早一点或晚一点）；影片的定格块（`mode: 定格`）也可以给 `at`。超过动作长度的停在最后一帧。

| 动作 | 推荐定格（秒） | 说明 |
| --- | --- | --- |
| 行走 | 0.3 |  |
| 奔跑 | 0.3 |  |
| 挥手 | 0.95 |  |
| 跳舞 | 1.5 |  |
| 欢呼 | 0.75 |  |
| 鞠躬 | 1 |  |
| 敬礼 | 0.55 |  |
| 大笑 | 1.3 |  |
| 秀肌肉 | 1 |  |
| 咆哮 | 0.6 |  |
| 战斗姿态 | 0.65 |  |
| 攻击 | 0.5 |  |
| 施法 | 0.35 | 双手几乎全程举过头顶，正面拍会挡住脸：从侧面或俯拍 |
| 战吼 | 0.55 |  |
| 跪下 | 1.3 | 1.3 秒时各种族都已跪稳 |
| 指向 | 1 |  |
| 倒地 | 3 | 3 秒时各种族都已躺倒，动作短的停在最后一帧 |

## 拍法：镜头

`film.shots`（`retell` 里是 `shots`）：镜头首尾相接，`seconds` 加起来就是这场的长度（不够或多了，最后一个镜头补齐）。

- `size` 景别：特写 / 近景 / 中景 / 全景 / 远景；`angle` 角度：平视 / 仰拍 / 俯拍 / 过肩（对准前两位：越过第一位的肩看第二位）/ 顶视；`focus` 对准哪几位；`focal` 焦段（mm，默认 35）。
- 机位按**这个镜头开始时**演员所在的位置取景；同样的取景、同样的位置用同一台机位（最多六台）。`follow: true` 让机位一直对准第一位。
- `move`：老式运镜（推 / 拉 / 摇 / 移 / 升降 / 环绕）。更推荐 `rig`：磁吸运镜，给了 `rig` 时镜头从运镜自己的起点开始（预设自带；自己组合用 `start`），`size` / `angle` 不再起作用。
- 一个镜头的目的决定景别：交代环境用远景、全景；看关系用中景；看反应、情绪用近景、特写。相邻两个镜头要么换角度（30° 以上），要么换景别（差一级以上），否则是跳切。
- 轴线：两人对话或对峙时，机位留在他们连线的同一侧（正反打、过肩都在同一侧），否则左右对调（越轴）。要越轴就让镜头在一个镜头里走过去，或中间插一个正面镜头。

### 磁吸运镜

`rig` 写预设名，或 `{start, moves}` 自己组合。主角是这个镜头 `focus` 的第一位，对手是第二位（默认第一位玩家和第一位首领）。整个镜头匀速，按画面变化分配各段时长；`pace` 节奏（慢 / 中 / 快），`scale` 幅度（默认 1），`side` 绕向（自动：避开遮挡与逆光、接上一镜不越轴）。

- **英雄登场**（登场，对准主角）：背后贴地跟随 → 侧绕上升 → 低机位推近
- **王者现身**（登场，对准主角）：低机位远景 → 缓推 → 仰拍定格
- **首领揭示**（揭示，对准主角与对手（要两位））：主角背后低机位 → 拉开升起，越过主角肩膀露出首领全身
- **环境揭示**（揭示，对准主角）：近景 → 后拉 → 升高俯瞰
- **冲锋跟拍**（追逐，对准主角）：贴地跟随 → 加速超越 → 反向领拍
- **对峙推进**（对峙，对准主角与对手（要两位））：侧向横移 → 绕过肩膀 → 推向对手
- **情绪递进**（情绪，对准主角）：远景缓推 → 半环绕 → 面部特写
- **压迫**（情绪，对准主角）：缓推 → 轻微倾斜 → 极近特写
- **螺旋下降**（史诗，对准主角）：背后高空 → 螺旋下降到正面 → 低空领拍
- **史诗环绕**（史诗，对准主角）：从背后大半径环绕上升到正面
- **告别**（收尾，对准主角）：正面领拍 → 侧移 → 后拉升高
- **展示**（展示，对准主角）：背后极近 → 半环绕到正面 → 缓拉到全身

自己组合：`start` 是起点（`az` 方位度数：0 正面、180 背后、90 主体左侧；`height` 按主体高度计：0.12 贴地、0.9 平视、2 以上俯拍；`size` 景别；`focal`；`roll` 倾斜），`moves` 最多 8 段，每段 `move`（固定 / 跟随 / 领拍 / 推 / 拉 / 横移 / 环绕 / 升降 / 摇臂 / 俯冲 / 贴地 / 变焦 / 希区柯克变焦 / 荷兰角）、`amount` 幅度 0–1（环绕 1 = 240°）、`way: -1` 反方向、`speed` 相对速度、`cue` 等节拍（动起来 / 停下 / 做动作）、`to` 这一段结束时到哪（同 start 的写法）。

### 焦点轨

`focus_track`：第 `at` 秒起画面围着谁（`on` 演员序号，不给是全体；或 `point` 地面一点），`seconds` 过渡秒数。磁吸运镜跟着焦点：焦点从主角换到首领，镜头就自然转过去。不给时预设自己写（先主角，首领揭示、对峙推进等再转到对手）。

## 读结果

- **故事表**：开场每个人在哪（「骑士在路口里」「矮人在精灵前方 11 码处，面向精灵」）、按时间的节拍（「1.1–3.7 秒：骑士向矮人走了 8 码，到① 门口」「3.8 秒：骑士敬礼」「4 秒：国王转身」）、结尾每个人在哪。拿它对照你的梗概。
- **走位编排的结果**：每一步的起止时间和编排改了什么：绕开谁、等谁过去几秒、终点被谁占着停在旁边、可能碰到谁。
- **画面说明**：每个镜头逐段（磁吸运镜按段，其余每 2 秒一段）：画面的景别（画面里最大的那个人有多大）、角度、镜头在做什么，以及画面里每个人：在画面哪里（左侧 / 中间 / 右侧，从哪到哪，进画、出画、只在画面边上）、他自己的景别、露出多少（全景、远景时）、面向镜头 / 背对镜头 / 侧身，谁大半被谁挡住。
- **检查**：`镜头 n：画面里没人`、`只有 0.5 秒，太短`、`镜头 n 切到 n+1：同一个机位、同样的取景，切了等于没切`、`景别都是全景，机位只转了 12°，像跳切`、`越轴——甲从画面左边换到了右边`、磁吸运镜的 `焦点出画` / `焦点被挡` / `机位进了首领体内`，以及站得重叠、出画、遮挡、模型没有的动作。检查不是禁令（有意的跳切、越轴可以留着），但要知道自己在做什么，并在 `why` 里说明。

## 例子

从一句梗概「闪金镇：两位冒险者走到旅店门口，矮人在门口等着，看到他们到了挥手」摆一场（`stage`）：

```json
{
 "actors": [
  {
   "race": 1,
   "sex": 0,
   "name": "骑士",
   "x": -6,
   "z": -2,
   "facing": 90
  },
  {
   "race": 4,
   "sex": 1,
   "name": "精灵",
   "x": -6,
   "z": 0,
   "facing": 90
  },
  {
   "race": 3,
   "sex": 0,
   "name": "矮人",
   "x": 4,
   "z": 1,
   "face": 1
  }
 ],
 "marks": [
  {
   "x": 2,
   "z": 0,
   "label": "门口"
  }
 ],
 "world": "闪金镇",
 "film": {
  "duration": 9,
  "blocking": [
   {
    "actor": 1,
    "steps": [
     {
      "do": "走到",
      "to": {
       "mark": 1
      },
      "group": 1
     },
     {
      "do": "做动作",
      "pose": "敬礼"
     }
    ]
   },
   {
    "actor": 2,
    "steps": [
     {
      "do": "走到",
      "to": {
       "mark": 1
      },
      "group": 1
     }
    ]
   },
   {
    "actor": 3,
    "steps": [
     {
      "do": "停",
      "seconds": 1
     },
     {
      "do": "做动作",
      "pose": "挥手",
      "after": {
       "actor": 1,
       "step": 1,
       "end": true
      }
     }
    ]
   }
  ],
  "shots": [
   {
    "seconds": 4,
    "focus": [
     1,
     2
    ],
    "rig": "冲锋跟拍"
   },
   {
    "seconds": 2.5,
    "size": "中景",
    "focus": [
     3
    ]
   },
   {
    "seconds": 2.5,
    "focus": [
     1
    ],
    "rig": "情绪递进"
   }
  ]
 }
}
```

同一场换一种拍法（`retell`）：

```json
{
 "code": "<stage 结果里的 film.code>",
 "name": "从矮人的视角",
 "by": "Claude",
 "why": "先让观众站在门口等人，看着两人走近，再给骑士的敬礼一个特写。",
 "shots": [
  {
   "seconds": 4,
   "size": "全景",
   "angle": "过肩",
   "focus": [
    3,
    1
   ]
  },
  {
   "seconds": 2,
   "size": "近景",
   "focus": [
    1
   ]
  },
  {
   "seconds": 3,
   "size": "中景",
   "focus": [
    3
   ],
   "rig": "告别"
  }
 ]
}
```

## 用户在页面上怎么用你的拍法

导演台时间轴工具条的「拍法 ▾」：列出这一场的几个拍法（你的写着你的署名，理由在下面一行），点一个切换；「对照」把另一个拍法的镜头排在镜头轨下面，舞台左上角的小窗同步播放它的画面，点对照轨上的一个镜头可以「用这一镜」换进现在的拍法；「从链接加入拍法…」粘贴你给的链接或场景码，演员一样就加进他自己的那一场。所以给用户的拍法要和他的演出用同样的演员（同一个场景码改出来的）。

## 规矩

- 只产出新的场景码，不改用户已有的东西；换拍法要署名、写明为什么这么拍，给用户对照链接，让用户挑。
- 给用户的链接用结果里的地址（https://wuxianwow.com/director?s=…）。
- 首领和玩家的模型、动作、名景来自《魔兽世界：无限》客户端；模型没有的动作、找不到的首领、穿不上的物品，结果里都会写明，照实转告用户。
- 生成 AI 视频（即梦等）会花用户的积分：先说清要生成什么、多少秒、大约多少积分，用户同意再做。
