# 检查和环节

按标准检查每个文件和每个版本的命令，以及运行 5 个环节来做出、检查和修好一集的命令。

本页的每条命令都需要这台电脑已登录。没登录时，每条命令都会打印 `You are not signed in. Ask your agent to run minicut login.`，并以退出码 10 结束。每条命令都接受的选项和所有退出码，见[全局选项](/zh-cn/docs/cli/global-options)。

检查在你自己的电脑上运行。每个检查把所有没通过的地方连同修法一起打印出来，你的 Agent 修好之后再运行一次检查。环节分轮运行这些检查，见[概览](/zh-cn/docs/cli/overview)。

## minicut check STEP

按标准检查某一步的文件，并把结果写在它旁边。

### Usage

```text Usage
minicut check STEP FILE [OPTIONS] [--ignore CHECKS]
```

替换下面的内容：

- `STEP`：步骤编号，来自下表。
- `FILE`：这一步检查的文件或文件夹。
- `OPTIONS`：这一步的选项，来自下表。
- `CHECKS`：要忽略的未通过检查的名字，用逗号隔开。

### 说明

一集的每一步都有自己的检查。你的 Agent 写完这一步的文件后运行它，并修好没通过的地方。

| 步骤 | 环节 | 检查什么 | `FILE` | 选项 |
|---|---|---|---|---|
| 1 | 剧本 | 研究出来的创意 | 创意文档，`.md` | 无 |
| 2 | 剧本 | 故事和世界观文档 | 故事文档，`.md` | `--format {one-off\|series-episode\|series}` |
| 3 | 剧本 | 这一集的剧本 | `script.md` | `--soft-only` |
| 4 | 分镜表 | 分镜表 | `shots.md` | `--model MODEL` |
| 5 | 分镜表 | 资产清单和分镜表提示词 | `assets.md` | `--sheet shots.md`、`--version VERSION`、`--model MODEL` |
| 6 | 分镜表 | 镜头提示词 | `prompts.md` | `--assets assets.md`、`--sheet shots.md`、`--model MODEL`、`--root FOLDER`、`--strict` |
| 10 | 预览片和剪辑 | 剪辑器时间线 | 这一集的文件夹 | `--target SECONDS`、`--tol SECONDS` |

第 4、5、6 步需要用 `--model` 给出你选的视频模型，因为每个视频模型都有自己最短和最长的镜头。没有默认模型。`minicut models --kind video` 列出所有视频模型。

`--ignore` 让你有意保留一个没通过的检查。只有你点名的检查不再计入，忽略会连同日期写进这一步的检查文件。视频版本需要的分镜表或图片缺失，永远不能忽略。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--model` | 名称 | 无 | 视频模型。第 4、5、6 步必须给 |
| `--sheet` | 文件 | 无 | 第 5、6 步：分镜表 |
| `--assets` | 文件 | 无 | 第 6 步：资产清单 |
| `--format` | 格式 | 无 | 第 2 步：单集作品、系列中的一集，或整部全剧 |
| `--soft-only` | 开关 | 关 | 第 3 步：只显示软检查 |
| `--strict` | 开关 | 关 | 第 6 步：提示词里点名的图片文件如果还不在磁盘上，算 FAIL，不只是一条提示。真正花钱的运行之前用它 |
| `--target` | 秒 | 无 | 第 10 步：这一集的目标长度 |
| `--tol` | 秒 | 无 | 第 10 步：长度和目标最多可以差多少 |
| `--ignore` | 检查名 | 无 | 有意保留这些没通过的检查 |

### 示例

#### 检查分镜表

```bash Terminal
minicut check 4 shots.md --model MODEL
```

把 `MODEL` 换成你选的视频模型。

### 输出

每个没通过的检查一行，带着修法，然后是一行结果和检查文件的路径：

| 结果行 | 含义 | 退出码 |
|---|---|---|
| `RESULT: PASS` | 所有硬检查都通过了。软警告的数量算在同一行 | 0 |
| `RESULT: FAIL` | 有硬检查没通过。这一行给出数量 | 1 |
| `RESULT: NOT RUN` | 检查没法运行。原因写在它上面 | 2 |
| `RESULT: REFUSED` | `--ignore` 点名了一个永远不能忽略的检查 | 5 |

### 错误

| 信息 | 怎么做 |
|---|---|
| `not a step: <step>.` | 用表里的步骤编号，或者下面有名字的某个检查 |
| `file not found: <file>` | 检查路径 |
| `no Python 3 found. Run: minicut setup` | 运行 `minicut setup` |

### 另见

[minicut loop run](#minicut-loop-run)、[minicut script](/zh-cn/docs/cli/projects#minicut-script)

## minicut check take

检查一个镜头的一个视频版本，并把每个没通过的地方连同修法打印出来。

### Usage

```text Usage
minicut check take CLIP_FOLDER [--take TAKE] [--json]
```

替换下面的内容：

- `CLIP_FOLDER`：镜头的文件夹，例如 `episodes/ep01/clips/c03`。
- `TAKE`：版本 id，例如 `t02`。

### 说明

不加 `--take` 时，命令检查最新的版本。它把结果存在版本旁边。没有版本的镜头不通过，修法里会写出用来做一个版本的 `minicut gen video` 命令。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--take` | 版本 id | 最新的版本 | 要检查的版本 |
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 检查 3 号镜头的最新版本

