@lingjingai/lj-awb-cli-pre 0.3.16 → 0.3.18

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.
@@ -1,18 +1,19 @@
1
1
  # Asset Module
2
2
 
3
- 资产模块负责素材库的"分组管理 + 素材注册 + 候选匹配",**专为 Seedance / BytePlus / 即梦系列生视频前的"加白 / 过审"流程服务**。可灵 / KeLing 和 Vidu 系列用 [`subject.md`](subject.md) 的 `create subject`,不走 asset。
3
+ 资产模块负责素材库的"分组管理 + 素材注册 + 候选匹配",服务于生视频前需要平台素材加白 / 过审的流程。是否支持素材加白、支持哪个平台,以 `model asset-review-models` 返回为准;不要按模型名称硬编码推断。可灵 / KeLing 和 Vidu 的角色一致性通常走 [`subject.md`](subject.md) 的 `create subject`,不要把主体 `modelCode=tx|vidu` 和资产平台 `JIMENG|BYTEPLUS` 混用。
4
4
 
5
5
  ## 命令
6
6
 
7
7
  | 命令 | 用途 |
8
8
  |------|------|
9
- | `lj-awb create asset-groups --name "<keyword>"` | 查素材组(按名搜,避免重建已有的) |
10
- | `lj-awb create asset-group-get --group-id <id>` | 查素材组详情 + 成员 |
11
- | `lj-awb create asset-group --name "<name>" --dry-run` | 预览创建素材组 |
12
- | `lj-awb create asset-group --name "<name>" --yes` | 创建素材组(云端写入) |
13
- | `lj-awb create asset-group-update --group-id <id> --name "<name>" --yes` | 改素材组名 |
14
- | `lj-awb create asset --group-id <id> --url "material/assets/a.png" --name "女主正面" --yes` | 注册已上传素材 |
15
- | `lj-awb create asset --group-id <id> --file ./a.png --name "女主正面" --yes` | 先上传再注册(一步完成) |
9
+ | `lj-awb model asset-review-models --model-group-code <code>` | 查该模型是否支持素材加白及支持的平台 |
10
+ | `lj-awb create asset-groups --platform JIMENG --name "<keyword>"` | 按平台查素材组(按名搜,避免重建已有的) |
11
+ | `lj-awb create asset-group-get --group-id <id> --platform JIMENG` | 按平台查素材组详情 + 成员 |
12
+ | `lj-awb create asset-group --platform JIMENG --name "<name>" --dry-run` | 预览创建素材组 |
13
+ | `lj-awb create asset-group --platform JIMENG --name "<name>" --yes` | 创建素材组(云端写入) |
14
+ | `lj-awb create asset-group-update --group-id <id> --platform JIMENG --name "<name>" --yes` | 改指定平台素材组名 |
15
+ | `lj-awb create asset --group-id <id> --platform JIMENG --url "asset-review/a.png" --name "女主正面" --yes` | 注册已上传素材 |
16
+ | `lj-awb create asset --group-id <id> --platform JIMENG --file ./a.png --name "女主正面" --yes` | 先上传到 asset-review 场景再注册(一步完成) |
16
17
  | `lj-awb create asset-match-actor --description "..." --tags-json '[{"tagId":"o_102"}]'` | 候选匹配(角色画风 / 标签) |
17
18
 
18
19
  ## 什么时候用 match-actor
@@ -22,32 +23,38 @@
22
23
  ## 完整加白流程
23
24
 
24
25
  ```bash
25
- # 1. 找/建分组
26
- lj-awb create asset-groups --name "项目X-角色"
27
- lj-awb create asset-group --name "项目X-角色" --yes
26
+ # 0. 确认模型是否支持素材加白,以及应使用哪个平台
27
+ lj-awb model asset-review-models --model-group-code <videoModelGroupCode>
28
+
29
+ # 1. 找/建分组;platform 必须来自上一步返回或用户明确指定
30
+ lj-awb create asset-groups --platform JIMENG --name "项目X-角色"
31
+ lj-awb create asset-group --platform JIMENG --name "项目X-角色" --yes
28
32
 
29
33
  # 2. 注册(本地文件版,自动上传)
30
- lj-awb create asset --group-id <id> --file ./hero.png --name "主角正面" --dry-run
31
- lj-awb create asset --group-id <id> --file ./hero.png --name "主角正面" --yes
34
+ lj-awb create asset --group-id <id> --platform JIMENG --file ./hero.png --name "主角正面" --dry-run
35
+ lj-awb create asset --group-id <id> --platform JIMENG --file ./hero.png --name "主角正面" --yes
32
36
 
33
37
  # 3. 等审核(create asset 返回 taskId 时)
34
38
  lj-awb task wait --task-id <id> --task-type ASSET_REGISTER --wait-seconds 180
35
39
 
36
40
  # 4. 终态后用于视频
37
- lj-awb create video --model-group-code <seedance-code> \
38
- --resource image:reference=material/assets/hero.png \
41
+ lj-awb create video --model-group-code <videoModelGroupCode> \
42
+ --resource image:reference:hero=asset:<assetId> \
39
43
  ...
40
44
  ```
41
45
 
42
46
  ## 规则
43
47
 
44
48
  - `create asset-group` / `create asset-group-update` / `create asset` 都是云端写入,**必须确认**后追加 `--yes`。
49
+ - `create asset-*` 平台必须显式传 `--platform JIMENG|BYTEPLUS`;不要依赖默认平台,不要传中文名、小写名或供应商别名。
50
+ - `model asset-review-models` 只做发现,不自动创建资产组或素材;不要把 `modelGroupCode` 塞进资产创建命令。
51
+ - 不使用 `/assets/submissions` 这类隐式自动补组流程;资产组是否复用、是否新建由当前任务显式决定。
45
52
  - 主体 element(视频里的"同一个人"概念)优先走 `create subject`,不要把素材组 / 素材 ID 当 subjectId 用——两者对应平台不同业务实体。
