cutsdk 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +57 -25
  2. package/dist/api/cloud/render-draft.d.ts +5 -2
  3. package/dist/api/cloud/render-draft.d.ts.map +1 -1
  4. package/dist/api/cloud/render-draft.js +117 -15
  5. package/dist/api/cloud/render-draft.js.map +1 -1
  6. package/dist/api/cloud/submit-video-render-task.js +2 -2
  7. package/dist/api/cloud/submit-video-render-task.js.map +1 -1
  8. package/dist/api/cloud/upload-draft.d.ts.map +1 -1
  9. package/dist/api/cloud/upload-draft.js +0 -2
  10. package/dist/api/cloud/upload-draft.js.map +1 -1
  11. package/dist/api/draft-spec/create-and-render-draft.d.ts.map +1 -1
  12. package/dist/api/draft-spec/create-and-render-draft.js +0 -1
  13. package/dist/api/draft-spec/create-and-render-draft.js.map +1 -1
  14. package/dist/api/draft-spec/time.d.ts.map +1 -1
  15. package/dist/api/draft-spec/time.js +2 -1
  16. package/dist/api/draft-spec/time.js.map +1 -1
  17. package/dist/api/images/add-images.js +1 -1
  18. package/dist/api/images/add-images.js.map +1 -1
  19. package/dist/api/query/get-text-effects.d.ts +4 -0
  20. package/dist/api/query/get-text-effects.d.ts.map +1 -0
  21. package/dist/api/query/get-text-effects.js +36 -0
  22. package/dist/api/query/get-text-effects.js.map +1 -0
  23. package/dist/api/setup/templates/project/.agents/skills/cut-draft/SKILL.md +63 -37
  24. package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/.env.example +0 -1
  25. package/dist/api/setup/templates/project/cutcli-docs/README.md +96 -0
  26. package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/api-cheatsheet.md +29 -5
  27. package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/examples/03-create-and-render.ts +1 -2
  28. package/dist/api/setup/templates/project/cutcli-docs/examples/04-cli-examples.md +109 -0
  29. package/dist/api/setup/templates/project/cutcli-docs/material-browser.html +418 -0
  30. package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/quickstart.md +22 -2
  31. package/dist/api/videos/add-videos.js +1 -1
  32. package/dist/api/videos/add-videos.js.map +1 -1
  33. package/dist/config/index.d.ts +1 -0
  34. package/dist/config/index.d.ts.map +1 -1
  35. package/dist/config/index.js +3 -2
  36. package/dist/config/index.js.map +1 -1
  37. package/dist/draft/drafts/Effects.d.ts.map +1 -1
  38. package/dist/draft/drafts/Effects.js +0 -1
  39. package/dist/draft/drafts/Effects.js.map +1 -1
  40. package/dist/draft/drafts/data/online/effects.json +31933 -0
  41. package/dist/draft/drafts/data/online/transitions.json +14375 -0
  42. package/dist/index.d.ts +6 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +5 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/shared/cloud-client.d.ts +2 -7
  47. package/dist/shared/cloud-client.d.ts.map +1 -1
  48. package/dist/shared/cloud-client.js +4 -4
  49. package/dist/shared/cloud-client.js.map +1 -1
  50. package/dist/shared/draft-service.d.ts.map +1 -1
  51. package/dist/shared/draft-service.js +15 -0
  52. package/dist/shared/draft-service.js.map +1 -1
  53. package/dist/shared/media.d.ts.map +1 -1
  54. package/dist/shared/media.js +36 -11
  55. package/dist/shared/media.js.map +1 -1
  56. package/dist/types/index.d.ts +23 -6
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/package.json +12 -12
  59. package/dist/api/setup/templates/project/cut-sdk/README.md +0 -54
  60. package/dist/api/setup/templates/project/cut-sdk/examples/04-cli-examples.md +0 -71
  61. package/dist/cli.d.ts +0 -3
  62. package/dist/cli.d.ts.map +0 -1
  63. package/dist/cli.js +0 -339
  64. package/dist/cli.js.map +0 -1
  65. /package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/examples/01-create-draft.ts +0 -0
  66. /package/dist/api/setup/templates/project/{cut-sdk → cutcli-docs}/examples/02-draft-spec.ts +0 -0
