@iqiyi-intl-nadoupro/nadoupro-cli 1.0.0-test.2

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 (62) hide show
  1. package/README.md +25 -0
  2. package/package.json +42 -0
  3. package/scripts/bootstrap.js +393 -0
  4. package/scripts/install.js +99 -0
  5. package/scripts/run.js +65 -0
  6. package/scripts/skill-sync.js +18 -0
  7. package/skills/nadou/SKILL.md +68 -0
  8. package/skills/nadou/commands/audio.md +125 -0
  9. package/skills/nadou/commands/auth.md +91 -0
  10. package/skills/nadou/commands/canvas-attachment.md +71 -0
  11. package/skills/nadou/commands/canvas-edge.md +65 -0
  12. package/skills/nadou/commands/canvas-graph.md +191 -0
  13. package/skills/nadou/commands/canvas-management.md +77 -0
  14. package/skills/nadou/commands/canvas-media.md +377 -0
  15. package/skills/nadou/commands/canvas-node.md +228 -0
  16. package/skills/nadou/commands/canvas.md +123 -0
  17. package/skills/nadou/commands/evidence.md +30 -0
  18. package/skills/nadou/commands/image-tools.md +88 -0
  19. package/skills/nadou/commands/image.md +273 -0
  20. package/skills/nadou/commands/material.md +59 -0
  21. package/skills/nadou/commands/media.md +156 -0
  22. package/skills/nadou/commands/model.md +103 -0
  23. package/skills/nadou/commands/points.md +43 -0
  24. package/skills/nadou/commands/schedule.md +112 -0
  25. package/skills/nadou/commands/space.md +253 -0
  26. package/skills/nadou/commands/system.md +50 -0
  27. package/skills/nadou/commands/task-request.md +188 -0
  28. package/skills/nadou/commands/task.md +229 -0
  29. package/skills/nadou/commands/text.md +81 -0
  30. package/skills/nadou/commands/video-advanced.md +96 -0
  31. package/skills/nadou/commands/video.md +247 -0
  32. package/skills/nadou/guides/artifact-presentation.md +146 -0
  33. package/skills/nadou/guides/canvas-dependency-graph.md +101 -0
  34. package/skills/nadou/guides/canvas-first-complex-workflow.md +83 -0
  35. package/skills/nadou/guides/execution-interaction.md +54 -0
  36. package/skills/nadou/guides/failure-cost-presentation.md +42 -0
  37. package/skills/nadou/guides/intent-templates.md +53 -0
  38. package/skills/nadou/guides/model-rules.md +7 -0
  39. package/skills/nadou/guides/utf8-input-safety.md +13 -0
  40. package/skills/nadou/node-types/audio.md +66 -0
  41. package/skills/nadou/node-types/clip.md +43 -0
  42. package/skills/nadou/node-types/director3d.md +41 -0
  43. package/skills/nadou/node-types/group.md +59 -0
  44. package/skills/nadou/node-types/image.md +137 -0
  45. package/skills/nadou/node-types/index.md +77 -0
  46. package/skills/nadou/node-types/json-contract.md +275 -0
  47. package/skills/nadou/node-types/model3d.md +35 -0
  48. package/skills/nadou/node-types/storyboard.md +43 -0
  49. package/skills/nadou/node-types/text.md +93 -0
  50. package/skills/nadou/node-types/video.md +119 -0
  51. package/skills/nadou/policies/core-safety.md +35 -0
  52. package/skills/nadou/policies/cost-and-write.md +37 -0
  53. package/skills/nadou/policies/result-and-recovery.md +41 -0
  54. package/skills/nadou/recipes/atomic-image.md +77 -0
  55. package/skills/nadou/recipes/canvas-image.md +92 -0
  56. package/skills/nadou/recipes/one-click-film.md +234 -0
  57. package/skills/nadou/recipes/quality-review.md +95 -0
  58. package/skills/nadou/recipes/typical-flows-host-adaptation.md +113 -0
  59. package/skills/nadou/workflows/atomic.md +61 -0
  60. package/skills/nadou/workflows/canvas.md +59 -0
  61. package/skills/nadou/workflows/local.md +41 -0
  62. package/skills/nadou/workflows/task-recovery.md +45 -0