46
- - `create asset --file` 在 `--dry-run` 阶段不会真上传,只预览 backendPath 推断结果。
53
+ - `create asset --file` 在 `--dry-run` 阶段不会真上传,只预览 `asset-review/...` backendPath 推断结果。
47
54
  - 输出字段速查见 [`../references/output-fields.md`](../references/output-fields.md) 的"素材"小节。
48
55
 
49
56
  ## 下一步
50
57
 
51
- - 注册成功 → `assetPath`(形如 `material/assets/a.png`)作为 `--resource image:reference=<path>` 传给 `create video`。
52
- - 想看 group 里有哪些素材 → `create asset-group-get --group-id <id>`。
58
+ - 注册成功 → 优先按模型 create-spec / options 要求使用返回的 `assetId` `assetPath`;需要 asset_id 时写 `--resource image:reference:<key>=asset:<assetId>`。
59
+ - 想看 group 里有哪些素材 → `create asset-group-get --group-id <id> --platform <platform>`。
53
60
  - 长期复用同一角色(可灵)→ 改走 [`subject.md`](subject.md)。
@@ -18,7 +18,7 @@
18
18
 
19
19
  ## 规则
20
20
 
21
- - 自动化环境优先使用 `LINGJING_AWB_ACCESS_KEY`,兼容 `AWB_ACCESS_KEY` / `AWB_CODE` / `ANIME_ACCESS_KEY`。
21
+ - 自动化环境只使用 `LINGJING_AWB_ACCESS_KEY`。
22
22
  - 不要把 access key 明文写入对话、日志、文档或任务台账。
23
23
  - `auth status` 只读本地配置;正式创作前用 `auth verify`、`account info` 或 `doctor --verify` 确认远端可用。
24
24
  - `auth clear` 是本地破坏性动作,必须先确认或 dry-run。
@@ -105,7 +105,7 @@ Agent 必须按顺序做:
105
105
 
106
106
  1. 本轮尚未验证时运行 `doctor --verify`,确认认证、API、项目组和 UTF-8 环境。
107
107
  2. 没有可复用候选时运行 `model image-models` 或 `model video-models`,按用户目的筛候选模型。
108
- 3. 向用户展示候选时**不是只列名字**,按三步走:
108
+ 3. 向用户展示候选是硬门槛,**不是只列名字,也不是内部摘要**;没有完成这一步,不得推荐默认模型 / 参数,不得进入 `fee` 或 `create --dry-run`。按三步走:
109
109
  - **基本信息**:`displayName` + `modelDesc`(运营填的特性描述,没填就只报 displayName)+ `taskQueueNum` 的人话表达(0 = 队列空闲 / 1-10 = 排队中 / >10 = 等待较长)。
110
110
  - **参数取值**:对每个候选**并行**跑 `lj-awb model options --model-group-code <code> -f json`,把可控参数实际取值列出来:quality 档位列表 / ratio 比例列表 / video 的 duration 范围 / image 的 generateNum 上限 / 支持的资源模式(reference · first_frame · last_frame · audio · subject) / 是否暴露 needAudio / feeCalcType 转人话。
111
111
  - **追问参数**:用户看完真实选项后再追问 quality / ratio / duration / generateNum。**不要在用户看过 `model options` 输出前就给出 16:9 / 720P 这类自编选项**——必须是模型真实支持的值。
@@ -34,3 +34,4 @@
34
34
  - 状态和等待仍在查询域:`task image-status` / `task video-status` / `task wait` / `create subject-wait` / `create subject-voice-wait` / `task video-subtitle-status`。
35
35
  - 所有 `create` 写入或扣费命令正式执行前必须先 `--dry-run`,用户确认后再 `--yes`。
36
36
  - 查询型 create 子命令(`subject-list`、`subject-voice-list`、`asset-groups`、`asset-group-get`、`asset-match-actor`)是为了避免重复创建;创建前优先查重。
37
+ - `asset-groups` / `asset-group-get` / `asset-group` / `asset-group-update` / `asset` 都必须显式传 `--platform`;平台先由 `model asset-review-models` 或用户选择确定。
@@ -5,6 +5,7 @@
5
5
  ## 核心原则
6
6
 
7
7
  - CLI schema 是命令事实来源:非单条查询任务、命令不确定或涉及写入 / 扣费时,本轮只读一次 `lj-awb schema -f json`,命令名、参数名、安全规则和 nextActions 都以 schema 为准。
8
+ - 命令或参数不确定时,schema 查询是阻塞前置步骤:先运行精确 schema(例如 `lj-awb schema --domain model --command video-models -f json`)并等结果返回,再根据 `options[].flag` 组织业务命令;不要把 schema 查询和猜测命令放在同一批并行工具调用里。
8
9
  - Skill 是驱动器,不是命令百科。先在本模块决定链路,只在需要时加载一个细节模块。
9
10
  - 同一对话维护 AWB 状态账本;除非用户切换账号、团队、项目组、模型、素材、prompt 或关键参数,否则不要重复跑同样的查询。
10
11
  - 写入 / 扣费命令遵循 schema safety:`supportsDryRun=true` 先 dry-run,`requiresConfirmation=true` 经用户确认后再 `--yes`。
@@ -20,6 +21,7 @@ Agent 在当前任务中记录这些值,后续直接复用:
20
21
  | `auth/account/team` | `doctor --verify`、`account info` | 登录 / 团队切换 |
21
22
  | `projectGroupNo` | `project current` 或用户指定 | 项目组切换 |
22
23
  | `modelCandidates` | `model image-models` / `model video-models` | 任务类型或关键词变化 |
24
+ | `assetReviewModels` / `assetReviewPlatform` | `model asset-review-models` | `modelGroupCode` 或平台切换 |
23
25
  | `modelOptions` / `createSpec` | `model options` / `model create-spec` | `modelGroupCode` 变化 |