@@ -2,76 +2,102 @@
2
2
  name: cut-draft
3
3
  description: >-
4
4
  使用 cutsdk 创建和操作剪映/CapCut 草稿工程。用户想创建剪映草稿、添加字幕/图片/视频/音频/特效/贴纸/关键帧/遮罩、
5
- 提交渲染,或提到 cut_sdkcut、draft spec、剪映、草稿、字幕、CapCut draft 时使用此 skill。
5
+ 提交渲染,或提到 cutsdkcutcli、draft spec、剪映、草稿、字幕、CapCut draft 时使用此 skill。
6
6
  ---
7
7
 
8
- # cut_sdk 项目级 Skill
8
+ # cutcli 项目级 Skill
9
9
 
10
- `cutsdk` 是用于创建剪映/CapCut 桌面端草稿文件夹的 Node.js SDK CLI。生成后的草稿可直接在剪映桌面端打开。
10
+ `cutsdk` 是用于创建剪映/CapCut 桌面端草稿文件夹的 Node.js SDK。`cutcli` 是给 AI 实时调用的命令行工具。生成后的草稿可直接在剪映桌面端打开。
11
11
 
12
12
  ## 先读这些
13
13
 
14
14
  写代码前,先阅读本项目内的文档:
15
15
 
16
- 1. `cut-sdk/README.md`
17
- 2. `cut-sdk/quickstart.md`
18
- 3. `cut-sdk/api-cheatsheet.md`
16
+ 1. `cutcli-docs/README.md`
17
+ 2. `cutcli-docs/quickstart.md`
18
+ 3. `cutcli-docs/api-cheatsheet.md`
19
19
 
20
- 实现时优先从 `cut-sdk/examples/` 里选择最接近的示例改起。
20
+ 实现时优先从 `cutcli-docs/examples/` 里选择最接近的示例改起。
21
21
 
22
22
  ## 推荐使用路径
23
23
 
24
- - AI 生成完整时间线时,优先使用 `createDraftFromSpec(spec)`。
25
- - 用户希望“一次创建草稿并提交云渲染”时,使用 `createAndRenderDraft(input)`。
24
+ - AI 生成完整时间线时,优先使用 `cutcli spec create --file draft.json`,或在代码中使用 `createDraftFromSpec(spec)`。
25
+ - 用户希望“一次创建草稿并提交云渲染”时,优先使用 `cutcli spec render --file draft.json --cloud --wait`,或在代码中使用 `createAndRenderDraft(input)`。
26
26
  - 用户要逐步编辑草稿,或 Draft Spec 尚未覆盖某个能力时,再使用低层 API,例如 `createDraft`、`addCaptions`、`addImages`、`addVideos`、`addAudios`、`addMasks`、`addKeyframes`。
27
- - 只有在用户明确需要命令行,或只是做快速手动操作时,才使用 CLI。
27
+ - 需要实时命令行操作时,优先使用便捷命令,例如 `cutcli image add ...`、`cutcli text add ...`、`cutcli audio add ...`。
28
28
 
29
29
  ## 关键规则
30
30
 
31
31
  - 包导入名是 `cutsdk`。
32
- - 低层 SDK 和 CLI 的所有时间数值都是微秒:`1s = 1000000`。
33
- - AI Draft Spec 的时间字符串可写为 `1.5s`、`500ms`、`300000us`。
32
+ - 低层 SDK 的数字时间单位是微秒:`1s = 1000000`。
33
+ - `cutcli` 便捷命令和 AI Draft Spec 的时间字符串可写为 `1.5s`、`500ms`、`300000us`。
34
34
  - 默认草稿目录是 `~/Movies/JianyingPro Drafts/{draftId}/`;可通过 `CUT_DRAFTS_DIR` 覆盖。
35
- - 媒体 URL 和本地媒体路径会由 SDK 复制/下载到草稿的 `resources/` 文件夹。
35
+ - 媒体本地路径和 URL 都可用:本地路径会复制到草稿 `resources/`,URL 会下载到 `resources/`。
36
36
  - 图片必须提供 `width` 和 `height`。
37
37
  - 使用低层 API 添加视频或音频时,要提供素材原始时长。
38
38
  - 同一轨道内的片段不要重叠,除非目标 API 明确会创建独立轨道。