```bash Terminal
minicut check take episodes/ep01/clips/c03
```

### 输出

先是镜头、版本、它的类型和长度，然后每个失败一行 `FAIL`，下面带一行 `fix:`，最后是 `RESULT: PASS` 或 `RESULT: FAIL`。加上 `--json`，结果是一个对象，带 `result` 和一个 `failures` 列表，列表里每项有 `check`、`message` 和 `fix`。退出码：通过是 0，不通过是 1，文件夹不是镜头文件夹是 2。

### 另见

[minicut gen video](/zh-cn/docs/cli/generate#minicut-gen-video)、[minicut check zoom](#minicut-check-zoom)

## minicut check mock

检查一集的整个预览片：每个镜头的图片、每句台词的配音，以及音乐。

### Usage

```text Usage
minicut check mock EPISODE_FOLDER [--json]
```

替换下面的内容：

- `EPISODE_FOLDER`：这一集的文件夹，例如 `episodes/ep01`。

### 说明

预览片是把整集用静帧图片、配音、音乐和字幕拼出来的样子。检查会把它的长度和目标比较，并把结果存进这一集的文件夹。它还会请一个人看每个镜头的一帧，并回答它的问题。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 检查第 1 集的预览片

```bash Terminal
minicut check mock episodes/ep01
```

### 输出

这一集的长度和目标的对比、没通过的地方和修法，然后是 `RESULT: PASS` 或 `RESULT: FAIL`。退出码：通过是 0，不通过是 1，文件夹不是集文件夹是 2。

### 另见

[minicut loop run](#minicut-loop-run)、[minicut check captions](#minicut-check-captions)

## minicut check render

检查一集已经做好的视频文件。

### Usage

```text Usage
minicut check render EPISODE_FOLDER RENDER_FILE [--json]
```

替换下面的内容：

- `EPISODE_FOLDER`：这一集的文件夹，例如 `episodes/ep01`。
- `RENDER_FILE`：做好的视频文件，例如 `renders/ep01.mp4`。

### 说明

检查把结果存在视频文件旁边，文件名相同，末尾加上 `.verdict.json`。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 检查做好的这一集

```bash Terminal
minicut check render episodes/ep01 episodes/ep01/renders/ep01.mp4
```

### 输出

没通过的地方和修法，然后是 `RESULT: PASS` 或 `RESULT: FAIL`。退出码：通过是 0，不通过是 1，路径不对是 2。

### 另见

[minicut loop run](#minicut-loop-run)

## minicut check captions

检查每条字幕的位置、断行、时间和易读程度是否符合标准。

### Usage

```text Usage
minicut check captions EPISODE_FOLDER [--json]
```

替换下面的内容：

- `EPISODE_FOLDER`：这一集的文件夹，例如 `episodes/ep01`。

### 说明

预览片环节和剪辑环节都会运行这个检查。标准是字幕在画面底部居中，最多 2 行，每条都和它对应的台词对上时间。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 把结果打印成 JSON，并存进这一集的文件夹 |

### 示例

#### 检查第 1 集的字幕

```bash Terminal
minicut check captions episodes/ep01
```

### 另见

[minicut check mock](#minicut-check-mock)、[minicut check labels](#minicut-check-labels)

## minicut check labels

检查预览片的每个镜头是否都有一份带标签的副本，方便人审看。

### Usage

```text Usage
minicut check labels EPISODE_FOLDER [--json]
```

替换下面的内容：

- `EPISODE_FOLDER`：这一集的文件夹，例如 `episodes/ep01`。

### 说明

预览片环节会运行这个检查。在每一份带标签的副本里，这个镜头的每个资产都带一个写着它的 `@名字` 的标签。标签都在画面里，彼此分开，也不压在脸上。图片原来干净的那份保持不动。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 检查第 1 集的标签

```bash Terminal
minicut check labels episodes/ep01
```

### 另见

[minicut check mock](#minicut-check-mock)

## minicut check lengths

检查时间线上每个镜头和它的版本长度是否对得上，以及音乐和这一集是否对得上。

### Usage

```text Usage
minicut check lengths EPISODE_FOLDER [--json]
```

替换下面的内容：

- `EPISODE_FOLDER`：有时间线的集文件夹，例如 `episodes/ep01`。

### 说明

比镜头短的版本，会让最后一帧停在画面上。检查会找出每一处这样的地方，并检查音乐是否和这一集配得上。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 检查第 1 集的长度

```bash Terminal
minicut check lengths episodes/ep01
```

### 输出

检查了多少个镜头，然后每个问题一行 `FAIL`，带着修法。退出码 2 表示文件夹里没有时间线。

### 另见

[minicut check render](#minicut-check-render)

## minicut check zoom

把一个版本的每个部分做成全尺寸图片，让人或 Agent 可以看清细节。

### Usage

```text Usage
minicut check zoom TAKE_FILE [--prev PREVIOUS_TAKE] [--box NAME=X,Y,W,H@FRAME ...] [--out FOLDER] [--json]
```

替换下面的内容：

- `TAKE_FILE`：版本的视频文件，例如 `t02.mp4`。
- `PREVIOUS_TAKE`：前一个镜头的版本，用来检查两个镜头之间的切换。
- `NAME=X,Y,W,H@FRAME`：一块要细看的区域：名字、它的位置和大小（像素），以及帧号。
- `FOLDER`：存图片的文件夹。

### 说明

图片展示画面的每个部分、每只手和每张脸，以及有东西发生变化的地方。加上 `--prev`，还会展示和前一个镜头之间的切换。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--prev` | 文件 | 无 | 前一个镜头的版本 |
| `--box` | 区域 | 无 | 一块要细看的区域。重复写可以加更多 |
| `--out` | 文件夹 | 无 | 图片存在哪里 |
| `--json` | 开关 | 关 | 把结果打印成一个 JSON 对象 |

### 示例

#### 细看一个版本和它前面的切换

```bash Terminal
minicut check zoom episodes/ep01/clips/c03/t02.mp4 --prev episodes/ep01/clips/c02/t01.mp4
```

### 另见

[minicut check take](#minicut-check-take)

## minicut loop

显示每个环节的轮、它的上限和上一次的结果，以及下一条要运行的命令。

### Usage

```text Usage
minicut loop [status] [--episode EPISODE] [--json]
```

替换下面的内容：

- `EPISODE`：集的 id，例如 `ep01`。

### 说明

环节在项目文件夹里运行，或者在它下面的任意文件夹里运行。一共有 5 个环节，CLI 里的名字是 `script`、`sheet`、`mock`、`videos` 和 `edit`：

| 环节 | CLI 里的名字 | 做出什么 |
|---|---|---|
| 剧本 | `script` | 故事和这一集的剧本 |
| 分镜表 | `sheet` | 这一集的每个镜头，以及镜头里角色和场景的图片 |
| 预览片 | `mock` | 把整集用静帧图片、配音、音乐和字幕拼出来 |
| 视频 | `videos` | 每个镜头的一个视频版本 |
| 剪辑 | `edit` | 做好的成片，一个视频文件 |

每个环节做出自己的那一部分，检查它，修好没通过的，再检查一遍。一个环节默认在 3 轮之后停下，把还没通过的地方给你看，由你决定。这个顺序只是建议：乱序运行一个环节，会打印一条警告，然后照样运行。

要改一个项目的上限，在它的 `series.json` 里加上 `"loops"`，例如 `"loops": {"mock": 4, "takes": 5}`。视频环节的键是 `takes`。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--episode` | 集 id | 你所在的集 | 要显示的集 |
| `--json` | 开关 | 关 | 打印一个 JSON 对象 |

### 示例

#### 显示每个环节进行到哪里

```bash Terminal
minicut loop
```

### 输出

项目标题和集，然后每个环节一行，写着它包含的步骤、上限、轮数和状态。最后两行是 `next:`（要运行的那一条命令）和 `why:`。

### 错误

| 信息 | 怎么做 |
|---|---|
| `minicut loop runs inside a project folder` | 在项目文件夹里运行，也就是有 `series.json` 的那个文件夹，或者它下面的文件夹 |

### 另见

[minicut loop next](#minicut-loop-next)、[概览](/zh-cn/docs/cli/overview)

## minicut loop next

打印下一条要运行的命令，以及为什么。

### Usage

```text Usage
minicut loop next [--json]
```

### 说明

你的 Agent 用它来知道下一步做什么。它从来不用去猜步骤的顺序。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--json` | 开关 | 关 | 打印一个 JSON 对象 |

### 示例

#### 问下一步做什么

```bash Terminal
minicut loop next
```

### 输出

第一行是命令，然后是写着原因的 `why:` 和写着要先读的文件的 `read:`。

### 另见

[minicut loop run](#minicut-loop-run)

## minicut loop run

把一个环节的检查运行一次，并记下这一轮。

### Usage

```text Usage
minicut loop run {script|sheet|mock|videos|edit} [--max ROUNDS] [--json]
```

替换下面的内容：

- `ROUNDS`：这个环节最多可以用几轮。

### 说明

用掉一轮之前，命令先检查这个环节的文件是否存在。对预览片环节，每个镜头要有它的预览图片，每句台词要有配音，音乐要有它的文件。还要有人先看过预览片的图片表。对剧本和分镜表环节，每一步的文件都必须写好。有东西缺的时候，命令列出缺什么，以退出码 3 结束，也不占用一轮。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--max` | 数字 | 3，或者 `series.json` 里的上限 | 这个环节最多几轮 |
| `--json` | 开关 | 关 | 打印一个 JSON 对象 |

### 示例

#### 运行分镜表环节的检查

```bash Terminal
minicut loop run sheet
```

### 另见

[minicut check STEP](#minicut-check-step)、[minicut loop approve](#minicut-loop-approve)

## minicut loop approve

记下你对一个环节给你看的东西说了好。

### Usage

```text Usage
minicut loop approve {script|sheet|mock|videos|edit}
```

### 说明

看过一个环节做出的东西后，再通过它。如果这个环节上一轮没有通过，命令照样记下你的同意，并打印一条提示。然后它打印下一条命令。

### 示例

#### 通过预览片

```bash Terminal
minicut loop approve mock
```

### 另见

[minicut loop done](#minicut-loop-done)

## minicut loop done

因为你决定结束，而结束一个环节，不管它有没有通过。

### Usage

```text Usage
minicut loop done {script|sheet|mock|videos|edit} --reason REASON
```

替换下面的内容：

- `REASON`：你结束这个环节的原因，用你自己的话，放在引号里。

### 说明

一个环节到了上限就停下，而你认为结果已经够好时，用它。你写的原因会和这个环节一起保存。

### 示例

#### 结束视频环节

```bash Terminal
minicut loop done videos --reason "Good enough, ship it"
```

### 另见

[minicut loop approve](#minicut-loop-approve)

## minicut loop pause

让所有环节安静下来，直到 `minicut loop resume` 把它们叫回来。

### Usage

```text Usage
minicut loop pause [--reason REASON]
minicut loop resume
```

替换下面的内容：

- `REASON`：你暂停的原因，放在引号里。

### 说明

环节暂停期间，你的 Agent 可以停下工作，也没有东西会叫它继续。

### 示例

#### 暂停一天

```bash Terminal
minicut loop pause --reason "Back tomorrow"
```

### 另见

[minicut loop stop-at](#minicut-loop-stop-at)

## minicut loop stop-at

让各环节只运行到某一个环节，例如预览片。

### Usage

```text Usage
minicut loop stop-at {script|sheet|mock|videos|edit|none} --reason REASON
```

替换下面的内容：

- `REASON`：你停在那里的原因，用你自己的话，放在引号里。用 `none` 时不需要。

### 说明

停下之后，`minicut loop next` 不会再点名它后面的任何环节或步骤。`none` 清除这个停止点，所有环节重新开放。

### 示例

#### 只运行到预览片

```bash Terminal
minicut loop stop-at mock --reason "Show me the mock first"
```

### 另见

[minicut loop next](#minicut-loop-next)

## minicut loop guard

在环节或任务还没结束时，让你的编程 Agent 回去继续工作。

### Usage

```text Usage
minicut loop guard [--hook | --pre-tool]
```

### 说明

这条命令是给你的编程 Agent 的钩子用的。下面三种情况，它以退出码 2 结束，让 Agent 回去继续工作：

- 有环节正在一轮中间
- 真正的视频版本在等视频环节
- 项目还有任务在运行

在项目之外，或者环节暂停时，它以退出码 0 结束。

### 选项

| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `--hook` | 开关 | 关 | 作为 Agent 的停止钩子运行，读取 Agent 应用发来的内容 |
| `--pre-tool` | 开关 | 关 | 在 Agent 写文件之前运行。它拒绝直接写这一集的时间线，并写明该用的 `minicut timeline` 命令 |

### 另见

[minicut loop pause](#minicut-loop-pause)
