# 使用画布面板

建一个画布面板，添加节点并连线，检查它，再做出节点所描述的内容。

画布面板就是一个文件，里面有用连线连起来的节点。一个节点里放着图片、视频、配音、备注或上传的文件。一条连线把一个节点的结果送进下一个节点。你的 Agent 用 `minicut board` 命令编辑这个文件，MiniCut 应用里打开的 **画布** 标签页会自己重新绘制。

开始之前，先登录并建一个项目，见[快速开始](/zh-cn/docs/cli/quickstart)。这里的每条命令都要求这台电脑已经登录。在项目文件夹里运行命令，这里是 `~/.minicut/projects/rain-shop`。

## 建画布面板

1. 为第 1 集建一个画布面板：

```bash Terminal
minicut board new --project rain-shop --episode ep01 --title "Opening"
```

```text Output
Board: ~/.minicut/projects/rain-shop/episodes/ep01/canvas/opening.board.json
```

文件名由标题生成。不加 `--project` 和 `--episode` 时，画布面板在你的 MiniCut 主文件夹里有自己的文件夹。

## 添加并设置节点

1. 为每个要做东西的节点找一个模型。`minicut models --kind image` 和 `minicut models --kind video` 会列出它们。系统不会替你选模型，要问那个人想用哪一个。
2. 为一个角色添加图片节点。节点 id 是 `KIND:ID`，所以这个节点是 `character:lin`。

```bash Terminal
minicut board add episodes/ep01/canvas/opening.board.json --kind character --id lin --label Lin --prompt "Lin Xia, shop owner, front view, plain background" --model IMAGE_MODEL
```

```text Output
Board add: ok, rev 2, box character:lin.
```

3. 为一个镜头添加视频节点：

```bash Terminal
minicut board add episodes/ep01/canvas/opening.board.json --kind video --id s01 --label "Shot 1" --prompt "She walks into the rain." --model VIDEO_MODEL
```

4. 以秒为单位设置镜头的长度：

```bash Terminal
minicut board set episodes/ep01/canvas/opening.board.json --box video:s01 --seconds 5
```

```text Output
Board set: ok, rev 4.
```

节点的类型有 `character`、`location`、`prop`、`voice`、`note`、`upload`、`group`、`text`、`image`、`video`、`audio`、`editor`、`director`、`model3d` 和 `script`。会做出东西的类型是 `image`、`character`、`location`、`prop`、`video`、`audio` 和 `voice`。`note` 或 `text` 节点里放的是文字。

## 给节点连线

1. 把角色送进镜头：

```bash Terminal
minicut board connect episodes/ep01/canvas/opening.board.json --from character:lin --to video:s01
```

```text Output
Board connect: ok, rev 5.
```

2. 如果这条连线不允许，命令以退出码 1 结束并说明原因。例如 `a video box cannot feed a character box (video:s01 -> character:lin)`。
3. 可选：想去掉一条连线，用同样的选项运行 `minicut board disconnect`。

## 检查画布面板

1. 检查画布面板有没有问题：

```bash Terminal
minicut board check episodes/ep01/canvas/opening.board.json
```

```text Output
Board ok: 2 boxes, 1 wires.
```

`check` 会找出 id 重复的节点、连到不存在节点的连线、不允许的连线，以及在画布面板文件夹之外的上传文件。

每个问题它打印一行，以退出码 1 结束。

## 做出节点

这一步会用掉积分。它先显示要做什么，花之前先问你。

1. 请求做出角色节点：

```bash Terminal
minicut board run episodes/ep01/canvas/opening.board.json --box character:lin
```

2. 命令什么都不会发出。它以退出码 3 结束，打印它要做什么，以及那个人说好之后要运行的那一行。把它给那个人看。
3. 说好之后，运行它打印的那一行。在后面加 `--wait SECONDS` 来等待并保存结果。
4. 如果你没有等，之后运行 `minicut jobs`。它会把每个做好的结果存到它的节点上。
5. 用同样的方式运行视频节点。接进来的输入还没做出来的节点要等。`--box` 会拒绝它，并说出要先做哪个节点。`--all` 会做出每个空的或失败的节点，把要等的留到下一次运行。

被拒绝的节点会把原因留在画布面板上，其他节点照样进行。如果画布面板在说好之后又改了，命令需要重新说好。

## 修改画布面板

| 命令 | 作用 |
|---|---|
| `minicut board move FILE --box BOX --x N --y N` | 移动一个节点 |
| `minicut board set FILE --box BOX [--label L] [--prompt P] [--text T] [--model M] [--seconds N]` | 修改一个节点 |
| `minicut board view FILE --view VIEW` | 设置画布面板怎么排布。`VIEW` 是 `workflow` 或 `storyboard` |
| `minicut board retype FILE --box BOX --kind KIND` | 告诉图片节点它是什么。`KIND` 是 `character`、`location` 或 `prop` |
| `minicut board delete FILE --box BOX` | 移除一个节点和它的连线 |

每次编辑都会打印 `Board COMMAND: ok, rev N.`，并把画布面板的修订号加 1。选项在[生成](/zh-cn/docs/cli/generate#minicut-board)里。

## 检查是否成功

`minicut board check` 打印 `Board ok`。你做出的每个节点状态都是 `done`，并且在画布面板文件里有一个 `artifactUrl`。

## 某一步失败时

| 信息 | 怎么做 |
|---|---|
| `no box video:nope on the board` | 检查节点 id。它是 `KIND:ID` |
| `no box kind "nope". Kinds: ...` | 用信息里列出的类型之一 |
| `a video box cannot feed a character box (...)` | 把连线反过来接，或者在它们中间加一个节点 |
| `box character:lin has no modelId. Ask the user which model to use; ...` | 用 `minicut board set FILE --box BOX --model MODEL` 设一个模型 |
| `not a board file: FILE. A board is <name>.board.json.` | 给出 `.board.json` 文件的路径 |
| `no board at FILE` | 检查路径 |
| `box video:s01 needs the output of character:lin first: ...` | 先做出那个节点，运行 `minicut jobs`，再运行这个节点 |

## 下一步

[生成](/zh-cn/docs/cli/generate) [管理资产](/zh-cn/docs/cli/manage-assets) [全局选项](/zh-cn/docs/cli/global-options)