39
39
  - CLI 参数使用 kebab-case,例如 `--font-size`,不要写成 `--fontSize`。
40
+ - 云渲染只有 `status = 7` 才算成功并写入 `video_url`;`0/1/2` 表示等待或处理中,`3/5/6` 表示失败终态。
41
+ - AI 调用 CLI 时,如需结构化错误,使用 `--json-errors` 或 `CUTCLI_JSON_ERRORS=1`。
40
42
 
41
43
  ## 最小 Draft Spec 示例
42
44
 
43
- ```ts
44
- import { createDraftFromSpec } from 'cutsdk';
45
+ 保存为 `draft.json`:
45
46
 
46
- await createDraftFromSpec({
47
- version: '1.0',
48
- canvas: { width: 1080, height: 1920 },
49
- tracks: [
47
+ ```json
48
+ {
49
+ "version": "1.0",
50
+ "canvas": { "width": 1080, "height": 1920 },
51
+ "tracks": [
50
52
  {
51
- type: 'text',
52
- clips: [
53
- { type: 'caption', text: '你好剪映', start: '0s', duration: '3s' },
54
- ],
55
- },
56
- ],
57
- });
53
+ "type": "text",
54
+ "clips": [
55
+ { "type": "caption", "text": "你好剪映", "start": "0s", "duration": "3s" }
56
+ ]
57
+ }
58
+ ]
59
+ }
58
60
  ```
59
61
 
60
- ## 云渲染环境变量
62
+ 然后执行:
61
63
 
62
- 云渲染需要:
63
-
64
- ```env
65
- CUT_API_TOKEN=your_token
66
- CUT_UPLOAD_API_BASE=http://your-render-backend:8080
64
+ ```bash
65
+ cutcli spec validate --file draft.json --pretty
66
+ cutcli spec create --file draft.json --pretty
67
67
  ```
68
68
 
69
- 在调用方项目中使用 `.env`,或在调用 SDK 前自行加载环境变量。
69
+ ## 云渲染与 API Token 配置
70
+
71
+ 云渲染需要配置 API Token,有以下三种方式:
72
+
73
+ 1. **命令行保存**:
74
+ ```bash
75
+ cutcli login <apiToken>
76
+ ```
77
+ 这会将 Token 保存到本机 `~/.cutcli/config.json`。
78
+
79
+ 2. **环境变量**:
80
+ 设置环境变量 `CUT_API_TOKEN`:
81
+ ```env
82
+ CUT_API_TOKEN=your_token
83
+ ```
84
+
85
+ 3. **SDK 参数显式传入**:
86
+ 在调用一站式 SDK 时显式设置 `apiToken` 字段:
87
+ ```typescript
88
+ render: {
89
+ cloud: true,
90
+ apiToken: 'your_api_token'
91
+ }
92
+ ```
93
+
94
+ `cutcli config show` 可检查配置状态,它只会显示 `<set>`,不会打印 Token 明文。
70
95
 
71
96
  ## 常见坑
72
97
 
73
98
  1. 不要混用包名。除非项目明确覆盖,否则始终使用 `cutsdk`。
74
- 2. 不要把“秒”直接作为低层 API 的数字传入。数字 `3` 表示 3 微秒,不是 3 秒。
75
- 3. 对动画/特效名有精确要求时,不要凭空编造。先用 CLI 查询可用资源,或使用项目里已有示例。
76
- 4. 除非 SDK 无法表达目标操作,否则不要手动改剪映草稿 JSON。
77
- 5. 生成复杂时间线时,先用 `validateDraftSpec(spec)` 校验 Draft Spec
99
+ 2. 本地拼接优先用 `cutcli image/video/audio/text add`;批量 JSON 命令只在需要一次添加多段素材时使用。
100
+ 3. 不要把“秒”直接作为低层 API 的数字传入。数字 `3` 表示 3 微秒,不是 3 秒。
101
+ 4. 对动画/特效名有精确要求时,不要凭空编造。先用 CLI 查询可用资源,或使用项目里已有示例。
102
+ 5. 除非 SDK 无法表达目标操作,否则不要手动改剪映草稿 JSON
103
+ 6. 生成复杂时间线时,先用 `cutcli spec validate --file draft.json` 或 `validateDraftSpec(spec)` 校验 Draft Spec。
@@ -4,4 +4,3 @@ CUT_DRAFTS_DIR=/absolute/path/to/JianyingPro Drafts
4
4
 