24
26
  | `backendPath` | `upload files` 或 create dry-run/yes 的 upload 输出 | 本地文件或远端 URL 变化 |
25
27
  | `task` | create 返回的 `taskId` / `nextCommand` / wait 结果 | 任务终态后只追加结果 |
@@ -50,13 +52,23 @@ CLI 当前能力分为:
50
52
  1. 若本轮未验证远端认证和项目组,运行 `doctor --verify`,必要时 `project current`。
51
53
  2. 根据用户目标选任务类型:生图查 `model image-models`,生视频查 `model video-models`。
52
54
  3. 如果同一关键词已有候选,不重复查列表;只在用户换模型关键词时刷新。
53
- 4. 对候选跑 `model options`,展示真实参数和资源能力;用户选定模型后补 `model create-spec`。
55
+ 4. 对候选跑 `model options`,通过“模型候选展示门”把真实参数和资源能力展示给用户;用户选定模型后补 `model create-spec`。
54
56
  5. 按 [`task-manual.md`](task-manual.md) 选择资源模式,按 [`create-contract.md`](create-contract.md) 校验素材、占位符、`needAudio` 和模式互斥。
55
57
  6. 只追问会影响价格 / 效果且用户未给出的关键参数;用户说“默认”才使用 defaultValue。
56
58
  7. 参数确认后跑一次 `create image-fee` 或 `create video-fee`,不要用 fee 做多组合探索。
57
59
  8. 跑一次 `create image/video --dry-run` 展示最终 prompt、资源、参数、积分。
58
60
  9. 用户确认后 `--yes`。返回 `nextCommand` 时直接执行它等待结果。
59
61
 
62
+ ### 模型候选展示门
63
+
64
+ 只要用户给了模型口语名(如 `sd2`、`gpt`、`banana`、`可灵`)或模型查询返回候选,Agent 必须先完成这个门槛,才能推荐默认模型 / 默认参数、进入 `fee` 或 `create --dry-run`。
65
+
66
+ 1. 用 schema 或命令帮助确认过滤参数名,模型关键词统一走 `--model <keyword>`,不要猜 `--keyword`。
67
+ 2. 跑 `model image-models --model <keyword> -f json` 或 `model video-models --model <keyword> -f json`。用户已经给出口语名时,同族候选全部保留;不要只取第一个。
68
+ 3. 对每个候选并行跑 `model options --model-group-code <code> -f json`,读取真实 `quality`、`ratio`、`duration` / `generateNum`、默认值、资源模式和约束。
69
+ 4. 必须向用户输出可见清单:模型显示名、描述、排队状态、可选参数、默认值、支持的资源模式(图片 / 视频 / 音频 reference、首帧 / 首尾帧、主体等)、渠道差异。`modelGroupCode` 默认只内部使用,除非用户主动问技术 ID。
70
+ 5. 用户看完清单后再问关键参数或给建议。即使只命中 1 个候选,也要展示该模型的真实可选项;不要用“我倾向 4:3 / 5s / 720P”代替候选清单。
71
+
60
72
  ### 批量任务
61
73
 
62
74
  - 用户给出 2 条以上同模型同参数任务时,优先建议 `create image-batch` / `create video-batch`。
@@ -73,8 +85,9 @@ CLI 当前能力分为:
73
85
 
74
86
  ### 素材库与加白
75
87
 
76
- - Seedance / BytePlus / 即梦等素材预审走 `create asset-*`;KeLing / Vidu 角色一致性走主体,不走 asset。
77
- - 创建素材组前先 `create asset-groups --name` 查重;有可用组就复用。
88
+ - 素材预审是否可用先查 `model asset-review-models --model-group-code <code>`;不要按模型名硬编码判断,也不要把 `modelGroupCode` 传入资产创建命令。
89
+ - `create asset-*` 必须显式传 `--platform JIMENG|BYTEPLUS`,平台来自 `model asset-review-models` 或用户明确选择;不要依赖 material 默认平台。
90
+ - 创建素材组前先 `create asset-groups --platform <platform> --name` 查重;有可用组就复用。
78
91
  - `create asset --file` 会在正式阶段自动上传并注册;同一文件多任务复用时,先 `upload files` 缓存 `backendPath`。
79
92
  - 注册成功后优先使用 `assetPath`,不要重新上传同一文件。
80
93
 
@@ -103,4 +116,5 @@ CLI 当前能力分为:
103
116
  - 不要把 `--need-audio` 当音频输入;音频输入只能是 `audio:reference`。
104
117
  - 不要把主体 `elementId` 当 `externalId`。
105
118
  - 不要用单条 create 循环处理明显批量任务。
119
+ - 不要调用 `/assets/submissions` 或其它自动补齐资产组的隐式接口;素材组和素材注册必须通过 CLI 显式步骤完成。
106
120
  - 不要直连 material / asset / 外部服务;统一走 `lj-awb`。
@@ -8,6 +8,7 @@
8
8
  |------|------|
9
9
  | `lj-awb model image-models --model "<keyword>"` | 查询生图候选模型 |
10
10
  | `lj-awb model video-models --model "<keyword>"` | 查询生视频候选模型 |
11
+ | `lj-awb model asset-review-models --model-group-code <code>` | 查询支持素材加白的模型组与平台关系 |
11
12
  | `lj-awb model input-guide -f json` | 查看统一创建参数、resources 字段和素材绑定规则 |
12
13
  | `lj-awb model options --model-group-code <code> -f json` | 查看该模型支持的 CLI 参数、枚举值、默认值、素材约束和条件约束 |
13
14
  | `lj-awb model create-spec --model-group-code <code> -f json` | 查看该模型如何创建任务:输入模式、素材绑定规则、示例和前置步骤 |
@@ -21,7 +22,16 @@ lj-awb model image-models --model "<keyword>"
21
22
  lj-awb model video-models --model "<keyword>"
