新增图片生成与上传执行管线:nano-banana-2真实出图→上传→公网URL回填→上传后二次生成API调用稿
- 新增 image_generation_upload_rules.md、post_upload_call_draft_rules.md 规则文件,scripts/ 脚本目录 - 工作流新增阶段 5.1 图片生成与上传、5.2 上传后调用稿分支,调整原有步骤编号 - 所有模板和规则强制要求:API 图片输入使用上传后的公网 URL / asset:// URI,禁止本地路径或占位符 - 官网 Prompt 模板强制要求使用 @官网上传名,绑定已上传资产 - 附件/API 资产清单新增状态追踪列(pending_generation / pending_upload / generated_uploaded_ready 等)和 uploaded_assets.json 回填规则 - api_payload_rules.md 新增"上传后二次生成硬约束",要求 JSONL 必须在图片上传完成后基于真实 URL 重新生成 - image_model_provider_rules.md 明确 nano-banana-2 为默认执行资源(非仅提示词名称),新增图片生成/上传执行标记 --- 核心变更概括:工作流从"只写提示词"升级为"提示词→真实出图→上传→获取公网 URL→回填→二次生成调用稿"的完整资产管线。
This commit is contained in:
@@ -68,6 +68,19 @@
|
||||
}
|
||||
```
|
||||
|
||||
## 上传后二次生成硬约束
|
||||
|
||||
`10_接口请求体.jsonl` 不能在图片上传前定稿。上传脚本完成后,AI 必须重新读取全局 `09_接口资产清单.md`,用其中真实可用的 `公网URL` 或 `asset://` URI 重新生成每集 JSONL。
|
||||
|
||||
硬性要求:
|
||||
|
||||
- `@角色名`、`@场景名`、`@道具名` 只允许出现在文本说明、`source_ref` 或官网 Prompt 中,不能作为 API 图片输入。
|
||||
- API 图片输入必须写进 `content` 数组,字段形态为 `{"type":"image_url","image_url":{"url":"https://..."},"role":"reference_image"}`。
|
||||
- `image_url.url` 只能是 `https://...`、`http://...` 或 `asset://...`。不能是本地路径、`pending_upload`、`replace-with-uploaded-url`、空字符串或纯 `@素材名`。
|
||||
- 文本中的“参考图1/图2/图3”必须和 `content` 中图片对象顺序一致。
|
||||
- 资产未上传成功时,不要把它写入 `content[].image_url`;在同一 JSON 行增加 `asset_warnings`,列出缺失资产和状态。
|
||||
- 如果某个角色/场景在分集 `04_资产引用.md` 中出现,但 `10_接口请求体.jsonl` 没有对应图片 URL 或明确 `asset_warnings`,该集不合格。
|
||||
|
||||
建议每个片段生成如下草案。具体字段以你账号控制台文档为准:
|
||||
|
||||
```json
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
在即梦官网、Seedance Web 或其他网页端:
|
||||
|
||||
- 必须手动上传图片/视频/音频附件。
|
||||
- 必须先生成并上传图片/视频/音频附件。图片资产优先按 `image_generation_upload_rules.md` 由 nano-banana-2 生成并上传。
|
||||
- 提示词只能描述这些附件的用途,例如“参考已上传的角色图1作为姜尚离外貌”。
|
||||
- 不要指望在纯文本里写 `@姜尚离` 就自动附带图片。
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
- 先上传图片或提供公网可访问 URL。
|
||||
- 请求体里传 `image_urls`、`content` 或类似字段。
|
||||
- 提示词里用平台规定的标签引用,例如 `@Image1`、`@Image2`。
|
||||
- 本地路径不能直接进入 API。图片上传接口返回的公网 URL 才能作为 `image_url.url`。
|
||||
|
||||
## Web 官网手动上传写法
|
||||
|
||||
@@ -22,10 +23,10 @@
|
||||
|
||||
```text
|
||||
附件:
|
||||
图1:姜尚离_百姓装_主形象.png
|
||||
图2:霍念_粗布农夫_主形象.png
|
||||
图3:伯府狗洞_泥地_场景.png
|
||||
图4:旧玉佩_道具.png
|
||||
图1:@姜尚离_百姓装_主形象
|
||||
图2:@霍念_粗布农夫_主形象
|
||||
图3:@伯府狗洞_泥地_场景
|
||||
图4:@旧玉佩_道具
|
||||
|
||||
提示词:
|
||||
参考图1作为姜尚离的外貌、发型和服装;参考图2作为霍念的外貌和服装;参考图3作为场景空间和光线;参考图4作为旧玉佩道具。生成……
|
||||
@@ -77,3 +78,4 @@
|
||||
4. `官网提示词`:用“参考图1/图2/图3”写。
|
||||
5. `API映射`:`@Image1 = @姜尚离_百姓装`。
|
||||
6. `API提示词`:用 `@Image1/@Image2` 或“参考图1/图2”写。
|
||||
7. `公网URL`:来自上传接口的 URL;未生成或未上传时写明 `pending_generation / pending_upload`,不得假造 URL。
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
# 图片生成与上传执行规则
|
||||
|
||||
## 目标
|
||||
|
||||
图片资产不能停留在提示词层。全局 `05_图片资产提示词.md` 和 `06_即梦资产提示词.md` 完成后,必须进入执行阶段:
|
||||
|
||||
1. 从 `05_图片资产提示词.md` 选定 nano-banana-2 版参考图提示词。
|
||||
2. 生成 `image_generation_jobs.json`,每个需要后续视频引用的人物、场景、道具至少一条任务。
|
||||
3. 调用 nano-banana-2 图片模型真实出图。
|
||||
4. 保存本地图片文件。
|
||||
5. 调用图片上传接口,得到公网 URL。
|
||||
6. 把公网 URL、官网上传名和参考职责回填到 `08_附件清单.md`、`09_接口资产清单.md`、分集 `09_官网提示词.md` 和 `10_接口请求体.jsonl`。
|
||||
|
||||
## 生成任务格式
|
||||
|
||||
在运行目录下创建:
|
||||
|
||||
```text
|
||||
outputs/novel_video_runs/{输入项目名}/image_generation_jobs.json
|
||||
```
|
||||
|
||||
内容必须是 JSON 数组:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"internalRef": "@姜尚离",
|
||||
"type": "character",
|
||||
"promptName": "标准中景参考图",
|
||||
"fileName": "jiang-shangli_mid_reference.jpg",
|
||||
"jimengUploadName": "姜尚离_标准中景",
|
||||
"aspectRatio": "3:4",
|
||||
"contentType": "image/jpeg",
|
||||
"referenceDuty": "锁定姜尚离的脸型、发型、固定识别点和当前阶段服装,不参考背景和姿势",
|
||||
"prompt": "这里粘贴 nano-banana-2 版可直接出图提示词"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
字段要求:
|
||||
|
||||
| 字段 | 要求 |
|
||||
| --- | --- |
|
||||
| `internalRef` | 必须对应工作流内部 `@角色/@场景/@道具`。 |
|
||||
| `type` | `character / scene / prop / transition_frame`。 |
|
||||
| `promptName` | 使用 `主设定板 / 标准中景 / 面部特写 / 主视角宽幅 / 局部锚点` 等稳定名称。 |
|
||||
| `fileName` | 必须可作为上传文件名,优先 `.jpg`。 |
|
||||
| `jimengUploadName` | 即梦官网里的素材名,分集提示词必须用这个名字。 |
|
||||
| `referenceDuty` | 写清参考图只负责什么、不能继承什么。 |
|
||||
| `prompt` | 使用最终安全版 nano-banana-2 图片提示词,不使用 MJ 参数。 |
|
||||
|
||||
## 执行脚本
|
||||
|
||||
本工作流提供批量脚本:
|
||||
|
||||
```bash
|
||||
node workflows/novel_to_seedance/scripts/generate_upload_assets.mjs \
|
||||
--jobs outputs/novel_video_runs/{输入项目名}/image_generation_jobs.json \
|
||||
--out-dir outputs/novel_video_runs/{输入项目名}/assets/generated \
|
||||
--manifest outputs/novel_video_runs/{输入项目名}/uploaded_assets.json
|
||||
```
|
||||
|
||||
环境变量:
|
||||
|
||||
| 变量 | 用途 |
|
||||
| --- | --- |
|
||||
| `GEMINI_API_KEY` 或 `GOOGLE_API_KEY` | nano-banana-2/Gemini 图片接口密钥。 |
|
||||
| `NANO_BANANA_MODEL` | 图片模型 ID;默认 `nano-banana-2`,如果账号控制台给出精确模型名,以控制台为准。 |
|
||||
| `IMAGE_UPLOAD_URL` | 图片上传接口;默认使用本项目固定上传 URL。 |
|
||||
|
||||
上传接口请求体固定为:
|
||||
|
||||
```json
|
||||
{
|
||||
"file": "图片的base64字符",
|
||||
"fileName": "77c5320f08e282f3220ea96a759288b.jpg",
|
||||
"contentType": "image/jpeg",
|
||||
"metadata": {
|
||||
"uploadTime": "2025-06-18T06:52:02.292Z",
|
||||
"originalSize": "66828"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
脚本会自动计算 `uploadTime` 和 `originalSize`。上传响应如果包含 `url / fileUrl / data.url / data.fileUrl / result.url / result.fileUrl`,会写入 `publicUrl`;如果响应格式不同,保留原始响应并将状态标为 `uploaded_url_unparsed`,人工从 `uploadRawResponse` 提取链接后回填。
|
||||
|
||||
## 上传后回填规则
|
||||
|
||||
`uploaded_assets.json` 是机器生成记录,正式交付仍必须回填 Markdown 清单。
|
||||
|
||||
### 08_附件清单.md
|
||||
|
||||
`本地路径/URL` 填写:
|
||||
|
||||
```text
|
||||
本地:outputs/novel_video_runs/{项目}/assets/generated/jiang-shangli_mid_reference.jpg
|
||||
URL:https://...
|
||||
```
|
||||
|
||||
### 09_接口资产清单.md
|
||||
|
||||
`公网URL` 必须填写上传后的 URL。`官网上传名` 必须填写即梦素材名。`状态` 使用:
|
||||
|
||||
- `generated_uploaded_ready`
|
||||
- `generated_uploaded_url_unparsed`
|
||||
- `pending_generation`
|
||||
- `pending_upload`
|
||||
- `failed_generation`
|
||||
- `failed_upload`
|
||||
|
||||
### 分集 09_官网提示词.md
|
||||
|
||||
官网附件槽位必须写成已上传图片名:
|
||||
|
||||
```text
|
||||
附件:
|
||||
图1:@姜尚离_标准中景
|
||||
图2:@伯府狗洞_主视角宽幅
|
||||
|
||||
提示词:
|
||||
参考图1锁定姜尚离的外貌、发型和服装,不参考图中背景;参考图2锁定伯府狗洞的空间结构、泥地材质和冷天光……
|
||||
```
|
||||
|
||||
### 分集 10_接口请求体.jsonl
|
||||
|
||||
`image_url.url` 优先使用上传后的公网 URL;如果后续进入火山素材库,再替换为 `asset://...`:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": "https://..."
|
||||
},
|
||||
"role": "reference_image"
|
||||
}
|
||||
```
|
||||
|
||||
## 视频生成资源说明
|
||||
|
||||
nano-banana-2 只作为图片资产生成资源使用,不把它当作视频生成资源。视频生成继续使用 Seedance 2.0 请求体和官网提示词;如果项目另接 Veo、可灵或即梦视频 API,需要新增独立视频模型适配规则,不能复用图片上传脚本替代视频任务创建。
|
||||
@@ -25,6 +25,10 @@ nano-banana-2版
|
||||
|
||||
适合高密度中文设定板、中文标签、多图组合、局部编辑和一致性扩展。写法上保留“一张图内包含多个视角/模块”和“简洁中文文本标签说明”。人物中景、面部特写、侧光和极端情绪参考图应写成单图单状态,避免拼贴过多导致后续视频参考不稳定。
|
||||
|
||||
本工作流中 nano-banana-2 不是只输出提示词的名称,而是默认图片执行资源。完成提示词后,必须生成 `image_generation_jobs.json`,调用图片模型出图,再调用图片上传接口得到公网 URL。具体执行见 `image_generation_upload_rules.md`。
|
||||
|
||||
视频生成不使用 nano-banana-2。视频资源继续走 Seedance 2.0 官网/API 请求体;如需接 Veo、可灵或即梦视频 API,应新增独立视频适配规则。
|
||||
|
||||
## MJ 版
|
||||
|
||||
适合美术概念探索、角色气质、服化道氛围和风格化写实参考图。正文仍输出中文,末尾可添加 `--ar 16:9 --style raw --v 7`,人物单状态参考图可用 `--ar 3:4 --style raw --v 7`。如果中文标签渲染不稳定,把“配有中文文本标签说明”改成“整洁设计稿标签区,文字后期添加”。
|
||||
@@ -45,5 +49,8 @@ nano-banana-2版
|
||||
图片模型:both
|
||||
图片模型可选:mj,nano-banana-2
|
||||
资产提示词格式:高密度中文设定板
|
||||
图片生成执行:true
|
||||
图片上传执行:true
|
||||
视频生成模型:seedance-2.0
|
||||
```
|
||||
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# 上传后调用稿分支规则
|
||||
|
||||
## 触发时机
|
||||
|
||||
本分支只在图片生成和上传完成后执行。
|
||||
|
||||
前置条件:
|
||||
|
||||
- `uploaded_assets.json` 已生成。
|
||||
- `08_附件清单.md` 已回填本地路径、公网 URL、官网上传名和状态。
|
||||
- `09_接口资产清单.md` 已回填 `内部引用`、`官网上传名`、`公网URL` 或 `火山 asset URI`、`参考职责`、`状态`。
|
||||
|
||||
如果图片还没上传,或 `09_接口资产清单.md` 里仍没有可用 URL,不得把分集 `10_接口请求体.jsonl` 标成可调用版本。
|
||||
|
||||
## 输入文件
|
||||
|
||||
AI 在本分支必须重新读取:
|
||||
|
||||
- 全局 `09_接口资产清单.md`:资产映射的唯一可信来源。
|
||||
- 分集 `04_资产引用.md`:本集实际使用的角色、场景、道具。
|
||||
- 分集 `05_Seedance视频提示词.md`:镜头动作、对白、声音、首尾帧和负面约束。
|
||||
|
||||
`uploaded_assets.json` 只作为核对来源。正式生成分集调用稿时,以 `09_接口资产清单.md` 为准。
|
||||
|
||||
## 输出文件
|
||||
|
||||
本分支覆盖或新建每集:
|
||||
|
||||
- `09_官网提示词.md`
|
||||
- `10_接口请求体.jsonl`
|
||||
|
||||
这两个文件必须在上传完成后重新生成。不能沿用上传前只包含内部 `@角色/@场景` 的草稿。
|
||||
|
||||
## 官网提示词生成规则
|
||||
|
||||
`09_官网提示词.md` 每个片段必须包含:
|
||||
|
||||
- 上传素材表:图号、官网上传名、内部引用、公网 URL/asset URI、参考职责、状态。
|
||||
- 官网 Prompt:开头使用 `@官网上传名`,不是内部 `@角色名`。
|
||||
- 参考职责:写清参考图 1/2/3 分别锁定什么,不参考什么。
|
||||
|
||||
未上传成功的资产只能出现在素材表里,状态写清 `pending_upload / generated_uploaded_url_unparsed / failed_upload`,不能写进官网 Prompt 开头的 `@` 列表。
|
||||
|
||||
## JSONL 生成规则
|
||||
|
||||
`10_接口请求体.jsonl` 每行一个片段任务。
|
||||
|
||||
每行必须包含:
|
||||
|
||||
- `episode`
|
||||
- `shot_id`
|
||||
- `model`
|
||||
- `content`
|
||||
- `parameters.duration`
|
||||
- `parameters.resolution`
|
||||
- `parameters.aspect_ratio`
|
||||
- `callback_url`
|
||||
|
||||
`content` 必须是多模态数组:
|
||||
|
||||
1. 先放本片段可用的参考图片:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": "https://example.com/asset.jpg"
|
||||
},
|
||||
"role": "reference_image",
|
||||
"name": "Image1",
|
||||
"source_ref": "@角色名",
|
||||
"reference_duty": "锁定角色外貌、发型和服装,不参考原图背景和姿势"
|
||||
}
|
||||
```
|
||||
|
||||
2. 再放文本提示词:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "text",
|
||||
"text": "参考图1锁定角色外貌、发型和服装,不参考背景或姿势;参考图2锁定场景空间和光线。中景,角色推门进入,10秒,9:16..."
|
||||
}
|
||||
```
|
||||
|
||||
## 禁止项
|
||||
|
||||
- 不得把 `@角色名`、`@官网上传名`、本地路径或 `pending_upload` 写进 `image_url.url`。
|
||||
- 不得使用 `https://replace-with-uploaded-url`、`https://example.com/...` 这类占位 URL 作为最终 JSONL。
|
||||
- 不得只有文本 `content`,却在文本里写“参考 @角色”。只要本片段需要角色/场景一致性,就必须传真实图片 URL。
|
||||
- 不得让文本里的“参考图1/图2/图3”和 `content` 里的图片顺序不一致。
|
||||
|
||||
## 缺失资产处理
|
||||
|
||||
如果某个片段需要的资产未上传成功:
|
||||
|
||||
- 不要把该资产写入 `content[].image_url`。
|
||||
- 在同一 JSON 行增加 `asset_warnings`。
|
||||
- `asset_warnings` 写明 `internalRef`、当前状态和缺失原因。
|
||||
|
||||
示例:
|
||||
|
||||
```json
|
||||
"asset_warnings": [
|
||||
{
|
||||
"internalRef": "@场景名",
|
||||
"status": "pending_upload",
|
||||
"reason": "09_接口资产清单.md 中没有可用公网 URL 或 asset:// URI"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 出口检查
|
||||
|
||||
本分支完成后必须检查:
|
||||
|
||||
- 每行 JSON 都能被解析。
|
||||
- 所有 `content[].image_url.image_url.url` 都是 `http://`、`https://` 或 `asset://`。
|
||||
- 没有 `pending_upload`、本地路径、占位 URL 出现在 `image_url.url`。
|
||||
- 每个分集 `04_资产引用.md` 中的核心角色/场景,要么已经进入 JSONL 图片输入,要么出现在 `asset_warnings`。
|
||||
Reference in New Issue
Block a user