5
5
  # 仅云渲染需要。
6
6
  CUT_API_TOKEN=your_render_api_token
7
- CUT_UPLOAD_API_BASE=http://your-render-backend:8080
@@ -0,0 +1,96 @@
1
+ # cutsdk 项目接入指南
2
+
3
+ 这个目录是给 AI Agent 和开发者第一次在项目中使用 `cutsdk` 时看的接入资料。
4
+
5
+ `cutsdk` 可以用 Node.js 代码创建剪映/CapCut 桌面端草稿文件夹,支持字幕、图片、视频、音频、特效、贴纸、关键帧、遮罩、AI Draft Spec,以及可选的云渲染。
6
+
7
+ ## 阅读顺序
8
+
9
+ 1. 先读 `quickstart.md`。
10
+ 2. 再扫一遍 `api-cheatsheet.md`。
11
+ 3. 从 `examples/` 中复制最接近需求的示例改起。
12
+ 4. 需要挑选花字、特效、贴纸、转场时,直接打开 `material-browser.html`。特效/转场使用本地在线缓存,贴纸会联网刷新全量素材库。
13
+
14
+ ## 安装
15
+
16
+ ```bash
17
+ npm install cutsdk
18
+ ```
19
+
20
+ 如果要使用 CLI:
21
+
22
+ ```bash
23
+ npm install -g @cutcli/cutcli
24
+ cutcli agents install
25
+ cutcli login <apiToken>
26
+ cutcli spec validate --file draft.json
27
+ cutcli spec create --file draft.json
28
+ ```
29
+
30
+ 不全局安装也可以直接用 `npx`:
31
+
32
+ ```bash
33
+ npx @cutcli/cutcli spec create --file draft.json
34
+ ```
35
+
36
+ ## 环境变量
37
+
38
+ 当项目需要自定义草稿目录或使用云渲染时,把 `.env.example` 复制为 `.env` 并填写:
39
+
40
+ ```env
41
+ CUT_DRAFTS_DIR=/absolute/path/to/JianyingPro Drafts
42
+ CUT_API_TOKEN=your_token
43
+ ```
44
+
45
+ 也可以用 CLI 保存云渲染 Token:
46
+
47
+ ```bash
48
+ cutcli login <apiToken>
49
+ cutcli config show --pretty
50
+ ```
51
+
52
+ Token 会保存到本机 `~/.cutcli/config.json`,输出中只显示 `<set>`。
53
+
54
+ 云渲染状态码:
55
+
56
+ | status | 含义 |
57
+ |--------|------|
58
+ | `0` | 初始创建,尚未正式入队 |
59
+ | `1` | 已提交/排队中,等待云渲染机器领取 |
60
+ | `2` | 处理中,机器已领取任务并开始渲染 |
61
+ | `3` | 草稿 ID 异常或草稿 ID 不存在 |
62
+ | `5` | 处理超时 |
63
+ | `6` | 处理失败 |
64
+ | `7` | 成功完成,此时才会写入 `video_url` |
65
+
66
+ ## 核心概念
67
+
68
+ - 一个草稿就是磁盘上的剪映兼容工程文件夹。
69
+ - 默认草稿路径是 `~/Movies/JianyingPro Drafts/{draftId}/`。
70
+ - 低层 SDK API 的时间数值使用微秒。
71
+ - AI Draft Spec 和 `cutcli image/text/audio/video add` 支持更易读的时间字符串,例如 `3s`、`500ms`、`300000us`。
72
+ - 媒体 URL 和本地文件路径会被复制/下载到草稿的 `resources` 文件夹。
73
+
74
+ ## 推荐优先使用
75
+
76
+ AI 生成视频草稿时,优先使用 `createDraftFromSpec`。它允许用一个 JSON 对象描述完整时间线,再由 SDK 调用底层草稿 API。
77
+
78
+ 创建草稿后还需要补充高级操作时,可以使用带 `afterCreate` 的 `createAndRenderDraft`,或直接调用低层 API。
79
+
80
+ 使用命令行时,优先使用:
81
+
82
+ ```bash
83
+ cutcli spec validate --file draft.json --pretty
84
+ cutcli spec create --file draft.json --pretty
85
+ cutcli spec render --file draft.json --cloud --wait --pretty
86
+ ```
87
+
88
+ 逐步修改草稿时,优先使用便捷命令:
89
+
90
+ ```bash
91
+ cutcli text add <draftId> --text "标题" --start 0s --duration 3s --font-size 8
92
+ cutcli image add <draftId> --src ./素材/bg.png --start 0s --duration 5s --width 1080 --height 1920
93
+ cutcli audio add <draftId> --src ./素材/bgm.mp3 --start 0s --duration 20s
94
+ ```
95
+
96
+ AI 调用 CLI 时,如果需要结构化错误输出,可以加 `--json-errors` 或设置 `CUTCLI_JSON_ERRORS=1`。
@@ -1,4 +1,4 @@
1
- # cut_sdk API 速查
1
+ # cutsdk API 速查
2
2
 