22
23
  ```
23
24
 
24
- 候选展示走 [`driver.md`](driver.md) 的创作链条:基本信息 → 并行跑 `model options` 列真实参数取值 → 看完真实选项后追问。不要把原始 JSON 整段粘给用户。模型列表里 `inputModes` / `params` 摘要只用于**初筛**;最终枚举值和限制以 `model options` 为准。`modelGroupCode` 是技术 ID,agent 内部跑命令用,**默认不展示给用户**。
25
+ 候选展示走 [`driver.md`](driver.md) 的“模型候选展示门”:基本信息 → 并行跑 `model options` 列真实参数取值和资源能力 → 看完真实选项后追问。不要把原始 JSON 整段粘给用户,但必须把候选转成用户可读清单;不能只在内部读完 options 后直接代选模型或参数。
26
+
27
+ 用户可见清单至少包含:
28
+
29
+ - 模型显示名、模型描述和排队状态。
30
+ - `quality`、`ratio`、视频 `duration` 或图片 `generateNum` 的可选值与默认值。
31
+ - 资源能力:reference 支持哪些媒体,是否支持音频参考、视频参考、首帧 / 首尾帧、主体引用。
32
+ - 同底模不同渠道 / Fast / Pro 等差异;如果参数完全一致,可以说明主要按队列、渠道或用户偏好选择。
33
+
34
+ 模型列表里 `inputModes` / `params` 摘要只用于**初筛**;最终枚举值和限制以 `model options` 为准。`modelGroupCode` 是技术 ID,agent 内部跑命令用,**默认不展示给用户**。
25
35
 
26
36
  ## 获取参数约束
27
37
 
@@ -80,6 +90,7 @@ Agent 读取这些字段:
80
90
  - `model options` 是参数和素材约束入口;`model create-spec` 是创建方式入口。判断用户需求能否满足,优先看 `create-spec.supportedIntents[]`;素材格式 / 数量 / 时长限制看 `options.resources[]`;参数 / 资源联动看 `options.constraints[]`(`effect=no_selectable_values` 表示触发后该目标参数没有可选枚举,不要追问或传入)。
81
91
  - `supportLastFrameOnly` 只表示模型是否支持「仅尾帧」输入;首尾帧过渡能力看 frames 资源的 `usage` 是否包含 `last_frame` 和数量约束。
82
92
  - 用户说「上传音频 / 使用音乐 / 配音 / 音频参考」是**素材输入**,先看 `options.resources[]` 有没有 `mediaType=AUDIO usage=reference`;**不要先去找 `needAudio`**(那是输出音效开关)。具体使用规则、`reference_key` / `<<<key>>>` 对齐和 `--need-audio` 不是音频入口等都见 [`create-contract.md`](create-contract.md) §素材组织 + §Prompt 组装原则。
93
+ - 用户要走素材加白 / 素材库过审时,先跑 `model asset-review-models --model-group-code <code>` 判断该模型是否支持以及平台值;不要根据模型名称猜平台,也不要把 `modelGroupCode` 放进资产组或素材创建命令。
83
94
  - 关键参数选择、`fee` / `create --dry-run` 前的追问流程、`inputRequirement.visualInputRequired` 检查等创建前校验见 [`create-contract.md`](create-contract.md) §创建前校验。
84
95
  - 输出字段速查见 [`../references/output-fields.md`](../references/output-fields.md) 的"模型"小节。
85
96
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  主体模块用于创建 / 查询平台主体 element。视频主体参考应使用主体的 `externalId`,通过 `--resource subject:reference:<key>=asset:<externalId>` 传给视频创建命令。
4
4
 
5
- > **发布主体前必须传 `--model-code <tx|vidu>`**:KeLing / Kling / 可灵 → `tx`,Vidu `vidu`。不传 → CLI `argument_error: 缺少主体 modelCode`;放过去后端 `ElementCreateHandler` 也会按 `modelCode` 路由请求体(Vidu / KeLing 字段集不一样),空值在两端都会失败。如果用户没说目标平台,先追问"这个主体将来主要用在 KeLing / 可灵 还是 Vidu?"
5
+ > **发布主体前必须传 `--model-code <tx|vidu>`**:KeLing / 可灵主体明确传 `tx`,Vidu 主体明确传 `vidu`。CLI 不接受 `keling`、`可灵`、`tencent`、`vidu-q` 等别名;不传或传错都会报 `argument_error`。如果用户没说目标平台,先追问"这个主体将来主要用在 KeLing / 可灵 还是 Vidu?"
6
6
 
7
7
  ## 命令
8
8
 
@@ -13,8 +13,8 @@
13
13
  | `lj-awb create subject-voice --name 女主音色 --file ./voice.mp3 --yes` | 创建主体音色并返回 voiceRecordId |
14
14
  | `lj-awb create subject-voice-wait --voice-record-id <voiceRecordId> --wait-seconds 300` | 等待音色 externalId 回填 |
15
15
  | `lj-awb create subject-voice-list --name "女主"` | 查询已创建音色 |
16
- | `lj-awb create subject --model-code tx --name 女主 --resource primary:./three-view.png --dry-run` | 预览 KeLing 主体创建,request.modelCode 自动为 `tx` |
17
- | `lj-awb create subject --model-code vidu --name 女主 --resource primary:./three-view.png --dry-run` | 预览 Vidu 主体创建,request.modelCode 自动为 `vidu` |
16
+ | `lj-awb create subject --model-code tx --name 女主 --resource primary:./three-view.png --dry-run` | 预览 KeLing 主体创建,request.modelCode `tx` |
17
+ | `lj-awb create subject --model-code vidu --name 女主 --resource primary:./three-view.png --dry-run` | 预览 Vidu 主体创建,request.modelCode `vidu` |
18
18
  | `lj-awb create subject --model-code tx --name 女主 --resource primary:./three-view.png --yes` | 创建主体并返回 elementId |
19
19
  | `lj-awb create subject-wait --element-id <elementId> --wait-seconds 300` | 等待 externalId 回填 |
20
20
  | `lj-awb create subject --model-code vidu --name 女主 --resource primary:material/assets/a.png --yes` | 用已上传素材创建主体 |
@@ -24,7 +24,7 @@
24
24
  ## 规则
25
25
 
26
26
  - 发布前确认主体名称、主参考图、可选正脸 / 侧面 / 背面图、项目名。
27
- - 必须传 `--model-code tx|vidu`:KeLing / Kling / 可灵 → `tx`,Vidu `vidu`。
27
+ - 必须传 `--model-code tx|vidu`:KeLing / 可灵用 `tx`,Vidu `vidu`。不要传平台名别名。
28
28
  - 如主体需要参考音色,先用 `create subject-voice --file <audio>` 创建音色,再 `create subject-voice-wait` 拿到 `externalId`,最后把它作为 `create subject --voice-id <externalId>`。
29
29
  - `create subject-voice` 的音色来源三选一:`--file` 本地音频、`--voice-url` / `--audio-url` 已上传 material 音频路径、`--video-id` 已有视频 ID。
30
30
  - 参考图统一通过 `--resource <slot>:<file|url>` 传入,slot ∈ `primary | three-view | face | side | back`。无 `primary` 时 `three-view` 自动升为主图;本地路径(`./` 或绝对路径)会自动上传,含 `://` 或 `material/` 前缀的视为已上传 URL。
