· 1 observation
Technical updates · 1
Package or technical metadata updated
View technical comparison →Buzzy AI, Inc. v0.1.0
Create images, videos, and ads
Developer declarations; not independently tested. Listing last checked Nov 4, 2026. Package observed Nov 3, 2026.
Not specified in the available declarations: limitations, pricing & account requirements.
Generate an image from this brief.
From the marketplace listing
Create images, videos, branded ads, and short films with Buzzy in ChatGPT. Start with an idea, a product link, or a reference image, choose a creative workflow, and refine the result through conversation. With Buzzy, you can: • Generate images and videos from text or a reference image, video, or audio file. Choose a model, then use a resolution, aspect ratio, and duration that model supports. • Upload a local image, video, or audio file and use the returned link as a reference for the next generation. • Make a UGC-style product ad from a product page, product image, or product description, including a showcase, unboxing, or creator-style review. • Produce a TVC or brand commercial from a product link, image, or description, with a storyboard, character sheets, clips, and music. • Create a single cinematic live-action shot, or a short 3D rendered clip, from a brief and an optional reference. • Build a longer live-action micro-film or animated story, with a script, character sheets, scene previews, clips, and music. • Pick a style, background, music track, or character image when a workflow asks you to choose one. Describe what you want to make, review the results in chat, and continue from the same project. Connect your Buzzy account to get started.
Language: English · Automatically detected from descriptions.
· 1 observation
Package or technical metadata updated
View technical comparison →Find competitors to follow as you develop your plugin.
Create images, video, audio, branded assets, and social content directly in ChatGPT. Start with an idea or reference files, and use Carat...
Shared terms: video, image, ads, audio
Create product images and videos, upload visual references, and organize creative work with GHEM.
Shared terms: video, image, character, creative
Create product video advertisements with AI actors. Develop the creative brief, review the voiceover script and storyboard, and generate ...
Shared terms: ads, video, brief, character
Create AI videos, images, ads, and audio with Pollo in ChatGPT. Start with an idea, product photo, script, link, or visual reference, the...
Shared terms: video, image, ads, audio
Create AI images, consistent influencers, UGC, marketing content, videos, lip sync, faceless stories, and cinematic sequences with your c...
Shared terms: video, image, character, cinematic
---
name: 3d-cgi
description: "Always use this skill to make a single-shot 2–10s 3D CGI / rendered video clip. Must trigger for /3d-cgi, 3d-cgi, 3D animation, CGI, Pixar-style, Unreal Engine, Blender, octane render, ray tracing, photorealistic 3D, computer-generated, digitally rendered, volumetric, subsurface scattering, PBR, or when a 3d-cgi run is already in progress (intent answers, specs, CGI prompt, clip, BGM merge) or the user skips a step, supplies a reference, jumps ahead, or revises an earlier step without restarting. Even a vague \"make it look 3D\" or \"help me make a 3D render\" must start this skill. After the first instruction, ask 2 professional direction questions grounded in that brief before the formal pipeline. Preset durations 2s / 4s / 6s / 8s / 10s (default 4s)."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- generate_video
- get_task
- merge_videos
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# 3D CGI Clip Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/3d-cgi/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
本文件是编排器。成片词由 agent **按本链 reference 直接写出**,禁止发明 `prompt_key`,禁止调 `run_prompt`。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。`merge_videos` 传 `projectId`;`generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。Host tools 开场问询 / 规格提问那一拍仍禁止同拍调 `create_project`。问询完成且即将调**需要项目 id** 的 Buzzy tool 时若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此。
**HARD — 宿主提问**:等人选择或确认时,必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`,且**该题全部可选项必须传齐**(禁止只塞一档)。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框;**规格题的编号列表必须每行列出该字段全部档位**。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用、编号单值、或缺档都算没发出提问。
**例外 — 成片词 `content`**:结构化 CGI prompt **必须原文贴进对话**(禁止 code fence),不受「正文最多一句」限制。禁止说 on the canvas。贴完后仍发对应 Host tools 等待提问(FastForward / AutoRun 除外)。
| 何时读 | 文件 |
|--------|------|
| 开场组题(默认 2 题) | `intent-questions.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_video` 参数 | 本文件 §运行时填参 |
| 写成本片词时 | `prompt-write.md`(必读)+ 按需 `hook-framework.md` / `render-styles.md` / `materials.md` / `lighting-library.md` / `camera-language.md` / `particles.md` / `mistakes.md` / `examples.md` |
| 跑到成片 / 合成时 | `clip-generate.md` |
禁止短路径、读其它 skill、把 YAML 当自由 prompt。禁止发明 `prompt_key`。禁止 Higgsfield / `@material[name]`。禁止把 4K / 60fps / codec / 比特率写成平台承诺。
用户可见文案 **固定 English**。禁止出现 `on the canvas`。`SessionScriptLanguage` / `user_lang` 只约束对白与可读场景描述。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准)。**禁止传 `nodeIds`**。用户上传的参考图 / 视频有才加;禁止编造 URL。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**,本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。Apps widget 只展示进度,**不能**代替 `get_task`。后续 `generate_video` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
**HARD — 本链无画布操作**:禁止 `PushStyleList` / `PushConfiguration` / `PushDirectionTool` / `PushSuggestions` / `PushMediaUpload` / `PushGeneratedNodes` / `create_canvas_node`。禁止 `choose_skill_asset`。等待面一律 Host tools。文本产物(CGI prompt)由 agent 打印,不落文本节点。`generate_video.prompt` = 已打印的那份词。
本链**没有**风格库 / 剧本 / 角色设定 / 预览图阶段。用户参考图直接绑给成片。渲染风格(Pixar / photoreal / low-poly…)写进问询字段 `RenderStyle`,不是规格题。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `merge_videos` | 必传 `projectId` = 该 id |
| `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id、且下一拍要调上表**需要项目 id** 的 tool 时,先 `create_project`。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_video`(成片) | `VIDEO_MODEL`(API id,见 §`settings` 映射表) |
`name` 只用来找行。禁止把别名、错表、其它行、卡上显示名写进 `model`。
### 画幅 / 分辨率(成片)
成片读 `<available_models>` 该 `VIDEO_MODEL` 的 Video 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `VIDEO_RATIO` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `VIDEO_RESOLUTION` 若在该行 `resolutions` 里 → 原样用。H3 默认 `768p`(合法档 `768p` / `2k`);其余默认 `720p`(2.0 / 2.0 Fast / 2.5 常见 `480p` / `720p`,以该行原文为准)。`resolutions` 为 `-` / 空 → **整项省略**。不在该行 → **禁止** `generate_video`,引导 `This resolution is not compatible with the selected model. Change the resolution or the model.` 禁止默默改档。禁止写死 4K / 1080p |
| `duration` | `VIDEO_DURATION`(本片整秒,2–10),不是档位原文。该模型 Video 行若有 `duration(s)` 且本秒数不在其中 → **禁止**默默改秒数,Host tools 再问一次合法档 |
规格写入 Session 后,后续成片**静默继承**仍合法的 `VIDEO_RATIO` / `VIDEO_RESOLUTION`;用户本句写了新值且该值在该行才改。
规格题**必须**走 Host tools,**每题全部可选项都要进 `options`**(画幅六档;时长五档;模型三档)。禁止 Chat 只打印一档。禁止在正文里写 default / 预选。手填秒数走 Other / 自由输入,不进 `values[]`。
### 媒体绑定
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_video` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video` / `@material[...]`。
### 占位符
`generate_video` 的 prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。历史里若烂成 `<<>>` 或 Higgsfield `@material[name]`,按当前绑定重写成完整占位后再调用。禁止空占位。
写成片词时若本身没有占位而本片挂了图 / 参考视频,在词前加一行按序点名 `<<<image_n>>>` / `<<<video_n>>>`,再接原文,末尾 `no background music`。
### 串行
写词(打印)与 `generate_video` **禁止**同一 `tool_calls`。先打印齐再出片。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问:`nice` / 无可执行新指令 → 重发同一提问,不要 Advance。
词后 / BGM 闸门上的 `continue` / `Generate the clip` / `Merge with BGM` = 已选,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过写词、自带完整成片词、自带参考图 / 参考视频、从任意点直奔出片、中途改主意、或对词 / 规格 / 成片不满意。本 skill 用**阶段图 + 五个算子**处理这些情况。遇到未写出的说法,先归到某个算子,再往下走。
每条新用户请求开一条新 run:清空上轮状态、确认、词、成片。算子改的是**本 run 的 Stage 计划**。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → settings → prompt → clip → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | **必跑**(默认 2 题) | 无 | 开场问询;不是规格题 |
| `settings` | 规格未齐则跑 | 规格提问 | 画幅 / 时长 / model;分辨率按模型写入,不上题 |
| `prompt` | 必有(生成或自供) | **只**结构化 CGI prompt(Chat 全文) | agent 按 `prompt-write.md` 写;禁止 run_prompt |
| `clip` | 必跑才能成片 | 单段成片 | 一张片子,2–10s |
| `merge` | 有成片则跑 | 成片(可选 BGM) | 普通模式先停 BGM 闸门;N=1 仍走闸门 |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
**硬底线**(不能整链跳过):必须有镜头身份(用户 brief / 自供成片词之一);要出视频必须有 `prompt`(生成或自供,且已打印)。参考图 / 参考视频**不是**成片硬底线;没有就纯文生视频。其它阶段都可以 skip 或 provided。
`prompt` / `clip` **不能**整段 Skip 后还声称能出视频;缺硬底线就问清楚。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要配乐直接看分段」「跳过合成」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步提问。
- 下游按 `slot-adaptation.md` **缺了就省略**,禁止为凑槽复制同一 URL。
- 若当前正停在 S 的等待提问,马上离开。
- `prompt` / `clip` **不能**整段 Skip 后还声称能出视频。
### 2. Provide(S, asset)
用户交出该阶段产物(上传参考图 / 参考视频 URL、粘贴完整成片词……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成。
- 参考图 / 参考视频 **禁止**当成成片词正文;成片词 **禁止**当成参考图。
- 任意轮次都可 Provide;中途补交则改状态并继续。
### 3. Jump(T)
用户要尽快到达更后的阶段(「直接出视频」「先出词就行」「不要中间结果」……)。
- `FastForwardTo = T`(默认若只说「直接做完 / 出视频」则 `T = clip`,有成片时含 `merge`)。
- 从当前点起,对每个 enabled 阶段:**执行但不推中间等待提问**;文本产物仍须打印。
- 到达 T 的产物后,按 T 的完成态展示。T 之前被 Skip 的阶段仍然不做。
- Jump **不是**跳过硬底线:仍须跑完 enabled 的 `prompt` 才能进 `clip`。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名词 / 规格 / 成片 / 问询方向……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧 URL 可留,状态禁止再引用)。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- `AutoRunDownstream = true`:重做 S 后,按**当前** Stage 计划自动顺跑后续 enabled 阶段,直到 `clip`(再停 BGM 闸门,除非 FastForward 且未点名 BGM)。中途不推「下一步」除非缺必填输入。
### 5. Reroute(S, mode)
同一阶段换做法(等用户传参考 → 改为纯文生;规格改走默认值……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询:`IntentAskedCount < 2` 且下一题尚未对 Host tools 真发出 → 同轮真调用一次。标题 = 短题名;问句 = **恰好一句**点名 brief;`options` = **恰好 3 条**且第一条为推荐默认。无真调用、把 3 条写成 Chat 编号列表、或问句为空 = 本步失败。未满 2 题时**禁止**进 `settings`,禁止同拍 `create_project` / `generate_video` / `merge_videos`
2. 开场题已发出、用户尚未作答 → **停住**。Host tools 返回若没有选中的 option / Other 文本,只表示选择框已发出,不是已答
3. 停在**已经发出且仍有效**的其它宿主提问上(规格 / 词后 / BGM),等用户选择
4. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–3 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出必打的成片词——**但**开场问询 / 其它 Host tools 题已经发出、用户尚未作答时,**停住且不再调任何 tool 是正确终点**。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外**:Host tools 已发出、用户尚未作答。`generate_video` 返回 `task_id` 必须先 `get_task` 到终态再 Advance。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式且该阶段有用户可见产物、且不在 FastForward / AutoRun 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward / AutoRun 中 → 不发中间等待提问,继续直到目标
过渡态(规格刚写入 / 词已写未打印)**禁止停驻**。
`prompt` 刚打印、普通模式、`PromptClipGateDone=false` → **必须停**。同轮只贴词 + 推词后提问。禁止 `generate_video`。
`PromptClipGateDone=true` 且 `clip` 仍是 `run`、片未发 → 立刻成片。正文 `Generating the CGI clip.` 禁止再推这组提问。
`prompt` 已齐 → **先**把全文打印进 Chat。FastForward 到 `clip` 也一样:本拍只打印,**下一拍**再成片。禁止同拍出片,禁止只把词留在内存不打印。
---
## 开场意图(`intent`)
**目的**:用户给出指令后、进入 `settings` 之前,必须先基于这条指令挖掘并问出专业问题。细则见 `intent-questions.md`。
- **HARD**:正式流水线前默认只问 **2 题**。每题一次 Host tools。禁止为凑问卷问第 3 题。
- **引导 HARD**:标题 = 从 brief 压的短名;问句 = **恰好一句**(点名 brief);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**把问句写成 Chat 编号列表。**禁止**用规格提问问这些问题。
- 题必须**改写自当前用户指令**。已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;但仍须另挖至少 2 道能提升专业度的题。
- **禁止**因「看起来没有缺口 / 指令已够用 / 用户说直接开始」而 0 题进 `settings`。
- 仅当 `IntentAskedCount ≥ 2` 之后,用户再说开始 / 默认 / 跳过剩余 → `IntentDone=true`。问询中的上传先 Provide 再继续问。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. 某次能力调用已发出、**尚无结果** → 等这批结果,不要再叠下一批。`generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。
2. `IntentDone=false` → 只问下一题或收回答。问下一题必须真调用 Host tools,且问句含 brief 词。首轮带了成片词 / 参考图也先问询,记下入口。题已发出未答 → 停住。
3. 本轮能识别算子 → 执行算子。若 `IntentAskedCount < 2`:**只记账**,**禁止**进 `settings`;本轮仍问下一题。
4. 规格未齐且未写入 Session → 只出规格提问(或 FastForward 时写入默认)。回包已能解析 `aspectRatio` + `duration` + `model` → 按模型写入分辨率(H3=`768p`,其余=`720p`)后**立刻写入 Session,同轮进 `prompt`,禁止再推规格提问**。规格已齐但题未出、用户也未给齐 → 只出规格提问。`IntentDone=false` 时禁止进本条。
5. 词已打印(或 provided 已绑定),普通模式且 `PromptClipGateDone=false` → **只出词后提问**,然后停。禁止成片。用户点继续生成 → `PromptClipGateDone=true`,同轮按 `clip-generate.md` 成片。点修改词 → 下一句有改写说明则按说明重写并打印,再出同一组提问;只点修改没写要改什么 → 停着问要改哪,禁止空改一轮。FastForward / AutoRun → 跳过这组提问,先确认词已打印,下一拍成片。
5b. `PromptClipGateDone=true` 且 `clip` 仍 `run`、片未发 → **同轮成片**。正文 `Generating the CGI clip.` 禁止再推这组提问。
6. FastForward / AutoRun 且上一步已齐 → 只跑下一 enabled 阶段。
7. 否则按当前阶段目的推进;含糊聊天且等待提问仍有效 → 重发同一提问,不要空回复。规格已写入 Session → 禁止再推规格提问。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`CgiActive` 为真时只按本文件。启动:`/3d-cgi`、3d-cgi、3D CGI、Pixar-style、Unreal、Blender、渲染感短镜头、跳步 / 自供 / 回退式 CGI,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `cinematic` / `ai-story` / `ai-animation` / `ugc-ads` / `tvc-ads` 正文跑本链。
### `settings`
前置:`IntentDone=true`。
一次 Host tools(能一次提多题就一次提完)。标题 `Set up your Video Settings`。assistant 正文最多一句:`Please configure your target video specs before we write the CGI prompt.`
**禁止**再放 `resolution`。禁止加第 4 项。禁止把 `"Custom"` 写进时长 `options`(手填走 Other)。
**固定三项、顺序 HARD**(每题 options 必须传齐):
| 顺序 | 标签 | `name` | 全部可选项(必须全部列出) | 默认(只内部写,禁止印给用户) |
|------|------|--------|---------------------------|------|
| 1 | Aspect Ratio | `aspectRatio` | `9:16` / `16:9` / `1:1` / `4:3` / `3:4` / `21:9` | `16:9` |
| 2 | Duration | `duration` | `2s` / `4s` / `6s` / `8s` / `10s` | `4s` |
| 3 | Model | `model` | `MiniMax-H3` / `Seedance 2.0 Fast` / `Seedance 2.0` | `MiniMax-H3` |
禁止借用 cinematic / ugc-ads / ai-story 的时长档。时长五档是本链单段窗口(2–10s);用户 Other / 自由输入仍可手填整秒(`3s` / `7s` / `7秒`)。手填优先于五档默认。取出的整秒 `<2` → 写入 `2`;`>10` → 不要硬做长片,引导用户改用 `ai-animation`(动画长片)或 `ai-story`(真人长片),或改回 ≤10s。禁止把 `15s` / `15-30s` / `30-1min` 写进 `options`。`model` 顺序必须是 `MiniMax-H3` → `Seedance 2.0 Fast` → `Seedance 2.0`。不要把 `Seedance 2.5` 写进题。题上是显示名,禁止把 API id 写进 `options`。
**HARD — 分辨率不上题**:确认或 FastForward 按已映射的 `VIDEO_MODEL` 写入 `VIDEO_RESOLUTION`:`MiniMax-H3` → `768p`;其余模型 → `720p`。用户口头点名分辨率且该值在该模型 Video 行 `resolutions` 里才覆盖;不配则忽略口头值,仍用上表默认。禁止把「4K / 60fps」当成已选规格。
确认或 FastForward 写入后冻结:`VIDEO_RATIO` / `VIDEO_RESOLUTION` / `VIDEO_DURATION_RANGE` / `VIDEO_MODEL`。`VIDEO_DURATION_RANGE` 用题上 token(`2s` / `4s` / `6s` / `8s` / `10s`,或手填原文)。整数 `VIDEO_DURATION`:`2s`→2;`4s`→4;`6s`→6;`8s`→8;`10s`→10;手填取开头整数(`7` / `7s` / `7S` / `7秒` 都 = 7)。2–10 合法。该整数覆盖 brief 里口头时长。
**HARD — 显示名 → API id**:回包的 `model` 先当显示名。用 `<available_models>` Video 表 `name` 对齐后,把该行 `model` 列原文写入 `VIDEO_MODEL`。对不上时用这张表,禁止把显示名传给成片:
| 回包(显示名或旧 id 都认) | `VIDEO_MODEL`(API id) |
|----------------------------|-------------------------|
| `MiniMax-H3` | `MiniMax-H3` |
| `Seedance 2.0` / `seedance-2.0` / `seedance-2-0` | `seedance-2.0` |
| `Seedance 2.0 Fast` / `dreamina-seedance-2-0-fast-260128` | `dreamina-seedance-2-0-fast-260128` |
| `Seedance 2.5` / `seedance-2.5` | `seedance-2.5` |
未选则 `VIDEO_MODEL=MiniMax-H3`。确认或 FastForward **当下**就必须完成这张映射,再进 `prompt`。`generate_video.model` 用这个 API id。
**HARD — 确认即离开,禁止循环重推**:回包能解析三项 → 按模型写入分辨率,立刻写入 Session,同轮进 `prompt`。
- `duration` 不在 `options` 或大小写 `S`/`s`,只要能取出 2–10 的整秒,都算已齐。禁止因此重推题。
- `model` 为上表任一显示名或旧 id 即合法。
- 本题 `duration` 是**本片时长**,不是多段总时长。
- 默认组合恒适配(H3+`768p`,其余+`720p`)。口头覆盖的分辨率不在该模型 Video 行 → 丢掉口头值,仍用默认,不要重推题。
用户已给齐三项 → 写入 Session 后可不再停。FastForward 且规格未齐 → 写入默认:`16:9` + `4s` + `MiniMax-H3` + `768p`。普通模式规格未齐 → 只推这三项提问,然后停。已确认过一次 → 禁止再推同一套题。
### `prompt`
见 `prompt-write.md`。有用户成片词 → 整理成完整结构化词后**全文贴进 Chat**(provided)。否则 agent 按 `prompt-write.md` + 按需知识库**直接写出**,禁止调 `run_prompt`。
成功**只**展示渲染后的词(禁止 code fence)。普通模式贴词后立刻出词后提问,然后停。
- **HARD — 词后提问**(普通模式,`PromptClipGateDone=false`):正文可空。同轮 Host tools:引导 `Modify the CGI prompt, or generate the clip?`。`options` 必须恰好这 2 条,顺序固定:
1. `Generate the clip`
2. `Modify the CGI prompt`
### `clip` / `merge`
见 `clip-generate.md`。一段新片子(`VIDEO_MODEL`),title = `CGI Clip`。禁止把 BGM 写进 CGI prompt,禁止对单段配乐。
普通模式:成片成功后推 **BGM 闸门**并停住。选项固定 `["Merge with BGM", "Merge without BGM"]`,引导 = `Sure, would you like to add BGM?` 用户选定后再调一次 `merge_videos`(with → `is_generate_bgm=true` / without → `false`),挂该段成片 URL。
FastForward / AutoRun 到 merge 且未点名 BGM → 无 BGM 合成。N=1 仍可走 BGM 闸门(单段配乐)。Skip(`merge`) → 以分段成片为结束态。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / is on the canvas / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
子句例外:CGI prompt 必须先贴全文,状态句可附在全文后。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。用户可见 English **禁止** `on the canvas`。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有那一句;3 条方向只进 `options`。
规格提问用各自引导,不要再套 Review 句。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward / AutoRun 不发中间等待提问。BGM 闸门固定 `Merge with BGM` / `Merge without BGM`。词后提问固定两条,不要改成 Review then generate。结束态(合成后或跳过闸门的单段)可留 `Go to edit`,不要再写引导。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options` |
| 规格提问 | (不重复预览) | `Please configure your target video specs before we write the CGI prompt.` |
| 成片:分辨率不适配该模型 | (可省略) | `This resolution is not compatible with the selected model. Change the resolution or the model.` |
| 词刚齐、等用户拍板 | 先全文贴词;可附 `Your CGI prompt is ready.` | `Modify the CGI prompt, or generate the clip?` 恰好两条 |
| 用户选继续、出片 | `Generating the CGI clip.` | (禁止再推词后提问) |
| 待合成 | `Your CGI clip is ready.` | `Sure, would you like to add BGM?` |
| 单段 / 合成结束 | `Your CGI clip is ready.` / `Your CGI video is ready.` | (禁止提问引导;可留 `Go to edit`) |
产物 `title`(无产物不编造):`CGI Prompt` / `CGI Clip`。加 BGM 合成才另有 `Final Video without BGM - v1` / `Final Video BGM - v1` / `Final Video with BGM - v1`。禁止再写 `[First Frame]`。禁止给分段再落 BGM。
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `settings`。普通模式词成功拍先出提问;用户选继续后再成片。本链只有 1 段 `generate_video`。FastForward / AutoRun / Skip 后的下一阶段在 continuation 立刻开始。禁止词未打印就出片。
Referenced files: 12 — file references are metadata, not package contents.
---
name: ai-animation
description: "Always use this skill to make a flexible long-form animation / animated micro-film / multi-chapter storyboard-to-video. Must trigger for /ai-animation, ai-animation, long animation, animated feature, animated micro-film, or when an ai-animation run is already in progress (intent answers, style, specs, script, character sheets, preview images, video prompts, clips, BGM merge) or the user skips a step, supplies an asset, jumps ahead, or revises an earlier step without restarting. Even a vague \"make a long animation\" or \"help me make an animated feature\" must start this skill. After the first instruction, ask 2 professional direction questions grounded in that brief before the formal pipeline. Preset durations 15s / 15-30s / 30-1min (default 15s) or a typed total such as 180s / 300s."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- run_prompt
- generate_image
- generate_video
- get_task
- merge_videos
- choose_skill_asset
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# AI Animation Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/ai-animation/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
本文件是编排器,不是 `run_prompt` 的填空稿,不要改写成 `user_lang`,不要压成短 brief。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。workflow tool(`run_prompt` / `merge_videos`)传 `projectId`;`generate_image` / `generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。`choose_skill_asset` **不需要** `projectId` / `project_id`。Host tools 开场问询 / 规格提问那一拍、以及风格卡那一拍,仍禁止同拍调 `create_project`。风格卡只调 `choose_skill_asset`。问询完成且即将调**需要项目 id** 的 Buzzy tool 时若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此:还没有 id 就先创建,再调带项目字段的 tool。
**HARD — 宿主提问**:等人选择或确认时,必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`,且**该题全部可选项必须传齐**(禁止只塞一档)。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框;**规格题的编号列表必须每行列出该字段全部档位**。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用、编号单值、或缺档都算没发出提问。
**例外 — 风格库**:`choose_skill_asset` 打开风格单选控件。必传 `style_template: "animation"` + `title: "Styles"`。返回值(`items`)只表示控件已打开,**不是**确认。有控件 → **停住**等 `Confirmed Styles info`;禁止同拍 Host tools。无控件宿主才把 `items[].name` 塞进 Host tools。确认前禁止进 `settings`。
**例外 — run_prompt `content`**:剧本 Markdown 与各段 Video Prompt **必须原文贴进对话**(禁止 code fence),不受「正文最多一句」限制。禁止说 on the canvas。贴完后仍发对应 Host tools 等待提问(FastForward / AutoRun 除外)。
| 何时读 | 文件 |
|--------|------|
| 开场组题(默认 2 题) | `intent-questions.md` |
| 风格卡 / choose_skill_asset | `style-prompt.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_image` / `generate_video` 参数 | 本文件 §运行时填参 |
| 跑到该步且未跳过时 | `script-prompt.md` / `assets-prompt.md` / `frames-prompt.md` / `video-prompts.md` / `clips-merge.md` |
已注册文案模板(只许用这些 key,禁止发明,禁止借用 ugc-ads / tvc-ads):
`long_video_step1_script` / `long_video_step3_video_prompts`。
`long_video_step2_frames` 主路径不用。禁止用 STEP2 写成片词,禁止为出预览图去补 STEP2。
`long_video_step3_video_prompts` 对外仍是一次调用。Agent **必须**传 `instruction.script_markdown` + 规格(`duration_sec` / `ratio` / `model`)。**禁止**传 `frames[]`。Host 内部跑 STEP2,细镜全文零删减进 `records[]`,与这份剧本并行喂给 Gemini。写词规则是**细镜主参考、剧本辅参考**:画面先写细镜;剧本补缺口;同一事实两边否定才选边(台词→剧本,站位/运镜→细镜)。条数对不齐不失败。Gemini **只**写 `groups[]`。Host 校验该章剧本镜头行引号对白后按组拆 `items[]`。禁止挂预览图。Agent **必须**把每段 `content` 全文打印进 Chat(一段一块 `### Video Prompt {i}`)。还没打印齐 1…N = 本步未完成,禁止出片。
预览图是展示件,只从剧本文各章第一条镜头行出图,**不**用 `frames[].prompt`。可 Skip。进入 `frames` 时先只发预览图 `generate_image`×N(与资产图同一套:本拍禁止夹 STEP3),全部 `get_task` 终态后一次状态句,**下一拍**再调一次 STEP3。禁止 `defer_step2_thinking`。本批预览图未全部终态 → 禁止状态句、禁止芯片式提问、禁止 STEP3。
禁止短路径、读其它 skill、把 YAML 当自由 prompt。禁止把 `*_SPEC` / YAML 正文贴进 `instruction`。
用户可见文案 **固定 English**。禁止出现 `on the canvas`。`SessionScriptLanguage` / `user_lang` 只约束剧本可读正文、对白、分镜描述。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准),适用于 `generate_image` / `generate_video` / `run_prompt` / `merge_videos`。**禁止传 `nodeIds`**。STEP1 必须把用户上传的参考图 / 视频放进 `image_urls` / `video_urls`(有才加);**禁止**把风格图 URL 放进这两个字段。已绑定风格图时,`assets` 的 `generate_image` 可用 `image_urls` 只传这一张风格图。预览图不是成片参考。
角色 / 道具 / 场景 / 风格板 / 预览图的 `generate_image.model` = `<available_models>` Image 表 **Nano Banana 2** 行的 `model` 列原文(`name` 只用来找行;禁止把 `Nano Banana 2` 别名、视频行、其它图片行写入)。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_image` / `generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**(`url` / `image_url` / `video_url` 以返回为准),本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。并发提交的多个 `task_id` 必须全部轮询到终态后才能 Advance。Apps widget 只展示进度,**不能**代替 `get_task`。禁止因为「控件会自己轮询」而跳过。后续 `generate_image` / `generate_video` / `run_prompt` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
**HARD — 本链无画布操作**:禁止 `PushStyleList` / `PushConfiguration` / `PushDirectionTool` / `PushSuggestions` / `PushMediaUpload` / `PushGeneratedNodes` / `create_canvas_node`。风格库走 MCP `choose_skill_asset`,不是画布卡。除风格卡外,等待面一律 Host tools。文本产物(剧本、Video Prompt)由 agent 打印,不落文本节点。成片词不靠宿主读画布节点:`generate_video.prompt` = 已打印的该段 `content`。
`StyleTemplate` 整链冻结为 **`animation`**。禁止写进 Chat、开场题、规格题。禁止问 Film vs Anime。禁止 `ai_film`。`choose_skill_asset.style_template` 必须传 `"animation"`,禁止省略(省略会落到 `ai_film`)。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `choose_skill_asset` | `{ "style_template": "animation", "title": "Styles" }`。**不传** `projectId`。返回不是选择 |
| `run_prompt` / `merge_videos` | 必传 `projectId` = 该 id |
| `generate_image` / `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id、且下一拍要调上表**需要项目 id** 的 tool 时,先 `create_project`。`choose_skill_asset` 不要等 id。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_image`(风格板 / 角色 / 道具 / 场景 / 预览图) | Image 表 **Nano Banana 2** 行的 `model` 列原文 |
| `generate_video`(成片) | `VIDEO_MODEL`(API id,见 §`settings` 映射表) |
`name` 只用来找行。禁止把别名、错表、其它行、卡上显示名写进 `model`。
### 画幅 / 分辨率(成片)
成片读 `<available_models>` 该 `VIDEO_MODEL` 的 Video 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `VIDEO_RATIO` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `VIDEO_RESOLUTION` 若在该行 `resolutions` 里 → 原样用。H3 默认 `768p`(合法档 `768p` / `2k`);其余默认 `720p`(2.0 / 2.0 Fast / 2.5 常见 `480p` / `720p`,以该行原文为准)。`resolutions` 为 `-` / 空 → **整项省略**。不在该行 → **禁止** `generate_video`,引导 `This resolution is not compatible with the selected model. Change the resolution or the model.` 禁止默默改档 |
| `duration` | **本段** `duration_sec`(STEP3 该项),不是规格总时长 |
规格写入 Session 后,后续预览图 / 成片**静默继承**仍合法的 `VIDEO_RATIO` / `VIDEO_RESOLUTION`;用户本句写了新值且该值在该行才改。角色 / 道具 / 场景 / 风格板的 `aspectRatio` 仍固定 `16:9`,不受成片画幅影响。生图 `resolution` 见下方 §生图分辨率,禁止写死 `1k`。
### 生图分辨率(HARD)
`<available_models>` Image 行的 `resolutions` 是目录展示,大小写经常是 `1k` / `2k` / `4k`。`generate_image.resolution` **必须**用该 tool 自己声明里可接受的 token 原文(Nano Banana 2 当前是 `1K` / `2K` / `4K` 这一类)。语义相等时(`1k`=`1K`,`2k`=`2K`,`4k`=`4K`)选 **tool 声明那一条**,禁止把目录小写 `1k` 原样传入。目录行没有、或 `resolutions` 为 `-` / 空 → 整项省略,不要发明。
档位怎么选(先定档,再取 tool 声明原文):
| 生图 | 档 |
|------|----|
| 风格板 / 角色 / 道具 / 场景 | **1K 档** |
| 预览图 | `VIDEO_RESOLUTION` 为 `480p` / `720p` / `768p` → **1K 档**;`2k` / `1080p` → **2K 档**;`4K` / `4k` → **4K 档** |
禁止把 Video 行的 `768p` / `720p` 写进 `generate_image.resolution`。预览图画幅仍是 `VIDEO_RATIO`。
规格题**必须**走 Host tools,**每题全部可选项都要进 `options`**(画幅六档;时长三档;模型三档)。禁止 Chat 只打印一档。禁止在正文里写 default / 预选。手填总时长走 Other / 自由输入,不进 `values[]`。
### 媒体绑定
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_image` / `generate_video` / `run_prompt` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video`。
### 占位符
`generate_image` / `generate_video` 的 prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。历史里若烂成 `<<>>`,按当前绑定重写成完整占位后再调用。禁止空占位。
STEP3 返回的成片词若本身没有占位,成片时在词前加一行按序点名已挂图的 `<<<image_n>>>`(角色 / 道具 / 场景),再接原文 `content`,末尾 `no background music`。
### 串行
`run_prompt` **禁止**与 `generate_image` / `generate_video` 同拍并行。角色+场景成图、预览图 ×N、同一批最多 4 段成片仍按本文件 §并行。预览图与 STEP3 禁止同一 `tool_calls`。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问,或已打开且未确认的 `choose_skill_asset`:`nice` / 无可执行新指令 → 重发同一提问 / 同一风格卡,不要 Advance。
剧本后 / 资产后 / BGM 闸门上的 `continue` / `preview images` / `Merge with BGM` = 已选,必须 Advance。`Confirmed Styles info` = 风格已选,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过任意中间产物、自带剧本 / 角色图 / 场景图 / 视频提示词、从任意点直奔更后的目标、中途改主意、或对任意前序不满意。本 skill 用**阶段图 + 五个算子**处理这些情况;下面的「不要角色资产 / 自带剧本 / 剧本后出视频」只是算子的实例,**不是**封闭清单。遇到未写出的说法,先归到某个算子,再往下走,不要因为「没写过这个例子」而卡住。
每条新用户请求开一条新 run:清空上轮状态、确认、风格、资产、提示词、成片。算子改的是**本 run 的 Stage 计划**,不是另开一条刚性流水线。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → style → settings → script → assets → frames → video_prompts → clips → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | **必跑**(默认 2 题) | 无 | 开场问询;不是规格题 |
| `style` | **pending**(可跳过) | 一张风格参考图 | `choose_skill_asset(style_template: "animation")`:点选库图。不是角色图、不是场景底板 |
| `settings` | 规格未齐则跑 | 规格提问 | 画幅 / 时长 / model;分辨率按模型写入,不上题 |
| `script` | 必有(生成或自供) | **只** Markdown 剧本(Chat 全文) | `long_video_step1_script`。同一次带回的 `character_prompts` / `background_prompts` **只进内存**,本步不上图 |
| `assets` | run | 角色设定图 + 场景底板 | 普通模式先出剧本后提问,用户选继续才成图 |
| `frames` | run | 各段预览图 | 展示件;记录内部,图可选 |
| `video_prompts` | 必有(生成或自供) | 一段一段打印 `Video Prompt {i}` | `long_video_step3_video_prompts`。拼成一份总稿只打一次 = 非法 |
| `clips` | 必跑才能成片 | 分段成片 | |
| `merge` | 有分段成片则跑 | 成片(可选 BGM) | 普通模式先停 BGM 闸门;N=1 仍可走闸门 |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
**硬底线**(不能整链跳过):必须有故事身份(用户 brief / 自供剧本之一);要出视频必须有 script(生成或自供)、`video_prompts`(生成或自供,且已打印齐)、以及至少一块视觉参考(角色图、场景图或用户参考图之一)。`style` **不是**成片硬底线;跳过则后面不传风格图。其它阶段都可以 skip 或 provided。
`style` 开场默认 **`pending`**。未决时 **enabled**,排在 `settings` 之前。普通模式必须先让用户在风格库点选(或 Skip / Provide),才能进 `settings`。
`assets` 开场默认 **`run`**。普通模式剧本打印后必须先出剧本后提问,禁止同轮直接成图。FastForward / AutoRun 才跳过这组提问。
`frames` 阶段:被 Skip 的只是**预览图成图**。预览图不依赖内部 `frames[]`。内部细镜由 Host 在合写里跑 STEP2。合写 instruction 必须带剧本文 + 规格,禁止传 `frames[]`。禁止挂预览图给 STEP3。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要风格参考」「不要角色图」「别生成预览图」「跳过合成直接看分段」「不要场景底板」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步提问。
- 下游按 `slot-adaptation.md` **缺了就省略或回退到次近素材**,禁止为凑槽复制同一 URL。
- 若当前正停在 S 的等待提问,马上离开。
- `script` / `video_prompts` / `clips` **不能**整段 Skip 后还声称能出视频;缺硬底线就问清楚。
### 2. Provide(S, asset)
用户交出该阶段产物(上传 URL、粘贴剧本文、完整视频提示词……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成。
- 角色图 / 场景图 / 参考视频 **禁止**当成剧本正文;剧本文 **禁止**当成角色主图。风格参考图 **禁止**当成角色设定或场景底板。
- 任意轮次都可 Provide;中途补交则改状态并继续。
### 3. Jump(T)
用户要尽快到达更后的阶段(「剧本之后直接出视频」「一直做到成片」「先出分镜就行」「不要中间结果」……)。
- `FastForwardTo = T`(默认若只说「直接做完 / 出视频」则 `T = clips`,N≥2 时含 `merge`)。
- 从当前点起,对每个 enabled 阶段:**执行但不推中间等待提问**;文本产物仍须打印。
- 到达 T 的产物后,按 T 的完成态展示。T 之前被 Skip 的阶段仍然不做。
- Jump **不是**跳过硬底线:仍须跑完 enabled 的 `script` 与 `video_prompts` 才能进 `clips`。
- Jump(`settings` 或更后) 才可跳过 `style` 提问:已有风格图就绑定,没有则 `style = skip`,**禁止**静默生成风格板。
- Jump(`script`) 普通模式仍出剧本后提问。FastForward / AutoRun / Jump(`assets` 或更后) 才同轮成图。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名风格 / 剧本 / 角色 / 场景 / 预览图 / 提示词 / 规格 / 成片……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧 URL 可留,状态禁止再引用)。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- `AutoRunDownstream = true`:重做 S 后,按**当前** Stage 计划自动顺跑后续 enabled 阶段,直到 `clips`(N≥2 到 `merge`)。中途不推「下一步」除非缺必填输入。
### 5. Reroute(S, mode)
同一阶段换做法(生成角色图 → 改用上传;选风格 → 重发卡;等用户传剧本 → 改为生成;规格改走默认值……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询:`IntentAskedCount < 2` 且下一题尚未对 Host tools 真发出 → 同轮真调用一次。标题 = 短题名;问句 = **恰好一句**点名 brief;`options` = **恰好 3 条**且第一条为推荐默认。无真调用、把 3 条写成 Chat 编号列表、或问句为空 = 本步失败。未满 2 题时**禁止**进 `style` / `settings`,禁止同拍 `create_project` / `choose_skill_asset` / `run_prompt` / `generate_image / generate_video`
2. 开场题已发出、用户尚未作答 → **停住**。Host tools 返回若没有选中的 option / Other 文本,只表示选择框已发出,不是已答
3. 停在已打开的 `choose_skill_asset` 上,等 §风格确认信号(见 `style-prompt.md`)。此期间禁止 `settings`,有控件时禁止 Host tools 再问风格
4. 停在**已经发出且仍有效**的其它宿主提问上(规格 / 剧本后 / 资产后 / BGM / 无控件风格 fallback),等用户选择
5. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–4 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出必打的剧本文 / Video Prompt、也未打开风格控件——**但**开场问询 / 其它 Host tools 题已经发出、或 `choose_skill_asset` 已打开且用户尚未确认时,**停住且不再调任何 tool 是正确终点**。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外**:① Host tools 已发出、用户尚未作答;② `choose_skill_asset` 返回只表示控件已打开,不要 Advance 到 `settings`。`generate_image / generate_video` 返回 `task_id` 必须先 `get_task` 到终态再 Advance。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式且该阶段有用户可见产物、且不在 FastForward / AutoRun 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward / AutoRun 中 → 不发中间等待提问,继续直到目标
过渡态(规格刚写入 / 仅内部 `frames[]` 齐 / 资产决策已拍板但图未发)**禁止停驻**。
`IntentDone=true` 且 `style` 仍 `pending`、风格卡未出 → **必须停**。同轮只调 `choose_skill_asset(style_template: "animation", title: "Styles")`。**禁止**同轮出规格提问。
`choose_skill_asset` 刚返回 **必须停驻**,不是过渡态。无控件宿主才同拍把 `items[].name` 塞进 Host tools。
`script` 刚打印、普通模式、`ScriptAssetsGateDone=false` → **必须停**。同轮只贴剧本文 + 推剧本后提问。禁止 `generate_image`。
`ScriptAssetsGateDone=true` 且 `assets` 仍是 `run`、图未发 → 立刻成图。正文 `Generating character and background images.` 禁止再推这组提问。本批全部 `get_task` 终态后一次状态句 + 资产后三选项。
`assets` 成图刚齐、用户还没点资产后提问(普通模式)→ **必须停**。**禁止**读 `frames-prompt.md` / `video-prompts.md`,**禁止**预览图 `generate_image`,**禁止** `long_video_step3_video_prompts`。
进入 `frames`(仅用户点了 `preview images` / `Continue to preview images`,或 FastForward)→ **先出图,再合写**:成图未发则本拍只发预览图 `generate_image`×N + 各 `get_task`。正文 `Generating preview images.` **禁止**夹 STEP3。本批未齐 → 禁止 STEP3。齐了一次状态句,下一拍只调一次 STEP3(正文 `Generating video prompts.`)。Skip 成图或图已齐、还没有打印齐 `Video Prompt {i}` → 本拍只调 STEP3。已打印任一 `Video Prompt {i}` → **禁止**再调 STEP3。失败章等这批 `get_task` 后再补,禁止为补图重开合写。还没打印这些词 → 禁止成片。
`video_prompts` 已齐 → **先**把全部 `Video Prompt {i}` 正文打印进 Chat。FastForward 到 `clips` 也一样:本拍只打印,**下一拍**再成片。禁止同拍出片,禁止只把词留在内存不打印。
---
## 开场意图(`intent`)
**目的**:用户给出指令后、进入 `style` / `settings` 之前,必须先基于这条指令挖掘并问出专业问题。细则见 `intent-questions.md`。
- **HARD**:正式流水线前默认只问 **2 题**。每题一次 Host tools。禁止为凑问卷问第 3 题。
- **引导 HARD**:标题 = 从 brief 压的短名;问句 = **恰好一句**(点名 brief);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**把问句写成 Chat 编号列表。**禁止**用规格提问问这些问题。
- 题必须**改写自当前用户指令**。已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;但仍须另挖至少 2 道能提升专业度的题。
- **禁止**因「看起来没有缺口 / 指令已够用 / 用户说直接开始」而 0 题进 `style` / `settings`。
- 仅当 `IntentAskedCount ≥ 2` 之后,用户再说开始 / 默认 / 跳过剩余 → `IntentDone=true`。问询中的上传先 Provide 再继续问。问询中明确交风格图 → 只绑 `style`,不要当成角色 / 场景。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. 某次能力调用已发出、**尚无结果** → 等这批结果,不要再叠下一批。`generate_image` / `generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。进入 `frames` 时预览图 `generate_image`×N 是一批;STEP3 是终态后的下一批。禁止两批混在同一 `tool_calls`。
2. `IntentDone=false` → 只问下一题或收回答。问下一题必须真调用 Host tools,且问句含 brief 词。首轮带了剧本 / 参考图也先问询,记下入口。题已发出未答 → 停住。
3. 本轮能识别算子 → 执行算子。若 `IntentAskedCount < 2`:**只记账**,**禁止**进 `style` / `settings`;本轮仍问下一题。
4. `IntentDone=true` 且 `style` 仍 `pending`、风格卡未出 → **只出** `choose_skill_asset(style_template: "animation", title: "Styles")`。禁止同轮出规格提问。上一拍已是 `choose_skill_asset` → 按 `style-prompt.md` 解析回程,不要把工具回包当成选择。
5. 规格未齐且未写入 Session → 只出规格提问(或 FastForward 时写入默认)。回包已能解析 `aspectRatio` + `duration` + `model` → 按模型写入分辨率(H3=`768p`,其余=`720p`)后**立刻写入 Session,同轮进 `script`,禁止再推规格提问**。规格已齐但题未出、用户也未给齐 → 只出规格提问。`style` 未 resolved 时禁止进本条。
6. 剧本已打印(或 provided 已绑定),普通模式且 `ScriptAssetsGateDone=false` → **只出剧本后提问**,然后停。禁止成图。用户点继续生成 → `ScriptAssetsGateDone=true`,同轮按 `assets-prompt.md` 成图。点修改剧本 → 下一句有改写说明则带 `modify_request` 重跑 STEP1,打印后再出同一组提问;只点修改没写要改什么 → 停着问要改哪,禁止空改一轮。FastForward / AutoRun → 跳过这组提问,直接成图。
6b. `ScriptAssetsGateDone=true` 且 `assets` 仍 `run`、图未发 → **同轮成图**。正文 `Generating character and background images.` 禁止再推这组提问。
7. 当前该跑 `frames`(仅用户点了 `preview images` / `Continue to preview images`,或 FastForward)→ 按 `frames-prompt.md` **先出图再合写**:图未发则正文 `Generating preview images.`,只发 `generate_image`×N + `get_task`。已打印 `Video Prompt {i}` → 禁止再调 STEP3。失败章只补失败章(`Retrying the remaining preview images.`),禁止再夹带 STEP3。本批未齐禁止 STEP3;齐了一次状态句,下一拍只调 STEP3(正文 `Generating video prompts.`)。合写回包必须一段一项 `name`=`title`=`Video Prompt {i}` + `content`=该段词;同一 continuation **立刻全文打印**;没有打印齐 → **禁止** `generate_video`。禁止同拍出片。
8. FastForward / AutoRun 且上一步已齐 → 只跑下一 enabled 阶段。
9. 否则按当前阶段目的推进;含糊聊天且等待提问仍有效 → 重发同一提问,不要空回复。规格已写入 Session → 禁止再推规格提问。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`AiAnimationActive` 为真时只按本文件。启动:`/ai-animation`、`ai-animation`、long animation、动画长片、跳步 / 自供 / 回退式长动画,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `ugc-ads` / `tvc-ads` / `ai-story` / `cinematic` / `3d-cgi` / `long-video` generic_agent 正文跑本链。
### `style`
前置:`IntentDone=true`。默认 `pending`。未决时 **enabled**,排在 `settings` 之前。细则见 `style-prompt.md`。
- **HARD — StyleTemplate**:整链只许 `animation`。禁止写进 Chat / 问句 / 选项。禁止从故事 brief 的「电影 / 真人」等词切库。
- **HARD — 风格卡**(`pending`):同轮必须 `choose_skill_asset(style_template: "animation", title: "Styles")`,正文可空。**禁止**先出规格提问。返回 ≠ 确认。
- 确认消息含 `Confirmed Styles info` 且能解析 `image:` → 绑 URL,`done`,同轮进 `settings`。
- 用户交出风格图 URL → 绑第一张 URL,`provided`,同轮进 `settings`。
- 明确 Skip / Continue / Next 且没图 → `skip`,同轮进 `settings`。
- FastForward / Jump(`settings` 或更后) 且未 Skip / Provide → `style = skip`,不发卡、不静默生成。
### `settings`
前置:`IntentDone=true`,且 `style` 已是 `done` / `provided` / `skip`。
一次 Host tools(能一次提多题就一次提完)。标题 `Set up your Video Settings`。assistant 正文最多一句:`Please configure your target video specs before we generate the script storyboard.`
**禁止**再放 `resolution`。禁止加第 4 项。禁止把 `"Custom"` 写进时长 `options`(手填走 Other)。
**固定三项、顺序 HARD**(每题 options 必须传齐):
| 顺序 | 标签 | `name` | 全部可选项(必须全部列出) | 默认(只内部写,禁止印给用户) |
|------|------|--------|---------------------------|------|
| 1 | Aspect Ratio | `aspectRatio` | `9:16` / `16:9` / `1:1` / `4:3` / `3:4` / `21:9` | `16:9` |
| 2 | Duration | `duration` | `15s` / `15-30s` / `30-1min` | `15s` |
| 3 | Model | `model` | `MiniMax-H3` / `Seedance 2.0 Fast` / `Seedance 2.0` | `MiniMax-H3` |
禁止借用 ugc-ads 的 `"<30s"` / `"0-30s"` / `"30-60s"` / `"5s"`。时长三档是预设;用户 Other / 自由输入仍可手填总时长(`8s` / `180s` / `300秒`)。手填优先于三档默认。禁止把 `>1min` 写进 `options`。`model` 顺序必须是 `MiniMax-H3` → `Seedance 2.0 Fast` → `Seedance 2.0`。不要把 `Seedance 2.5` 写进题。题上是显示名,禁止把 API id 写进 `options`。
**HARD — 分辨率不上题**:确认或 FastForward 按已映射的 `VIDEO_MODEL` 写入 `VIDEO_RESOLUTION`:`MiniMax-H3` → `768p`;其余模型 → `720p`。用户口头点名分辨率且该值在该模型 Video 行 `resolutions` 里才覆盖;不配则忽略口头值,仍用上表默认。
确认或 FastForward 写入后冻结:`VIDEO_RATIO` / `VIDEO_RESOLUTION` / `VIDEO_DURATION_RANGE` / `VIDEO_MODEL`。`VIDEO_DURATION_RANGE` 用题上 token(`15s` / `15-30s` / `30-1min`,或手填原文)。整数 `VIDEO_DURATION`:`15s`→15;`15-30s`→22;`30-1min`→45;手填取开头整数(`300` / `300s` / `300S` / `300秒` 都 = 300)。≥4 即合法。该整数覆盖 brief 里口头时长。角色设定仍 `16:9`,场景底板仍 `16:9`,与成片画幅无关。
**HARD — 显示名 → API id**:回包的 `model` 先当显示名。用 `<available_models>` Video 表 `name` 对齐后,把该行 `model` 列原文写入 `VIDEO_MODEL`。对不上时用这张表,禁止把显示名传给成片 / `instruction.model`:
| 回包(显示名或旧 id 都认) | `VIDEO_MODEL`(API id) |
|----------------------------|-------------------------|
| `MiniMax-H3` | `MiniMax-H3` |
| `Seedance 2.0` / `seedance-2.0` / `seedance-2-0` | `seedance-2.0` |
| `Seedance 2.0 Fast` / `dreamina-seedance-2-0-fast-260128` | `dreamina-seedance-2-0-fast-260128` |
| `Seedance 2.5` / `seedance-2.5` | `seedance-2.5` |
未选则 `VIDEO_MODEL=MiniMax-H3`。确认或 FastForward **当下**就必须完成这张映射,再进 `script`。`generate_video.model`、STEP1 `instruction.model`、STEP3 `instruction.model` 都用这个 API id。缺 `instruction.model` = 本步失败。
**HARD — 确认即离开,禁止循环重推**:回包能解析三项 → 按模型写入分辨率,立刻写入 Session,同轮进 `script`。
- `duration` 不在 `options`、大于 120、或大小写 `S`/`s`,只要能取出 ≥4 的整秒,都算已齐。禁止因此重推题。
- `model` 为上表任一显示名或旧 id 即合法。
- 本题 `duration` 是**成片总时长**,不是单段生成秒数。禁止用模型行 `duration(s)` 否决本题。
- 默认组合恒适配(H3+`768p`,其余+`720p`)。口头覆盖的分辨率不在该模型 Video 行 → 丢掉口头值,仍用默认,不要重推题。
用户已给齐三项 → 写入 Session 后可不再停。FastForward 且规格未齐 → 写入默认:`16:9` + `15s` + `MiniMax-H3` + `768p`。普通模式规格未齐 → 只推这三项提问,然后停。已确认过一次 → 禁止再推同一套题。
### `script`
见 `script-prompt.md`。有用户剧本 → 整理成完整 Markdown 后**全文贴进 Chat**(provided)。否则 `run_prompt` `long_video_step1_script`(必带 `projectId`)。
成功**只**展示渲染后的剧本 `content`(禁止 code fence)。同一次返回的 `character_prompts` / `background_prompts` 写入内存。普通模式**不要**同拍成图:贴剧本后立刻出剧本后提问,然后停。
### `assets`
默认 `run`。排在 `frames` 之前。细则见 `assets-prompt.md`。
- **HARD — 剧本后提问**(普通模式,`ScriptAssetsGateDone=false`):正文可空。同轮 Host tools:引导 `Modify the story script, or continue to character and background images?`。`options` 必须恰好这 2 条,顺序固定:
1. `Continue generating character and background images`
2. `Modify the story script`
- 点 1 / 同义继续 → `ScriptAssetsGateDone=true`,同轮按内存提示词 `generate_image` + `get_task`。
- 点 2 / 同义改剧本:下一句有改写说明 → 带 `modify_request` 重跑 STEP1;新剧本打印后 `ScriptAssetsGateDone` 仍为 false,再出同一组提问。只点修改、没有任何改写说明 → 停着问要改哪,禁止空跑一轮新剧本。
- 成图拍:正文 `Generating character and background images.` + `generate_image`。本批全部 `get_task` 终态后一次状态句,再停在资产后提问。
- **HARD — 资产后提问**(普通模式,成图或替换刚齐):Host tools:引导 `Continue to preview images, regenerate the character and background images, or upload replacements?`。`options` 必须恰好这 3 条,顺序固定:
1. `preview images`
2. `Regenerate character and background images`
3. `Upload to replace character and background images`
点 1 / `Continue to preview images` → 进 `frames`。点 2 → 同轮按内存提示词 + 变化句重出全部资产图(不要挂旧资产图当参考),终态后再出同一组提问。点 3 → **先**用 Host tools 列出已有 `[Character]` / `[Prop]` / `[Background]` title,点哪张换哪张;再请用户发**一张**图 URL。新图接进**同一槽**,下游用法与生成图相同。禁止追加、禁止改挂风格图。FastForward / AutoRun → 跳过这组提问。
### `frames`
见 `frames-prompt.md`。该跑:从 `script_markdown` 各章第一条镜头行出预览图(可 Skip)。张数 = 章节数。本拍只出图 + `get_task`,终态后再调一次 STEP3。provided 预览图只绑定展示,**仍禁止**传入 STEP3 / 成片。预览图失败不得挡住各 `Video Prompt {i}` 打印。禁止资产成图成功拍直接进本阶段。
### `video_prompts`
见 `video-prompts.md`。预览图终态后的下一拍调用,**每个 run 只调一次**。禁止和预览图同一 `tool_calls`。已经打印任一 `Video Prompt {i}` → 禁止再调。调用方输入是 `instruction` **object**:`script_markdown` + `duration_sec` / `ratio` / `model`(Modify 另加 `modify_request`)。角色 / 场景用 `image_urls`(有才加)。禁止传 `frames[]`。禁止挂预览图。禁止 `instruction` 写成散文 string。上一拍若因 `instruction must be a JSON object` 失败 → **按 object 模板重发一次**。
成功:`result.items` 一段一项,`name`=`title`=`Video Prompt {i}`,`content` = 该段词。同一 continuation **立刻全文打印**每一段。没打印齐 = 本步失败,禁止出片。成片时 `generate_video.prompt` = 该段已打印 `content`(按 §占位符补 `<<<image_n>>>`),不要只挂 URL 不写词。
### `clips` / `merge`
见 `clips-merge.md`。每组一段新片子(`VIDEO_MODEL`),title = `Long Video {i}`。**同一拍最多 4 段** `generate_video`,其余等这批 `get_task` 终态再发。回包 `Concurrent execution detected` / `9002` / `5003` → 只重试失败段。禁止一次打满十几段。禁止把 BGM 写进 `Video Prompt {i}`,禁止对单段配乐。
普通模式:全部分段成功后推 **BGM 闸门**并停住。选项固定 `["Merge with BGM", "Merge without BGM"]`,引导 = `Sure, would you like to add BGM?` 用户选定后再调一次 `merge_videos`(with → `is_generate_bgm=true` / without → `false`),挂各段成片 URL。
FastForward / AutoRun 到 merge 且未点名 BGM → 无 BGM 合成。N=1 仍可走 BGM 闸门(单段配乐)。Skip(`merge`) → 以分段成片为结束态。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / is on the canvas / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
子句例外:剧本 / Video Prompt 必须先贴全文,状态句可附在全文后。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。用户可见 English **禁止** `on the canvas`。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有那一句;3 条方向只进 `options`。
风格卡 / 规格提问用各自引导,不要再套 Review 句。风格卡有控件时不要再发 Host tools。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward / AutoRun 不发中间等待提问。BGM 闸门固定 `Merge with BGM` / `Merge without BGM`。剧本后提问固定两条,资产后提问固定三条,不要改成 Review then generate。结束态(合成后或跳过闸门的单段)可留 `Go to edit`,不要再写引导。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options` |
| 风格卡 | (可省略) | `choose_skill_asset`;无控件才 Host tools:`Pick a style reference image for this video.` |
| 点选刚绑定、下一拍是规格 | `Your style reference is ready.` | `Review the style reference, then set up your video.` |
| 规格提问 | (不重复预览) | `Please configure your target video specs before we generate the script storyboard.` |
| 成片:分辨率不适配该模型 | (可省略) | `This resolution is not compatible with the selected model. Change the resolution or the model.` |
| 剧本刚齐、等用户拍板 | 先全文贴剧本;可附 `Your story script is ready.` | `Modify the story script, or continue to character and background images?` 恰好两条 |
| 用户选继续、出资产图 | `Generating character and background images.` | (禁止再推剧本后提问) |
| 资产刚齐、`frames` 仍 enabled | `Your character and background images are ready.` | `Continue to preview images, regenerate the character and background images, or upload replacements?` 恰好三条 |
| 进入 `frames` 出预览图 | `Generating preview images.` | (禁止提问;本拍只出图) |
| 只补失败章 | `Retrying the remaining preview images.` | 禁止再调 STEP3 |
| 只合写 | `Generating video prompts.` | 禁止同拍出片 |
| 视频提示词已打印 | 先按段全文打印;可附 `Your video prompts are ready.` | `Review the video prompts, then generate the clips.` |
| 预览图(合写已齐或 Skip 提示词) | `Your preview images are ready.` | `Review the preview images, then generate the clips.` **前提**:已打印全部 `Video Prompt {i}` |
| 待合成 | `Your clips are ready.` | `Sure, would you like to add BGM?` |
| 单段 / 合成结束 | `Your long video is ready.` / `Your full long video is ready.` | (禁止提问引导;可留 `Go to edit`) |
产物 `title`(无产物不编造):`[Style] {短名}` / 剧本用 STEP1 `name` / `[Character] {短名}` / `[Prop] {短名}` / `[Background] {短名}` / `[Preview Image] {i}` / `Video Prompt {i}` / `Long Video {i}`。加 BGM 合成才另有 `Final Video without BGM - v1` / `Final Video BGM - v1` / `Final Video with BGM - v1`。禁止再写 `[First Frame]`。禁止再写总稿 `Video Prompts`。禁止给分段再落 BGM。
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `style`。风格卡只发一次 `choose_skill_asset`,返回后停住等确认。普通模式剧本成功拍先出提问;用户选继续后再并发角色设定 + 场景底板成图;本批全部 `get_task` 终态后一次状态句 + 资产后三选项。进入 `frames`:预览图彼此可并发,本拍只出图,禁止夹 STEP3;齐后下一拍再合写。成片同一拍最多 4 段。`run_prompt` 不与 `generate_image / generate_video` 同拍并行。FastForward / AutoRun / Skip 后的下一阶段在 continuation 立刻开始。禁止资产成图成功拍直接进 `frames`。
Referenced files: 8 — file references are metadata, not package contents.
---
name: ai-story
description: "Always use this skill to make a flexible long-form live-action cinematic micro-film / multi-chapter storyboard-to-video. Must trigger for /ai-story, ai-story, long video, micro-film, storyboard-to-finished-film, script-to-clip, live-action long video, or when an ai-story run is already in progress (intent answers, style, specs, script, character sheets, preview images, video prompts, clips, BGM merge) or the user skips a step, supplies an asset, jumps ahead, or revises an earlier step without restarting. Even a vague \"make a long video\" or \"help me make a micro-film\" must start this skill. After the first instruction, ask 2 professional direction questions grounded in that brief before the formal pipeline. Preset durations 15s / 15-30s / 30-1min (default 15s) or a typed total such as 180s / 300s."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- run_prompt
- generate_image
- generate_video
- get_task
- merge_videos
- choose_skill_asset
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# AI Story Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/ai-story/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
本文件是编排器,不是 `run_prompt` 的填空稿,不要改写成 `user_lang`,不要压成短 brief。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。workflow tool(`run_prompt` / `merge_videos`)传 `projectId`;`generate_image` / `generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。`choose_skill_asset` **不需要** `projectId` / `project_id`。Host tools 开场问询 / 规格提问那一拍、以及风格卡那一拍,仍禁止同拍调 `create_project`。风格卡只调 `choose_skill_asset`。问询完成且即将调**需要项目 id** 的 Buzzy tool 时若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此:还没有 id 就先创建,再调带项目字段的 tool。
**HARD — 宿主提问**:等人选择或确认时,必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`,且**该题全部可选项必须传齐**(禁止只塞一档)。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框;**规格题的编号列表必须每行列出该字段全部档位**。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用、编号单值、或缺档都算没发出提问。
**例外 — 风格库**:`choose_skill_asset` 打开风格单选控件。必传 `style_template: "ai_film"` + `title: "Styles"`。返回值(`items`)只表示控件已打开,**不是**确认。有控件 → **停住**等 `Confirmed Styles info`;禁止同拍 Host tools。无控件宿主才把 `items[].name` 塞进 Host tools。确认前禁止进 `settings`。
**例外 — run_prompt `content`**:剧本 Markdown 与各段 Video Prompt **必须原文贴进对话**(禁止 code fence),不受「正文最多一句」限制。禁止说 on the canvas。贴完后仍发对应 Host tools 等待提问(FastForward / AutoRun 除外)。
| 何时读 | 文件 |
|--------|------|
| 开场组题(默认 2 题) | `intent-questions.md` |
| 风格卡 / choose_skill_asset | `style-prompt.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_image` / `generate_video` 参数 | 本文件 §运行时填参 |
| 跑到该步且未跳过时 | `script-prompt.md` / `assets-prompt.md` / `frames-prompt.md` / `video-prompts.md` / `clips-merge.md` |
已注册文案模板(只许用这些 key,禁止发明,禁止借用 ugc-ads / tvc-ads):
`long_video_step1_script` / `long_video_step3_video_prompts`。
`long_video_step2_frames` 主路径不用。禁止用 STEP2 写成片词,禁止为出预览图去补 STEP2。
`long_video_step3_video_prompts` 对外仍是一次调用。Agent **必须**传 `instruction.script_markdown` + 规格(`duration_sec` / `ratio` / `model`)。**禁止**传 `frames[]`。Host 内部跑 STEP2,细镜全文零删减进 `records[]`,与这份剧本并行喂给 Gemini。写词规则是**细镜主参考、剧本辅参考**:画面先写细镜;剧本补缺口;同一事实两边否定才选边(台词→剧本,站位/运镜→细镜)。条数对不齐不失败。Gemini **只**写 `groups[]`。Host 校验该章剧本镜头行引号对白后按组拆 `items[]`。禁止挂预览图。Agent **必须**把每段 `content` 全文打印进 Chat(一段一块 `### Video Prompt {i}`)。还没打印齐 1…N = 本步未完成,禁止出片。
预览图是展示件,只从剧本文各章第一条镜头行出图,**不**用 `frames[].prompt`。可 Skip。进入 `frames` 时先只发预览图 `generate_image`×N(与资产图同一套:本拍禁止夹 STEP3),全部 `get_task` 终态后一次状态句,**下一拍**再调一次 STEP3。禁止 `defer_step2_thinking`。本批预览图未全部终态 → 禁止状态句、禁止芯片式提问、禁止 STEP3。
禁止短路径、读其它 skill、把 YAML 当自由 prompt。禁止把 `*_SPEC` / YAML 正文贴进 `instruction`。
用户可见文案 **固定 English**。禁止出现 `on the canvas`。`SessionScriptLanguage` / `user_lang` 只约束剧本可读正文、对白、分镜描述。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准),适用于 `generate_image` / `generate_video` / `run_prompt` / `merge_videos`。**禁止传 `nodeIds`**。STEP1 必须把用户上传的参考图 / 视频放进 `image_urls` / `video_urls`(有才加);**禁止**把风格图 URL 放进这两个字段。已绑定风格图时,`assets` 的 `generate_image` 可用 `image_urls` 只传这一张风格图。预览图不是成片参考。
角色 / 道具 / 场景 / 风格板 / 预览图的 `generate_image.model` = `<available_models>` Image 表 **Nano Banana 2** 行的 `model` 列原文(`name` 只用来找行;禁止把 `Nano Banana 2` 别名、视频行、其它图片行写入)。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_image` / `generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**(`url` / `image_url` / `video_url` 以返回为准),本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。并发提交的多个 `task_id` 必须全部轮询到终态后才能 Advance。Apps widget 只展示进度,**不能**代替 `get_task`。禁止因为「控件会自己轮询」而跳过。后续 `generate_image` / `generate_video` / `run_prompt` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
**HARD — 本链无画布操作**:禁止 `PushStyleList` / `PushConfiguration` / `PushDirectionTool` / `PushSuggestions` / `PushMediaUpload` / `PushGeneratedNodes` / `create_canvas_node`。风格库走 MCP `choose_skill_asset`,不是画布卡。除风格卡外,等待面一律 Host tools。文本产物(剧本、Video Prompt)由 agent 打印,不落文本节点。成片词不靠宿主读画布节点:`generate_video.prompt` = 已打印的该段 `content`。
`StyleTemplate` 整链冻结为 **`ai_film`**。禁止写进 Chat、开场题、规格题。禁止问 Film vs Anime。禁止 `animation`。`choose_skill_asset.style_template` 必须传 `"ai_film"`。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `choose_skill_asset` | `{ "style_template": "ai_film", "title": "Styles" }`。**不传** `projectId`。返回不是选择 |
| `run_prompt` / `merge_videos` | 必传 `projectId` = 该 id |
| `generate_image` / `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id、且下一拍要调上表**需要项目 id** 的 tool 时,先 `create_project`。`choose_skill_asset` 不要等 id。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_image`(风格板 / 角色 / 道具 / 场景 / 预览图) | Image 表 **Nano Banana 2** 行的 `model` 列原文 |
| `generate_video`(成片) | `VIDEO_MODEL`(API id,见 §`settings` 映射表) |
`name` 只用来找行。禁止把别名、错表、其它行、卡上显示名写进 `model`。
### 画幅 / 分辨率(成片)
成片读 `<available_models>` 该 `VIDEO_MODEL` 的 Video 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `VIDEO_RATIO` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `VIDEO_RESOLUTION` 若在该行 `resolutions` 里 → 原样用。H3 默认 `768p`(合法档 `768p` / `2k`);其余默认 `720p`(2.0 / 2.0 Fast / 2.5 常见 `480p` / `720p`,以该行原文为准)。`resolutions` 为 `-` / 空 → **整项省略**。不在该行 → **禁止** `generate_video`,引导 `This resolution is not compatible with the selected model. Change the resolution or the model.` 禁止默默改档 |
| `duration` | **本段** `duration_sec`(STEP3 该项),不是规格总时长 |
规格写入 Session 后,后续预览图 / 成片**静默继承**仍合法的 `VIDEO_RATIO` / `VIDEO_RESOLUTION`;用户本句写了新值且该值在该行才改。角色 / 道具 / 场景 / 风格板的 `aspectRatio` 仍固定 `16:9`,不受成片画幅影响。生图 `resolution` 见下方 §生图分辨率,禁止写死 `1k`。
### 生图分辨率(HARD)
`<available_models>` Image 行的 `resolutions` 是目录展示,大小写经常是 `1k` / `2k` / `4k`。`generate_image.resolution` **必须**用该 tool 自己声明里可接受的 token 原文(Nano Banana 2 当前是 `1K` / `2K` / `4K` 这一类)。语义相等时(`1k`=`1K`,`2k`=`2K`,`4k`=`4K`)选 **tool 声明那一条**,禁止把目录小写 `1k` 原样传入。目录行没有、或 `resolutions` 为 `-` / 空 → 整项省略,不要发明。
档位怎么选(先定档,再取 tool 声明原文):
| 生图 | 档 |
|------|----|
| 风格板 / 角色 / 道具 / 场景 | **1K 档** |
| 预览图 | `VIDEO_RESOLUTION` 为 `480p` / `720p` / `768p` → **1K 档**;`2k` / `1080p` → **2K 档**;`4K` / `4k` → **4K 档** |
禁止把 Video 行的 `768p` / `720p` 写进 `generate_image.resolution`。预览图画幅仍是 `VIDEO_RATIO`。
规格题**必须**走 Host tools,**每题全部可选项都要进 `options`**(画幅六档;时长三档;模型三档)。禁止 Chat 只打印一档。禁止在正文里写 default / 预选。手填总时长走 Other / 自由输入,不进 `values[]`。
### 媒体绑定
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_image` / `generate_video` / `run_prompt` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video`。
### 占位符
`generate_image` / `generate_video` 的 prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。历史里若烂成 `<<>>`,按当前绑定重写成完整占位后再调用。禁止空占位。
STEP3 返回的成片词若本身没有占位,成片时在词前加一行按序点名已挂图的 `<<<image_n>>>`(角色 / 道具 / 场景),再接原文 `content`,末尾 `no background music`。
### 串行
`run_prompt` **禁止**与 `generate_image` / `generate_video` 同拍并行。角色+场景成图、预览图 ×N、同一批最多 4 段成片仍按本文件 §并行。预览图与 STEP3 禁止同一 `tool_calls`。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问,或已打开且未确认的 `choose_skill_asset`:`nice` / 无可执行新指令 → 重发同一提问 / 同一风格卡,不要 Advance。
剧本后 / 资产后 / BGM 闸门上的 `continue` / `preview images` / `Merge with BGM` = 已选,必须 Advance。`Confirmed Styles info` = 风格已选,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过任意中间产物、自带剧本 / 角色图 / 场景图 / 视频提示词、从任意点直奔更后的目标、中途改主意、或对任意前序不满意。本 skill 用**阶段图 + 五个算子**处理这些情况;下面的「不要角色资产 / 自带剧本 / 剧本后出视频」只是算子的实例,**不是**封闭清单。遇到未写出的说法,先归到某个算子,再往下走,不要因为「没写过这个例子」而卡住。
每条新用户请求开一条新 run:清空上轮状态、确认、风格、资产、提示词、成片。算子改的是**本 run 的 Stage 计划**,不是另开一条刚性流水线。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → style → settings → script → assets → frames → video_prompts → clips → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | **必跑**(默认 2 题) | 无 | 开场问询;不是规格题 |
| `style` | **pending**(可跳过) | 一张风格参考图 | `choose_skill_asset(style_template: "ai_film")`:点选库图。不是角色图、不是场景底板 |
| `settings` | 规格未齐则跑 | 规格提问 | 画幅 / 时长 / model;分辨率按模型写入,不上题 |
| `script` | 必有(生成或自供) | **只** Markdown 剧本(Chat 全文) | `long_video_step1_script`。同一次带回的 `character_prompts` / `background_prompts` **只进内存**,本步不上图 |
| `assets` | run | 角色设定图 + 场景底板 | 普通模式先出剧本后提问,用户选继续才成图 |
| `frames` | run | 各段预览图 | 展示件;记录内部,图可选 |
| `video_prompts` | 必有(生成或自供) | 一段一段打印 `Video Prompt {i}` | `long_video_step3_video_prompts`。拼成一份总稿只打一次 = 非法 |
| `clips` | 必跑才能成片 | 分段成片 | |
| `merge` | 有分段成片则跑 | 成片(可选 BGM) | 普通模式先停 BGM 闸门;N=1 仍可走闸门 |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
**硬底线**(不能整链跳过):必须有故事身份(用户 brief / 自供剧本之一);要出视频必须有 script(生成或自供)、`video_prompts`(生成或自供,且已打印齐)、以及至少一块视觉参考(角色图、场景图或用户参考图之一)。`style` **不是**成片硬底线;跳过则后面不传风格图。其它阶段都可以 skip 或 provided。
`style` 开场默认 **`pending`**。未决时 **enabled**,排在 `settings` 之前。普通模式必须先让用户在风格库点选(或 Skip / Provide),才能进 `settings`。
`assets` 开场默认 **`run`**。普通模式剧本打印后必须先出剧本后提问,禁止同轮直接成图。FastForward / AutoRun 才跳过这组提问。
`frames` 阶段:被 Skip 的只是**预览图成图**。预览图不依赖内部 `frames[]`。内部细镜由 Host 在合写里跑 STEP2。合写 instruction 必须带剧本文 + 规格,禁止传 `frames[]`。禁止挂预览图给 STEP3。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要风格参考」「不要角色图」「别生成预览图」「跳过合成直接看分段」「不要场景底板」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步提问。
- 下游按 `slot-adaptation.md` **缺了就省略或回退到次近素材**,禁止为凑槽复制同一 URL。
- 若当前正停在 S 的等待提问,马上离开。
- `script` / `video_prompts` / `clips` **不能**整段 Skip 后还声称能出视频;缺硬底线就问清楚。
### 2. Provide(S, asset)
用户交出该阶段产物(上传 URL、粘贴剧本文、完整视频提示词……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成。
- 角色图 / 场景图 / 参考视频 **禁止**当成剧本正文;剧本文 **禁止**当成角色主图。风格参考图 **禁止**当成角色设定或场景底板。
- 任意轮次都可 Provide;中途补交则改状态并继续。
### 3. Jump(T)
用户要尽快到达更后的阶段(「剧本之后直接出视频」「一直做到成片」「先出分镜就行」「不要中间结果」……)。
- `FastForwardTo = T`(默认若只说「直接做完 / 出视频」则 `T = clips`,N≥2 时含 `merge`)。
- 从当前点起,对每个 enabled 阶段:**执行但不推中间等待提问**;文本产物仍须打印。
- 到达 T 的产物后,按 T 的完成态展示。T 之前被 Skip 的阶段仍然不做。
- Jump **不是**跳过硬底线:仍须跑完 enabled 的 `script` 与 `video_prompts` 才能进 `clips`。
- Jump(`settings` 或更后) 才可跳过 `style` 提问:已有风格图就绑定,没有则 `style = skip`,**禁止**静默生成风格板。
- Jump(`script`) 普通模式仍出剧本后提问。FastForward / AutoRun / Jump(`assets` 或更后) 才同轮成图。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名风格 / 剧本 / 角色 / 场景 / 预览图 / 提示词 / 规格 / 成片……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧 URL 可留,状态禁止再引用)。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- `AutoRunDownstream = true`:重做 S 后,按**当前** Stage 计划自动顺跑后续 enabled 阶段,直到 `clips`(N≥2 到 `merge`)。中途不推「下一步」除非缺必填输入。
### 5. Reroute(S, mode)
同一阶段换做法(生成角色图 → 改用上传;选风格 → 重发卡;等用户传剧本 → 改为生成;规格改走默认值……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询:`IntentAskedCount < 2` 且下一题尚未对 Host tools 真发出 → 同轮真调用一次。标题 = 短题名;问句 = **恰好一句**点名 brief;`options` = **恰好 3 条**且第一条为推荐默认。无真调用、把 3 条写成 Chat 编号列表、或问句为空 = 本步失败。未满 2 题时**禁止**进 `style` / `settings`,禁止同拍 `create_project` / `choose_skill_asset` / `run_prompt` / `generate_image / generate_video`
2. 开场题已发出、用户尚未作答 → **停住**。Host tools 返回若没有选中的 option / Other 文本,只表示选择框已发出,不是已答
3. 停在已打开的 `choose_skill_asset` 上,等 §风格确认信号(见 `style-prompt.md`)。此期间禁止 `settings`,有控件时禁止 Host tools 再问风格
4. 停在**已经发出且仍有效**的其它宿主提问上(规格 / 剧本后 / 资产后 / BGM / 无控件风格 fallback),等用户选择
5. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–4 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出必打的剧本文 / Video Prompt、也未打开风格控件——**但**开场问询 / 其它 Host tools 题已经发出、或 `choose_skill_asset` 已打开且用户尚未确认时,**停住且不再调任何 tool 是正确终点**。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外**:① Host tools 已发出、用户尚未作答;② `choose_skill_asset` 返回只表示控件已打开,不要 Advance 到 `settings`。`generate_image / generate_video` 返回 `task_id` 必须先 `get_task` 到终态再 Advance。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式且该阶段有用户可见产物、且不在 FastForward / AutoRun 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward / AutoRun 中 → 不发中间等待提问,继续直到目标
过渡态(规格刚写入 / 仅内部 `frames[]` 齐 / 资产决策已拍板但图未发)**禁止停驻**。
`IntentDone=true` 且 `style` 仍 `pending`、风格卡未出 → **必须停**。同轮只调 `choose_skill_asset(style_template: "ai_film", title: "Styles")`。**禁止**同轮出规格提问。
`choose_skill_asset` 刚返回 **必须停驻**,不是过渡态。无控件宿主才同拍把 `items[].name` 塞进 Host tools。
`script` 刚打印、普通模式、`ScriptAssetsGateDone=false` → **必须停**。同轮只贴剧本文 + 推剧本后提问。禁止 `generate_image`。
`ScriptAssetsGateDone=true` 且 `assets` 仍是 `run`、图未发 → 立刻成图。正文 `Generating character and background images.` 禁止再推这组提问。本批全部 `get_task` 终态后一次状态句 + 资产后三选项。
`assets` 成图刚齐、用户还没点资产后提问(普通模式)→ **必须停**。**禁止**读 `frames-prompt.md` / `video-prompts.md`,**禁止**预览图 `generate_image`,**禁止** `long_video_step3_video_prompts`。
进入 `frames`(仅用户点了 `preview images` / `Continue to preview images`,或 FastForward)→ **先出图,再合写**:成图未发则本拍只发预览图 `generate_image`×N + 各 `get_task`。正文 `Generating preview images.` **禁止**夹 STEP3。本批未齐 → 禁止 STEP3。齐了一次状态句,下一拍只调一次 STEP3(正文 `Generating video prompts.`)。Skip 成图或图已齐、还没有打印齐 `Video Prompt {i}` → 本拍只调 STEP3。已打印任一 `Video Prompt {i}` → **禁止**再调 STEP3。失败章等这批 `get_task` 后再补,禁止为补图重开合写。还没打印这些词 → 禁止成片。
`video_prompts` 已齐 → **先**把全部 `Video Prompt {i}` 正文打印进 Chat。FastForward 到 `clips` 也一样:本拍只打印,**下一拍**再成片。禁止同拍出片,禁止只把词留在内存不打印。
---
## 开场意图(`intent`)
**目的**:用户给出指令后、进入 `style` / `settings` 之前,必须先基于这条指令挖掘并问出专业问题。细则见 `intent-questions.md`。
- **HARD**:正式流水线前默认只问 **2 题**。每题一次 Host tools。禁止为凑问卷问第 3 题。
- **引导 HARD**:标题 = 从 brief 压的短名;问句 = **恰好一句**(点名 brief);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**把问句写成 Chat 编号列表。**禁止**用规格提问问这些问题。
- 题必须**改写自当前用户指令**。已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;但仍须另挖至少 2 道能提升专业度的题。
- **禁止**因「看起来没有缺口 / 指令已够用 / 用户说直接开始」而 0 题进 `style` / `settings`。
- 仅当 `IntentAskedCount ≥ 2` 之后,用户再说开始 / 默认 / 跳过剩余 → `IntentDone=true`。问询中的上传先 Provide 再继续问。问询中明确交风格图 → 只绑 `style`,不要当成角色 / 场景。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. 某次能力调用已发出、**尚无结果** → 等这批结果,不要再叠下一批。`generate_image` / `generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。进入 `frames` 时预览图 `generate_image`×N 是一批;STEP3 是终态后的下一批。禁止两批混在同一 `tool_calls`。
2. `IntentDone=false` → 只问下一题或收回答。问下一题必须真调用 Host tools,且问句含 brief 词。首轮带了剧本 / 参考图也先问询,记下入口。题已发出未答 → 停住。
3. 本轮能识别算子 → 执行算子。若 `IntentAskedCount < 2`:**只记账**,**禁止**进 `style` / `settings`;本轮仍问下一题。
4. `IntentDone=true` 且 `style` 仍 `pending`、风格卡未出 → **只出** `choose_skill_asset(style_template: "ai_film", title: "Styles")`。禁止同轮出规格提问。上一拍已是 `choose_skill_asset` → 按 `style-prompt.md` 解析回程,不要把工具回包当成选择。
5. 规格未齐且未写入 Session → 只出规格提问(或 FastForward 时写入默认)。回包已能解析 `aspectRatio` + `duration` + `model` → 按模型写入分辨率(H3=`768p`,其余=`720p`)后**立刻写入 Session,同轮进 `script`,禁止再推规格提问**。规格已齐但题未出、用户也未给齐 → 只出规格提问。`style` 未 resolved 时禁止进本条。
6. 剧本已打印(或 provided 已绑定),普通模式且 `ScriptAssetsGateDone=false` → **只出剧本后提问**,然后停。禁止成图。用户点继续生成 → `ScriptAssetsGateDone=true`,同轮按 `assets-prompt.md` 成图。点修改剧本 → 下一句有改写说明则带 `modify_request` 重跑 STEP1,打印后再出同一组提问;只点修改没写要改什么 → 停着问要改哪,禁止空改一轮。FastForward / AutoRun → 跳过这组提问,直接成图。
6b. `ScriptAssetsGateDone=true` 且 `assets` 仍 `run`、图未发 → **同轮成图**。正文 `Generating character and background images.` 禁止再推这组提问。
7. 当前该跑 `frames`(仅用户点了 `preview images` / `Continue to preview images`,或 FastForward)→ 按 `frames-prompt.md` **先出图再合写**:图未发则正文 `Generating preview images.`,只发 `generate_image`×N + `get_task`。已打印 `Video Prompt {i}` → 禁止再调 STEP3。失败章只补失败章(`Retrying the remaining preview images.`),禁止再夹带 STEP3。本批未齐禁止 STEP3;齐了一次状态句,下一拍只调 STEP3(正文 `Generating video prompts.`)。合写回包必须一段一项 `name`=`title`=`Video Prompt {i}` + `content`=该段词;同一 continuation **立刻全文打印**;没有打印齐 → **禁止** `generate_video`。禁止同拍出片。
8. FastForward / AutoRun 且上一步已齐 → 只跑下一 enabled 阶段。
9. 否则按当前阶段目的推进;含糊聊天且等待提问仍有效 → 重发同一提问,不要空回复。规格已写入 Session → 禁止再推规格提问。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`AiStoryActive` 为真时只按本文件。启动:`/ai-story`、`ai-story`、长视频、微电影、cinematic short、跳步 / 自供 / 回退式长视频,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `ugc-ads` / `tvc-ads` / `ai-animation` / `cinematic` / `3d-cgi` / `long-video` generic_agent 正文跑本链。
### `style`
前置:`IntentDone=true`。默认 `pending`。未决时 **enabled**,排在 `settings` 之前。细则见 `style-prompt.md`。
- **HARD — StyleTemplate**:整链只许 `ai_film`。禁止写进 Chat / 问句 / 选项。禁止从故事 brief 的「动漫 / 二次元」等词切库。
- **HARD — 风格卡**(`pending`):同轮必须 `choose_skill_asset(style_template: "ai_film", title: "Styles")`,正文可空。**禁止**先出规格提问。返回 ≠ 确认。
- 确认消息含 `Confirmed Styles info` 且能解析 `image:` → 绑 URL,`done`,同轮进 `settings`。
- 用户交出风格图 URL → 绑第一张 URL,`provided`,同轮进 `settings`。
- 明确 Skip / Continue / Next 且没图 → `skip`,同轮进 `settings`。
- FastForward / Jump(`settings` 或更后) 且未 Skip / Provide → `style = skip`,不发卡、不静默生成。
### `settings`
前置:`IntentDone=true`,且 `style` 已是 `done` / `provided` / `skip`。
一次 Host tools(能一次提多题就一次提完)。标题 `Set up your Video Settings`。assistant 正文最多一句:`Please configure your target video specs before we generate the script storyboard.`
**禁止**再放 `resolution`。禁止加第 4 项。禁止把 `"Custom"` 写进时长 `options`(手填走 Other)。
**固定三项、顺序 HARD**(每题 options 必须传齐):
| 顺序 | 标签 | `name` | 全部可选项(必须全部列出) | 默认(只内部写,禁止印给用户) |
|------|------|--------|---------------------------|------|
| 1 | Aspect Ratio | `aspectRatio` | `9:16` / `16:9` / `1:1` / `4:3` / `3:4` / `21:9` | `16:9` |
| 2 | Duration | `duration` | `15s` / `15-30s` / `30-1min` | `15s` |
| 3 | Model | `model` | `MiniMax-H3` / `Seedance 2.0 Fast` / `Seedance 2.0` | `MiniMax-H3` |
禁止借用 ugc-ads 的 `"<30s"` / `"0-30s"` / `"30-60s"` / `"5s"`。时长三档是预设;用户 Other / 自由输入仍可手填总时长(`8s` / `180s` / `300秒`)。手填优先于三档默认。禁止把 `>1min` 写进 `options`。`model` 顺序必须是 `MiniMax-H3` → `Seedance 2.0 Fast` → `Seedance 2.0`。不要把 `Seedance 2.5` 写进题。题上是显示名,禁止把 API id 写进 `options`。
**HARD — 分辨率不上题**:确认或 FastForward 按已映射的 `VIDEO_MODEL` 写入 `VIDEO_RESOLUTION`:`MiniMax-H3` → `768p`;其余模型 → `720p`。用户口头点名分辨率且该值在该模型 Video 行 `resolutions` 里才覆盖;不配则忽略口头值,仍用上表默认。
确认或 FastForward 写入后冻结:`VIDEO_RATIO` / `VIDEO_RESOLUTION` / `VIDEO_DURATION_RANGE` / `VIDEO_MODEL`。`VIDEO_DURATION_RANGE` 用题上 token(`15s` / `15-30s` / `30-1min`,或手填原文)。整数 `VIDEO_DURATION`:`15s`→15;`15-30s`→22;`30-1min`→45;手填取开头整数(`300` / `300s` / `300S` / `300秒` 都 = 300)。≥4 即合法。该整数覆盖 brief 里口头时长。角色设定仍 `16:9`,场景底板仍 `16:9`,与成片画幅无关。
**HARD — 显示名 → API id**:回包的 `model` 先当显示名。用 `<available_models>` Video 表 `name` 对齐后,把该行 `model` 列原文写入 `VIDEO_MODEL`。对不上时用这张表,禁止把显示名传给成片 / `instruction.model`:
| 回包(显示名或旧 id 都认) | `VIDEO_MODEL`(API id) |
|----------------------------|-------------------------|
| `MiniMax-H3` | `MiniMax-H3` |
| `Seedance 2.0` / `seedance-2.0` / `seedance-2-0` | `seedance-2.0` |
| `Seedance 2.0 Fast` / `dreamina-seedance-2-0-fast-260128` | `dreamina-seedance-2-0-fast-260128` |
| `Seedance 2.5` / `seedance-2.5` | `seedance-2.5` |
未选则 `VIDEO_MODEL=MiniMax-H3`。确认或 FastForward **当下**就必须完成这张映射,再进 `script`。`generate_video.model`、STEP1 `instruction.model`、STEP3 `instruction.model` 都用这个 API id。缺 `instruction.model` = 本步失败。
**HARD — 确认即离开,禁止循环重推**:回包能解析三项 → 按模型写入分辨率,立刻写入 Session,同轮进 `script`。
- `duration` 不在 `options`、大于 120、或大小写 `S`/`s`,只要能取出 ≥4 的整秒,都算已齐。禁止因此重推题。
- `model` 为上表任一显示名或旧 id 即合法。
- 本题 `duration` 是**成片总时长**,不是单段生成秒数。禁止用模型行 `duration(s)` 否决本题。
- 默认组合恒适配(H3+`768p`,其余+`720p`)。口头覆盖的分辨率不在该模型 Video 行 → 丢掉口头值,仍用默认,不要重推题。
用户已给齐三项 → 写入 Session 后可不再停。FastForward 且规格未齐 → 写入默认:`16:9` + `15s` + `MiniMax-H3` + `768p`。普通模式规格未齐 → 只推这三项提问,然后停。已确认过一次 → 禁止再推同一套题。
### `script`
见 `script-prompt.md`。有用户剧本 → 整理成完整 Markdown 后**全文贴进 Chat**(provided)。否则 `run_prompt` `long_video_step1_script`(必带 `projectId`)。
成功**只**展示渲染后的剧本 `content`(禁止 code fence)。同一次返回的 `character_prompts` / `background_prompts` 写入内存。普通模式**不要**同拍成图:贴剧本后立刻出剧本后提问,然后停。
### `assets`
默认 `run`。排在 `frames` 之前。细则见 `assets-prompt.md`。
- **HARD — 剧本后提问**(普通模式,`ScriptAssetsGateDone=false`):正文可空。同轮 Host tools:引导 `Modify the story script, or continue to character and background images?`。`options` 必须恰好这 2 条,顺序固定:
1. `Continue generating character and background images`
2. `Modify the story script`
- 点 1 / 同义继续 → `ScriptAssetsGateDone=true`,同轮按内存提示词 `generate_image` + `get_task`。
- 点 2 / 同义改剧本:下一句有改写说明 → 带 `modify_request` 重跑 STEP1;新剧本打印后 `ScriptAssetsGateDone` 仍为 false,再出同一组提问。只点修改、没有任何改写说明 → 停着问要改哪,禁止空跑一轮新剧本。
- 成图拍:正文 `Generating character and background images.` + `generate_image`。本批全部 `get_task` 终态后一次状态句,再停在资产后提问。
- **HARD — 资产后提问**(普通模式,成图或替换刚齐):Host tools:引导 `Continue to preview images, regenerate the character and background images, or upload replacements?`。`options` 必须恰好这 3 条,顺序固定:
1. `preview images`
2. `Regenerate character and background images`
3. `Upload to replace character and background images`
点 1 / `Continue to preview images` → 进 `frames`。点 2 → 同轮按内存提示词 + 变化句重出全部资产图(不要挂旧资产图当参考),终态后再出同一组提问。点 3 → **先**用 Host tools 列出已有 `[Character]` / `[Prop]` / `[Background]` title,点哪张换哪张;再请用户发**一张**图 URL。新图接进**同一槽**,下游用法与生成图相同。禁止追加、禁止改挂风格图。FastForward / AutoRun → 跳过这组提问。
### `frames`
见 `frames-prompt.md`。该跑:从 `script_markdown` 各章第一条镜头行出预览图(可 Skip)。张数 = 章节数。本拍只出图 + `get_task`,终态后再调一次 STEP3。provided 预览图只绑定展示,**仍禁止**传入 STEP3 / 成片。预览图失败不得挡住各 `Video Prompt {i}` 打印。禁止资产成图成功拍直接进本阶段。
### `video_prompts`
见 `video-prompts.md`。预览图终态后的下一拍调用,**每个 run 只调一次**。禁止和预览图同一 `tool_calls`。已经打印任一 `Video Prompt {i}` → 禁止再调。调用方输入是 `instruction` **object**:`script_markdown` + `duration_sec` / `ratio` / `model`(Modify 另加 `modify_request`)。角色 / 场景用 `image_urls`(有才加)。禁止传 `frames[]`。禁止挂预览图。禁止 `instruction` 写成散文 string。上一拍若因 `instruction must be a JSON object` 失败 → **按 object 模板重发一次**。
成功:`result.items` 一段一项,`name`=`title`=`Video Prompt {i}`,`content` = 该段词。同一 continuation **立刻全文打印**每一段。没打印齐 = 本步失败,禁止出片。成片时 `generate_video.prompt` = 该段已打印 `content`(按 §占位符补 `<<<image_n>>>`),不要只挂 URL 不写词。
### `clips` / `merge`
见 `clips-merge.md`。每组一段新片子(`VIDEO_MODEL`),title = `Long Video {i}`。**同一拍最多 4 段** `generate_video`,其余等这批 `get_task` 终态再发。回包 `Concurrent execution detected` / `9002` / `5003` → 只重试失败段。禁止一次打满十几段。禁止把 BGM 写进 `Video Prompt {i}`,禁止对单段配乐。
普通模式:全部分段成功后推 **BGM 闸门**并停住。选项固定 `["Merge with BGM", "Merge without BGM"]`,引导 = `Sure, would you like to add BGM?` 用户选定后再调一次 `merge_videos`(with → `is_generate_bgm=true` / without → `false`),挂各段成片 URL。
FastForward / AutoRun 到 merge 且未点名 BGM → 无 BGM 合成。N=1 仍可走 BGM 闸门(单段配乐)。Skip(`merge`) → 以分段成片为结束态。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / is on the canvas / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
子句例外:剧本 / Video Prompt 必须先贴全文,状态句可附在全文后。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。用户可见 English **禁止** `on the canvas`。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有那一句;3 条方向只进 `options`。
风格卡 / 规格提问用各自引导,不要再套 Review 句。风格卡有控件时不要再发 Host tools。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward / AutoRun 不发中间等待提问。BGM 闸门固定 `Merge with BGM` / `Merge without BGM`。剧本后提问固定两条,资产后提问固定三条,不要改成 Review then generate。结束态(合成后或跳过闸门的单段)可留 `Go to edit`,不要再写引导。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options` |
| 风格卡 | (可省略) | `choose_skill_asset`;无控件才 Host tools:`Pick a style reference image for this video.` |
| 点选刚绑定、下一拍是规格 | `Your style reference is ready.` | `Review the style reference, then set up your video.` |
| 规格提问 | (不重复预览) | `Please configure your target video specs before we generate the script storyboard.` |
| 成片:分辨率不适配该模型 | (可省略) | `This resolution is not compatible with the selected model. Change the resolution or the model.` |
| 剧本刚齐、等用户拍板 | 先全文贴剧本;可附 `Your story script is ready.` | `Modify the story script, or continue to character and background images?` 恰好两条 |
| 用户选继续、出资产图 | `Generating character and background images.` | (禁止再推剧本后提问) |
| 资产刚齐、`frames` 仍 enabled | `Your character and background images are ready.` | `Continue to preview images, regenerate the character and background images, or upload replacements?` 恰好三条 |
| 进入 `frames` 出预览图 | `Generating preview images.` | (禁止提问;本拍只出图) |
| 只补失败章 | `Retrying the remaining preview images.` | 禁止再调 STEP3 |
| 只合写 | `Generating video prompts.` | 禁止同拍出片 |
| 视频提示词已打印 | 先按段全文打印;可附 `Your video prompts are ready.` | `Review the video prompts, then generate the clips.` |
| 预览图(合写已齐或 Skip 提示词) | `Your preview images are ready.` | `Review the preview images, then generate the clips.` **前提**:已打印全部 `Video Prompt {i}` |
| 待合成 | `Your clips are ready.` | `Sure, would you like to add BGM?` |
| 单段 / 合成结束 | `Your long video is ready.` / `Your full long video is ready.` | (禁止提问引导;可留 `Go to edit`) |
产物 `title`(无产物不编造):`[Style] {短名}` / 剧本用 STEP1 `name` / `[Character] {短名}` / `[Prop] {短名}` / `[Background] {短名}` / `[Preview Image] {i}` / `Video Prompt {i}` / `Long Video {i}`。加 BGM 合成才另有 `Final Video without BGM - v1` / `Final Video BGM - v1` / `Final Video with BGM - v1`。禁止再写 `[First Frame]`。禁止再写总稿 `Video Prompts`。禁止给分段再落 BGM。
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `style`。风格卡只发一次 `choose_skill_asset`,返回后停住等确认。普通模式剧本成功拍先出提问;用户选继续后再并发角色设定 + 场景底板成图;本批全部 `get_task` 终态后一次状态句 + 资产后三选项。进入 `frames`:预览图彼此可并发,本拍只出图,禁止夹 STEP3;齐后下一拍再合写。成片同一拍最多 4 段。`run_prompt` 不与 `generate_image / generate_video` 同拍并行。FastForward / AutoRun / Skip 后的下一阶段在 continuation 立刻开始。禁止资产成图成功拍直接进 `frames`。
Referenced files: 8 — file references are metadata, not package contents.
---
name: cinematic
description: "Always use this skill to make a single-shot 4–15s live-action cinematic / film-look / Hollywood-style video clip. Must trigger for /cinematic, cinematic, film look, movie scene, movie-quality, dramatic lighting, depth of field, lens flare, anamorphic, letterbox, noir, epic, Steadicam, dolly, crane shot, or when a cinematic run is already in progress (intent answers, specs, cinematic prompt, clip, BGM merge) or the user skips a step, supplies a reference, jumps ahead, or revises an earlier step without restarting. Even a vague \"make it cinematic\" or \"help me make a cinematic shot\" must start this skill. After the first instruction, ask 2 professional direction questions grounded in that brief before the formal pipeline. Preset durations 4s / 8s / 10s / 15s (default 8s)."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- generate_video
- get_task
- merge_videos
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# Cinematic Clip Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/cinematic/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
本文件是编排器。成片词由 agent **按本链 reference 直接写出**,禁止发明 `prompt_key`,禁止调 `run_prompt`。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。`merge_videos` 传 `projectId`;`generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。Host tools 开场问询 / 规格提问那一拍仍禁止同拍调 `create_project`。问询完成且即将调**需要项目 id** 的 Buzzy tool 时若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此。
**HARD — 宿主提问**:等人选择或确认时,必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`,且**该题全部可选项必须传齐**(禁止只塞一档)。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框;**规格题的编号列表必须每行列出该字段全部档位**。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用、编号单值、或缺档都算没发出提问。
**例外 — 成片词 `content`**:结构化 cinematic prompt **必须原文贴进对话**(禁止 code fence),不受「正文最多一句」限制。禁止说 on the canvas。贴完后仍发对应 Host tools 等待提问(FastForward / AutoRun 除外)。
| 何时读 | 文件 |
|--------|------|
| 开场组题(默认 2 题) | `intent-questions.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_video` 参数 | 本文件 §运行时填参 |
| 写成本片词时 | `prompt-write.md`(必读)+ 按需 `hook-framework.md` / `timeline.md` / `camera-language.md` / `lighting-library.md` / `color-grading.md` / `sound-design.md` / `platform-optimization.md` / `mistakes.md` / `examples.md` |
| 跑到成片 / 合成时 | `clip-generate.md` |
禁止短路径、读其它 skill、把 YAML 当自由 prompt。禁止发明 `prompt_key`。禁止 Higgsfield / `@material[name]`。
用户可见文案 **固定 English**。禁止出现 `on the canvas`。`SessionScriptLanguage` / `user_lang` 只约束对白与可读场景描述。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准)。**禁止传 `nodeIds`**。用户上传的参考图 / 视频有才加;禁止编造 URL。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**,本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。Apps widget 只展示进度,**不能**代替 `get_task`。后续 `generate_video` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
**HARD — 本链无画布操作**:禁止 `PushStyleList` / `PushConfiguration` / `PushDirectionTool` / `PushSuggestions` / `PushMediaUpload` / `PushGeneratedNodes` / `create_canvas_node`。禁止 `choose_skill_asset`。等待面一律 Host tools。文本产物(cinematic prompt)由 agent 打印,不落文本节点。`generate_video.prompt` = 已打印的那份词。
本链**没有**风格库 / 剧本 / 角色设定 / 预览图阶段。用户参考图直接绑给成片。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `merge_videos` | 必传 `projectId` = 该 id |
| `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id、且下一拍要调上表**需要项目 id** 的 tool 时,先 `create_project`。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_video`(成片) | `VIDEO_MODEL`(API id,见 §`settings` 映射表) |
`name` 只用来找行。禁止把别名、错表、其它行、卡上显示名写进 `model`。
### 画幅 / 分辨率(成片)
成片读 `<available_models>` 该 `VIDEO_MODEL` 的 Video 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `VIDEO_RATIO` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `VIDEO_RESOLUTION` 若在该行 `resolutions` 里 → 原样用。H3 默认 `768p`(合法档 `768p` / `2k`);其余默认 `720p`(2.0 / 2.0 Fast / 2.5 常见 `480p` / `720p`,以该行原文为准)。`resolutions` 为 `-` / 空 → **整项省略**。不在该行 → **禁止** `generate_video`,引导 `This resolution is not compatible with the selected model. Change the resolution or the model.` 禁止默默改档 |
| `duration` | `VIDEO_DURATION`(本片整秒,4–15),不是档位原文 |
规格写入 Session 后,后续成片**静默继承**仍合法的 `VIDEO_RATIO` / `VIDEO_RESOLUTION`;用户本句写了新值且该值在该行才改。
规格题**必须**走 Host tools,**每题全部可选项都要进 `options`**(画幅六档;时长四档;模型三档)。禁止 Chat 只打印一档。禁止在正文里写 default / 预选。手填秒数走 Other / 自由输入,不进 `values[]`。
### 媒体绑定
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_video` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video` / `@material[...]`。
### 占位符
`generate_video` 的 prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。历史里若烂成 `<<>>` 或 Higgsfield `@material[name]`,按当前绑定重写成完整占位后再调用。禁止空占位。
写成片词时若本身没有占位而本片挂了图 / 参考视频,在词前加一行按序点名 `<<<image_n>>>` / `<<<video_n>>>`,再接原文,末尾 `no background music`。
### 串行
写词(打印)与 `generate_video` **禁止**同一 `tool_calls`。先打印齐再出片。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问:`nice` / 无可执行新指令 → 重发同一提问,不要 Advance。
词后 / BGM 闸门上的 `continue` / `Generate the clip` / `Merge with BGM` = 已选,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过写词、自带完整成片词、自带参考图 / 参考视频、从任意点直奔出片、中途改主意、或对词 / 规格 / 成片不满意。本 skill 用**阶段图 + 五个算子**处理这些情况。遇到未写出的说法,先归到某个算子,再往下走。
每条新用户请求开一条新 run:清空上轮状态、确认、词、成片。算子改的是**本 run 的 Stage 计划**。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → settings → prompt → clip → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | **必跑**(默认 2 题) | 无 | 开场问询;不是规格题 |
| `settings` | 规格未齐则跑 | 规格提问 | 画幅 / 时长 / model;分辨率按模型写入,不上题 |
| `prompt` | 必有(生成或自供) | **只**结构化 cinematic prompt(Chat 全文) | agent 按 `prompt-write.md` 写;禁止 run_prompt |
| `clip` | 必跑才能成片 | 单段成片 | 一张片子,4–15s |
| `merge` | 有成片则跑 | 成片(可选 BGM) | 普通模式先停 BGM 闸门;N=1 仍走闸门 |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
**硬底线**(不能整链跳过):必须有镜头身份(用户 brief / 自供成片词之一);要出视频必须有 `prompt`(生成或自供,且已打印)。参考图 / 参考视频**不是**成片硬底线;没有就纯文生视频。其它阶段都可以 skip 或 provided。
`prompt` / `clip` **不能**整段 Skip 后还声称能出视频;缺硬底线就问清楚。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要配乐直接看分段」「跳过合成」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步提问。
- 下游按 `slot-adaptation.md` **缺了就省略**,禁止为凑槽复制同一 URL。
- 若当前正停在 S 的等待提问,马上离开。
- `prompt` / `clip` **不能**整段 Skip 后还声称能出视频。
### 2. Provide(S, asset)
用户交出该阶段产物(上传参考图 / 参考视频 URL、粘贴完整成片词……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成。
- 参考图 / 参考视频 **禁止**当成成片词正文;成片词 **禁止**当成参考图。
- 任意轮次都可 Provide;中途补交则改状态并继续。
### 3. Jump(T)
用户要尽快到达更后的阶段(「直接出视频」「先出词就行」「不要中间结果」……)。
- `FastForwardTo = T`(默认若只说「直接做完 / 出视频」则 `T = clip`,有成片时含 `merge`)。
- 从当前点起,对每个 enabled 阶段:**执行但不推中间等待提问**;文本产物仍须打印。
- 到达 T 的产物后,按 T 的完成态展示。T 之前被 Skip 的阶段仍然不做。
- Jump **不是**跳过硬底线:仍须跑完 enabled 的 `prompt` 才能进 `clip`。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名词 / 规格 / 成片 / 问询方向……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧 URL 可留,状态禁止再引用)。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- `AutoRunDownstream = true`:重做 S 后,按**当前** Stage 计划自动顺跑后续 enabled 阶段,直到 `clip`(再停 BGM 闸门,除非 FastForward 且未点名 BGM)。中途不推「下一步」除非缺必填输入。
### 5. Reroute(S, mode)
同一阶段换做法(等用户传参考 → 改为纯文生;规格改走默认值……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询:`IntentAskedCount < 2` 且下一题尚未对 Host tools 真发出 → 同轮真调用一次。标题 = 短题名;问句 = **恰好一句**点名 brief;`options` = **恰好 3 条**且第一条为推荐默认。无真调用、把 3 条写成 Chat 编号列表、或问句为空 = 本步失败。未满 2 题时**禁止**进 `settings`,禁止同拍 `create_project` / `generate_video` / `merge_videos`
2. 开场题已发出、用户尚未作答 → **停住**。Host tools 返回若没有选中的 option / Other 文本,只表示选择框已发出,不是已答
3. 停在**已经发出且仍有效**的其它宿主提问上(规格 / 词后 / BGM),等用户选择
4. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–3 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出必打的成片词——**但**开场问询 / 其它 Host tools 题已经发出、用户尚未作答时,**停住且不再调任何 tool 是正确终点**。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外**:Host tools 已发出、用户尚未作答。`generate_video` 返回 `task_id` 必须先 `get_task` 到终态再 Advance。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式且该阶段有用户可见产物、且不在 FastForward / AutoRun 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward / AutoRun 中 → 不发中间等待提问,继续直到目标
过渡态(规格刚写入 / 词已写未打印)**禁止停驻**。
`prompt` 刚打印、普通模式、`PromptClipGateDone=false` → **必须停**。同轮只贴词 + 推词后提问。禁止 `generate_video`。
`PromptClipGateDone=true` 且 `clip` 仍是 `run`、片未发 → 立刻成片。正文 `Generating the cinematic clip.` 禁止再推这组提问。
`prompt` 已齐 → **先**把全文打印进 Chat。FastForward 到 `clip` 也一样:本拍只打印,**下一拍**再成片。禁止同拍出片,禁止只把词留在内存不打印。
---
## 开场意图(`intent`)
**目的**:用户给出指令后、进入 `settings` 之前,必须先基于这条指令挖掘并问出专业问题。细则见 `intent-questions.md`。
- **HARD**:正式流水线前默认只问 **2 题**。每题一次 Host tools。禁止为凑问卷问第 3 题。
- **引导 HARD**:标题 = 从 brief 压的短名;问句 = **恰好一句**(点名 brief);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**把问句写成 Chat 编号列表。**禁止**用规格提问问这些问题。
- 题必须**改写自当前用户指令**。已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;但仍须另挖至少 2 道能提升专业度的题。
- **禁止**因「看起来没有缺口 / 指令已够用 / 用户说直接开始」而 0 题进 `settings`。
- 仅当 `IntentAskedCount ≥ 2` 之后,用户再说开始 / 默认 / 跳过剩余 → `IntentDone=true`。问询中的上传先 Provide 再继续问。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. 某次能力调用已发出、**尚无结果** → 等这批结果,不要再叠下一批。`generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。
2. `IntentDone=false` → 只问下一题或收回答。问下一题必须真调用 Host tools,且问句含 brief 词。首轮带了成片词 / 参考图也先问询,记下入口。题已发出未答 → 停住。
3. 本轮能识别算子 → 执行算子。若 `IntentAskedCount < 2`:**只记账**,**禁止**进 `settings`;本轮仍问下一题。
4. 规格未齐且未写入 Session → 只出规格提问(或 FastForward 时写入默认)。回包已能解析 `aspectRatio` + `duration` + `model` → 按模型写入分辨率(H3=`768p`,其余=`720p`)后**立刻写入 Session,同轮进 `prompt`,禁止再推规格提问**。规格已齐但题未出、用户也未给齐 → 只出规格提问。`IntentDone=false` 时禁止进本条。
5. 词已打印(或 provided 已绑定),普通模式且 `PromptClipGateDone=false` → **只出词后提问**,然后停。禁止成片。用户点继续生成 → `PromptClipGateDone=true`,同轮按 `clip-generate.md` 成片。点修改词 → 下一句有改写说明则按说明重写并打印,再出同一组提问;只点修改没写要改什么 → 停着问要改哪,禁止空改一轮。FastForward / AutoRun → 跳过这组提问,先确认词已打印,下一拍成片。
5b. `PromptClipGateDone=true` 且 `clip` 仍 `run`、片未发 → **同轮成片**。正文 `Generating the cinematic clip.` 禁止再推这组提问。
6. FastForward / AutoRun 且上一步已齐 → 只跑下一 enabled 阶段。
7. 否则按当前阶段目的推进;含糊聊天且等待提问仍有效 → 重发同一提问,不要空回复。规格已写入 Session → 禁止再推规格提问。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`CinematicActive` 为真时只按本文件。启动:`/cinematic`、cinematic、film look、movie-quality、跳步 / 自供 / 回退式电影感短镜头,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `ai-story` / `ai-animation` / `3d-cgi` / `ugc-ads` / `tvc-ads` 正文跑本链。
### `settings`
前置:`IntentDone=true`。
一次 Host tools(能一次提多题就一次提完)。标题 `Set up your Video Settings`。assistant 正文最多一句:`Please configure your target video specs before we write the cinematic prompt.`
**禁止**再放 `resolution`。禁止加第 4 项。禁止把 `"Custom"` 写进时长 `options`(手填走 Other)。
**固定三项、顺序 HARD**(每题 options 必须传齐):
| 顺序 | 标签 | `name` | 全部可选项(必须全部列出) | 默认(只内部写,禁止印给用户) |
|------|------|--------|---------------------------|------|
| 1 | Aspect Ratio | `aspectRatio` | `9:16` / `16:9` / `1:1` / `4:3` / `3:4` / `21:9` | `16:9` |
| 2 | Duration | `duration` | `4s` / `8s` / `10s` / `15s` | `8s` |
| 3 | Model | `model` | `MiniMax-H3` / `Seedance 2.0 Fast` / `Seedance 2.0` | `MiniMax-H3` |
禁止借用 ugc-ads / ai-story 的时长档。时长四档是本链单段窗口(4–15s);用户 Other / 自由输入仍可手填整秒(`6s` / `12s` / `12秒`)。手填优先于四档默认。取出的整秒 `<4` → 写入 `4`;`>15` → 不要硬做长片,引导用户改用 `ai-story` 或改回 ≤15s。禁止把 `>1min` / `15-30s` / `30-1min` 写进 `options`。`model` 顺序必须是 `MiniMax-H3` → `Seedance 2.0 Fast` → `Seedance 2.0`。不要把 `Seedance 2.5` 写进题。题上是显示名,禁止把 API id 写进 `options`。
**HARD — 分辨率不上题**:确认或 FastForward 按已映射的 `VIDEO_MODEL` 写入 `VIDEO_RESOLUTION`:`MiniMax-H3` → `768p`;其余模型 → `720p`。用户口头点名分辨率且该值在该模型 Video 行 `resolutions` 里才覆盖;不配则忽略口头值,仍用上表默认。
确认或 FastForward 写入后冻结:`VIDEO_RATIO` / `VIDEO_RESOLUTION` / `VIDEO_DURATION_RANGE` / `VIDEO_MODEL`。`VIDEO_DURATION_RANGE` 用题上 token(`4s` / `8s` / `10s` / `15s`,或手填原文)。整数 `VIDEO_DURATION`:`4s`→4;`8s`→8;`10s`→10;`15s`→15;手填取开头整数(`12` / `12s` / `12S` / `12秒` 都 = 12)。4–15 合法。该整数覆盖 brief 里口头时长。
**HARD — 显示名 → API id**:回包的 `model` 先当显示名。用 `<available_models>` Video 表 `name` 对齐后,把该行 `model` 列原文写入 `VIDEO_MODEL`。对不上时用这张表,禁止把显示名传给成片:
| 回包(显示名或旧 id 都认) | `VIDEO_MODEL`(API id) |
|----------------------------|-------------------------|
| `MiniMax-H3` | `MiniMax-H3` |
| `Seedance 2.0` / `seedance-2.0` / `seedance-2-0` | `seedance-2.0` |
| `Seedance 2.0 Fast` / `dreamina-seedance-2-0-fast-260128` | `dreamina-seedance-2-0-fast-260128` |
| `Seedance 2.5` / `seedance-2.5` | `seedance-2.5` |
未选则 `VIDEO_MODEL=MiniMax-H3`。确认或 FastForward **当下**就必须完成这张映射,再进 `prompt`。`generate_video.model` 用这个 API id。
**HARD — 确认即离开,禁止循环重推**:回包能解析三项 → 按模型写入分辨率,立刻写入 Session,同轮进 `prompt`。
- `duration` 不在 `options` 或大小写 `S`/`s`,只要能取出 4–15 的整秒,都算已齐。禁止因此重推题。
- `model` 为上表任一显示名或旧 id 即合法。
- 本题 `duration` 是**本片时长**,不是多段总时长。
- 默认组合恒适配(H3+`768p`,其余+`720p`)。口头覆盖的分辨率不在该模型 Video 行 → 丢掉口头值,仍用默认,不要重推题。
用户已给齐三项 → 写入 Session 后可不再停。FastForward 且规格未齐 → 写入默认:`16:9` + `8s` + `MiniMax-H3` + `768p`。普通模式规格未齐 → 只推这三项提问,然后停。已确认过一次 → 禁止再推同一套题。
### `prompt`
见 `prompt-write.md`。有用户成片词 → 整理成完整结构化词后**全文贴进 Chat**(provided)。否则 agent 按 `prompt-write.md` + 按需知识库**直接写出**,禁止调 `run_prompt`。
成功**只**展示渲染后的词(禁止 code fence)。普通模式贴词后立刻出词后提问,然后停。
- **HARD — 词后提问**(普通模式,`PromptClipGateDone=false`):正文可空。同轮 Host tools:引导 `Modify the cinematic prompt, or generate the clip?`。`options` 必须恰好这 2 条,顺序固定:
1. `Generate the clip`
2. `Modify the cinematic prompt`
### `clip` / `merge`
见 `clip-generate.md`。一段新片子(`VIDEO_MODEL`),title = `Cinematic Clip`。禁止把 BGM 写进 cinematic prompt,禁止对单段配乐。
普通模式:成片成功后推 **BGM 闸门**并停住。选项固定 `["Merge with BGM", "Merge without BGM"]`,引导 = `Sure, would you like to add BGM?` 用户选定后再调一次 `merge_videos`(with → `is_generate_bgm=true` / without → `false`),挂该段成片 URL。
FastForward / AutoRun 到 merge 且未点名 BGM → 无 BGM 合成。N=1 仍可走 BGM 闸门(单段配乐)。Skip(`merge`) → 以分段成片为结束态。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / is on the canvas / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
子句例外:cinematic prompt 必须先贴全文,状态句可附在全文后。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。用户可见 English **禁止** `on the canvas`。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有那一句;3 条方向只进 `options`。
规格提问用各自引导,不要再套 Review 句。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward / AutoRun 不发中间等待提问。BGM 闸门固定 `Merge with BGM` / `Merge without BGM`。词后提问固定两条,不要改成 Review then generate。结束态(合成后或跳过闸门的单段)可留 `Go to edit`,不要再写引导。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options` |
| 规格提问 | (不重复预览) | `Please configure your target video specs before we write the cinematic prompt.` |
| 成片:分辨率不适配该模型 | (可省略) | `This resolution is not compatible with the selected model. Change the resolution or the model.` |
| 词刚齐、等用户拍板 | 先全文贴词;可附 `Your cinematic prompt is ready.` | `Modify the cinematic prompt, or generate the clip?` 恰好两条 |
| 用户选继续、出片 | `Generating the cinematic clip.` | (禁止再推词后提问) |
| 待合成 | `Your cinematic clip is ready.` | `Sure, would you like to add BGM?` |
| 单段 / 合成结束 | `Your cinematic clip is ready.` / `Your cinematic video is ready.` | (禁止提问引导;可留 `Go to edit`) |
产物 `title`(无产物不编造):`Cinematic Prompt` / `Cinematic Clip`。加 BGM 合成才另有 `Final Video without BGM - v1` / `Final Video BGM - v1` / `Final Video with BGM - v1`。禁止再写 `[First Frame]`。禁止给分段再落 BGM。
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `settings`。普通模式词成功拍先出提问;用户选继续后再成片。本链只有 1 段 `generate_video`。FastForward / AutoRun / Skip 后的下一阶段在 continuation 立刻开始。禁止词未打印就出片。
Referenced files: 13 — file references are metadata, not package contents.
--- name: setup description: Set up the Buzzy plugin after install. Use when the user just installed Buzzy, asks to connect Buzzy, or needs to confirm the Buzzy MCP server is signed in. --- # Buzzy setup Confirm the bundled Buzzy MCP server is connected, then stop. Do not ask for an API key. This package does not store credentials. 1. The host signs the user in with Buzzy OAuth using the ChatGPT client `https://chatgpt.com/oauth/client.json` and the `mcp` scope. No client secret is stored in this package. If the connection is missing or unauthorized, ask the user to finish that sign-in and wait. 2. Call `list_model` once. A successful response means the server is ready. If it fails because the user is not signed in, send them back to the host sign-in and do not retry with a made-up token. 3. Tell the user Buzzy is ready, in one short sentence. Do not start a generation during setup. After setup, use the connected server directly: - A single image or video: call `list_model`, copy `resolution`, `aspect_ratio`, and `duration` from the chosen model, then call `generate_image` or `generate_video`. Poll `get_task` until it succeeds. Do not submit the same generation again while it is still running. - A narrated, ad, UGC, or story video: call `load_workflow` with no arguments, then load the matching workflow by name. Call `create_project` before any tool that needs `projectId` or `project_id`, and reuse that id for the rest of the run.
---
name: tvc-ads
description: "Always use this skill to make a TVC / brand commercial from a product link, product image, or product description. Must trigger for /tvc-ads, tvc-ads, TVC ad, brand commercial, cinematic product film, brand ad, film commercial, or when the user drops a product page and asks for a TVC or brand film. Also use when a tvc-ads run is already in progress (Confirmed Product Info, selling-point confirm, specs, storyboard cards, character sheets, preview / first frames, clips, BGM merge) or the user skips a step, supplies an asset, jumps ahead, or revises an earlier step without restarting. Even a vague \"make a TVC\" or \"help me make a brand ad\" must start this skill. First-round with-questions (default) asks 1 content-direction question; no-questions starts the pipeline."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- parse_product_info
- display_product_info
- run_prompt
- generate_image
- generate_video
- get_task
- merge_videos
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# TVC Ads Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/tvc-ads/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。workflow tool(`parse_product_info` / `display_product_info` / `run_prompt` / `merge_videos`)传 `projectId`;`generate_image` / `generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。Host tools 开场问询那一拍仍禁止同拍调 `create_project`;问询完成(或 `IntentQuestions=false`)后、进 `product` 的第一拍若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此:还没有 id 就先创建,再调带项目字段的 tool。
**HARD — 宿主提问**:等人选择或确认时(**卖点分析、Apps 商品控件确认除外**),必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用或编号列表都算没发出提问。
**例外 — 商品确认**:`parse_product_info` 打开编辑控件。有产品页 URL 则传 `productLink`;没有则**不要编造链接、不要传 `productLink`**,打开空表。返回值(即使带 Title / Description / Images)只表示控件已打开,**不是**确认。然后**停住**,等用户确认。确认信号(任一即可):消息含 `Confirmed Product Info`;或用户明确确认/继续该商品(`Confirm` / `Continue` / `looks good` / 确认 / 继续)。在此之前禁止 `display_product_info`,禁止 Host tools 问要不要继续。无 iframe 宿主才用 Host tools 收集标题/描述/图。
**例外 — 卖点分析**:不走 Host tools。run_prompt 返回后按 `selling-analysis-prompt.md` 贴三段:固定引导句 `Here are the product selling points:` + `content` 原文 markdown + 固定确认句 `Confirm to continue, or tell me what you'd like to change.`,然后停住等用户下一条自由回复。禁止只贴正文、不说明这是商品卖点。用户回复 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续 = **已确认**,必须进入 `info_card`。
**例外 — run_prompt `content`**:卖点正文必须原文贴进对话(禁止 code fence),不受「正文最多一句」限制。分镜 `content` 是 GFM 管道表;Chat **禁止**贴 `|` 管道表,必须按 `script-table-format.md` 转成分镜卡片。卡片贴完后仍发 Host tools Continue/Revise。
| 何时读 | 文件 |
|--------|------|
| 开场组题(`with-questions` 时恰好 1 题) | `intent-questions.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_image` / `generate_video` 参数 | 本文件 §运行时填参 |
| 商品确认后的卖点分析 | `selling-analysis-prompt.md` |
| 用户自带参考视频时 | 本文件 §`ref_video`(无单独 reference;禁止搜片) |
| 分镜 / 角色图 / 对话卡片 | `storyboard-prompts.md` + `script-table-format.md` |
| 脚本计划 / Master 提示词 / 开场视觉 / 首帧 | `plan-and-opening.md` |
| 声音身份、口播表演、混音层级与验收 | `voice-direction.md` |
| 分段成片 / BGM 合成 | `video-generate-prompt.md` |
已注册文案模板(只许用这些 key,禁止发明):`tvc_ads_selling_analysis` / `tvc_ads_storyboard_with_ref` / `tvc_ads_script_plan` / `tvc_ads_storyboard_no_ref` / `tvc_ads_master_video_prompt` / `tvc_ads_first_frame_prompt`。
Preview Prompt **由 agent 按对应 reference 直接写出**,禁止再调 `run_prompt`(或其它单独 tool)获取。无参考模式的首帧 Prompt **必须**调用 `run_prompt(prompt_key=tvc_ads_first_frame_prompt)` 生成,禁止 agent 自由改写;角色图 Prompt **只从 script 步**(有参考分镜返回的 `character_prompts`)逐字取,禁止 agent 另写、禁止再调单独 tool 获取。禁止短路径、读其它 skill、把 YAML 当自由 prompt。禁止调用 `tvc_ads_search_keywords` / `tvc_ads_master_first_frame_prompt`。禁止搜片。
用户可见文案 **固定 English**。分镜表、卖点正文、规格提问、方向选择、口播单元格一律 English。`run_prompt` 的卖点 `content` **必须**作为 markdown 贴进对话(禁止只写一句 status、禁止 code fence)。分镜 `content` 是 GFM 管道表;对话必须转成分镜卡片,**禁止**把该表贴进 Chat。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准),适用于 `generate_image` / `generate_video` / `run_prompt` / `merge_videos`。**禁止传 `nodeIds`**。卖点正文 / 分镜正文 / Prompt 文本不是生成参考;生成参考用产品主图 URL、角色图 URL、开场视觉 URL、用户 Provide 的媒体 URL。
角色图 / Preview / 首帧的 `generate_image.model` = `<available_models>` Image 表 **gpt image2** 行的 `model` 列原文(`name` 只用来找行;禁止把 `gpt image2` 别名、视频行、其它图片行写入)。
成片的 `generate_video.model` = `<available_models>` Video 表 **seedance-2.0-fast** 行的 `model` 列原文(`name` 只用来找行;禁止把 `seedance-2.0-fast` 简称、图片行、其它视频行写入)。填参细则见 §运行时填参。
产物 `title` **禁止方括号**。统一用无括号名:确认后的商品名、`Selling Point Analysis`、`Storyboard Table`、`Character {i}`、`Preview - Clip {i}`、`First Frame - Clip {i}`、`TVC Clip {i}`。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_image` / `generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**(`url` / `image_url` / `video_url` 以返回为准),本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。并发提交的多个 `task_id` 必须全部轮询到终态后才能 Advance。Apps widget 只展示进度,**不能**代替 `get_task`。禁止因为「控件会自己轮询」而跳过。后续 `generate_image` / `generate_video` / `run_prompt` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `parse_product_info` / `display_product_info` / `run_prompt` / `merge_videos` | 必传 `projectId` = 该 id |
| `generate_image` / `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id 就先 `create_project`,不要先调上表其它 tool。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_image`(角色 / Preview / 首帧) | Image 表 **gpt image2** 行的 `model` 列原文 |
| `generate_video`(成片) | Video 表 **seedance-2.0-fast** 行的 `model` 列原文 |
`name` 只用来找行。禁止把别名、错表、其它行写进 `model`。
### 画幅 / 分辨率(成片)
成片读 Video 表 **seedance-2.0-fast** 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `SessionRatio` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `SessionVideoResolution` 若在该行 `resolutions` 里 → 原样用(`480` / `480p` 等照抄)。`resolutions` 为 `-` / 空 → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止写死 `720p` / `1080p` |
| `duration` | **本段** `segment_duration`(plan 合并后的段长),不是 info_card 的档位 token,也不是分镜某一行的 2s/3s |
规格写入 Session 后,后续 Preview / 首帧 / 成片**静默继承**仍合法的 `SessionRatio` / `SessionVideoResolution`;用户本句写了新值才改。角色图的 `aspectRatio` 仍固定 `16:9`,不受本表影响。
**两层不要混**:上表只约束 `generate_video` 入参。info_card 的画幅 / 分辨率候选项是冻结字面量(见 §info_card),**禁止**用本表、`<available_models>` 的 `ratios` / `resolutions`、`ratios=fixed` 或缺表去裁剪、省略或改写规格题。
### 媒体绑定
按 tool 分流,**禁止发明当前 schema 没有的字段**:
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_image` / `generate_video` / `run_prompt` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
| `display_product_info.images` | 确认消息里的 `Main Image:` / `Images:` URL |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 商品图:确认消息 `Main Image:` / `Images:`,或 `display_product_info` 返回的图 URL
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video`。
### 占位符
prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。冻结模板 Prompt(如 `character_prompts` / `first_frame_prompts`)若没有占位,调用前按当前绑定**追加**一段 Reference assets,不要改写模板正文。历史里若烂成 `<<>>`,按当前绑定重写成完整占位后再调用。禁止空占位。
### 串行
`run_prompt` **禁止**与 `generate_image` / `generate_video` 同拍并行。该跑的角色图、开场视觉 ×N、分段成片 1…N 仍按本文件 §并行。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问:`nice` / 无可执行新指令 → 重发同一提问,不要 Advance。
**不适用**于卖点三段、也不适用于商品控件确认。这两处 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续 = **已确认**,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过任意中间产物、自带任意素材、从任意点直奔更后的目标、中途改主意、或对任意前序不满意。本 skill 用**阶段图 + 五个算子**处理这些情况;下面的说法只是算子的实例,**不是**封闭清单。遇到未写出的说法,先归到某个算子,再往下走,不要因为「没写过这个例子」而卡住。
**HARD — 越级要产物(通用)**:停在任一用户可见等待上(分镜卡片、卖点三段、规格题、开场视觉提问、配乐闸门……),或某阶段刚完成时,用户本句要的若是**更后阶段的产物**,一律 `Jump(T)`,**不是**确认当前主选项。路上没被点名的可选可见全部 `Skip`;内部阶段(`plan`)静默跑;硬前置仍要有。禁止因为当前选项写着 `Generate first frames` / `Generate preview image` / `Continue`,就把「直接出视频」当成先出首帧再出片。当前等待作废,同轮 Advance 到 T。
实例(非封闭,按同一条规则推):script 后 `directly generate the videos` / 「直接出视频」→ `T=video`,`Skip(opening_visual)`,静默 `plan`(只要分段,不写 Preview、不调 `tvc_ads_first_frame_prompt`、不成首帧),立刻成片;卖点后「先出分镜」→ `T=script`;开场视觉后「跳过合成只要分段」→ `Skip(merge)`。没写过的同义句同样归 Jump / Skip,不要另写例外。
有参考与无参考不再拆成两套阶段名。`ref_video` 是否 **provided** 只改变 **script / plan / opening_visual** 的适配模式。默认无参考。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → product → selling_analysis → ref_video → info_card → script → plan → opening_visual → video → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | `with-questions` 则跑(恰好 1 题);`no-questions` 则 skip | 无 | 指令式触发,见 §开场意图。恰好 1 题 = 广告视频内容方向,恰好 3 个按指令现写的选项 |
| `product` | 必跑 | 商品卡 / 确认后的商品展示 | 三路互斥入口,见 §阶段目的 |
| `selling_analysis` | 必跑 | 对话中的卖点 markdown(带引导 / 确认句) | 商品确认后 run_prompt,按 `selling-analysis-prompt.md` 贴三段并停住;用户确认后 `content` 全文 = 下游 `SellingPoint` |
| `ref_video` | **skip** | 用户自带参考视频 | 可选;默认 skip;**禁止搜片**;Provide 才绑定 |
| `info_card` | 规格未齐则跑 | 规格提问 | 时长 / 画幅 / 分辨率(无 language、无卖点字段) |
| `script` | 必有(生成或自供) | 分镜卡片;有参考时可选角色图 | 成片前必须有一份可用 script。角色**不是**独立阶段 |
| `plan` | script 之后、用户继续后 | 无(纯内存) | 把分镜 **shot 合并成 segment**(≤15s,短镜必须并段)。有参考 = 脚本计划 + agent 写 Preview Prompt;无参考 = Master 视频提示词 + 拆段 + 调用 `tvc_ads_first_frame_prompt` 生成首帧 Prompt。未过合并校验则本地重切 |
| `opening_visual` | run | 有参考 = 分段预览图;无参考 = 分段首帧 | 可选。张数 = `SegmentCount`,不是 shot 行数。角色图若在 script 已出,本阶段不再出角色。**不提供 Edit** |
| `video` | 必跑才能成片 | 分段成片 | 按合并后的段出片,禁止一镜一段。不要把用户参考片当成片 |
| `merge` | 有分段成片则跑 | 成片(原生人声与真实环境音,可选叠加配乐) | 合成前先问是否加配乐,按选择合成;N=1 仍可配乐 |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
角色图不是独立阶段,另维护 `CharacterVisualPlan = run | skip | provided`:正常有参考模式初始为 `run`;用户 Skip 角色或 Jump 越过 script 且未点名保留角色图时设为 `skip`;用户 Provide 角色图时设为 `provided`。只有 `CharacterVisualPlan=run` 才可按 `character_prompts` 生成角色图。
`video` 另维护两个声音状态:`Clip1Status` 与 `Clip1AudioReference`。`Clip1Status` 必须先到 `done`,后续 Clip 2…N 才能启动;`Clip1AudioReference` 优先保存平台实际返回的独立旁白音频 / 声音参考资产(URL)。若能力声明明确没有独立音频参考槽,则立即写入 `fallback: VoiceProfile + Clip 1 matching instruction`,不得无限等待,也不把 Clip 1 视频 URL 冒充音频参考。只有平台已声明支持且资产处于绑定处理中时,才允许等待绑定结果。
`ref_video` 开场默认 **`skip`**。用户自带视频则 Provide。禁止把默认 skip 理解成还要再问搜片卡。**继续禁止搜片。**
Jump 分类直接读上表:说明里写「可选」的是可选可见;写「无 / 纯内存 / 内部」的是内部;卖点分析等待 / 规格提问是闸门。`intent` 在 `IntentQuestions=true` 时必须先问完,不是 Jump 可跳过闸门。不要再为某条跳转另写规则。
**硬底线**(不能整链跳过):必须有商品身份(链接 / 图 / 描述之一);要出视频必须有 script(生成或自供)以及至少一块视觉参考(开场视觉、角色图或产品图之一)。其它阶段都可以 skip 或 provided。
`IntentQuestions`:仅从本任务**首轮**字面量读取。出现 `no-questions` → `false`(跳过问询);出现 `with-questions` 或两者都未出现 → `true`(默认问 1 题)。首轮冻结,禁止后续轮次改写。`false` → `intent = skip`,`IntentDone=true`,同轮进 `product`。卖点分析 / 规格提问仍照常。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要参考视频」「别生成预览图 / 首帧」「不要出镜人物」「跳过合成直接看分段」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步选项。
- 下游按 `slot-adaptation.md` **缺了就省略或回退到次近素材**,禁止为凑槽复制节点。
- 若当前正停在 S 的等待提问,马上离开。
- Skip(`opening_visual`):成片 opening 用角色图,否则产品图。
- Skip 角色(自然语言「不要人物 / 不要角色图」):`CharacterVisualPlan=skip`;script 仍跑;忽略分镜返回的 `character_prompts`,不生成角色图。
### 2. Provide(S, asset)
用户交出该阶段产物(上传、粘贴、产物 URL、选片消息、自带分镜 / 预览 / 首帧……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成 / 不搜索。
- 模特图、角色图、声音参考 **禁止**当成商品主图或产品页链接。
- 任意轮次都可 Provide;中途补交则改状态并继续。
- 选片消息 `Use this video` + 视频 URL → Provide(`ref_video`)。不要再造一份视频。用户 Provide 角色图 → `CharacterVisualPlan=provided`。
### 3. Jump(T)
用户要的是 **T 的产物**,不是把路上每一站都做完(「直接出视频」「先出首帧」「先出分镜」「不要中间结果」「不生成角色,直接出首帧」……)。
1. 从这句话认出目标 T。只说「直接做完 / 出视频 / directly generate the videos / skip to video / 不要中间结果,出片」→ `T = video`(有分段成片时含 `merge`)。点名「首帧 / 预览 / 开场图」→ `T = opening_visual`。点名分镜 → `T = script`。没列出的同义句按产物归 T,不要因为等待面上有别的主按钮就改判。
2. 对**当前点到 T 之间**(不含 T)的每个阶段 S,按下表分类,**禁止**按具体阶段名写死例外:
| S 对 T 的关系 | 怎么处理 |
|---------------|----------|
| 已 `done` / `provided` | 沿用 |
| **硬前置**:缺少 S 的产物会违反硬底线,或 T 按 `slot-adaptation.md` 没有任何次近回退可用 | 必须有产物(生成或 Provide) |
| **内部阶段**(无用户可见产物,只为硬前置或 T 服务) | 静默跑 |
| **闸门**(卖点分析 / 规格提问):值可草稿或默认 | 写入草稿或默认,不停 |
| **可选可见**,且用户本句没点名要这份产物 | `Skip(S)`;若 S 是 `script` 内的角色图子产物,同时设 `CharacterVisualPlan=skip` |
硬底线仍是:商品身份;出片前必须有 script;至少一块视觉(开场图 / 角色图 / 产品图任一即可)。因此 script 是 `opening_visual` / `video` 的硬前置;角色图、开场视觉**不是**成片的硬前置;角色图**不是**开场视觉的硬前置(回退到产品图)。Jump 越过 script 去 `opening_visual` / `video` 时,script 仍作为硬前置静默生成,但其中未被用户点名保留的角色图属于可选可见子产物,必须设 `CharacterVisualPlan=skip`,不得被 `character_prompts` 的默认触发规则重新强制生成。
`IntentQuestions=true` 且内容方向题未发出或未答 → **禁止**把问询当闸门跳过;先问完再 FastForward。`parse_product_info` 控件未收到 §商品确认信号 → 商品身份未成立,禁止 Jump 越过去 `display_product_info` 或更后阶段。
3. 用户本句点名要保留的中间产物 → 该阶段不 Skip。只有用户点的是**当前等待主选项原文或其同义确认**(`Generate first frames` / `Generate preview image` / `Continue` / `looks good`,且**没有**点名更后产物)→ **不是** Jump,按普通继续。点名更后产物、或「直接 / skip / 不要中间」+ 目标 → **就是** Jump,即使 Host tools 提问还在。script 等待面上说 `directly generate the videos` = Jump(`video`),禁止先出首帧 / 预览。
4. 然后 `FastForwardTo = T`:只跑仍 enabled 的阶段,不发中间等待提问;停在 T 的完成态。
5. 只说「按当前计划做完、中间别停」而**没有**点名跳过中间产物 → 仅 FastForward,不改 skip/run。
6. FastForward 穿过 `merge` → 在合成前停一次,用 Host tools 问要不要配乐(`No music` / `Add background music`),按用户选择完成合成;不擅自默认无 BGM。已点名则按其说的做。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名 script / 参考 / 预览 / 首帧 / 卖点 / 规格 / 成片……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧产物 URL 可留,状态禁止再引用)。作废后的下游恢复为回退前的计划:用户独立 Provide 的素材锚点保留为 `provided`,但其内容若直接依赖被回退阶段的生成结果、旧参考模式或旧规格,则同时 `invalidated` 并要求重新 Provide;生成型下游一律 `invalidated`,待重新执行后再恢复为 `run`。不要把可选阶段改成 skip。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- **禁止 AutoRun**:重做完 S 后,若 S 有用户可见产物 → **停住**(卖点:贴三段等自由回复;其它:状态句 + 宿主提问)。不要顺跑 plan / opening_visual / video / merge。内部阶段(`plan`)只在用户选了等待提问上的继续之后才跑。
- `opening_visual` 回退前是 `run` 则重做链路里仍是 `run`,禁止因回溯而 skip。
- 作废旧预览 / 旧首帧不算 provided。
### 5. Reroute(S, mode)
同一阶段换做法(等用户传参考 → 改为不参考;brief 改走链接解析……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。本链**没有**搜片模式,禁止把 Reroute(`ref_video`) 理解成「去搜索」。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询(仅 `IntentQuestions=true` 且内容方向题尚未真发出):同轮对 Host tools 真调用一次。标题 = 短题名;问句 = **恰好一句**;`options` = **恰好 3 条**且**第一条为推荐默认**。无真调用、把 3 条方向写成 Chat 编号列表、或问句为空 / 把占位句当成唯一问句 = 本步失败。**这一拍只能发这一次 Host tools**,禁止同拍再调任何 Buzzy MCP tool(含 `create_project` / `parse_product_info` / `display_product_info` / `run_prompt` / `generate_image / generate_video`)。`IntentQuestions=false` 时本条不适用,直接进 `product`
2. `IntentQuestions=true` 且内容方向题**已经**对 Host tools 真发出,且用户还没有对本题作答 → **停住**。禁止 `parse_product_info` / `display_product_info` / 其它流水线 tool。Host tools 返回若**没有**用户选中的 option id/label / Other 文本,只表示选择框已发出,**不是**已答,禁止因此 Advance。`IntentDone` 在用户作答前必须保持 `false`。返回里已有选中方向 → 本条不适用,收下并 `IntentDone=true`
3. 停在已打开的 `parse_product_info` 商品编辑控件上,等用户确认(见 §商品确认信号)。此期间禁止 `display_product_info`,禁止 Host tools 问是否继续
4. 停在**已经发出且仍有效**的其它宿主提问上,等用户选择。**例外**:用户本句已识别为 Skip / Provide / Jump / Rollback / Reroute → 当前等待作废,先执行算子,不要停住
5. 停在已贴进对话的卖点三段正文上,等用户自由回复(卖点闸门不走 Host tools)。用户本句点名更后产物 → 按已确认卖点 + Jump,不要继续干等
6. 卖点已确认、规格未齐、且 §info_card 尚未对 Host tools 真发出(Chat 编号单值 / 只写一档 / 画幅或分辨率少选项不算):同轮按 §info_card 字面量发出三题(时长恰好 3 档 `<15s` / `15s-30s` / `30s-1min`,画幅恰好 4 档、分辨率恰好 3 档),然后停住。禁止进 `script` / `generate_image`
7. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–6 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出卖点正文、也未打开商品控件——**但**开场问询 / 其它 Host tools 题已经发出、用户尚未作答时,**停住且不再调任何 tool 是正确终点**(不要为了避开「空回复」去调 `parse_product_info`)。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外(必须停住)**:① Host tools 开场问询 / 规格提问 / BGM 提问已发出、用户尚未作答,且本句**不是**算子;② `parse_product_info` 返回只表示控件已打开,不要 Advance 到 `display_product_info`。用户本句已识别为 Jump / Skip / Provide / Rollback / Reroute → 不要停在旧等待上。Advance 碰到用户可见产物且非 FastForward 时发等待并**停住**(Rollback 重做后同此)。卖点等待 = 引导句 + markdown + 确认句,不是 Host tools。
贴过卖点正文 **不是** 已确认:run_prompt 已返回但本会话还没按 `selling-analysis-prompt.md` 贴出三段 → 立刻贴三段并停住,禁止只写 status、禁止只贴 `content` 不说明这是卖点、禁止空结束。
分镜卡片已贴 **不是** 已确认:run_prompt(及该跑的角色图)已返回但本会话还没按 `script-table-format.md` 贴卡片 + Host tools Continue/Revise → 立刻贴卡片并发提问,禁止空结束、禁止同轮 `plan`。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式(含 Rollback 重做后)且该阶段有用户可见产物、且不在 FastForward 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward 中 → 不发中间等待提问,继续直到 Jump 的目标 T
过渡态(`display_product_info` 刚跑完 / 卖点等待刚被确认)**禁止停驻**。`video` 的 Clip 1 成功后属于内部依赖续跑:若能力支持独立音频参考槽则绑定 `Clip1AudioReference`,若明确不支持则立即采用 fallback,然后自动启动 Clip 2…N;不得等待用户、重复生成 Clip 1 或把它误判为流程结束。只有平台已声明支持且音频资产仍处于异步绑定处理中时,才允许短暂等待该能力结果。`parse_product_info` 刚返回 **必须停驻**,不是过渡态。Host tools 开场问询刚发出、用户尚未作答 **必须停驻**,不是过渡态,禁止 Advance 到 `product`。
**商品确认后的同一 continuation(HARD)**:先 `display_product_info`(该次确认最多一次;无链接有图路径若未走控件则跳过 display_product_info)→ 立刻 `selling_analysis`(run_prompt + 贴三段)→ 停住。禁止在 display_product_info 之前跑卖点。禁止只 display_product_info 就结束。卖点「尚未跑完」= 本会话还没贴出三段。未在 Jump 越过时禁止先出规格提问。卖点分析普通模式:run_prompt 返回后**同一 continuation** 必须按 `selling-analysis-prompt.md` 贴出三段,然后**停住**(只写 status、只贴 `content` 不说明这是卖点、或调 Host tools Continue/Revise = 本步失败)。用户从该等待确认后、规格未齐 → 立刻进入 `info_card`。`ref_video` 默认 skip,**不要**在卖点后插入搜片提问。
script 普通模式:分镜 run_prompt(及该跑的角色图 `get_task` 终态)返回后**同一 continuation** 必须贴分镜卡片 + Host tools,然后**停住**(表已返回但没卡片 / 没提问 = 仍是过渡态)。
正在 Jump 越过这些闸门 / 可选阶段 → 按 §Jump 写入默认或 Skip,不要被本段拦截,也不要被「script 必须停住出首帧」拦截。问询未完成或商品控件未确认时,Jump 也不得越过这两道等待。Jump(`video`) 且 `opening_visual` 已被 Skip 时:`plan` 只做分段,禁止出预览 / 首帧。
---
## 开场意图(`intent`)
**目的**:是否问询由首轮指令字面量决定。问则发出 1 题后**停住**,等用户答完再进 `product`;不问则同轮进 `product`。细则见 `intent-questions.md`。
- **指令式触发(HARD)**:只读本任务**首轮**字面量。`no-questions` → 不问,`intent=skip`,立刻进 `product`。`with-questions` 或未写 → 问 **恰好 1 题**。冻结后禁止改写。用户后来说「直接开始」不能代替首轮 `no-questions`。
- **`IntentQuestions=true`(HARD)**:正式流水线前必须对 Host tools 发出 **恰好 1 题**(广告视频内容方向)。用户看见的是选择框,不是 Chat 里的编号列表。
- **开场提问 HARD**:标题 = 短题名;问句 = **恰好一句**(禁止把选项写进问句、禁止问句为空);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**用多字段规格提问来问这个问题。**禁止**把 3 条方向写进 assistant 正文。
- **发出 ≠ 答完(HARD)**:Host tools 调用成功 / 选择框已出现 **不是** `IntentDone`。`IntentDone=true` **只**在用户点选了 3 条之一、用 Other 写了方向、或下一条消息给出可执行内容方向之后。发出后必须停住等用户下一句,**禁止**同拍或紧接着的 continuation 调 `parse_product_info`。
- **与用户输入挂钩(HARD)**:问句和 3 个选项必须根据本轮用户指令现写。选项是具体可执行的内容方向(运镜要写清展现什么;剧情要写清具体情节),禁止空泛标签,禁止原样套示例,禁止抛一套与这条指令无关的通用问卷。
- 已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;本题只问内容方向。
- `IntentQuestions=true` 时:**禁止** 0 题进 `product`。也**禁止**「题已发出、人还没答」就进 `product`。问询中的上传先 Provide,再发出本题或在本题已答后结束问询。
- `IntentQuestions=false` 时:未问到的项用默认(可选阶段 `run`;`ref_video=skip`;画风 `cinematic polished TVC`)。卖点 / 规格仍跑。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. `IntentQuestions=true` 且内容方向题尚未对 Host tools 真发出 → **只发这一题**,然后**停住**。禁止同拍 `create_project` / `parse_product_info` / `display_product_info` / 其它流水线 tool。首轮带了链接 / 图也先问询,入口只记账。编号列表不算已问。
2. `IntentQuestions=true` 且内容方向题已对 Host tools 真发出,且用户还没有对本题作答 → **停住**。返回里没有选中的 option / Other 文本 = 未答。禁止 `parse_product_info`。禁止把 `IntentDone` 置 `true`。返回或用户下一句已有方向 → 收下,`IntentDone=true`,再进 `product`。
3. `parse_product_info` 已打开,且本会话还没有 §商品确认信号 → **停住**。禁止 `display_product_info`。禁止 Host tools 问要不要继续。tool 返回里的商品字段是刮取草稿,不是确认。
4. 某次能力调用已发出、**尚无结果** → 等结果,不要叠新生成调用。`generate_image` / `generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。已返回终态 / 同步 tool 已返回(**不含** `parse_product_info`,**不含** Host tools 开场问询 / 规格提问 / BGM 提问)→ 必须 continuation,禁止干等用户再发一句。卖点 `run_prompt` 返回后按 `selling-analysis-prompt.md` 贴三段并停住是 mandatory,不算叠生成。分镜 run_prompt / 角色图终态后贴卡片 + Host tools 是 mandatory。
5. 已有 §商品确认信号,且该次确认还没跑过 `display_product_info`(该走 display_product_info 的路径)→ 本 continuation **先** `display_product_info`,**立刻** `selling_analysis`(run_prompt + 贴三段)。禁止只 display_product_info 就停。`display_product_info` 已按该次确认跑完,或无链接有图路径不走 display_product_info:卖点三段未贴 → 只跑卖点(未调用则调用;已返回则贴三段并停住)。三段已贴仍在等用户 → 停住,不要顺跑规格提问。卖点已确认但规格未出 → **只**对 Host tools 发 §info_card 字面量三题。Chat 打印默认值、少题、或画幅 / 分辨率少档 = 没出,必须立刻按字面量重发。**本条在开场题未答完时不适用。禁止在卖点后出搜片提问。**
6. 已进入 `video`:`Clip1Status` 未 `done` → **只**发 / 轮询 Clip 1,禁止先发 2…N。Clip 1 已 `done`、N≥2、2…N 尚未全部发起 → **同轮并发补齐**未发起的后续段。已发出的 `task_id` 必须全部 `get_task` 到终态。
7. 本轮能识别算子 → 执行算子。停在某次等待提问时,用户点名的是**更后阶段的产物**(含 `directly generate the videos` / 直接出视频 / 跳过首帧出片)→ 按 Jump(T),不要当成确认当前主选项,也不要先把当前主路径(首帧 / 预览)做完。若 `IntentQuestions=true` 且内容方向题未发出或未答:**只记账**,**禁止**进 `product` / `parse_product_info`;题未发出则本轮仍只问这一题,题已发出则停住等答。`IntentQuestions=false` → 不要进本条问询分支。
8. `IntentQuestions=true` 且 `IntentDone=false` → 题未发出则只发这一题并停;题已发出未答则停住,**不要**进 `product`。必须真调用 Host tools,问句含内容方向;编号列表不算已问。用户已答 → `IntentDone=true`,再进 `product`。`IntentQuestions=false` → 进 `product`。
9. FastForward 且上一步已齐 → 只跑下一 enabled 阶段,直到目标 T。问询未完成(题未发出或未答)或商品控件未确认 → **不要**走本条。Rollback 重做刚完成 → **不要**走本条。
10. 否则按当前阶段目的推进。仅当停在 **Host tools** 提问上且用户只回 `nice` / 无可执行新指令 → 重发同一提问,不要空回复,不要 Advance。卖点三段或商品控件上的 `looks good` / `continue` / `ok` **不是**本条,按已确认处理。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`TvcAdsActive` 为真时只按本文件。启动:`/tvc-ads`、TVC / brand commercial、跳步 / 自供 / 回退式 TVC,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `ugc-ads` / `trending-search` 正文跑本链。**禁止搜片**,不要调用 `trending_search_videos` 或任何搜片 skill。
### `product`
**前置**:本会话还没有 `create_project` 返回的 id → 先 `create_project({ name })`,再走下面三路。问询未完成时不要进本阶段。
**商品确认信号(HARD)**:`parse_product_info` 返回 ≠ 确认。确认 = 下面任一:消息含 `Confirmed Product Info`;用户明确确认/继续该商品(`Confirm` / `Continue` / `looks good` / `ok` / 确认 / 继续)。不要只认「首行字面量」,也不要把刮取字段当成已确认。
三路互斥:
1. 有产品详情页链接 → `parse_product_info({ projectId, productLink })` 打开编辑控件。**返回值不是确认**:同一 continuation **禁止** `display_product_info`,**停住**等 §商品确认信号(禁止 Host tools 问是否继续)→ 从确认消息解析 `Title:` / `Description:` / `Main Image:` / 全部 `Images:`(没有这些前缀则用用户确认的标题/描述/图)→ `display_product_info({ projectId, title, description, images: [main, ...others] })`(每个确认事件最多一次)→ **同一 continuation** 立刻进入 `selling_analysis`
2. 无链接、有商品图 → 记下商品图 URL;有实质用户文则整理后写入 `ProductBrief` / 确认事实,缺标题则用用户描述里的商品名或 `(untitled product)` → 进入 `selling_analysis`。不要走解析。不要把 `imageUrls:` 商品图当成产品页。进入 `selling_analysis` 前同样必须已有 `projectId`
3. 无链接、无图 → `parse_product_info({ projectId })`(**不传** `productLink`)打开空编辑控件,用户填 title / description / 上传图片。**不要**再用 Host tools 收集这三项。同一 continuation **禁止** `display_product_info`。停住等 §商品确认信号,再按路径 1 同样解析并 `display_product_info`。无 iframe 宿主才用 Host tools 收集标题/描述/图。
`imageUrls:` 且 host 含 `buzzy.now`、path 含 `/file-service/`、图片后缀 → 商品图,不是产品页。
商品已确认展示 = `display_product_info` 已按该次确认跑完,或无链接有图路径已记下商品图 URL。卖点三段未贴 → 立刻 `selling_analysis`;**禁止**先出规格提问,**禁止**先出搜片提问。
### `selling_analysis`
见 `selling-analysis-prompt.md`。前置:产品信息已确认。
`run_prompt(prompt_key=tvc_ads_selling_analysis, projectId)` **恰好 1 次**。成功字段是 `content` + `name`(`name` 必须是 `Selling Point Analysis`)。商品图 URL 有才加(确认消息 `Main Image:` / `Images:`,或 `display_product_info` 返回的图地址;否则用已记下的商品图 URL)。走 `image_url(s)`。**禁止传 `nodeIds`**。还没有 `projectId` 就先 `create_project`。
**HARD**:`恰好 1 次` 只约束 run_prompt。同一 continuation 必须按 `selling-analysis-prompt.md` 贴三段:`Here are the product selling points:` + `items[].content` 原文 markdown + `Confirm to continue, or tell me what you'd like to change.`(禁止只写 `Your selling point analysis is ready.`,禁止 code fence,禁止只贴正文不说明这是卖点)。然后**停住**等用户自由回复。**不要**调 Host tools Continue/Revise。缺这三段 = 卡住 / 本步失败。不要顺跑规格提问。用户回复 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续,或改了文案后接受 → `SellingPoint` = `content` 全文(不含引导句 / 确认句;用户改了文案则以用户稿为准)。规格提问不再收卖点。禁止去调 UGC 的 brief / selling key。
### `ref_video`
可选。默认 `skip`。仅当用户 Provide 参考视频时变为 `provided`。**禁止搜片。禁止出「要不要搜竞品片」提问。**
- 默认 skip → 无参考;卖点确认后立刻进 `info_card`
- provided(上传、粘贴、产物 URL、`Use this video` + URL)→ 绑定,不要再造一份视频
- 用户说不用参考 → 保持 skip
- 中途 Provide 参考且 script 尚未生成 → 后续 script 走 with-ref
- 中途 Provide 参考且 script 已生成 → 按 Provide 改状态;若用户要按新参考重做 script,走 Rollback(`script`) 或用户明确要求重做
### `info_card`
前置:`SellingPoint` 已写入。
**必须**对 Host tools 真调用(能一次提多题就一次提完)。标题 `Video settings`。assistant 正文最多一句:`Confirm duration, aspect ratio, and resolution.`
**HARD — 选项在 tool 里,不在 Chat**:每一题的全部候选项只进该题 `options`。禁止把三项印成单值「当前设置」。仅当三个 Host tools 名字都没有、只能用正文时,每行必须列出该字段全部档位:
```text
Confirm duration, aspect ratio, and resolution.
1. Duration: <15s / 15s-30s / 30s-1min
2. Aspect ratio: 16:9 / 4:3 / 3:4 / 9:16
3. Resolution: 480p / 720p / 1080p
```
**HARD — 每项必须列出全部可选项**:Duration / Aspect ratio / Resolution 三题都要出现,**每一项都必须把下表该行全部档位写全**。Host tools:该题 `options` = 该行全部档位,禁止只塞一档。禁止在正文、问句、选项旁写 default / 预选 / Recommended / 当前设置。Duration `values` 必须恰好为 `<15s` / `15s-30s` / `30s-1min`。废弃的旧时长(`<30s` / `>1min`)不得出现。
**HARD — 规格题字面量(禁止裁剪)**:画幅 / 分辨率题的候选项是冻结清单,不是从模型表推导出来的。发出前按下面清单**整段复制**,发出后自检个数;对不上就丢弃重发,不要「补一档」或「先用默认往下走」。
| 顺序 | 题 `id` | `prompt` | `options`(id → label,必须全有、顺序不许改) | 预选 |
|------|---------|----------|-----------------------------------------------|------|
| 1 | `duration` | Duration | `under_15`→`<15s`;`mid_15_to_30`→`15s-30s`;`mid_30_to_1min`→`30s-1min` | (不写进正文) |
| 2 | `aspect_ratio` | Aspect ratio | `ratio_16_9`→`16:9`;`ratio_4_3`→`4:3`;`ratio_3_4`→`3:4`;`ratio_9_16`→`9:16` | (不写进正文) |
| 3 | `resolution` | Resolution | `res_480p`→`480p`;`res_720p`→`720p`;`res_1080p`→`1080p` | (不写进正文) |
自检 HARD(任一失败 = 没问,立刻按字面量重发,禁止进 `script`):
- 恰好 3 题,顺序 Duration → Aspect ratio → Resolution
- Duration `options.length === 3`;Aspect ratio `options.length === 4`;Resolution `options.length === 3`
- 每题 label 集合必须与上表完全一致(画幅四档、分辨率三档一个都不能少)
- option `id` **必须**用上表字母开头的 token(`under_15` / `mid_15_to_30` / `mid_30_to_1min` / `ratio_16_9` / `res_720p`)。禁止把 `<15s` / `16:9` / `4:3` / `480p` 当成 `id`:含冒号、`<` 或纯数字开头的 id 会被宿主丢掉,表现为「有时缺时长、有时缺画幅或分辨率」
- Cursor `AskQuestion` 用 `id` + `label`;Claude `AskUserQuestion` / `ask_question` 按该 tool schema 填,但 **label 集合仍是上表那 3+4+3 个**,禁止改成 2 档画幅或 2 档分辨率
- 一次调用塞不下 3 题或某题全档 → **拆成连续 3 次 Host tools**(先 Duration,再 Aspect ratio,再 Resolution),每次仍带该题全部档。禁止为了「塞进一次调用」而删题或删档
禁止用来裁剪 / 省略画幅题或分辨率题的理由(这些只作用于成片填参,见 §运行时填参):
- `<available_models>` 缺表、没有 `ratios` / `resolutions`、或 `ratios=fixed` / `resolutions` 为 `-` / 空
- 模型行只列出部分画幅或分辨率(例如只有 `16:9` / `9:16`,或没有 `480p`)
- 从 UGC 规格题抄来(UGC 画幅含 `21:9` / `1:1`,分辨率没有 `480p`)
- 「默认 `16:9` / `720p` 就够了」、只打印默认值、或把三项写成 Chat 编号列表
下面任一写法 = 本步失败,必须立刻按字面量重发(不要继续 script / 成图):
- Chat 编号 / bullet:`1. Duration: <15s` / `2. Aspect ratio: 16:9` / `3. Resolution: 720p`
- 只打印默认值、不列出其它档
- 伪调用文本、或把三项规格写进正文当「当前设置」
- 画幅不足 4 档,或分辨率不足 3 档,或缺整题
```text
AskQuestion
title: Video settings
questions:
- id: duration
prompt: Duration
options:
- id: under_15
label: <15s
- id: mid_15_to_30
label: 15s-30s
- id: mid_30_to_1min
label: 30s-1min
- id: aspect_ratio
prompt: Aspect ratio
options:
- id: ratio_16_9
label: 16:9
- id: ratio_4_3
label: 4:3
- id: ratio_3_4
label: 3:4
- id: ratio_9_16
label: 9:16
- id: resolution
prompt: Resolution
options:
- id: res_480p
label: 480p
- id: res_720p
label: 720p
- id: res_1080p
label: 1080p
```
收回后写入 Session(label 或 id 任一匹配即可):
| 用户选中 | 写入 |
|----------|------|
| `under_15` / `<15s` | `SessionVideoDuration=<15s`,`SessionVideoDurationRange=0-15s` |
| `mid_15_to_30` / `15s-30s` | `SessionVideoDuration=15s-30s`,`SessionVideoDurationRange=15-30s` |
| `mid_30_to_1min` / `30s-1min` | `SessionVideoDuration=30s-1min`,`SessionVideoDurationRange=30-60s` |
| `ratio_16_9` / `16:9` | `SessionRatio=16:9` |
| `ratio_4_3` / `4:3` | `SessionRatio=4:3` |
| `ratio_3_4` / `3:4` | `SessionRatio=3:4` |
| `ratio_9_16` / `9:16` | `SessionRatio=9:16` |
| `res_480p` / `480p` | `SessionVideoResolution=480p` |
| `res_720p` / `720p` | `SessionVideoResolution=720p` |
| `res_1080p` / `1080p` | `SessionVideoResolution=1080p` |
发出后**停住**等用户点选。Host tools 返回若没有各题选中项 = 未答,禁止 Advance。Chat 编号列表不算已问。
整链默认一次。用户**本句已明确写出**画幅 + 时长(+ 分辨率)且要求开跑 → 写入 Session 后可不再停。只打印默认 / 用户未逐项选定 ≠ 已给齐。成片调用时若有模型表,再按 §运行时填参收敛一次:用户选的 token 不在该行 → 改用该行第一个合法值,或 Host tools 再问一次(再问时选项仍用本节字面量全档,不要改成模型表子集)。无模型表则按用户所选原样传。
确认后冻结 `SessionVideoDuration` = 所选档位原文,并写入对应 `SessionVideoDurationRange`。时长范围写入分镜:`<15s` → `0-15s`;`15s-30s` → `15-30s`;`30s-1min` → `30-60s`。分镜总时长必须落在所选范围内。**禁止**把档位映射成 15 / 22 / 45 / 75 或任何写死秒数。废弃旧时长卡(`<30s` / `30s-1min` / `>1min`)不得生成或回退。Jump 越过本闸且用户未点名规格 → 内部写入 `<15s` / `16:9` / `720p`(`SessionVideoDurationRange=0-15s`),禁止把这三档印给用户当选项清单。参考视频只作节奏 / 镜头 / 构图参考,不是输出总时长约束。
### `script`
有用户分镜 → 整理成 GFM 表,并按 `script-table-format.md` 把每一行转成分镜卡片贴进对话。否则见 `storyboard-prompts.md`。
有参考(`ref_video=provided`)→ `tvc_ads_storyboard_with_ref`;无参考 → `tvc_ads_storyboard_no_ref`。缺卖点 / 参考写 `(none)`。分镜输出中的声音描述必须形成一份全片统一的 `VoiceProfile`:由 script 首次生成时确定并写入内存,后续 plan 与 video 逐段复用;不得让 agent 按片段重新发明声音身份。声音质量规则见 `voice-direction.md`。
`name` 必须是 `Storyboard Table`。非 GFM / 缺分隔行 → 重试。表头与正文固定 English。Chat **禁止**贴 `|` 管道表。
**角色(附在本阶段,不是独立阶段)**:
- 有参考且返回 `character_prompts` 非空、且 `CharacterVisualPlan=run` → 同轮按返回 Prompt **逐字**成图(禁止 agent 改写或另写)。`model` = Image 表 **gpt image2** 行的 `model` 列原文;画幅固定 16:9;title=`Character {i}`。风格对齐参考视频媒介(实拍就实拍,卡通就卡通)。每个 `generate_image` 必须 `get_task` **阻塞轮询到成功**,记下素材 URL。角色图未终态时等结果,不要空结束。
- **人物触发条件 HARD**:正常非 Jump 的有参考模式中,只要参考分镜 `character_prompts` 返回非空且 `CharacterVisualPlan=run`,就必须生成对应人物图。以下情况必须不生成:用户明确 Skip 角色或 Jump 越过该可选子产物(`CharacterVisualPlan=skip`);`character_prompts` 为空数组;角色图由用户 Provide(`CharacterVisualPlan=provided`)。不得让本条覆盖 §Jump 已经写入的子状态。
- 无参考 / Skip 角色 / `character_prompts` 为空 → 不生成角色图。
- 用户 Provide 角色图 → 只绑定。
**HARD**:run_prompt 返回 ≠ 对话卡片 ≠ 等待提问。普通模式(含 Rollback 重做)在 run_prompt 已返回、且该跑的角色图已 `get_task` 终态(或不该跑)的同一 continuation,必须按 `script-table-format.md` 贴卡片 + Host tools Continue/Revise(有参考且有角色图:引导 `Review the storyboard table and optional character sheets, then continue.`;否则 `Review the storyboard table, then continue.`;第 1 条有参考 → `Generate preview image`,无参考 → `Generate first frames`;另给 `Revise`)。缺卡片或缺提问 = 卡住 / 本步失败。然后停住 = 不要同轮 `plan` / 开场视觉 / 成片。用户下一句点名更后产物(直接出视频等)→ Jump,不要当确认首帧 / 预览。FastForward / Jump:贴卡片后立刻按目标推进。
**声音(附在本阶段,不是独立阶段)**:
- script 首次生成时,根据产品定位、用户意图和分镜中的 Dialogue / Voice-over,读取分镜模板返回的顶层 `voice_profile`,确定一份全片统一的 `VoiceProfile` 并写入内存;至少包括 speaker identity、approximate age、accent / pronunciation、vocal register、timbre、resonance、breathiness、articulation、speaking pace、pause style、prosody、emotional baseline、overall commercial tone 和 recording / mix character。若旧模板没有返回该字段,再按 `voice-direction.md` 从脚本整理,不得凭空缩成几个形容词。
- `voice_profile` 只作为结构化返回供下游读取,不新增对话列、不写进 `content`;后续 `plan` 和 `video` 必须读取同一份内存值。每个视频片段都要逐字携带该描述,只允许按当前镜头改变局部情绪、停顿、重音和强弱。
- Dialogue / Voice-over 中只有引号内文字允许发声;表演提示必须明确标注 `not spoken`,防止模型把导演说明或字段名念出来。
- 没有独立 voice reference / voice ID 时,`VoiceProfile` 只能作为提示词约束,不得宣称已锁定真实音色。
### `plan`
内部。见 `plan-and-opening.md`。不把脚本计划 / Master 提示词 / Preview·首帧 Prompt 贴进 Chat。
仅当用户已确认离开 script(等待提问选继续)或 FastForward / Jump 到更后阶段时才进入。
无参考模式在调用 `tvc_ads_master_video_prompt` **之前**,必须检查已确认商品的真实图片 URL 是否至少有一张;没有就请用户补图并停在 `plan`,禁止调用 Master Prompt、`tvc_ads_first_frame_prompt` 或首帧 `generate_image`,也禁止用商品描述或分镜表正文代替图片参考。分段仍走 `tvc_ads_script_plan` / `tvc_ads_master_video_prompt`。**HARD**:分镜行 / Chat 卡片是 shot,不是成片单元。计划返回后必须按 `plan-and-opening.md` §Shot ≠ Segment 做进入前校验;「一镜一段」(例如 8 个 2s/3s 镜 → 8 段)非法,必须先本地重切,仍不过再重跑计划。`SegmentCount` 冻结前禁止出预览 / 首帧 / 成片。
**HARD — 开场视觉已 Skip 则只分段**:`opening_visual=skip`(含 Jump 到 `video` 且用户没点名首帧 / 预览)时,计划仍要跑,但**禁止**写 `PreviewPrompts`、禁止调 `tvc_ads_first_frame_prompt`、禁止 `generate_image` 首帧 / 预览;分段通过后同轮进 `video`。只有 `opening_visual` 仍 enabled 时:有参考由 agent 按段写 Preview Prompt;无参考在拆段(及必要的本地重切)后才调用 `run_prompt(prompt_key=tvc_ads_first_frame_prompt)`,输入完整分镜、MasterVideoPrompt、分段后的 `SegmentVideoPrompts[]` 与商品图事实,并在该调用中挂载已确认商品的真实图片 URL(主图第一);读取并校验 `first_frame_prompts[]`,按 `clip_index` 与合并后的 `SegmentCount` 对齐后逐字冻结。随后调用 `generate_image` 时再次挂载同一组真实商品图片 URL,主图仍排第一;分镜表只进 Prompt。禁止再调 `tvc_ads_master_first_frame_prompt`,也禁止 agent 另写或覆盖模板返回的首帧 Prompt。
### `opening_visual`
skip 或各段已 **provided**(用户本轮指定的预览 / 首帧,不是作废旧产物)→ 不生成。否则按 `plan-and-opening.md` 变槽并发 ×N,**N = 合并后的 `SegmentCount`**,禁止按 shot 行数 / Chat 卡片数出图。调用 `generate_image` 前必须重新取已确认商品的真实产品图片 URL,主图第一;不得只沿用首帧 Prompt 工作流的文字结果。无真实产品图 URL → 问补图,禁止无参考硬生成。每张图提交后必须 `get_task` **阻塞轮询到成功**,记下素材 URL;全部终态前禁止发等待提问。
成功后按 §双通道发等待提问并停住(FastForward 除外)。**有参考预览与无参考首帧都不提供 Edit**;只留继续出片和 `Revise`。Rollback 不得把本阶段改成 skip。
### `video` / `merge`
见 `video-generate-prompt.md`。每**段**生成一段新片子(不要用参考视频当成片输入)。段 = `plan` 合并后的 segment,不是分镜表一行。`generate_video` 次数 = `SegmentCount`;`duration` = 该段 `segment_duration`。禁止一镜一段。`generate_video.model` = Video 表 **seedance-2.0-fast** 行的 `model` 列原文;`aspectRatio` / `resolution` 按 §运行时填参只传该行合法 token(无模型表则用 Session 原样)。
进入 `video` 后必须先生成第 1 段;第 1 段成功返回并可作为音频参考后,再在同一 action 并发生成第 2…N 段。后续片段必须引用第 1 段的旁白音色 / 音频参考(有独立音频 URL 才挂;否则只用 VoiceProfile + Clip 1 matching 正文),并继续逐字复用同一份 `VoiceProfile`。第 1 段失败只重跑第 1 段;第 2…N 段失败则只并发重跑失败段。
普通模式:Clip 1 成功后,若能力声明支持独立音频参考槽则先写入 `Clip1AudioReference`;若明确不支持则写入 fallback 匹配约束,不等待不存在的槽位;随后在同一 action 并发启动 Clip 2…N。全部片段成功后对 Host tools 发 **配乐闸门**并停住。问句 = `Do you want background music in the final video?` 选项固定 `No music` / `Add background music`。选 `No music` → 直接以原生音轨合成;选 `Add background music` → 合成时在原生音轨上叠加音乐。视频片段本身仍只生成原生人声、真实环境音、动作 Foley 和必要的自然空间底噪,片段内不生成任何 BGM。N=1 仍走配乐闸门。
FastForward 到 merge → 同样先问配乐,再按选择合成。Skip(`merge`) → 以分段成片为结束态。合成时 `merge_videos` 挂各段成片 URL,禁止传 `nodeIds`。
Rollback 重做 video 后同样停在对应等待提问,不要自动 merge。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有内容方向那一句;3 条方向只进 `options`。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward 不发中间等待提问;Rollback 重做后必须发等待提问。**禁止**给开场视觉加 `Edit`。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略状态句) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options`,禁止 Chat 编号列表。发出后停住,未答前禁止 `parse_product_info` |
| 卖点分析 | `Here are the product selling points:` + `content` 原文 markdown + `Confirm to continue, or tell me what you'd like to change.`(禁止只写 status、禁止只贴正文) | **不要** Host tools;停住等自由回复 |
| parse_product_info 控件已打开 | (可省略状态句;不要复述商品字段;不要预告 display_product_info) | **不要** Host tools;**不要** `display_product_info`;停住等 §商品确认信号 |
| 卖点已确认、规格未齐 | (正文最多一句 `Confirm duration, aspect ratio, and resolution.`;禁止把三项印成单值「当前设置」) | Host tools 真调用:按 §info_card 字面量三题(时长 3 档 `<15s` / `15s-30s` / `30s-1min`;画幅恰好 4 档、分辨率恰好 3 档;id 用 `under_15` / `ratio_*` / `res_*`)。编号单值 / 只写一档 / 少档 = 没问,必须重发 |
| 首次 / 重生成 script | `Here is the storyboard table:` + 每镜一张卡片(按实际表头;禁止贴 `|` 表);可附 `Your storyboard table is ready.` / `Your updated storyboard table is ready.` | 有参考且有角色图:`Review the storyboard table and optional character sheets, then continue.` 否则:`Review the storyboard table, then continue.` 第 1 条:有参考 → `Generate preview image`;无参考 → `Generate first frames` |
| 开场视觉(有参考=预览) | `Your preview images are ready.` | `Review them, then generate the first video clip as the voice reference.` |
| 开场视觉(无参考=首帧) | `Your first frames are ready.` | `Review the first frames, then generate the first video clip as the voice reference.` **不要** Edit |
| 待合成 | `Your TVC video segments are ready.` | Host tools:问句=`Do you want background music in the final video?`;options=`No music` / `Add background music` |
| 单段 / 合成结束 | `Your TVC video is ready.` / `Your full TVC ad video is ready.` | (禁止提问引导) |
产物 `title`(无产物不编造,**无方括号**):商品名 / `Selling Point Analysis` / `Storyboard Table` / `Character {i}` / `Preview - Clip {i}` / `First Frame - Clip {i}` / `TVC Clip {i}`
等待提问主选项(按模式改写,非封闭):卖点分析 → 自由回复后进规格提问;有参考 script → `Generate preview image`;无参考 script → `Generate first frames`;开场视觉后 → `Generate first video clip as voice reference`;Clip 1 成功后按调度自动生成剩余片段;合成 → `No music` / `Add background music`。
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `product`。该跑的角色图同轮并发,每张 `get_task` 到终态。该跑的开场视觉 ×N 同轮并发(N = 合并后的 `SegmentCount`,不是 shot 行数),每张 `get_task` 到终态。分段成片改为两阶段:先生成 Clip 1,成功返回并绑定为旁白音色参考后,再将 Clip 2…N 同轮并发,每段 `get_task` 到终态。`run_prompt` 不与 `generate_image / generate_video` 同拍并行。FastForward / Skip 后的下一阶段在 continuation 立刻开始(问询未答完除外)。Rollback 重做的可见阶段在 continuation 只发等待(卖点:贴三段等自由回复;其它:宿主提问),不顺跑。
Referenced files: 8 — file references are metadata, not package contents.
---
name: ugc-ads
description: "Always use this skill to make a UGC product ad from a product link, product image, or product description. Must trigger for /ugc-ads, ugc-ads, UGC ad, UGC ads, product ad, TikTok ad, Reels ad, shoppable short, creator review, unboxing ad, product seeding video, sales video, Amazon/Shopify/product URL, or when the user drops a product page and says make a video or shoot a clip. Also use when a ugc-ads run is already in progress (Confirmed Product Info, selling-point confirm, specs, storyboard cards, first frames, clips, merge) or the user skips a step, supplies an asset, jumps ahead, or revises an earlier step without restarting. Even a vague \"make a UGC\" or \"help me make a UGC\" must start this skill. First-round with-questions (default) asks 1 content-direction question; no-questions starts the pipeline."
source: "buzzy"
risk: safe
scope: mcp
allowed-tools: |
Buzzy MCP tools
- create_project
- parse_product_info
- display_product_info
- run_prompt
- generate_image
- generate_video
- get_task
- merge_videos
Host tools — not part of this MCP server
- AskQuestion
- ask_question
- AskUserQuestion
---
# UGC Ads Orchestrator
本链自包含。查阅本 skill 文件只用完整前缀 `skills/mcp/ugc-ads/reference/`。
**怎么调平台能力、填哪些参数,对照各 tool 自己的声明**;本文件只写目的、产物和硬底线。
**HARD — allowed-tools 分类**:`Buzzy MCP tools` 是本 MCP 服务注册的平台 tool,经 Buzzy MCP `tools/call`。`Host tools — not part of this MCP server` 是宿主内置提问 tool,**不是** Buzzy MCP tool,也不走 `load_workflow` / ExecuteTools。Cursor 用 `AskQuestion`,Claude 用 `AskUserQuestion` / `ask_question`,Codex 用同类。选择题必须调 Host tools 里当前可用的那个,禁止因为「不在 Buzzy MCP tools 列表里」就改成编号纯文本。
**HARD — create_project**:进入任何需要 `projectId` / `project_id` 的 Buzzy MCP tool 之前,必须先调 `create_project` 拿到真实 id。本会话只创建一次,后续全程复用。workflow tool(`parse_product_info` / `display_product_info` / `run_prompt` / `merge_videos`)传 `projectId`;`generate_image` / `generate_video` 传 `project_id`。禁止编造 id,禁止省略,禁止因为 generate_image / generate_video 写了「可自动建项目」就跳过。`create_project` 的入参是 `name`(可读项目名),不要把 catalog 的 `name` 或 `workflow` 抄过来。Host tools 开场问询那一拍仍禁止同拍调 `create_project`;问询完成(或 `IntentQuestions=false`)后、进 `product` 的第一拍若还没有 id,必须先 `create_project`。Jump / FastForward 到更后阶段同此:还没有 id 就先创建,再调带项目字段的 tool。
**HARD — 宿主提问**:等人选择或确认时(**卖点分析、Apps 商品控件确认除外**),必须对 Host tools 里当前可用名字真调用一次。选项只进提问 tool 的 `options`,且**该题全部可选项必须传齐**(禁止只塞一档)。禁止用 `1.` `2.` `3.` 编号列表、bullet、`Recommended:` 前缀段落作为用户可见选项——那样写 = 本步失败,必须立刻改成真调用。assistant 正文最多一句问句或状态句,**不要复述选项**。不要自己造第 4 个 `Other` 选项:Cursor `AskQuestion` 自带 Other 自由输入。仅当 `tools/list` 里 `AskQuestion` / `ask_question` / `AskUserQuestion` 三个名字都没有时,才允许编号列表,并写明本宿主没有选择框;**规格题的编号列表必须每行列出该字段全部档位**(`Language: English / Spanish / Arabic / Custom`),禁止写成单值(`Language: English`)。Cursor 有 `AskQuestion`,禁止走这条。媒体产物就绪只用 assistant 正文状态句。伪调用、编号单值、或缺档都算没发出提问。
**例外 — 商品确认**:`parse_product_info` 打开编辑控件。有产品页 URL 则传 `productLink`;没有则**不要编造链接、不要传 `productLink`**,打开空表。返回值(即使带 Title / Description / Images)只表示控件已打开,**不是**确认。然后**停住**,等用户确认。确认信号(任一即可):消息含 `Confirmed Product Info`;或用户明确确认/继续该商品(`Confirm` / `Continue` / `looks good` / 确认 / 继续)。在此之前禁止 `display_product_info`,禁止 Host tools 问要不要继续。无 iframe 宿主才用 Host tools 收集标题/描述/图。
**例外 — 卖点分析**:不走 Host tools。run_prompt 返回后按 `selling-analysis-prompt.md` 贴三段:固定引导句 `Here are the product selling points:` + `content` 原文 markdown + 固定确认句 `Confirm to continue, or tell me what you'd like to change.`,然后停住等用户下一条自由回复。禁止只贴正文、不说明这是商品卖点。用户回复 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续 = **已确认**,必须进入 `info_card`。
**例外 — run_prompt `content`**:卖点正文必须原文贴进对话(禁止 code fence),不受「正文最多一句」限制。分镜 `content` 是 9 列管道表;Chat **禁止**贴 `|` 管道表,必须按 `script-table-format.md` 转成分镜卡片。卡片贴完后仍发 Host tools Continue/Revise。
| 何时读 | 文件 |
|--------|------|
| 开场组题(`with-questions` 时恰好 1 题) | `intent-questions.md` |
| 下游缺输入时怎么组槽 | `slot-adaptation.md` |
| 任意状态句 / 提问引导 | 本文件 §双通道文案 |
| 填 `generate_image` / `generate_video` 参数 | 本文件 §运行时填参 |
| 商品确认后的卖点分析 | `selling-analysis-prompt.md` |
| 用户自带参考视频时 | 本文件 §`ref_video`(无单独 reference) |
| 跑到该步且未跳过时 | `product-brief-prompt.md` / `character-scene-image-prompt.md` / `storyboard-script-prompt.md` / `script-table-format.md` / `storyboard-extract-prompt.md` / `storyboard-extract-format.md` / `first-frame-prompt.md` / `video-generate-prompt.md` |
已注册文案模板(只许用这些 key,禁止发明):`ugc_ads_product_brief` / `ugc_ads_selling_analysis` / `ugc_ads_storyboard_with_ref` / `ugc_ads_storyboard_no_ref`。
角色 Prompt、场景 Prompt、首帧 Prompt **由 agent 按对应 reference 直接写出**,禁止再调 `run_prompt`(或其它单独 tool)获取。禁止短路径、读其它 skill、把 YAML 当自由 prompt。
用户可见文案 **固定 English**。`SessionScriptLanguage` 只约束口播 / 分镜单元格。`run_prompt` 的卖点 `content` **必须**作为 markdown 贴进对话(禁止只写一句 status、禁止 code fence)。分镜 `content` 是 9 列管道表;对话必须转成分镜卡片,**禁止**把该表贴进 Chat。
参考素材**一律走 URL 字段**(`image_url` / `image_urls` / `video_url` / `video_urls`,以各 tool 声明为准),适用于 `generate_image` / `generate_video` / `run_prompt` / `merge_videos`。**禁止传 `nodeIds`**。`ProductBrief` / 卖点正文 / 角色场景 Prompt 文本不是生成参考;生成参考用产品主图 URL。
角色图 / 场景图 / 首帧的 `generate_image.model` = `<available_models>` Image 表 **Nano Banana 2** 行的 `model` 列原文(`name` 只用来找行;禁止把 `Nano Banana 2` 别名、视频行、其它图片行写入)。
成片的 `generate_video.model` = `<available_models>` Video 表 **Seedance 2.0 Fast** 行的 `model` 列原文(`name` 只用来找行;禁止把 `Seedance 2.0 Fast` 别名、图片行、其它视频行写入)。填参细则见 §运行时填参。
**HARD — generate_image / generate_video 阻塞轮询**:`generate_image` / `generate_video` 只返回 `task_id`,**不算完成**。同一 continuation 必须立刻反复调用 `get_task(task_id)`,直到终态:`TASK_STATE_PENDING` / `TASK_STATE_RUNNING` → 继续 `get_task`(禁止停住、禁止等用户下一句、禁止只写「生成中」就结束、禁止发下一阶段提问);`TASK_STATE_SUCCEEDED` → 记下返回里的**素材 URL**(`url` / `image_url` / `video_url` 以返回为准),本段才算完成;失败态 → 说明失败,禁止当成功、禁止再叠一次 generate_image / generate_video。并发提交的多个 `task_id` 必须全部轮询到终态后才能 Advance。Apps widget 只展示进度,**不能**代替 `get_task`。禁止因为「控件会自己轮询」而跳过。后续 `generate_image` / `generate_video` / `run_prompt` / `merge_videos` 都用这些 URL,**禁止**把 `node_id` 当素材入参。
---
## 运行时填参(HARD)
本链没有 generic-agent system prompt。调平台 tool 时按下表填,**禁止发明**当前 tool schema 没有的字段。schema 有的必填项缺了就按本表补,不要空着让平台猜。
### 项目
| 调用 | 怎么填 |
|------|--------|
| `create_project` | `{ "name": "<短项目名>" }`。本链只调一次,记下返回的 id |
| `parse_product_info` / `display_product_info` / `run_prompt` / `merge_videos` | 必传 `projectId` = 该 id |
| `generate_image` / `generate_video` | 必传 `project_id` = 该 id。加载本 skill 后禁止省略、禁止靠自动建项目 |
还没有 id 就先 `create_project`,不要先调上表其它 tool。
### 模型
| 调用 | 怎么填 `model` |
|------|----------------|
| `generate_image`(角色 / 场景 / 首帧) | Image 表 **Nano Banana 2** 行的 `model` 列原文 |
| `generate_video`(成片) | Video 表 **Seedance 2.0 Fast** 行的 `model` 列原文 |
`name` 只用来找行。禁止把别名、错表、其它行写进 `model`。
### 画幅 / 分辨率(成片)
成片读 Video 表 **Seedance 2.0 Fast** 行:
| 字段 | 怎么填 |
|------|--------|
| `aspectRatio` | `SessionRatio` 若在该行 `ratios` 里 → 原样用。`ratios=fixed` → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止把非法 token 传出去 |
| `resolution` | `SessionVideoResolution` 若在该行 `resolutions` 里 → 原样用(`480` / `480p` 等照抄)。`resolutions` 为 `-` / 空 → **整项省略**。不在表里 → 改用该行第一个合法 token;无法唯一确定则 Host tools 再问一次。禁止写死 `720p` / `1080p` |
| `duration` | **本段** Duration 秒数(extract 拆出来的段长),不是 info_card 的 12 / 25 / 45 |
规格写入 Session 后,后续首帧 / 成片**静默继承**仍合法的 `SessionRatio` / `SessionVideoResolution`;用户本句写了新值才改。角色图 / 场景图的 `aspectRatio` 仍固定 `9:16`,不受本表影响。
info_card 规格题**必须**走 Host tools,**每题全部可选项都要进 `options`**(语言四档 `English` / `Spanish` / `Arabic` / `Custom`;画幅六档 `21:9` / `16:9` / `4:3` / `1:1` / `3:4` / `9:16`;时长三档 `<15s` / `15s-30s` / `30s-1min`;分辨率两档 `720p` / `1080p`)。禁止从 `<available_models>` 抄 `ratios`,禁止因缺表 / `ratios=fixed` 省略画幅题,禁止 Chat 只打印一档(`Language: English` / `Aspect ratio: 9:16` / `Duration: 30s-1min` / `Resolution: 720p`)。禁止在正文里写 default / 预选。
### 媒体绑定
按 tool 分流,**禁止发明当前 schema 没有的字段**:
| 调用 | 怎么挂素材 |
|------|------------|
| `generate_image` / `generate_video` / `run_prompt` / `merge_videos` | **只传 URL 字段**(声明里的 `image_url` / `image_urls` / `video_url` / `video_urls`)。图进 image_*,视频进 video_*。**禁止传 `nodeIds`** |
| `display_product_info.images` | 确认消息里的 `Main Image:` / `Images:` URL |
这些 URL 只许用已有真实地址,禁止编造、禁止为凑槽复制同一条:
- 商品图:确认消息 `Main Image:` / `Images:`,或 `display_product_info` 返回的图 URL
- 用户 Provide:用户消息 / 上传给出的图、视频 URL
- 本链生成:`get_task` 成功后的素材 URL
prompt 正文禁止写 HTTPS / `@Image` / `@Video`。
### 占位符
prompt 正文只用 `<<<image_n>>>` / `<<<video_n>>>`:小写、从 `1` 起,与 `image_url(s)` / `video_url(s)` 顺序一一对应。每个占位必须写清角色。历史里若烂成 `<<>>`,按当前绑定重写成完整占位后再调用。禁止空占位。
### 串行
`run_prompt` **禁止**与 `generate_image` / `generate_video` 同拍并行。角色+场景成图、首帧 ×N、Video 2…N 仍按本文件 §并行。
### 含糊 / 纯确认
**只**适用于已发出且仍有效的 **Host tools** 提问:`nice` / 无可执行新指令 → 重发同一提问,不要 Advance。
**不适用**于卖点三段、也不适用于商品控件确认。这两处 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续 = **已确认**,必须 Advance。
---
## 为什么要灵活
用户不会只走一条固定生产线。他们可能跳过任意中间产物、自带任意素材、从任意点直奔更后的目标、中途改主意、或对任意前序不满意。本 skill 用**阶段图 + 五个算子**处理这些情况;下面的「不要场景 / 自带角色图 / script 后出视频」只是算子的实例,**不是**封闭清单。遇到未写出的说法,先归到某个算子,再往下走,不要因为「没写过这个例子」而卡住。
---
## 阶段图
默认顺序(只执行 **enabled** 的阶段):
```text
intent → product → selling_analysis → info_card → character → scene → ref_video → script → extract → first_frame → video → merge
```
| 阶段 | 默认 | 用户可见产物 | 说明 |
|------|------|--------------|------|
| `intent` | `with-questions` 则跑(恰好 1 题);`no-questions` 则 skip | 无 | 指令式触发,见 §开场意图。恰好 1 题 = 广告视频内容方向,恰好 3 个按指令现写的选项 |
| `product` | 必跑 | 商品卡 / brief | 三路互斥入口,见 §阶段目的 |
| `selling_analysis` | 必跑 | 对话中的卖点 markdown(带引导 / 确认句) | 商品确认后 run_prompt,按 `selling-analysis-prompt.md` 贴三段并停住;用户确认后 `content` 全文 = 下游 `SellingPoint` |
| `info_card` | 规格未齐则跑 | 规格提问 | 语言 / 画幅 / 时长 / 分辨率(无卖点字段) |
| `character` | run | 角色 Prompt + 成图 | 可选 |
| `scene` | run | 场景 Prompt + 成图 | 可选 |
| `ref_video` | skip | 用户自带参考视频 | 可选;默认 skip;Provide 才绑定 |
| `script` | 必有(生成或自供) | 分镜表 | 成片前必须有一份可用 script |
| `extract` | script 之后自动 | 无(纯内存) | 内部阶段,不调 LLM |
| `first_frame` | run | 各段首帧 | 可选 |
| `video` | 必跑才能成片 | 分段成片 | |
| `merge` | 仅 N≥2 | 成片 | N=1 则 skip |
每阶段状态:`pending` | `run` | `skip` | `provided` | `done` | `invalidated`。
**enabled** = 不是 `skip`,且(`pending`/`run`/`invalidated` 需要执行,或 `provided` 只需绑定不再生成)。
`ref_video` 开场默认 **`skip`**。用户自带视频则 Provide。
Jump 分类直接读上表:说明里写「可选」的是可选可见;写「无 / 纯内存 / 内部」的是内部;卖点分析等待 / 规格提问是闸门。`intent` 在 `IntentQuestions=true` 时必须先问完,不是 Jump 可跳过闸门。不要再为某条跳转另写规则。
**硬底线**(不能整链跳过):必须有商品身份(链接 / 图 / 描述之一);要出视频必须有 script(生成或自供)以及至少一块视觉参考(首帧、角色图或产品图之一)。其它阶段都可以 skip 或 provided。
`IntentQuestions`:仅从本任务**首轮**字面量读取。出现 `no-questions` → `false`(跳过问询);出现 `with-questions` 或两者都未出现 → `true`(默认问 1 题)。首轮冻结,禁止后续轮次改写。`false` → `intent = skip`,`IntentDone=true`,同轮进 `product`。卖点分析 / 规格提问仍照常。
---
## 五个算子(HARD — 任意阶段、任意轮次)
从用户这句话里识别**一个主算子**(一条消息可同时 Provide 多件素材)。然后立刻 Advance。
### 1. Skip(S)
用户不要某阶段的产物(「不要场景」「别生成首帧」「不用参考视频」「不要出镜人物」「跳过合成直接看分段」……)。
- `Stage[S] = skip`。不生成、不展示、不等该步选项。
- 下游按 `slot-adaptation.md` **缺了就省略或回退到次近素材**,禁止为凑槽复制节点。
- 若当前正停在 S 的等待提问,马上离开。
### 2. Provide(S, asset)
用户交出该阶段产物(上传、粘贴、产物 id……)。**提供优先于 Skip。**
- 绑定到 S 的锚点,`Stage[S] = provided`,不生成。
- 模特图、场景图、声音参考 **禁止**当成商品主图或产品页链接。
- 任意轮次都可 Provide;中途补交则改状态并继续。
### 3. Jump(T)
用户要的是 **T 的产物**,不是把路上每一站都做完(「直接出视频」「先出首帧」「先出分镜」「不要中间结果」「不生成角色,直接出首帧」……)。
1. 从这句话认出目标 T。只说「直接做完 / 出视频」→ `T = video`(N≥2 时含 `merge`)。点名首帧 → `T = first_frame`。点名分镜 → `T = script`。
2. 对**当前点到 T 之间**(不含 T)的每个阶段 S,按下表分类,**禁止**按具体阶段名写死例外:
| S 对 T 的关系 | 怎么处理 |
|---------------|----------|
| 已 `done` / `provided` | 沿用 |
| **硬前置**:缺少 S 的产物会违反硬底线,或 T 按 `slot-adaptation.md` 没有任何次近回退可用 | 必须有产物(生成或 Provide) |
| **内部阶段**(无用户可见产物,只为硬前置或 T 服务) | 静默跑 |
| **闸门**(卖点分析 / 规格提问):值可草稿或默认 | 写入草稿或默认,不停 |
| **可选可见**,且用户本句没点名要这份产物 | `Skip(S)` |
硬底线仍是:商品身份;出片前必须有 script;至少一块视觉(首帧 / 角色图 / 产品图任一即可)。因此 script 是 `first_frame` / `video` 的硬前置;角色、场景、首帧**不是**成片的硬前置;角色、场景**不是**首帧的硬前置(回退到产品图)。
`IntentQuestions=true` 且内容方向题未发出或未答 → **禁止**把问询当闸门跳过;先问完再 FastForward。`parse_product_info` 控件未收到 §商品确认信号 → 商品身份未成立,禁止 Jump 越过去 `display_product_info` 或更后阶段。
3. 用户本句点名要保留的中间产物 → 该阶段不 Skip。点当前等待提问的主选项 → **不是** Jump,按普通继续做当前阶段。
4. 然后 `FastForwardTo = T`:只跑仍 enabled 的阶段,不发中间等待提问;停在 T 的完成态。
5. 只说「按当前计划做完、中间别停」而**没有**点名跳过中间产物 → 仅 FastForward,不改 skip/run。
### 4. Rollback(S)
用户不满意某前序(提问选项 `Revise …` 或自然语言点名 script / 角色 / 场景 / 参考 / 首帧 / 卖点 / 规格 / 成片……)。未点名时,按语义落到**最早仍影响当前问题的阶段**。
- `Stage[S] = invalidated`;S **之后**全部 `invalidated`(旧产物 id 可留,状态禁止再引用)。作废后的下游**恢复为回退前的计划**(`run` / `skip` / `provided` 以回退前为准),不要把可选阶段改成 skip。
- 用这条建议改输入 / 规格;只说「重做」则同参重跑。
- **禁止 AutoRun**:重做完 S 后,若 S 有用户可见产物 → **停住**(卖点:贴三段等自由回复;其它:状态句 + 宿主提问)。不要顺跑 extract / first_frame / video / merge。内部阶段(如 extract)只在用户选了等待提问上的继续之后才跑。
- `first_frame` 回退前是 `run` 则重做链路里仍是 `run`,禁止因回溯而 skip。
### 5. Reroute(S, mode)
同一阶段换做法(等用户传参考 → 改为不参考;brief 改走链接解析……)。
- 更新该阶段模式,作废只依赖旧模式的下游(通常从该阶段起 invalidated)。
- 立刻按新模式执行或等待新输入。
**冲突**:Provide > Skip > 默认 run。Jump 不取消已 Provide 的素材。Rollback 之后以最新 Stage 计划为准。
---
## 不得卡住(HARD)
每一次 assistant action 必须是下面之一(自上而下,先匹配的优先;禁止用「调用平台能力」压过前面的等待):
1. 开场问询(仅 `IntentQuestions=true` 且内容方向题尚未真发出):同轮对 Host tools 真调用一次。标题 = 短题名;问句 = **恰好一句**;`options` = **恰好 3 条**且**第一条为推荐默认**。无真调用、把 3 条方向写成 Chat 编号列表、或问句为空 / 把占位句当成唯一问句 = 本步失败。**这一拍只能发这一次 Host tools**,禁止同拍再调任何 Buzzy MCP tool(含 `create_project` / `parse_product_info` / `display_product_info` / `run_prompt` / `generate_image / generate_video`)。`IntentQuestions=false` 时本条不适用,直接进 `product`
2. `IntentQuestions=true` 且内容方向题**已经**对 Host tools 真发出,且用户还没有对本题作答 → **停住**。禁止 `parse_product_info` / `display_product_info` / 其它流水线 tool。Host tools 返回若**没有**用户选中的 option id/label / Other 文本,只表示选择框已发出,**不是**已答,禁止因此 Advance。`IntentDone` 在用户作答前必须保持 `false`。返回里已有选中方向 → 本条不适用,收下并 `IntentDone=true`
3. 停在已打开的 `parse_product_info` 商品编辑控件上,等用户确认(见 §商品确认信号)。此期间禁止 `display_product_info`,禁止 Host tools 问是否继续
4. 停在**已经发出且仍有效**的其它宿主提问上,等用户选择
5. 停在已贴进对话的卖点三段正文上,等用户自由回复(卖点闸门不走 Host tools)
6. 卖点已确认、规格未齐、且 §info_card 尚未对 Host tools 真发出(Chat 编号单值 / 只写一档不算):同轮真调用一次,四题每题全部档位进 `options`,然后停住。禁止进 `character` / `generate_image`
7. 调用平台能力,产出下一件产物或下一轮宿主提问(仅当 1–6 都不适用)
禁止空回复且无任何能力调用、也无宿主提问、也未贴出卖点正文、也未打开商品控件——**但**开场问询 / 其它 Host tools 题已经发出、用户尚未作答时,**停住且不再调任何 tool 是正确终点**(不要为了避开「空回复」去调 `parse_product_info`)。伪调用文本已写出但没有真调用 → 重发真调用。
能力返回后的 continuation 必须 Advance,不需要用户再发一句——**例外(必须停住)**:① Host tools 开场问询 / 规格提问已发出、用户尚未作答;② `parse_product_info` 返回只表示控件已打开,不要 Advance 到 `display_product_info`。Advance 碰到用户可见产物且非 FastForward 时发等待并**停住**(Rollback 重做后同此)。卖点等待 = 引导句 + markdown + 确认句,不是 Host tools。
贴过卖点正文 **不是** 已确认:run_prompt 已返回但本会话还没按 `selling-analysis-prompt.md` 贴出三段 → 立刻贴三段并停住,禁止只写 status、禁止只贴 `content` 不说明这是卖点、禁止空结束。
缺必填输入 → 问清楚(一题宿主提问),不要空转。
阶段被 Skip / 已 Provided → **同轮或同一次 continuation** 进入下一 enabled 阶段。
---
## Advance
算子落地后,取阶段图上**下一个 enabled 且未 done/provided** 的阶段:
- 需要产出 → 按 §阶段目的选用平台能力
- 只需绑定(provided)→ 记锚点,继续下一个
- skip → 跳过
- 普通模式(含 Rollback 重做后)且该阶段有用户可见产物、且不在 FastForward 中 → 按 §双通道文案发等待提问(主路径 = 下一 enabled 阶段),**停住**
- FastForward 中 → 不发中间等待提问,继续直到 Jump 的目标 T
过渡态(`display_product_info` 刚跑完 / brief 刚齐 / 卖点等待刚被确认 / 仅第一段成片)**禁止停驻**。`parse_product_info` 刚返回 **必须停驻**,不是过渡态。Host tools 开场问询刚发出、用户尚未作答 **必须停驻**,不是过渡态,禁止 Advance 到 `product`。
**商品确认后的同一 continuation(HARD)**:先 `display_product_info`(该次确认最多一次)→ 立刻 `selling_analysis`(run_prompt + 贴三段)→ 停住。禁止在 display_product_info 之前跑卖点。禁止只 display_product_info 就结束。卖点「尚未跑完」= 本会话还没贴出三段。未在 Jump 越过时禁止先出规格提问。卖点分析普通模式:run_prompt 返回后**同一 continuation** 必须按 `selling-analysis-prompt.md` 贴出三段,然后**停住**(只写 status、只贴 `content` 不说明这是卖点、或调 Host tools Continue/Revise = 本步失败)。用户从该等待确认后、规格未齐 → 立刻进入 `info_card`。角色/场景刚齐 → 立刻发 script 等待提问。
正在 Jump 越过这些闸门 / 可选阶段 → 按 §Jump 写入默认或 Skip,不要被本段拦截。问询未完成或商品控件未确认时,Jump 也不得越过这两道等待。
---
## 开场意图(`intent`)
**目的**:是否问询由首轮指令字面量决定。问则发出 1 题后**停住**,等用户答完再进 `product`;不问则同轮进 `product`。细则见 `intent-questions.md`。
- **指令式触发(HARD)**:只读本任务**首轮**字面量。`no-questions` → 不问,`intent=skip`,立刻进 `product`。`with-questions` 或未写 → 问 **恰好 1 题**。冻结后禁止改写。用户后来说「直接开始」不能代替首轮 `no-questions`。
- **`IntentQuestions=true`(HARD)**:正式流水线前必须对 Host tools 发出 **恰好 1 题**(广告视频内容方向)。用户看见的是选择框,不是 Chat 里的编号列表。
- **开场提问 HARD**:标题 = 短题名;问句 = **恰好一句**(禁止把选项写进问句、禁止问句为空);`options` = **恰好 3 条**且第一条 = 推荐默认。**禁止**用多字段规格提问来问这个问题。**禁止**把 3 条方向写进 assistant 正文。
- **发出 ≠ 答完(HARD)**:Host tools 调用成功 / 选择框已出现 **不是** `IntentDone`。`IntentDone=true` **只**在用户点选了 3 条之一、用 Other 写了方向、或下一条消息给出可执行内容方向之后。发出后必须停住等用户下一句,**禁止**同拍或紧接着的 continuation 调 `parse_product_info`。
- **与用户输入挂钩(HARD)**:问句和 3 个选项必须根据本轮用户指令现写。选项是具体可执行的内容方向(运镜要写清展现什么;剧情要写清具体情节),禁止空泛标签,禁止原样套示例,禁止抛一套与这条指令无关的通用问卷。
- 已由首轮文本 / 上传说清的事实写入字段,**不要再确认一遍**;本题只问内容方向。
- `IntentQuestions=true` 时:**禁止** 0 题进 `product`。也**禁止**「题已发出、人还没答」就进 `product`。问询中的上传先 Provide,再发出本题或在本题已答后结束问询。
- `IntentQuestions=false` 时:未问到的项用默认(可选阶段 `run`;`ref_video=skip`;画风 `authentic handheld UGC`)。卖点 / 规格仍跑。
---
## 每 turn
自上而下只取一条:
0. 伪调用无真执行 → 重发。
1. `IntentQuestions=true` 且内容方向题尚未对 Host tools 真发出 → **只发这一题**,然后**停住**。禁止同拍 `create_project` / `parse_product_info` / `display_product_info` / 其它流水线 tool。首轮带了链接 / 图也先问询,入口只记账。编号列表不算已问。
2. `IntentQuestions=true` 且内容方向题已对 Host tools 真发出,且用户还没有对本题作答 → **停住**。返回里没有选中的 option / Other 文本 = 未答。禁止 `parse_product_info`。禁止把 `IntentDone` 置 `true`。返回或用户下一句已有方向 → 收下,`IntentDone=true`,再进 `product`。
3. `parse_product_info` 已打开,且本会话还没有 §商品确认信号 → **停住**。禁止 `display_product_info`。禁止 Host tools 问要不要继续。tool 返回里的商品字段是刮取草稿,不是确认。
4. 某次能力调用已发出、**尚无结果** → 等结果,不要叠新生成调用。`generate_image` / `generate_video` 返回 `task_id` = **尚无结果**:本 continuation 必须 `get_task` 轮询到终态,`get_task` 不算叠生成。已返回终态 / 同步 tool 已返回(**不含** `parse_product_info`,**不含** Host tools 开场问询 / 规格提问)→ 必须 continuation,禁止干等用户再发一句。卖点 `run_prompt` 返回后按 `selling-analysis-prompt.md` 贴三段并停住是 mandatory,不算叠生成。
5. 已有 §商品确认信号,且该次确认还没跑过 `display_product_info` → 本 continuation **先** `display_product_info`,**立刻** `selling_analysis`(run_prompt + 贴三段)。禁止只 display_product_info 就停。`display_product_info` 已按该次确认跑完:卖点三段未贴 → 只跑卖点(未调用则调用;已返回则贴三段并停住)。三段已贴仍在等用户 → 停住,不要顺跑规格提问。卖点已确认但规格未出 → **只**对 Host tools 发 §info_card 四题(每题全部档位进 `options`)。Chat 打印 `1. Language: English` 这种单值不算已出,必须立刻改成四项 × 全部档位。无链有图且 `ProductBrief` 已齐、卖点三段未贴 → 只跑卖点。**本条在开场题未答完时不适用。**
6. 第一段成片已成、N≥2、其余段尚未全部发起且非等待中 → 发齐剩余段。
7. 本轮能识别算子 → 执行算子。停在某次等待提问时,用户点名的是**更后阶段的产物** → 按 Jump(T),不要当成确认当前主选项。若 `IntentQuestions=true` 且内容方向题未发出或未答:**只记账**,**禁止**进 `product` / `parse_product_info`;题未发出则本轮仍只问这一题,题已发出则停住等答。`IntentQuestions=false` → 不要进本条问询分支。
8. `IntentQuestions=true` 且 `IntentDone=false` → 题未发出则只发这一题并停;题已发出未答则停住,**不要**进 `product`。必须真调用 Host tools,问句含内容方向;编号列表不算已问。用户已答 → `IntentDone=true`,再进 `product`。`IntentQuestions=false` → 进 `product`。
9. FastForward 且上一步已齐 → 只跑下一 enabled 阶段,直到目标 T。问询未完成(题未发出或未答)或商品控件未确认 → **不要**走本条。Rollback 重做刚完成 → **不要**走本条。
10. 否则按当前阶段目的推进。仅当停在 **Host tools** 提问上且用户只回 `nice` / 无可执行新指令 → 重发同一提问,不要空回复,不要 Advance。卖点三段或商品控件上的 `looks good` / `continue` / `ok` **不是**本条,按已确认处理。
---
## 阶段目的(该跑时才读对应 reference)
链隔离:`UgcAdsActive` 为真时只按本文件。启动:`/ugc-ads`、UGC ad、跳步 / 自供 / 回退式 UGC,或本链已有入口 / 问询 / 相位。
状态从 history 每轮重推。禁止拿 `tvc-ads` / `trending-search` 正文跑本链。
### `product`
**前置**:本会话还没有 `create_project` 返回的 id → 先 `create_project({ name })`,再走下面三路。问询未完成时不要进本阶段。
**商品确认信号(HARD)**:`parse_product_info` 返回 ≠ 确认。确认 = 下面任一:消息含 `Confirmed Product Info`;用户明确确认/继续该商品(`Confirm` / `Continue` / `looks good` / `ok` / 确认 / 继续)。不要只认「首行字面量」,也不要把刮取字段当成已确认。
三路互斥:
1. 有产品详情页链接 → `parse_product_info({ projectId, productLink })` 打开编辑控件。**返回值不是确认**:同一 continuation **禁止** `display_product_info`,**停住**等 §商品确认信号(禁止 Host tools 问是否继续)→ 从确认消息解析 `Title:` / `Description:` / `Main Image:` / 全部 `Images:`(没有这些前缀则用用户确认的标题/描述/图)→ `display_product_info({ projectId, title, description, images: [main, ...others] })`(每个确认事件最多一次)→ **同一 continuation** 立刻进入 `selling_analysis`
2. 无链接、有商品图 → 记下商品图 id;缺用户文则用 `ugc_ads_product_brief` 写 `ProductBrief`,有实质用户文则整理后写入 `ProductBrief` → 进入 `selling_analysis`。不要走解析。进入 `selling_analysis` 前同样必须已有 `projectId`
3. 无链接、无图 → `parse_product_info({ projectId })`(**不传** `productLink`)打开空编辑控件,用户填 title / description / 上传图片。**不要**再用 Host tools 收集这三项。同一 continuation **禁止** `display_product_info`。停住等 §商品确认信号,再按路径 1 同样解析并 `display_product_info`。无 iframe 宿主才用 Host tools 收集标题/描述/图。
`imageUrls:` 且 host 含 `buzzy.now`、path 含 `/file-service/`、图片后缀 → 商品图,不是产品页。
商品已确认展示 = `display_product_info` 已按该次确认跑完,不是 `parse_product_info` 刚返回。卖点三段未贴 → 立刻 `selling_analysis`;**禁止**先出规格提问。
parse / 控件确认后的 `ProductBrief`:
```text
Product Name: {ConfirmedProductTitle}
Product Description:
{ConfirmedProductDescription}
```
### `selling_analysis`
见 `selling-analysis-prompt.md`。前置:产品信息已确认。
`run_prompt(prompt_key=ugc_ads_selling_analysis, projectId)` **恰好 1 次**(已有 brief 只当输入,**不要**再调 `ugc_ads_product_brief`)。成功字段是 `content` + `name`(`name` 必须是 `Selling Point Analysis`)。商品图 URL 有才加(确认消息 `Main Image:` / `Images:`,或 `display_product_info` 返回的图地址)。还没有 `projectId` 就先 `create_project`。
**HARD**:`恰好 1 次` 只约束 run_prompt。同一 continuation 必须按 `selling-analysis-prompt.md` 贴三段:`Here are the product selling points:` + `items[].content` 原文 markdown + `Confirm to continue, or tell me what you'd like to change.`(禁止只写 `Your selling point analysis is ready.`,禁止 code fence,禁止只贴正文不说明这是卖点)。然后**停住**等用户自由回复。**不要**调 Host tools Continue/Revise。缺这三段 = 卡住 / 本步失败。不要顺跑规格提问。用户回复 `ok` / `continue` / `looks good` / `confirm` / 确认 / 继续,或改了文案后接受 → `SellingPoint` = `content` 全文(不含引导句 / 确认句;用户改了文案则以用户稿为准)。规格提问不再收卖点。
### `info_card`
前置:`SellingPoint` 已写入。
**必须**对 Host tools 真调用一次(能一次提多题就一次提完)。标题 `Set up your UGC Video`。assistant 正文最多一句:`Choose the language and set the video specs.`
**HARD — 每项必须列出全部可选项**:Language / Aspect ratio / Duration / Resolution 四项都要出现,**每一项都必须把下表该行全部档位写全**。Host tools:该题 `options` = 该行全部档位,禁止只塞一档。禁止在正文、问句、选项旁写 default / 预选 / Recommended / 当前设置。
仅当三个 Host tools 名字都没有、只能用正文时:用编号列表,但**每行必须是 `标签: 档1 / 档2 / …`**,形状如下(禁止改成单值):
```text
Choose the language and set the video specs.
1. Language: English / Spanish / Arabic / Custom
2. Aspect ratio: 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16
3. Duration: <15s / 15s-30s / 30s-1min
4. Resolution: 720p / 1080p
```
下面任一写法 = 本步失败,必须立刻改成「四项 × 全部档位」(不要继续 character / 成图):
- 只写一档:`1. Language: English` / `2. Aspect ratio: 9:16` / `3. Duration: 30s-1min` / `4. Resolution: 720p`
- 把四项印成「当前设置」而不给其它档
- 伪调用文本、或缺任一题、或缺任一题的任一档
```text
AskQuestion
title: Set up your UGC Video
questions:
- id: language
prompt: Language
options:
- id: english
label: English
- id: spanish
label: Spanish
- id: arabic
label: Arabic
- id: custom
label: Custom
- id: aspect_ratio
prompt: Aspect ratio
options:
- id: "21:9"
label: 21:9
- id: "16:9"
label: 16:9
- id: "4:3"
label: 4:3
- id: "1:1"
label: 1:1
- id: "3:4"
label: 3:4
- id: "9:16"
label: 9:16
- id: duration
prompt: Duration
options:
- id: under_15
label: <15s
- id: 15_to_30
label: 15s-30s
- id: 30_to_1min
label: 30s-1min
- id: resolution
prompt: Resolution
options:
- id: 720p
label: 720p
- id: 1080p
label: 1080p
```
**固定顺序 HARD**(四题都要出现,每题 options 必须传齐,禁止省略档位):
| 顺序 | 标签 | `name` | 全部可选项(必须全部列出) |
|------|------|--------|---------------------------|
| 1 | Language | `language` | `English` / `Spanish` / `Arabic` / `Custom` |
| 2 | Aspect Ratio | `aspectRatio` | `21:9` / `16:9` / `4:3` / `1:1` / `3:4` / `9:16` |
| 3 | Duration | `duration` | `<15s` / `15s-30s` / `30s-1min` |
| 4 | Resolution | `resolution` | `720p` / `1080p` |
发出后**停住**等用户点选。Host tools 返回若没有各题选中项 = 未答,禁止 Advance。只写一档的编号列表不算已问。
整链一次。用户**本句已明确写出**语言 + 画幅 + 时长(+ 分辨率)且要求开跑 → 写入 Session 后可不再停。只打印一档 / 用户未逐项选定 ≠ 已给齐。`Custom` → 口播按 English。时长写入分镜:`<15s` → 12s;`15s-30s` → 25s;`30s-1min` → 45s。Jump 越过本闸且用户未点名规格 → 内部写入 `English` / `9:16` / `30s-1min` / `720p`,禁止把这四档印给用户当选项清单。成片调用时若有模型表,再按 §运行时填参收敛一次:用户选的 token 不在该行 → 改用该行第一个合法值,或 Host tools 再问一次。无模型表则按用户所选原样传。
### `character` / `scene`
见 `character-scene-image-prompt.md`。该跑且无自供图:同轮先写齐 `ScenePromptBody` / `CharacterPromptBody`(角色背景槽必须对齐场景 Prompt 正文;正文不上 Chat),再**并发**成图。角色成图 **禁止**挂场景图当参考。`generate_image.model` = `<available_models>` Image 表 **Nano Banana 2** 行的 `model` 列原文。角色图 / 场景图 `generate_image.aspectRatio` **固定 `9:16`**,禁止跟 `SessionRatio` / 规格提问。有则追加 `Character Role` / `Visual Tone`。skip → 对应 Description 用 `(none)`。provided → 只绑定。每个 `generate_image` 必须 `get_task` **阻塞轮询到成功** 才算完成。成功只在正文写状态句。
成功后下一 enabled 阶段通常是 `script`。发 script 等待提问。
### `ref_video`
可选。默认 `skip`。仅当用户 Provide 参考视频时变为 `provided`。
- 默认 skip → 无参考;角色/场景齐后立刻发 script 等待提问
- provided(上传、粘贴、产物 id、`Use this video` + URL)→ 绑定,不要再造一份视频,再发 script 等待提问
- 用户说不用参考 → 保持 skip
### `script`
有用户分镜 → 整理成 9 列管道表,并按 `script-table-format.md` 把每一行转成分镜卡片贴进对话。否则见 `storyboard-script-prompt.md`。缺角色/场景/参考写 `(none)`。
**HARD**:run_prompt **恰好 1 次**;成功字段是 `content` + `name`(`name` 必须是 `[Script] UGC Storyboard`)。必挂商品图 URL,角色图 / 场景图 / 参考视频 URL 有则加。同一 continuation 必须按「对话分镜卡片」贴进对话(禁止把 `|` 管道表贴进 Chat;禁止 code fence)。
非 9 列 / 缺 GFM 分隔行 / 缺 `content` → 才允许同 key 重试。行数目标是 `round(时长秒 / 30 × 8)`(12s→3、25s→7、45s→12),少于目标也照收,**不要**因行数重试。普通模式(含 Rollback 重做 script)→ 卡片在对话里可见后发 Host tools Continue/Revise(引导 `Review the storyboard, then continue.`),**禁止**同轮 `extract` / 首帧 / 成片。FastForward:贴卡片后立刻 `extract`。
### `extract`
内部。按 `script-table-format.md` 拆段(每段 ≤15s 且 ≤3 镜)。超限 → 请改 script,不要硬出片。通过后写入 `ExtractVideoContents[]`。不调 LLM。仅当用户已确认离开 script(等待提问选继续)或 FastForward 时才进入本阶段。完成后:`first_frame` 仍 enabled → 进 `first_frame`;否则进 `video`。禁止把已 `invalidated` 的旧首帧当成「用户已提供首帧」。
### `first_frame`
skip 或各段已 **provided**(用户本轮指定的首帧,不是已 `invalidated` 的旧图)→ 不生成。否则 agent 按 `first-frame-prompt.md` 变槽**直接写出**各段首帧 Prompt(禁止 run_prompt),再并发 ×N 成图。`generate_image.model` = `<available_models>` Image 表 **Nano Banana 2** 行的 `model` 列原文。每张图提交后必须 `get_task` **阻塞轮询到成功**,记下素材 URL;全部终态前禁止发等待提问。无任何可用图 → 问补图。成功后按 §双通道发等待提问并停住(FastForward 除外)。Rollback 不得把本阶段改成 skip。
### `video` / `merge`
见 `video-generate-prompt.md`。每段生成一段新片子(不要用参考视频当成片输入)。`generate_video.model` = Video 表 **Seedance 2.0 Fast** 行的 `model` 列原文;`aspectRatio` / `resolution` 按 §运行时填参只传该行合法 token(无模型表则用 Session 原样)。Video 1 先发,`get_task` **阻塞轮询到成功** 后再发 2…N(后续段必须参照 Video 1)。N≥2 同轮发齐后,每一段都必须 `get_task` 轮询到终态。成片正文按 extract **改写 Timeline**,禁止整段粘 extract。普通模式 N≥2 等用户合成;FastForward 则自动合成(不配 BGM)。合成时 `merge_videos` 挂各段成片 URL,禁止传 `nodeIds`。N=1 禁止合成。Rollback 重做 video 后同样停在对应等待提问,不要自动 merge。
---
## 双通道文案(HARD — 全流程)
任意阶段的首次生成、重生成、Provide、等待下一步,都用**同一套拆句**。选哪个能力对照 tool 声明;这里只约束两句分别写什么。
| 槽 | 取值 |
|----|------|
| `{ReadyNoun}` | 本拍刚落地或刚更新的用户可见产物短名 |
| `{NextAct}` | 下一 **enabled** 阶段的主路径动作 |
**同轮同时发状态句 + 宿主提问时**:
1. 状态句 = **一句状态**,只说什么好了。首次:`Your {ReadyNoun} is ready.` 更新:`Your updated {ReadyNoun} is ready.` 禁止出现 review / then / continue / generate / merge。写在 assistant 正文。
2. 提问引导 = **一句行动**。有可审产物:`Review {the ReadyNoun}, then {NextAct}.` 禁止再写 is ready / updated。
3. 两句禁止相同、禁止互为子串、禁止粘成一句再复制到两个表面。
**只发其中一个时**:自动续跑只发状态句;结束态只发 `Your {ReadyNoun} is ready.`(可保留 Revise 选项,不要再写引导);上一拍已用状态句说过则本拍只发提问。
选项只进 Host tools 的 `options`。禁止伪 call、编号列表、`Recommended:` 段落进 Chat。
开场问询**不适用**本表的 Review / NextAct 拆句:对 Host tools 真调用;问句只有内容方向那一句;3 条方向只进 `options`。
**通用提问规则**:第 1 条选项 = 下一 enabled 主路径;另给 Skip 或 Rollback 出口;只 Revise 实际存在的产物;FastForward 不发中间等待提问;Rollback 重做后必须发等待提问。
填空示例(按当前槽改写,非封闭):
| 情境 | 状态句 | 提问引导 |
|------|--------|----------|
| 开场问询 | (可省略状态句) | Host tools:标题=短题名;问句=`{问句}`;恰好 3 个方向进 `options`,禁止 Chat 编号列表。发出后停住,未答前禁止 `parse_product_info` |
| 首次 / 重生成 script | `Here is the storyboard script:` + 每镜一张卡片(9 列表头字段;禁止贴 `|` 表);可附 `Your storyboard script is ready.` / `Your updated storyboard script is ready.` | `Review the storyboard, then continue.` |
| 角色场景刚齐 | `Your character and scene references are ready.` | `Review the references, then generate the storyboard script.` |
| 首帧 | `Your first frames are ready.` | `Review alignment, then generate all videos.` |
| 待合成 | `Your UGC video segments are ready.` | `Review the segments, then merge them.` |
| 卖点分析 | `Here are the product selling points:` + `content` 原文 markdown + `Confirm to continue, or tell me what you'd like to change.`(禁止只写 status、禁止只贴正文) | **不要** Host tools;停住等自由回复 |
| parse_product_info 控件已打开 | (可省略状态句;不要复述商品字段;不要预告 display_product_info) | **不要** Host tools;**不要** `display_product_info`;停住等 §商品确认信号 |
| 卖点已确认、规格未齐 | (正文最多一句 `Choose the language and set the video specs.`;禁止把四项印成单值「当前设置」) | Host tools 真调用:四题,每题全部可选项进 `options`(见 §info_card)。编号单值 / 只写一档 = 没问,必须重发;无 Host tools 时正文必须列出每项全部档位 |
| Video 1 续跑 | `The first UGC video segment is ready. Generating the remaining segments now.` | (禁止提问) |
| 单段 / 合成结束 | `Your UGC video is ready.` / `Your full UGC ad video is ready.` | (禁止提问引导) |
产物 `title`(无产物不编造):`[Product] Image` / `[Avatar] Model` / `[Scene] Upload {n}` / `[Product] Brief` / `Selling Point Analysis` / `Character Prompt` / `Scene Prompt` / `[Character] Creator` / `[Scene] {短名}` / `[Script] UGC Storyboard` / `[First Frame] Video {i}` / `UGC Video {i}`
---
## 并行
问询一题一轮:发出后本轮结束,未答前 continuation 也不得进 `product`。该跑的 character+scene Prompt 同轮先写齐再并发成图(角色不挂场景图)。该跑的首帧 ×N 同轮并发。Video 2…N 同轮发齐。`run_prompt` 不与 `generate_image / generate_video` 同拍并行。FastForward / Skip 后的下一阶段在 continuation 立刻开始(问询未答完除外)。Rollback 重做的可见阶段在 continuation 只发等待(卖点:贴三段等自由回复;其它:宿主提问),不顺跑。
Referenced files: 11 — file references are metadata, not package contents.
Publisher declarations from the archived package. These are separate from our research and the live service's terms.
Package observed Nov 3, 2026.
plugin_asdk_app_6ad8acf81ccc819193bc600c3a69f612
Download plugin data (JSON)