3
3
  从 `cutsdk` 导入:
4
4
 
@@ -17,6 +17,8 @@ import {
17
17
  addSticker,
18
18
  addKeyframes,
19
19
  addMasks,
20
+ getTextEffects,
21
+ getTextEffect,
20
22
  renderDraft,
21
23
  isCutSdkError,
22
24
  } from 'cutsdk';
@@ -49,7 +51,6 @@ const result = await createAndRenderDraft({
49
51
  render: {
50
52
  cloud: true,
51
53
  apiToken: process.env.CUT_API_TOKEN,
52
- apiBase: process.env.CUT_UPLOAD_API_BASE,
53
54
  },
54
55
  });
55
56
 
@@ -73,6 +74,8 @@ await addCaptions({
73
74
  captions: [{ text: 'Hello', start: 0, end: 5000000 }],
74
75
  fontSize: 8,
75
76
  textColor: '#ffffff',
77
+ textEffect: '红黄火焰综艺花字',
78
+ hasShadow: true,
76
79
  });
77
80
  ```
78
81
 
@@ -126,7 +129,28 @@ try {
126
129
  ## 对应 CLI 命令
127
130
 
128
131
  ```bash
129
- cut draft create --width 1080 --height 1920
130
- cut captions add <draftId> --captions '[{"text":"Hello","start":0,"end":3000000}]'
131
- cut cloud render <draftId> --wait
132
+ cutcli draft create --width 1080 --height 1920
133
+ cutcli query text-effects --keyword 火焰 --limit 5
134
+ cutcli text add <draftId> --text "Hello" --start 0s --duration 3s
135
+ cutcli image add <draftId> --src ./素材/bg.png --start 0s --duration 5s --width 1080 --height 1920
136
+ cutcli cloud render <draftId> --wait
137
+ ```
138
+
139
+ 云渲染状态:
140
+
141
+ | status | 含义 |
142
+ |--------|------|
143
+ | `0` | 初始创建,尚未正式入队 |
144
+ | `1` | 已提交/排队中 |
145
+ | `2` | 处理中 |
146
+ | `3` | 草稿 ID 异常或不存在 |
147
+ | `5` | 处理超时 |
148
+ | `6` | 处理失败 |
149
+ | `7` | 成功完成,读取 `video_url` |
150
+
151
+ ## 花字查询
152
+
153
+ ```ts
154
+ const effects = await getTextEffects({ keyword: '火焰', limit: 5 });
155
+ const exact = await getTextEffect({ name: effects.effects[0].title });
132
156
  ```
@@ -27,7 +27,7 @@ async function main() {
27
27
  },
28
28
  output: {
29
29
  draftsDir: process.env.CUT_DRAFTS_DIR,
30
- name: 'cut-sdk-render-demo',
30
+ name: 'cutcli-render-demo',
31
31
  },
32
32
  afterCreate: async ({ draft, clip }) => {
33
33
  const firstImage = clip('image', 0);
@@ -52,7 +52,6 @@ async function main() {
52
52
  render: {
53
53
  cloud: true,
54
54
  apiToken: process.env.CUT_API_TOKEN,
55
- apiBase: process.env.CUT_UPLOAD_API_BASE,
56
55
  wait: true,
57
56
  },
58
57
  });
@@ -0,0 +1,109 @@
1
+ # cutcli CLI 示例
2
+
3
+ 当用户希望使用命令行而不是 SDK 代码时,参考这些示例。
4
+
5
+ ## 创建草稿
6
+
7
+ ```bash
8
+ cutcli draft create --width 1080 --height 1920 --pretty
9
+ ```
10
+
11
+ 输出中会包含 `draftId`,后续命令都使用这个草稿 ID。
12
+
13
+ ## 使用 Draft Spec 创建完整草稿
14
+
15
+ ```bash
16
+ cutcli spec validate --file draft.json --pretty
17
+ cutcli spec create --file draft.json --pretty
18
+ ```
19
+
20
+ 需要云渲染时:
21
+
22
+ ```bash
23
+ cutcli spec render --file draft.json --cloud --wait --pretty
24
+ ```
25
+
26
+ ## 便捷添加单个素材
27
+
28
+ 便捷命令支持 `1.5s`、`500ms`、`300000us` 这类时间字符串。
29
+
30
+ ```bash
31
+ cutcli query text-effects --keyword 火焰 --limit 5 --pretty
32
+ cutcli text add <draftId> --text "主标题" --start 0s --duration 3s --font-size 10 \
33
+ --text-effect "红黄火焰综艺花字" --border-color "#000000" --shadow --shadow-color "#000000" --pretty
34
+ cutcli image add <draftId> --src ./素材/bg.png --start 0s --duration 5s --width 1080 --height 1920 \
35
+ --in-animation 渐显 --in-animation-duration 500ms --transition 叠化 --transition-duration 500ms --pretty
36
+ cutcli audio add <draftId> --src ./素材/bgm.mp3 --start 0s --duration 20s --pretty
37
+ cutcli video add <draftId> --src ./素材/clip.mp4 --start 5s --duration 3s --width 1080 --height 1920 \
38
+ --mask 圆形 --scale-x 0.9 --scale-y 0.9 --pretty
39
+ ```
40
+
41
+ ## 批量 JSON 命令
42
+
43
+ 单素材命令是本地拼接主路径。下面的 `captions/images/audios` 批量 JSON 命令用于一次添加多段素材,或需要更细字段时使用。
44
+
45
+ ### 添加字幕
46
+
47
+ ```bash
48
+ cutcli captions add <draftId> --captions '[
49
+ {
50
+ "text": "CLI 字幕示例",
51
+ "start": 0,
52
+ "end": 3000000,
53
+ "keyword": "CLI",
54
+ "keywordColor": "#00ffaa",
55
+ "inAnimation": "渐显",
56
+ "outAnimation": "渐隐",
57
+ "inAnimationDuration": 500000,
58
+ "outAnimationDuration": 500000
59
+ }
60
+ ]' --font-size 8 --text-color "#ffffff" --bold --text-effect "红黄火焰综艺花字" --shadow --pretty
61
+ ```
62
+
63
+ ### 添加图片
64
+
65
+ ```bash
66
+ cutcli images add <draftId> --image-infos '[
67
+ {
68
+ "imageUrl": "/absolute/path/to/background.png",
69
+ "width": 1080,
70
+ "height": 1920,
71
+ "start": 0,
72
+ "end": 5000000
73
+ }
74
+ ]' --scale-x 0.9 --scale-y 0.9 --transform-y 0.05 --pretty
75
+ ```
76
+
77
+ ### 添加音频
78
+
79
+ ```bash
80
+ cutcli audios add <draftId> --audio-infos '[
81
+ {
82
+ "audioUrl": "/absolute/path/to/music.mp3",
83
+ "duration": 5000000,
84
+ "start": 0,
85
+ "end": 5000000,
86
+ "volume": 0.7
87
+ }
88
+ ]' --pretty
89
+ ```
90
+
91
+ ## 渲染
92
+
93
+ 首次使用云渲染前保存 Token:
94
+
95
+ ```bash
96
+ cutcli login <apiToken>
97
+ ```
98
+
99
+ ```bash
100
+ cutcli cloud render <draftId> --wait --pretty
101
+ ```
102
+
103
+ ## JSON 文件输入
104
+
105
+ 大多数 JSON 参数也支持 `@file.json`:
106
+
107
+ ```bash
108
+ cutcli captions add <draftId> --captions @captions.json --pretty
109
+ ```