@@ -5,8 +5,8 @@
5
5
  ## 创作前固定流程
6
6
 
7
7
  1. 本轮尚未验证时运行 `lj-awb doctor --verify`,确认认证、API、项目组、UTF-8。
8
- 2. 没有可复用候选时运行 `model image-models` 或 `model video-models`,按用户目标筛 2-4 个候选。
9
- 3. 选中模型的 `model options` 未缓存时运行 `model options --model-group-code <code> -f json`,读取参数取值和素材约束。
8
+ 2. 没有可复用候选时运行 `model image-models` 或 `model video-models`,按用户目标筛候选;用户给了口语名时保留同族全部候选,不只取第一项。
9
+ 3. 进入“模型候选展示门”:对候选跑 `model options --model-group-code <code> -f json`,把每个候选的参数取值、默认值、素材约束和资源模式转成用户可见清单。
10
10
  4. 选中模型的创建规格未缓存时运行 `model create-spec --model-group-code <code> -f json`。
11
11
  5. 用 `inputRequirement` 判断是否必须有视觉输入;用 `supportedIntents` 判断素材模式;用 `model options.params` 判断 `ratio`、`quality`、`duration` 等枚举。
12
12
  6. 在 `fee` 或 `create --dry-run` 前,先确认用户未提供但会影响价格 / 效果的关键参数:视频 `quality`、`duration`、约束后仍可选的 `ratio`,以及用户明确要输出音效时的 `needAudio`;图片 `quality`、`ratio`、`generateNum`。
@@ -17,6 +17,7 @@
17
17
  ## 确认选项和验证拆开
18
18
 
19
19
  - `model options` / `model create-spec` 是只读验证,可以先跑,用来收集候选值、默认值、素材模式和约束。
20
+ - `model options` 结果必须先转成用户可见候选清单;不能只在内部看完后直接说“我建议 4:3、720P、5s”。
20
21
  - `fee` 会基于已选参数估价,`create --dry-run` 会基于已选参数组装请求;如果用户还没给 `quality`、`duration`、可选 `ratio`、`generateNum` 这类关键参数,先问用户,不要先用默认值跑一遍。
21
22
  - 追问时给出候选值和默认值,例如:“还差会影响价格 / 效果的参数:画质 720 / 1080(默认 720),时长 3-15 秒(默认 5)。你希望用哪组?”
22
23
  - 用户回复“按默认”后,才可以使用 `model options.params[].defaultValue` 继续估价和 dry-run。
@@ -172,7 +173,7 @@ lj-awb create video \
172
173
  判断要点:
173
174
 
174
175
  - `create subject-wait` 成功后优先使用返回的 `nextRefSubject`。
175
- - `--model-code` 只接受 `tx|vidu`;KeLing / 可灵用 `tx`,Vidu 用 `vidu`。它不是视频模型的 `modelGroupCode`。
176
+ - `--model-code` 只接受 `tx|vidu`;KeLing / 可灵用 `tx`,Vidu 用 `vidu`。
176
177
  - `subject:reference:<key>=asset:<subjectId>` 必须放主体 ID;普通图片素材资产 ID 只能用于 `image:reference=asset:<assetId>` 等素材引用。
177
178
  - prompt 中出现 `<<<key>>>` 时必须有同名 reference 资源;不出现时不强制补。
178
179
 
@@ -7,7 +7,8 @@
7
7
  | 命令 | 用途 |
8
8
  |------|------|
9
9
  | `lj-awb upload files --files ./a.png,./b.mp4 --dry-run` | 预览上传文件 |
10
- | `lj-awb upload files --file ./ref.png --scene-type material-video-create` | 上传单个参考素材 |
10
+ | `lj-awb upload files --file ./ref.png` | 上传图片创建参考素材,默认 `material-image-draw` |
11
+ | `lj-awb upload files --file ./first.png --scene-type material-video-create` | 上传生视频 / 主体复用素材 |
11
12
  | `lj-awb upload files --files-json ./files.json` | 按 JSON 清单上传 |
12
13
 
13
14
  ## 规则
@@ -16,17 +17,18 @@
16
17
  - 后续任务的 `source.value` 一律使用 `backendPath`(例如 `material/...` 或 `/material/...`),**不要使用回显的 `url` 字段**。`url` 只是用于人工预览,把完整 `https://*.myqcloud.com/...` 直接塞回任务请求会让请求体冗余,也会破坏请求一致性。