@@ -0,0 +1,273 @@
1
+ # 图片
2
+
3
+ 图片生成与图片工具是两个层级:`nadou image` 从当前账号动态模型目录选择模型并生成;
4
+ Web 同款的打光、多视角、人像质感、超清和多宫格使用独立的
5
+ [`nadou image-tool`](image-tools.md)。不要把工具的固定服务路由当作动态模型,也不要用普通
6
+ `image_ref` 提示词模拟工具参数。
7
+
8
+ ## 路径选择
9
+
10
+ `nadou image` 始终是独立路径,不会创建或修改 Canvas 节点。如果用户明确指定 Canvas,
11
+ 应改用现有的 `canvas node estimate` → `canvas node generate` 路径。不得通过下载后
12
+ 重新上传,把独立结果伪装成 Canvas 生成节点;上传/自定义节点的来源与生成节点的提示词界面
13
+ 属于不同契约。
14
+
15
+ > **入口编排约定**:本命令只生成原子图片,不隐式写空间。提交前入口 Agent
16
+ > 先解析显式目录或列出空间目录候选,完成余额/估价、用户选择目录和一次确认后才提交;取得可信产物后使用同一目标
17
+ > 执行一次 `space artifact deliver`。本地下载状态与空间交付状态独立报告。
18
+
19
+ `nadou image` 是独立原子生图命令。提示词优化当前为 `deferred`,默认直接提交用户原始提示词,
20
+ 不询问是否优化,也不调用未开放的优化能力。
21
+
22
+ 长提示词优先使用文件或标准输入,避免正文进入进程参数:
23
+
24
+ ```sh
25
+ nadou image --prompt-file prompt.txt --profile <profile> --dry-run --no-interactive --json
26
+ cat prompt.txt | nadou image --stdin --profile <profile> --dry-run --no-interactive --json
27
+ ```
28
+
29
+ 位置参数、`--prompt`、`--prompt-file`、`--stdin` 必须且只能选择一个;文件和标准输入最多
30
+ 1 MiB。`--compact` 仅用于 `--json/--jsonl`,会保留任务 ID、状态、产物 URL
31
+ 和耗时,但不回显提示词、完整请求或后端 `raw`。
32
+
33
+ 非交互或 `--json/--jsonl` 机器模式的正式提交必须带 `--submit`;优先使用显式 `--prompt`、
34
+ `--prompt-file` 或 `--stdin`,位置提示词仅在已明确带 `--submit` 时接受;
35
+ 位置参数仅用于交互式调用或 `--dry-run` 预览。不要把 `nadou image models` 当作模型发现命令,
36
+ 模型目录必须使用 `nadou model list`。
37
+
38
+ 费用确认后的 `task submit` 会立即给出任务 ID。后续使用该任务 ID 执行
39
+ `task status`、`task wait` 和 `task outputs`;中断或失败时继续从同一个任务 ID
40
+ 恢复,不得重新提交生成请求。
41
+
42
+ `nadou image` 仍是可独立调用的原子命令,但入口 Agent 不直接跳到付费提交。先预览唯一请求:
43
+
44
+ ```sh
45
+ nadou image "一只白色小猫坐在未来感工作台旁" --profile <profile> --dry-run --no-interactive --json
46
+ ```
47
+
48
+ 将返回的 `data.request` 字段保存为 `request.json`,再严格按照
49
+ [task-request.md](task-request.md) 执行 `points summary`、`task estimate`、费用确认和
50
+ 使用同一个请求文件的 `task submit`。确认前不得提交;估价不锁价,确认后不得重新运行
51
+ `nadou image` 来重建请求。
52
+
53
+ `nadou image` 始终提交独立任务,不接受 `--canvas-id`,也不会隐式创建或修改节点。在画布上下文中
54
+ 不建议用它代替画布节点生成:应显式创建或选择图片目标节点,并带同一 `--canvas-id` 执行
55
+ `nadou canvas node generate --canvas-id <canvas-id>`,让状态和产物由回调写回同一节点。
56
+ `--dry-run` 只预览独立任务请求,不预览或写入画布节点。
57
+
58
+ 定时默认关闭。服务端定时只在用户明确选择后使用:
59
+
60
+ ```sh
61
+ nadou image --prompt-file prompt.txt \
62
+ --schedule-mode server --scheduled-at "2026-08-03T21:30:00" \
63
+ --timezone Asia/Shanghai --profile <profile> --dry-run --no-interactive --json
64
+ ```
65
+
66
+ 画布定时只能使用每小时 `00` 或 `30` 分钟的本地时间卡点,秒数必须为 `00`;其他分钟会在网络请求前被拒绝。
67
+ 普通图片服务端定时沿用服务端既有时间规则。
68
+
69
+ 该入口必须保留 `--dry-run`,再从 `data.request` 落盘并执行同请求费用预检和一次提交。本地定时
70
+ 不要在图片请求中上传定时参数:先生成普通预览请求,再按
71
+ [schedule.md](schedule.md) 执行 `schedule create` 和显式执行程序。
72
+
73
+ ## 提交前确定交付目录
74
+
75
+ `nadou image` 只生成独立图片任务。用户没有明确指定画布、空间目录或仅下载时,入口在费用确认前
76
+ 通过 `space current` 和 `space directory list` 列出目标空间全部目录候选,不得把个人空间根目录直接当作默认目标。
77
+ 用户必须在同一条确认中选择目录并确认费用;只有已处于 `delivery_status=AWAITING_DESTINATION` 的任务才恢复目录选择与交付。
78
+
79
+ 入口 Agent 的最终回复必须先给出目录选择提示,不能在拿到图片 URL 后直接结束:
80
+
81
+ ```text
82
+ 生成前计划:generation_status=PLANNED
83
+ 可选交付目录:<目录候选及完整层级路径>
84
+ 用户选择:<directory_id,未选择时不得提交>
85
+ 下一步:在同一条回复中选择目录并确认费用;确认后只提交一次,完成后写入所选目标并回读
86
+ ```
87
+
88
+ 目录候选来自本次 `space current` 和 `space directory list` 的真实响应;完整层级和 ID 不能凭名称猜测。
89
+ 候选查询失败或用户未选择时不得提交任务。用户确认后,才使用原任务/作业/产物执行一次交付并
90
+ 回读确认。
91
+
92
+ ```sh
93
+ nadou space current --profile <profile> --no-interactive --json
94
+ nadou space directory list --group-id <data.personal.id> --profile <profile> --no-interactive --json
95
+ ```
96
+
97
+ 从 `space current` 的 `data.personal.id` 取得个人空间 ID,展示全部目录的名称、完整层级、`directory_id`、
98
+ `parent_id` 和 `root_id`;同名目录必须附层级和 ID。未指定目录时不能使用根目录替代用户选择,
99
+ 不得使用当前团队空间、目录名称或拼接值猜测目标。
100
+
101
+ 当前激活空间是积分余额的计费空间,提交前绑定的个人目录是交付目标;两者必须分别报告。
102
+ 用户生成前明确指定个人目录或团队目录时沿用该目标并跳过选择;不得同时创建个人空间副本。
103
+
104
+ 生成成功后,对每个成功产物分别执行一条显式命令:
105
+
106
+ ```sh
107
+ nadou space artifact deliver \
108
+ --task-id <task-id> --job-id <job-id> --output-index <index> \
109
+ --group-id <data.personal.id> --directory-id <selected-directory-id> \
110
+ --mode copy --profile <profile> --no-interactive --json
111
+ ```
112
+
113
+ `job-id` 和 `output-index` 必须来自同一次 `task outputs` 结果并同时传入,使产物顺序变化时失败关闭,
114
+ 不能只凭序号重新猜测。每个成功产物对应一次命令和最多一次写请求。任务产物交付不是
115
+ `material upload`,不得重新上传生成结果。生成状态与交付状态分别报告;某个产物交付失败或结果未知,
116
+ 不得覆盖已经确认的生成成功,不得自动重试、改投其他目录或切换当前空间。用户取消、目录不完整或
117
+ 非交互调用未给目标时仅列出候选并停止,不解析或绑定个人根目录;未使用 `--wait` 时只报告计划目标,并提供
118
+ `task wait`、`task outputs`、`space artifact deliver` 恢复步骤。交付失败/未知时保持生成成功,不重提或改投。
119
+ 空间交付和服务端在线结果是入口默认交付。本原子命令不会自动下载或创建本地清单;
120
+ 只有用户明确要求本地文件时,才在费用/执行摘要中披露绝对目标目录和不覆盖规则,并获得单独授权。
121
+
122
+ 用户明确要求本地下载后,取得可信产物并以原任务 ID 创建持久清单:
123
+
124
+ ```sh
125
+ nadou task download-batch \
126
+ --task-id <task-id> \
127
+ --manifest <absolute-target>/download-manifest.json \
128
+ --output-dir <absolute-target>/artifacts \
129
+ --profile <profile> --json
130
+ ```
131
+
132
+ 即使只有一个输出也使用该命令;多产物部分失败后只执行
133
+ `task download-batch --resume-manifest <absolute-target>/download-manifest.json`。默认拒绝覆盖,
134
+ 不得使用 `--overwrite` 恢复,也不得重新生成。`local_delivery_status`、空间 `delivery_status` 与生成状态
135
+ 是入口 Skill 组合流程状态,不是本命令 JSON 响应封装的字段。未明确要求本地下载时不创建清单、不报告本地路径;
136
+ 用户明确提到画布、仅生成或仅空间交付时同样跳过本地下载,画布流程不同时创建个人空间副本。
137
+
138
+ 可选地指定动态目录中的模型:
139
+
140
+ ```sh
141
+ nadou image "古典园林里的薄雾和红灯笼" --model <image-model> --profile <profile> --dry-run --no-interactive --json
142
+ ```
143
+
144
+ 先通过 `nadou model list --scenario text2img` 从当前账号的动态目录中选择
145
+ `<image-model>`,不要猜测或复用其他账号的值。
146
+
147
+ ## 图片融图(`image_ref`)
148
+
149
+ 用户明确要求参考一张或多张图片生成新图时,使用独立 `image_ref`;它不会创建画布:
150
+
151
+ ```sh
152
+ nadou model list --scenario image_ref --profile <profile> --no-interactive --json
153
+ nadou model schema <model-id> --scenario image_ref --profile <profile> --no-interactive --json
154
+ nadou image "<prompt>" --scenario image_ref \
155
+ --reference <trusted-image-url-1> \
156
+ --reference <trusted-image-url-2> \
157
+ --model <model-id> --profile <profile> --dry-run --no-interactive --json
158
+ ```
159
+
160
+ `image_ref` 对应服务端 `IMG_REF`,至少需要一项有序 `--reference`;最大图片数、比例、
161
+ 清晰度和生成数量全部读取所选模型当前参数结构。普通文生图不得携带引用。已知视频或音频
162
+ 扩展名的 URL 不能放入图片角色;无法从 URL 权威识别的媒体类型仍由服务端最终校验。
163
+
164
+ ### 融图富文本提示词
165
+
166
+ 当提示词需要明确表达“哪一张参考图对应哪段描述”时,可使用独立任务的 Web 富文本引用格式:
167
+
168
+ ```bash
169
+ nadou image --scenario image_ref --prompt-format rich \
170
+ --prompt-file prompt.html \
171
+ --reference https://assets.example/beach.png \
172
+ --dry-run --no-interactive --json
173
+ ```
174
+
175
+ 例如,`prompt.html` 可以把引用标签直接放在对应语义前:
176
+
177
+ ```html
178
+ <p><span data-type="reference-tag" data-value="海边背景"
179
+ data-url="https://assets.example/beach.png" class="reference-tag image-tag">
180
+ <span class="reference-tag-text">@海边背景</span></span>作为背景,生成一个女孩在沙滩上奔跑。</p>
181
+ ```
182
+
183
+ `prompt.html` 必须是 UTF-8,并包含覆盖 `--reference` 唯一 URL 集合且首次出现顺序一致的
184
+ `data-type="reference-tag"` 标签;同一 URL 可以重复出现。每个标签需要有可信 HTTPS `data-url`、可见的
185
+ `reference-tag-text`;UI 标签可以携带画布专用的 `data-id`,CLI 会在独立请求前移除它并保留该 HTML,
186
+ 同时继续提交 `params.image`、`form.referenceImages` 和 `form.thumbsOrder`;不会把
187
+ `prompt-format` 作为后端字段发送。
188
+
189
+ 普通位置参数和 `--prompt-format plain` 行为保持不变。CLI 不会根据普通文本猜测引用位置,
190
+ 也不会在融图命令中隐式上传本地文件。富文本校验失败时在提交前停止。
191
+
192
+ `--reference` 不接受本地路径,也不会隐式上传。可信 HTTPS 素材直接复用;只有本地图片会进入最终
193
+ 请求且所选模型必须接收服务端 URL 时,才在说明远端写入后显式上传一次。用户拒绝时停止:
194
+
195
+ ```sh
196
+ nadou material upload --file <local-image> --profile <profile> --no-interactive --json
197
+ ```
198
+
199
+ ### Web 富文本引用兼容
200
+
201
+ 独立模式的 `image_ref --prompt-format rich` 接受 Web 编辑器的参考标签 HTML。标签包含
202
+ `data-id` 时,CLI 会先把其中的 `data-url` 与显式 `--reference` 匹配,再移除这项 UI/Canvas 元数据。
203
+ 重复标签保留在描述中,任务媒体参数则按首次出现顺序使用去重后的 URL。禁用、空值、不可信或未声明的
204
+ 引用都会在提交前失败。画布提示词保留 `data-id`,并根据实时 Graph 校验,不按独立输入处理。
205
+
206
+ 上传写结果未知时先核对素材,不能重新上传;取得可信 URL 后再重新执行融图预演。
207
+ 引用的内容或顺序变化会使旧估价和确认失效。用户明确提到画布时不使用本节流程,改走
208
+ 画布图片节点和 `canvas node generate`。
209
+
210
+ ## 全景与三视图
211
+
212
+ 全景和主体三视图分别从当前账号专属目录发现,不复用普通文生图或融图参数结构:
213
+
214
+ ```sh
215
+ nadou model list --scenario panorama --profile <profile> --no-interactive --json
216
+ nadou model list --scenario three_view --profile <profile> --no-interactive --json
217
+
218
+ nadou image "未来城市的 360 度街景" --scenario panorama \
219
+ --reference <trusted-image-url> --space-size more_spacious --quality high \
220
+ --model <runtime-model> --profile <profile> --dry-run --json
221
+
222
+ nadou image "保持角色一致,生成正面、侧面、背面三视图" --scenario three_view \
223
+ --reference <trusted-image-url> --model <runtime-model> \
224
+ --profile <profile> --dry-run --no-interactive --json
225
+ ```
226
+
227
+ `panorama` 对应 `PANORAMA_GENERATION_MODEL_CONFIG` / `PANORAMA_GENERATION`,`three_view`
228
+ 对应 `THREE_VIEW_GENERATION_MODEL_CONFIG` / `THREE_VIEW_GENERATION`。二者提示词必填,参考图
229
+ 可为空;存在参考图时保持顺序,并按所选模型当前参数结构校验图片类型和数量。比例、清晰度与数量
230
+ 均来自目录。`--space-size` 只属于 `panorama`;所选图片模型参数结构声明 `quality` 时,普通
231
+ `text2img`、`image_ref`、`panorama`、`three_view` 和 `inpaint` 都会把 `快速/平衡/高质量` 转换成
232
+ `low/medium/high`,普通图片场景也允许显式使用 `--quality`。MJ 模型的 `MJ 7/Niji 7`、`Standard/Raw`
233
+ 展示值转换为任务布尔值;不能将展示标签直接写入任务。
234
+
235
+ ## 图片局部重绘(`inpaint`)
236
+
237
+ 局部重绘必须显式区分源图和遮罩,不允许使用无角色的 `--reference` 猜顺序:
238
+
239
+ ```sh
240
+ nadou model list --scenario inpaint --profile <profile> --no-interactive --json
241
+ nadou image "将遮罩区域改成霓虹机械结构" --scenario inpaint \
242
+ --source-image <trusted-source-url> --mask <trusted-mask-url> \
243
+ --model <runtime-model> --profile <profile> --dry-run --no-interactive --json
244
+ ```
245
+
246
+ `inpaint` 对应 `CANVAS_IMG_REDRAW` / `IMG_INPAINT`。`--source-image` 和 `--mask` 各且仅一个,
247
+ 都必须是可信 HTTPS 图片 URL;重复、缺失、本地路径和已知非图片类型均在提交前失败。模型、数量和
248
+ 默认参数从当前目录动态读取,不写死重绘模型;目录中的 `MJ 7/Niji 7`、`Standard/Raw` 展示值在
249
+ 请求边界转换为后端布尔值,无法解释的默认值失败关闭。
250
+
251
+ 局部重绘只生成独立结果图片,不创建 Canvas Graph 节点,不写回调/修订状态,也不替换源图。
252
+ 本地源图和遮罩分别先显式执行 `nadou material upload`;提交确认前绑定已确认的空间目录,
253
+ 并按用户明确授权以单个任务的 `task download-batch` 清单下载到用户指定的本地目录。
254
+ 用户指定团队目录时替换空间目标,
255
+ 本地下载状态与空间交付状态分别报告。
256
+ 远端实际图片内容以及源图/遮罩尺寸兼容性由服务端提交最终验证。
257
+
258
+ 费用确认后的低层提交只执行一次并返回任务 ID,适合稍后恢复:
259
+
260
+ ```sh
261
+ nadou task submit --body-file request.json --profile <profile> --no-interactive --json
262
+ nadou task wait <task-id> --profile <profile> --no-interactive --json
263
+ nadou task outputs --task-id <task-id> --profile <profile> --no-interactive --json
264
+ ```
265
+
266
+ 独立图片的团队目录交付若返回 `PERMISSION_DENIED` 或 `DELIVERY_PERMISSION_DENIED` 且 `fallback_eligible=true`,必须使用 `atomic_media_permission_fallback_prompt`:先展示原团队目录和个人目录候选,等待 `fallback_confirmation_required` 的明确确认;确认前不得写个人空间。拒绝时遵循 `fallback_confirmation_declined`,非交互无预授权时遵循 `non_interactive_fallback_blocked`,确认后仅按 `original_task_reuse_only` 复用原任务/作业/产物,不重新生图。
267
+
268
+ 模型比例、清晰度和数量使用服务端目录默认值。需要构造低层独立任务请求或高级回放
269
+ `request.json` 时,读取 [task-request.md](task-request.md),优先用 `--dry-run --json`
270
+ 获得当前 CLI 构造的 `data.request`,不要手写请求外壳。模型、提示词、参考素材、比例、
271
+ 清晰度、数量、账号配置、当前计费空间或请求发生变化时,旧估价和任务级积分上限授权失效,
272
+ 必须重新预检。`estimable=false`、余额未知或余额不足时停止。画布节点生成默认由
273
+ `canvas node generate` 从节点配置和依赖边派生请求。
@@ -0,0 +1,59 @@
1
+ # 本地素材上传与删除
2
+
3
+ 把一个本地图片、视频或音频上传为独立素材,或显式归属到画布:
4
+
5
+ ```sh
6
+ nadou material upload --file <path> \
7
+ --profile <profile> --no-interactive --json --timeout 10m
8
+ ```
9
+
10
+ 不要把素材上传作为每次创作的固定前置步骤。可信 HTTPS 素材直接复用,不重复上传;只有用户明确要求
11
+ 使用本地素材、该素材会进入最终请求且所选能力必须接收服务端 URL 时,Agent 才说明远端写入原因、
12
+ 素材范围和独立上传语义,然后上传实际引用素材一次。用户拒绝时停止,不上传无关素材,也不通过空间
13
+ 交付或画布上传绕过。独立输入上传不是个人空间交付,不保证素材出现在个人空间或界面素材库。
14
+
15
+ 未传 `--canvas-id` 时,这是**独立上传**:CLI 在普通上传以及分片初始化、分片、完成的每一阶段都省略
16
+ `workflowId`,返回 `scope.type=standalone` 与可供独立 `nadou video --reference <url>` 使用的公网 `url`。它不创建、选择或修改画布。
17
+
18
+ 显式传入 `--canvas-id <canvas-id>` 时,这是**画布归属上传**:CLI 将该值写入协议字段
19
+ `workflowId`。`--workflow` 不是别名。需要服务端添加水印时增加 `--add-watermark`。
20
+ CLI 不在本地复制后端的格式、尺寸或时长规则,服务端仍执行最终校验。
21
+
22
+ 成功时读取正整数 `data.id` 为 `material_id`,并读取经过公网地址校验的 `data.url` 作为后续任务请求的素材 URL;本机、私网和已知内网
23
+ 域名会被拒绝。若接着创建画布图片或视频节点,还必须使用 `data.metadata.width` / `data.metadata.height`
24
+ 计算节点显示尺寸,不得臆造固定长宽;并按 [json-contract.md](../node-types/json-contract.md) 的上传素材
25
+ 允许列表,把同次响应中的多档预览/封面 URL(`thumbnailUrl` / `mediumThumbnailUrl` / `previewUrl` /
26
+ `firstFrameUrl`)以及 `assetId` / `assetName`(视频另含 `duration` / `fps` 等)有值键写入创建请求的
27
+ `data.metadata`,不要整包复制上传元数据。
28
+ `data.file_name` 只包含文件名,`data.file_size`、`data.scope` 和 `data.upload_mode=single|multipart`
29
+ 用于对账。CLI 不输出 `innerUrl`、本地绝对路径或上传会话内部标识。
30
+
31
+ 文件小于 5 MiB 时只发送一次普通上传;大于等于 5 MiB 时按初始化、顺序分片、完成执行,
32
+ 分片为 5 MiB。`--timeout` 覆盖从 `init` 到 `complete` 的完整上传流程,不会按分片重新计时。
33
+ 每个阶段最多发送一次,不自动重试。遇到 `REQUEST_OUTCOME_UNKNOWN` 时保留 `request_id`、
34
+ `phase`、文件名/大小和作用域:普通上传/完成阶段需要请 NadouAI 支持通过后端日志确认写入
35
+ 结果;初始化/分片阶段的上传会话当前无法由 CLI 安全对账、恢复或续传,不得直接重跑或自动重启。
36
+
37
+ 上传只创建素材记录并返回公网 URL;即使选择画布归属,也不会创建或修改画布节点,
38
+ 也不保证记录自动显示在界面素材库。所有上传都通过 `nadou material upload` 完成。
39
+
40
+ 删除上传后的单个素材必须使用返回的 `material_id`:
41
+
42
+ ```sh
43
+ nadou material delete <material-id> --profile <profile> --no-interactive --json
44
+ ```
45
+
46
+ 默认把素材移入回收站。逻辑永久删除必须由用户明确要求,并在非交互模式同时传入:
47
+
48
+ ```sh
49
+ nadou material delete <material-id> --permanent --yes \
50
+ --profile <profile> --no-interactive --json
51
+ ```
52
+
53
+ 删除只调用已批准的 `/apis/nadouai/material/disable`,不使用 URL、任务 ID 或作业 ID 扩大匹配范围;
54
+ 也不代表物理擦除 OSS 文件。每条删除命令只发送一次写请求。若返回
55
+ `REQUEST_OUTCOME_UNKNOWN`,保留请求 ID 和素材 ID,先在 NadouAI 中核对素材状态,
56
+ 不得自动重试。
57
+
58
+ 交互模式的上传进度只写标准错误;`--json`、`--jsonl` 或 `--no-interactive` 不输出进度,标准输出
59
+ 始终只承载最终结果信封。
@@ -0,0 +1,156 @@
1
+ # 本地媒体命令
2
+
3
+ `nadou media` 只处理本地文件,不发送 NadouAI 或其他网络请求。所有命令默认不修改输入;
4
+ 写命令生成独立输出并默认拒绝覆盖,媒体检查和交付核验只读。
5
+
6
+ 普通原子生成不调用本地媒体命令。只有用户明确要求技术验收,或明确选择的下载、字幕、合成和最终
7
+ 交付确实需要媒体事实时,才运行只读检查;只读技术检查不授权媒体变换。只有用户明确要求适配,或
8
+ 已选择的下游目标存在实际不兼容时,才运行缩放、规范化或转码,并在执行前说明原因、输入和独立
9
+ 输出。已满足目标约束时不重复规范化;需要改变构图时也不得把等比补边冒充用户授权的裁切。
10
+
11
+ ## 交付预设
12
+
13
+ 规范化、线性成片和核验必须显式选择以下版本化预设之一,不能根据首个片段猜测画幅:
14
+
15
+ - `landscape-1080p-v1`:1920×1080;
16
+ - `portrait-1080p-v1`:1080×1920;
17
+ - `square-1080p-v1`:1080×1080。
18
+
19
+ 三者统一为 MP4、H.264、yuv420p、30fps、AAC-LC、48kHz、双声道。
20
+
21
+ ## 检查本地媒体
22
+
23
+ ```sh
24
+ nadou media inspect --input ./outputs/final.mp4 --json
25
+ ```
26
+
27
+ 稳定结果包含:
28
+
29
+ - `input_path`、`size_bytes` 和 `duration_ms`;
30
+ - 音频-only 输入返回 `media_type=audio`;视频输入保持既有投影,并包含主视频流的 `width`、`height` 和约分后的 `ratio`;
31
+ - `has_audio`、`stream_count` 和全部稳定流字段;
32
+ - `tool=ffprobe`。
33
+
34
+ 检查只需要 ffprobe,不要求 FFmpeg 同时可用。缺失时返回 `MEDIA_TOOL_MISSING`,先执行
35
+ `nadou doctor --json` 查看诊断。损坏文件、无音频/视频流、无有效时长或视频无有效尺寸返回
36
+ `MEDIA_PROBE_FAILED`。不要把未执行或失败的检查描述为通过。
37
+
38
+ 多参考视频在上传本地音频前,必须先检查音频时长:
39
+
40
+ ```sh
41
+ nadou media inspect --input ./references/voice.mp3 --json
42
+ ```
43
+
44
+ 再将 `duration_ms` 与当前账号模型 Schema 的 `audio_duration` 区间比较。以模型返回的
45
+ `[2000,15000]` 为例,边界包含在内;超出范围时停止,不执行 `material upload`、估价或任务提交。
46
+ 远程 HTTPS 音频没有本地时长事实时,继续标记为服务端校验,不得根据文件名或 URL 猜测。
47
+
48
+ ## 烧录双语字幕
49
+
50
+ ```sh
51
+ nadou media subtitle --input ./outputs/raw.mp4 --cues ./subtitles.json \
52
+ --output ./outputs/final.mp4 --font "Microsoft YaHei" --json
53
+ ```
54
+
55
+ 字幕条目的 `version` 可写成 JSON 数字 `1` 或字符串 `"1"`,两者统一按版本 1 处理;每项包含
56
+ `start_ms/end_ms/zh/en`。输入和输出不能是同一文件;
57
+ 默认拒绝覆盖,确需替换已有输出时显式使用 `--overwrite`。
58
+
59
+ ## 兼容片段拼接
60
+
61
+ ```sh
62
+ nadou media concat --input ./shot-1.mp4 --input ./shot-2.mp4 \
63
+ --output ./outputs/joined.mp4 --json
64
+ ```
65
+
66
+ 命令严格保留输入顺序,只做流复制。流参数不兼容时返回
67
+ `MEDIA_INCOMPATIBLE_INPUTS`,不自动转码,也不调用云端合并服务。
68
+
69
+ ## 规范化不兼容片段
70
+
71
+ ```sh
72
+ nadou media normalize --profile landscape-1080p-v1 \
73
+ --input ./shot-1.mp4 --input ./shot-2.mp4 \
74
+ --output-dir ./normalized --json
75
+ ```
76
+
77
+ 命令先探测全部输入,再将画面等比缩放、居中补黑边并统一编码;没有音频的片段补等长静音。
78
+ 该命令被用户显式调用后,即使源文件已经符合预设,也会生成独立输出并报告
79
+ `source_compatible=true`;因此 Agent 必须先判断它是否为下游目标所需,不能把命令行为当作默认流程。
80
+ 只有结果中的
81
+ `comparison.matches=true` 才表示容器、视频和音频技术规格均复查通过。
82
+
83
+ ## 按清单线性成片
84
+
85
+ ```sh
86
+ nadou media compose --manifest ./edit-manifest.json \
87
+ --output ./outputs/final.mp4 --json
88
+ ```
89
+
90
+ 清单的 `version` 可写成 JSON 数字 `1` 或字符串 `"1"`,包含显式账号配置和有序
91
+ `segments`;每段可选 `in_ms/out_ms`,
92
+ 并可提供一份现有格式的双语字幕条目文档作为 `subtitles`。相对路径以清单目录为基准。
93
+ 命令不支持转场、多轨、背景音乐或自动混音。多片段在拼接后会执行一次最终时间戳、固定帧率
94
+ 和音频重采样归一化,再按同一账号配置严格验证;不会用放宽验证掩盖不合格产物。预检、转码、
95
+ 拼接、硬字幕和最终探测任一步失败,
96
+ 都不得把临时文件报告为最终交付。
97
+
98
+ ## 代表帧与技术核验
99
+
100
+ ```sh
101
+ nadou media frames --input ./outputs/final.mp4 --count 5 \
102
+ --output-dir ./review --json
103
+
104
+ nadou media verify --input ./outputs/final.mp4 \
105
+ --profile landscape-1080p-v1 --json
106
+ ```
107
+
108
+ `frames` 使用确定性时间点均匀覆盖主视频流有效时长,并返回每张 JPEG 的来源和
109
+ `timestamp_ms`。当音频或容器尾部比视频轨更长时,以主视频流时长为边界并预留一个视频帧
110
+ 周期;只有流时长不可用时才回退容器时长,不通过失败后递减时间点重试。
111
+ `verify` 只调用 ffprobe,将实际媒体事实与显式预设逐项对照。两者始终返回
112
+ `creative_review_required=true`:技术通过不等于剧情、角色一致性或画面创意已经通过。
113
+
114
+ ## 本地多轨混音
115
+
116
+ ```sh
117
+ nadou media mix --manifest ./delivery/audio-mix-plan.json \
118
+ --output ./delivery/mixed.mp4 --dry-run --json
119
+ nadou media mix --manifest ./delivery/audio-mix-plan.json \
120
+ --output ./delivery/mixed.mp4 --json
121
+ ```
122
+
123
+ `audio_mix_plan` 是严格的版本 1 JSON,只接受清单目录内的相对视频/音频路径。每条音轨显式声明
124
+ `narration/music/effect`、起点、裁剪、音量和淡入淡出;可配置旁白区间内的音乐压低与目标响度。
125
+ `--dry-run` 只探测输入并返回确定性滤镜计划,不创建最终媒体。正式混音保持原视频完整时长,默认拒绝
126
+ 覆盖;失败只清理临时文件,不把局部输出称为交付物。
127
+
128
+ ## 字幕校验与导出
129
+
130
+ ```sh
131
+ nadou media subtitle validate --cues ./subtitles.json \
132
+ --input ./delivery/mixed.mp4 --font "Microsoft YaHei" \
133
+ --report-output ./delivery/subtitle-report.json --json
134
+ nadou media subtitle export --cues ./subtitles.json --format srt \
135
+ --output ./delivery/subtitles.srt --json
136
+ nadou media subtitle export --cues ./subtitles.json --format ass \
137
+ --output ./delivery/subtitles.ass --font "Microsoft YaHei" --json
138
+ ```
139
+
140
+ 校验会一次报告非法时间范围、乱序、重叠、越过媒体时长、双语缺失和字体可用性。显式字体不可用为
141
+ 阻塞错误;默认字体无法确认时保守警告。`--report-output` 显式保存可供 `evidence delivery` 引用的裸
142
+ 版本 1 报告;未指定时校验零写入。报告、导出与烧录均默认不覆盖。
143
+
144
+ 最终交付使用完整的 `media verify --json` 成功响应封装,并与生成证据、下载清单和人工确认共同生成:
145
+
146
+ ```sh
147
+ nadou evidence delivery --generation ./delivery/generation-evidence.json \
148
+ --download ./delivery/download-manifest.json --media ./delivery/final.mp4 \
149
+ --verification ./delivery/media-verify.json \
150
+ --confirm-narrative --confirm-characters --confirm-subtitles \
151
+ --output ./delivery/delivery-manifest.json --json
152
+ nadou evidence validate --input ./delivery/delivery-manifest.json --json
153
+ ```
154
+
155
+ 技术校验不能代替叙事、角色一致性和字幕人工确认;任一引用缺失、越界、哈希值不符或来源文件不一致时,
156
+ 交付证据必须失败关闭。
@@ -0,0 +1,103 @@
1
+ # 模型
2
+
3
+ ## 基础 Schema 与有效 Schema
4
+
5
+ 目录返回的是基础 Schema。Web 还会根据模型、场景、首尾帧角色、已选参数和参考素材事实应用条件规则;CLI 在本地使用纯规则评估器生成有效参数。`model schema` 对已知模型额外返回 `conditional_rules`,用于说明受影响字段,但不替代当前账号目录或服务端最终校验。远程素材事实未知时,CLI 不会伪造事实;用户显式指定受影响参数时会在提交前失败关闭。
6
+
7
+ 模型发现有两个入口:知道**真实模型 ID**时使用 `model get/schema/scenarios`;只知道
8
+ 展示名(例如“Happy Horse 1.1”)时,先读取模型族。模型族按运行时目录中明确的
9
+ “供应商 → `versions` → 版本”路径归并,不根据 `-txt`、`-ref` 或 `-img` 等 ID 后缀猜测:
10
+
11
+ ```sh
12
+ nadou model family "Happy Horse 1.1" --profile <profile> --no-interactive --json
13
+ ```
14
+
15
+ 输出的 `variants[]` 保留每个真实 `model_id`、`scenario`、`config_key` 和独立 `schema`。
16
+ 选定能力后,后续 `model schema` 或生成仍必须使用该 `model_id`;CLI 不会把一个
17
+ 场景的真实模型 ID 自动改成同族的另一个变体。
18
+
19
+ 如果同一展示名来自多个供应商,命令会返回候选而不猜测;传明确的供应商消歧:
20
+
21
+ ```sh
22
+ nadou model family "同名模型" --provider "供应商名" --profile <profile> --no-interactive --json
23
+ ```
24
+
25
+ 同一**真实模型 ID**也可能出现在多个创作场景。此时先查询目录中的真实场景键,再传给
26
+ `model get/schema --scenario`:
27
+
28
+ ```sh
29
+ nadou model scenarios <model-id> --profile <profile> --no-interactive --json
30
+ ```
31
+
32
+ 若精确 ID 省略了必需的 `--scenario`,`INVALID_ARGUMENT` 的
33
+ `details.scenarios` 会返回同一组候选;不要依据展示名或媒体类型猜测。
34
+
35
+ 查看当前环境可用的图片和视频模型。默认返回压缩摘要 `models[]`
36
+ (`name`/`label`/`defaults`),不要把整份配置树塞进上下文:
37
+
38
+ ```sh
39
+ nadou model list --profile <profile> --type image --no-interactive --json
40
+ nadou model list --profile <profile> --type video --no-interactive --json
41
+ nadou model list --profile <profile> --type audio --no-interactive --json
42
+ ```
43
+
44
+ 只有排查原始目录时才加 `--raw`。
45
+
46
+ 创作请求应优先按场景发现,避免把同一展示模型在不同场景下的参数混在一起:
47
+
48
+ ```sh
49
+ nadou model list --scenario text2img --profile <profile> --no-interactive --json
50
+ nadou model list --scenario image_ref --profile <profile> --no-interactive --json
51
+ nadou model list --scenario multi_reference --profile <profile> --no-interactive --json
52
+ nadou model list --scenario video_edit --profile <profile> --no-interactive --json
53
+ nadou model list --scenario motion_control --profile <profile> --no-interactive --json
54
+ ```
55
+
56
+ `--scenario` 与 `--type`、`--raw` 互斥。场景不存在时停止,不得退化到其他场景。
57
+
58
+ ## 查看单个模型(摘要/参数结构)
59
+
60
+ `model get` 返回单个模型的摘要,`model schema` 返回该模型在某创作场景下可提交的
61
+ 参数视图(`defaults`/`enums`/`limits`),两者都带 `source`、`catalog_revision`、
62
+ `fetched_at` 溯源字段,数据源始终是运行时 `task/configs`:
63
+
64
+ ```sh
65
+ nadou model get vidu-q2 --profile <profile> --no-interactive --json
66
+ nadou model schema vidu-q2 --profile <profile> --no-interactive --json
67
+ ```
68
+
69
+ 同一 `value` 可能出现在多个创作场景。
70
+ 未指定场景且存在多个时会返回 `scenarios[]` 供消歧,用 `--scenario` 选择:
71
+
72
+ ```sh
73
+ nadou model schema <model-id> --scenario text2video --profile <profile> --no-interactive --json
74
+ nadou model list --scenario text2audio --profile <profile> --no-interactive --json
75
+ nadou model schema <model-id> --scenario audio2audio --profile <profile> --no-interactive --json
76
+ nadou model schema <model-id> --scenario first_last_frame --profile <profile> --no-interactive --json
77
+ ```
78
+
79
+ 首尾帧模型的参数结构可能包含动态的 `frame_capabilities`:
80
+ `onlyFirstFrame=false,onlyLastFrame=false` 支持仅首帧和首尾帧;
81
+ `true,false` 仅支持首帧;`false,true` 支持仅首帧、首尾帧和仅尾帧。
82
+ 字段缺失或两个标记同时为 `true` 时,CLI 失败关闭,不根据模型名猜测能力。
83
+
84
+ ## 绑定默认模型
85
+
86
+ 把摘要返回的 `name` 绑定为默认模型:
87
+
88
+ ```sh
89
+ nadou model use image <runtime-image-model-id> --profile <profile> --no-interactive --json
90
+ nadou model use video <runtime-video-model-id> --profile <profile> --no-interactive --json
91
+ ```
92
+
93
+ 绑定只保存模型标识,不保存模型参数。每次快捷生成都会重新读取目录和该模型的 `default`;
94
+ 也可以在单次命令中覆盖:
95
+
96
+ ```sh
97
+ nadou image "一只白色小猫" --model <runtime-image-model-id> --profile <profile> --dry-run --no-interactive --json
98
+ ```
99
+
100
+ 入口 Agent 将该预览的 `data.request` 保存后,按 [task-request.md](task-request.md)
101
+ 完成余额、同请求估价、费用确认和同请求单次提交;不能从模型示例直接跳过费用预检。
102
+
103
+ 不要把显示名称、供应商名称或旧环境中的值当作模型 `value`。
@@ -0,0 +1,43 @@
1
+ # 积分
2
+
3
+ 查询当前账号在当前环境下的剩余积分(只读,不扣减、不需要确认):
4
+
5
+ ```sh
6
+ nadou points summary --profile <profile> --no-interactive --json
7
+ ```
8
+
9
+ `points` 是顶层余额命令;不存在 `nadou canvas points`。Canvas 内的待生成费用必须在目标节点已存在、
10
+ 必要依赖边已建立并完成回读后,使用 `nadou canvas node estimate --canvas-id <canvas-id> --node-id <node-id>` 估算。
11
+ 后者是未来生成费用预览,不是当前余额、画布历史消耗或所有节点的默认汇总。
12
+
13
+ 输出为稳定响应封装,`data` 字段:
14
+
15
+ - `balance.value`:可进行数值比较时为非负整数;不采用数值余额语义时为 `null`。
16
+ - `balance.display`:面向用户的稳定展示;与 `value` 对应的十进制文本,或 `∞`。
17
+ - 普通数值余额同时返回兼容字段 `remain_points`,以及服务端提供时的
18
+ `free_remain_points`、`recharge_remain_points`;Agent 必须优先读取 `balance`。
19
+ - 当 `balance.value=null` 时,用户可读输出只显示“剩余积分:∞”;不返回没有真实数值语义的兼容余额字段和分类明细,不得把它改写为
20
+ `0`、任意大整数、`Infinity` 或本地额度上限。
21
+
22
+ 余额按当前激活空间自动结算(团队空间查团队钱包,个人空间查个人钱包),无需传参。展示策略同样
23
+ 以当前空间优先:团队空间遵循该团队的权威余额属性,个人账号属性不能覆盖团队;只有个人空间才采用
24
+ 个人账号的余额语义。切换空间后必须重新查询;策略无法确定时失败关闭。Agent 只读取公开的
25
+ `balance.value/display`,不得探测、展示或解释形成该投影的内部账号/团队分类。该命令只反映服务端
26
+ 权威余额,不复制任何计价规则;单次任务的预计消耗请用 `nadou task estimate`,两者用途不同,不可互相替代。
27
+
28
+ 原子图片或视频费用预检时,先用高层命令预演得到唯一请求,再执行一次 `space current` 获取
29
+ 当前激活计费空间的权威身份,随后查询本页余额并对同一个请求执行 `task estimate`。本命令只返回余额,
30
+ 不返回空间 ID 或名称,Agent 不得据此猜测计费空间。向用户分别展示当前激活空间的计费范围和媒体
31
+ 交付目标:未指定目录时在确认前列出个人/目标空间的全部目录候选,等待用户选择;这不表示使用个人钱包计费;明确个人或团队
32
+ 目录时保留该目标。必要输入上传、本地下载、画布和媒体处理仍需
33
+ 分别披露,生成费用确认不授权后续空间写入。
34
+
35
+ 数值余额的 `balance.value - estimated_points` 只能标记为“按当前估价推算”的执行后余额;
36
+ `balance.value=null` 时,当前余额和预计执行后余额都展示为 `∞`,只跳过客户端数值余额不足比较。
37
+ 两种余额都必须保留服务端估价、费用确认和任务级积分上限;估价不锁价、不预占积分,服务端最终校验
38
+ 仍是任务能否提交和执行的权威。余额策略无法权威确定时失败关闭,不得自行推断。
39
+
40
+ 本地定时计划创建时也会查询当前权威余额并对冻结请求估价,但这不锁价、不扣费。到期工作进程
41
+ 会在同一账号和计费空间下重新读取权威余额语义、重新估价,并要求结果不超过计划的 `max-points`
42
+ 才进入唯一提交。数值余额仍执行不足校验;非数值余额仍执行预算与服务端最终校验。账号、空间、
43
+ 余额策略或估价变化导致 `BLOCKED` 时不得自动改用其他空间、放宽上限或重提。