17
18
  - 对 Agent 来说,优先使用返回的结构化字段,不要从自然语言输出里猜 URL。
18
19
  - 生图 / 生视频命令传本地参考文件时,会在内部自动上传;只有需要复用素材时才单独调用 `upload files`。
20
+ - 单独预上传时按下游任务选择 scene:未传 `--scene-type` 时,图片默认 `material-image-draw`,音频 / 视频默认 `material-video-create`;图片若要作为生视频首帧 / 尾帧 / 参考图或主体图复用,必须显式传 `--scene-type material-video-create`;只有明确走图片编辑入口时才传 `material-image-edit`。
19
21
  - 即使把平台 COS 完整 URL 当作 `source.value` 传入,CLI 会自动剥离 host 还原为 `backendPath`;但不要依赖该自愈,仍以传 `backendPath` 为准。
20
22
  - 输出字段速查见 [`../references/output-fields.md`](../references/output-fields.md) 的"文件上传"小节;上传失败(exit 30 / `upload_failed`)见 [`../references/error-codes.md`](../references/error-codes.md) 场景 6。
21
23
 
22
24
  ## 下一步
23
25
 
24
- 拿到 `uploads[].backendPath`(形如 `material/...`)后立刻就近喂给下游命令,不要重复 upload:
26
+ 拿到 `files[].backendPath`(形如 `material/...`)后立刻就近喂给下游命令,不要重复 upload:
25
27
 
26
28
  - 生图参考图:`lj-awb create image ... --resource image:reference=material/...`
27
29
  - 生视频首帧 / 尾帧 / 参考图:`lj-awb create video ... --resource image:first_frame=material/...`
28
30
  - 视频参考音频:`lj-awb create video ... --resource audio:reference=material/...`
29
31
  - 主体发布参考图:`lj-awb create subject ... --resource primary:material/...`
30
- - 注册到素材库(长期复用):`lj-awb create asset --group-id <id> --url material/... --name "..." --yes`
32
+ - 注册到素材库(素材加白):优先让 `lj-awb create asset --group-id <id> --platform <platform> --file ./a.png --name "..." --yes` 自动上传到 `asset-review` 场景;若已单独上传,使用 `--backend-path asset-review/...` 或 `--url asset-review/...`。
31
33
 
32
34
  > `create image` / `create video` / `create subject` 传 `--file` / 本地路径时**会自动 upload**——只有需要"先看 backendPath / 跨任务复用同一份素材"时才单独跑 `upload files`。
@@ -12,7 +12,7 @@
12
12
  - [批量任务](#批量任务) — `create-batch --concurrency`
13
13
  - [分镜流水线(分镜图 → 视频)](#分镜流水线分镜图--视频) — GPT Image 2 分镜 → 视频生成
14
14
  - [预上传后批量复用](#预上传后批量复用) — `upload files` 一次,多任务复用 `backendPath`
15
- - [素材库加白后生视频](#素材库加白后生视频) — Seedance / 即梦的 `create asset` → 视频
15
+ - [素材库加白后生视频](#素材库加白后生视频) — `model asset-review-models` `create asset` → 视频
16
16
  - [Artifact 流水线错误恢复](#artifact-流水线错误恢复) — `import-storyboard` / 批量写入失败的局部重试
17
17
 
18
18
  ## 通用启动流程
@@ -140,8 +140,8 @@ lj-awb task record-poll \
140
140
  1. 准备 `image.jsonl`,每行一个镜头的 `prompt` 和共用参考图(人物、场景):
141
141
 
142
142
  ```json
143
- {"prompt":"镜头1:徐然推开 502 户门,门缝透出暖光...","ratio":"9:16","quality":"2k","resources":[{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-edit/<人物参考>"}},{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-edit/<场景参考>"}}]}
144
- {"prompt":"镜头2:徐然侧身贴墙,听门外脚步声...","ratio":"9:16","quality":"2k","resources":[{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-edit/<人物参考>"}}]}
143
+ {"prompt":"镜头1:徐然推开 502 户门,门缝透出暖光...","ratio":"9:16","quality":"2k","resources":[{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-draw/<人物参考>"}},{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-draw/<场景参考>"}}]}
144
+ {"prompt":"镜头2:徐然侧身贴墙,听门外脚步声...","ratio":"9:16","quality":"2k","resources":[{"type":"image","usage":"reference","source":{"kind":"url","value":"material/image-draw/<人物参考>"}}]}
145
145
  ```
146
146
 
147
147
  2. 批量生分镜图(GPT Image 2 通道,并行 4):
@@ -167,8 +167,8 @@ lj-awb task record-poll \
167
167
  4. 把每条 `taskId` 的 `result` 图(COS 对象路径,**用 `backendPath` 形式**)作为视频任务的 `first_frame`,组装 `video.jsonl`:
168
168
 
169
169
  ```json
170
- {"prompt":"镜头1 动起来:徐然缓慢推门,光线从门缝渐扩","duration":5,"ratio":"9:16","quality":"720","resources":[{"type":"image","usage":"first_frame","source":{"kind":"url","value":"material/image-edit/<镜头1结果>"}}]}
171
- {"prompt":"镜头2 动起来:徐然贴墙呼吸起伏,听门外动静","duration":5,"ratio":"9:16","quality":"720","resources":[{"type":"image","usage":"first_frame","source":{"kind":"url","value":"material/image-edit/<镜头2结果>"}}]}
170
+ {"prompt":"镜头1 动起来:徐然缓慢推门,光线从门缝渐扩","duration":5,"ratio":"9:16","quality":"720","resources":[{"type":"image","usage":"first_frame","source":{"kind":"url","value":"material/image-draw/<镜头1结果>"}}]}
171
+ {"prompt":"镜头2 动起来:徐然贴墙呼吸起伏,听门外动静","duration":5,"ratio":"9:16","quality":"720","resources":[{"type":"image","usage":"first_frame","source":{"kind":"url","value":"material/image-draw/<镜头2结果>"}}]}
172
172
  ```
173
173
 
174
174
  5. 批量生视频(视频模型通道,并行 3):
@@ -197,11 +197,10 @@ lj-awb task record-poll \
197
197
  ```bash
198
198
  lj-awb upload files \
199
199
  --files ./hero.png,./scene.png \
200
- --scene-type material-video-create \
201
200
  -f json
202
201
  ```
203
202
 
204
- 读取响应 `data.uploads[].backendPath`(形如 `material/...`),把这个值(**不是 `url` 字段**)写入下游:
203
+ 读取响应 `data.files[].backendPath`(形如 `material/...`),把这个值(**不是 `url` 字段**)写入下游。上面是图片创建参考图,默认 scene 是 `material-image-draw`;如果预上传后要作为视频首帧 / 尾帧 / 参考图或主体素材复用,命令必须显式加 `--scene-type material-video-create`。
205
204
 
206
205
  ```bash
207
206
  lj-awb create video-batch \
@@ -228,23 +227,28 @@ lj-awb create video-batch \
228
227
 
229
228
  ## 素材库加白后生视频
230
229
 
231
- 适用:Seedance / BytePlus / 即梦系列视频模型,要求参考图先在素材库登记并完成"加白"才能用于生视频。可灵 / KeLing 和 Vidu 系列可走 [主体参考生成视频](#主体参考生成视频),不走 asset。
230
+ 适用:`model asset-review-models` 返回支持素材加白的平台模型。不要按 Seedance / BytePlus / 即梦等名称硬编码判断;可灵 / KeLing 和 Vidu 的角色一致性通常走 [主体参考生成视频](#主体参考生成视频),不走 asset。
232
231
 
233
232
  ```bash
234
- # 1. 找/建分组
235
- lj-awb create asset-groups --name "项目X-角色"
236
- lj-awb create asset-group --name "项目X-角色" --dry-run
237
- lj-awb create asset-group --name "项目X-角色" --yes
233
+ # 0. 先确认该视频模型支持哪个素材加白平台
234
+ lj-awb model asset-review-models --model-group-code <videoModelGroupCode>
235
+
236
+ # 1. 找/建分组;platform 必须来自上一步返回或用户明确指定
237
+ lj-awb create asset-groups --platform JIMENG --name "项目X-角色"
238
+ lj-awb create asset-group --platform JIMENG --name "项目X-角色" --dry-run
239
+ lj-awb create asset-group --platform JIMENG --name "项目X-角色" --yes
238
240
 
239
241
  # 2. 注册参考图(本地文件版,--file 在 --yes 阶段自动上传 + 注册一步完成)
240
242
  lj-awb create asset \
241
243
  --group-id <groupId> \
244
+ --platform JIMENG \
242
245
  --file ./hero.png \
243
246
  --name "主角正面" \
244
247
  --dry-run
245
248
 
246
249
  lj-awb create asset \
247
250
  --group-id <groupId> \
251
+ --platform JIMENG \
248
252
  --file ./hero.png \
249
253
  --name "主角正面" \
250
254
  --yes
@@ -255,24 +259,24 @@ lj-awb task wait \
255
259
  --task-type ASSET_REGISTER \
256
260
  --wait-seconds 180
257
261
 
258
- # 4. 加白成功后拿到的 assetPath 用于视频创建
262
+ # 4. 加白成功后按模型资源要求使用 assetId 或 assetPath 创建视频
259
263
  lj-awb create video-fee \
260
- --model-group-code <seedance-code> \
264
+ --model-group-code <videoModelGroupCode> \
261
265
  --prompt "<...>" \
262
- --resource image:reference=material/assets/hero.png \
266
+ --resource image:reference:hero=asset:<assetId> \
263
267
  --project-group-no <projectGroupNo>
264
268
 
265
269
  lj-awb create video \
266
- --model-group-code <seedance-code> \
270
+ --model-group-code <videoModelGroupCode> \
267
271
  --prompt "<...>" \
268
- --resource image:reference=material/assets/hero.png \
272
+ --resource image:reference:hero=asset:<assetId> \
269
273
  --project-group-no <projectGroupNo> \
270
274
  --dry-run
271
275
 
272
276
  lj-awb create video \
273
- --model-group-code <seedance-code> \
277
+ --model-group-code <videoModelGroupCode> \
274
278
  --prompt "<...>" \
275
- --resource image:reference=material/assets/hero.png \
279
+ --resource image:reference:hero=asset:<assetId> \
276
280
  --project-group-no <projectGroupNo> \
277
281
  --yes
278
282
  ```
@@ -281,8 +285,9 @@ lj-awb create video \
281
285
 
282
286
  - 用户描述"我有这样一个角色,平台上有没有现成的"时,先跑 `create asset-match-actor --description ... --tags-json '...'`,命中合适候选就跳过 register。
283
287
  - 加白未终态时直接拿 `assetPath` 喂给视频,平台会拒;必须先 `task wait` 到 `taskStatus=success`。
284
- - 同一角色后续视频任务复用同一 `assetPath`,不要每次重新 register。
285
- - asset 系列只服务于 Seedance / BytePlus / 即梦,**不要**把 `assetPath` 当成可灵的 `subject:reference` 用,反之亦然。
288
+ - 同一角色后续视频任务复用同一 `assetId` / `assetPath`,不要每次重新 register。
289
+ - asset 系列只服务于素材加白;**不要**把素材 `assetId` / `assetPath` 当成可灵的 `subject:reference` 用,反之亦然。
290
+ - 不要调用隐式 submissions 自动补组;素材组查重、创建、素材注册都用显式 CLI 步骤。
286
291
 
287
292
  ## Artifact 流水线错误恢复
288
293
 
@@ -18,7 +18,7 @@ CLI 失败时 envelope 形如:
18
18
  | `1` | `subject_voice_failed` | 主体音色创建任务已失败 | 看 `details.errorMessage`,调整音频 / 视频来源后重新创建 |
19
19
  | `2` | `argument_error` | 必填参数缺失、参数格式 / 枚举不合法 | 按 `hint` 补参数;用 `lj-awb schema --command <name> -f json` 查 `requiredOptions / requiredAnyOptions` |
20
20
  | `2` | `unknown_command` / `unknown_option` | 命令名 / 参数名打错 | 跑 `lj-awb -h` 或对应子域 `lj-awb <domain> -h` 重查命令 |
21
- | `3` | `auth_required` | 缺少 access key | 提示用户 `lj-awb auth login --access-key <key> --yes` 或设置 `LINGJING_AWB_ACCESS_KEY` |
21
+ | `3` | `auth_required` | 缺少 access key | 提示用户 `lj-awb auth login --access-key <key>` 或设置 `LINGJING_AWB_ACCESS_KEY` |
22
22
  | `3` | `auth_failed` | access key 无效 / 已过期(HTTP 401) | 跑 `auth verify` 确认;提示重新登录 |
23
23
  | `10` | `confirmation_required` | 写入 / 扣费 / 切换上下文动作未确认 | 向用户复述 `details.action` 后追加 `--yes` 重跑 |
24
24
  | `20` | `task_still_running` | 等待窗口结束但任务未终态 | 直接续跑 `task wait --task-id ... --wait-seconds <n>`,**不代表失败** |
@@ -4,6 +4,7 @@
4
4
 
5
5
  ## 默认 Text 怎么读
6
6
 
7
+ - 默认 text 是“分区 key=value”:先看 `summary:`,再看 `params:`、`resources:`、`constraints:`,最后看 `next:`。每个分区的 `count` 表示列表数量,列表项使用 `[0]: key=value ...`。
7
8
  - `params[]`:模型暴露的可控参数和约束;这里只给参数 key,不给 create 命令 flag。
8
9
  - `values`:枚举取值,只能从这里选。
9
10
  - `default`:模型默认值;用户没明确指定时通常不必显式传,但清晰度、比例、时长这类关键项仍要确认。
@@ -30,12 +31,13 @@ JSON 里会保留更完整的参数 / 资源 / 条件约束字段,但仍不承
30
31
  ## 使用顺序
31
32
 
32
33
  1. `model image-models` / `model video-models` 按关键词找候选。
33
- 2. `model options --model-group-code <code>` 读取可传参数和素材约束。
34
- 3. `model create-spec --model-group-code <code>` 读取输入模式、素材绑定规则和示例命令。
35
- 4. 如果用户缺少关键价格 / 效果参数,先展示候选值和默认值,请用户选择或确认“按默认”。
36
- 5. `fee` 估价。
37
- 6. `create --dry-run` 预览请求。
38
- 7. 用户确认后 `create --yes`。
34
+ 2. 对候选逐个运行 `model options --model-group-code <code>`,读取可传参数和素材约束。
35
+ 3. 把候选模型、参数取值、默认值、资源能力转成用户可见清单;这是进入推荐 / 追问 / fee 前的硬门槛。
36
+ 4. `model create-spec --model-group-code <code>` 读取输入模式、素材绑定规则和示例命令。
37
+ 5. 如果用户缺少关键价格 / 效果参数,先展示候选值和默认值,请用户选择或确认“按默认”。
38
+ 6. `fee` 估价。
39
+ 7. `create --dry-run` 预览请求。
40
+ 8. 用户确认后 `create --yes`。
39
41
 
40
42
  ## 判断口径
41
43
 
@@ -47,7 +47,7 @@
47
47
 
48
48
  | outputKind | 命令 | 必报给用户 | agent 内部用 | 可丢弃 |
49
49
  |------------|------|-----------|--------------|--------|
50
- | `upload_result` | `upload files` | 上传文件数、`uploads[].backendPath` | `backendPath`(喂给 `--resource <type>:<usage>=<backendPath>`) | `uploads[].url`、mimeType |
50
+ | `upload_result` | `upload files` | 上传文件数、`files[].backendPath` | `backendPath`(喂给 `--resource <type>:<usage>=<backendPath>`) | `files[].url`、mimeType |
51
51
 
52
52
  ## 生图 / 生视频
53
53
 
@@ -89,11 +89,12 @@
89
89
 
90
90
  | outputKind | 命令 | 必报给用户 | agent 内部用 | 可丢弃 |
91
91
  |------------|------|-----------|--------------|--------|
92
+ | `asset_review_model_list` | `model asset-review-models` | `modelGroupCode`、`platform` | `platform`(后续 create asset-* 必填) | — |
92
93
  | `asset_match_list` | `create asset-match-actor` | 候选列表(名称 + 评分) | `assetId/groupId` | — |
93
- | `asset_group_list` | `create asset-groups` | `count` + 组名 | `groupId`(下游 register 必填) | — |
94
- | `asset_group_detail` | `create asset-group-get` | 组名、成员数 | `groupId` | — |
95
- | `asset_group_write_result` | `create asset-group / group-update` | `created/updated`、`groupId` | — | — |
96
- | `asset_register_result` | `create asset` | `registered`、`assetId`、`assetPath` | `assetId`(下游引用) | upload 嵌套 |
94
+ | `asset_group_list` | `create asset-groups` | `platform`、`count` + 组名 | `groupId`(下游 register 必填) | — |
95
+ | `asset_group_detail` | `create asset-group-get` | `platform`、组名、成员数 | `groupId` | — |
96
+ | `asset_group_write_result` | `create asset-group / group-update` | `created/updated`、`groupId`、`platform` | — | — |
97
+ | `asset_register_result` | `create asset` | `registered`、`assetId`、`assetPath`、`platform` | `assetId`(下游引用) | upload 嵌套 |
97
98
 
98
99
  ## Artifact(产物 CRUD)
99
100