@starreel/mcp 0.1.63 → 0.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/README.zh-CN.md +3 -3
- package/SKILL.md +21 -6
- package/dist/tools/produce.js +89 -18
- package/openapi.json +256 -8
- package/package.json +3 -3
- package/server.json +3 -3
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Or install the **Claude Code plugin** — MCP server + agent skill in one step
|
|
|
37
37
|
(set `STARREEL_API_KEY` in your shell first):
|
|
38
38
|
|
|
39
39
|
```text
|
|
40
|
-
/plugin marketplace add
|
|
40
|
+
/plugin marketplace add starreel/starreel-mcp
|
|
41
41
|
/plugin install starreel@starreel
|
|
42
42
|
```
|
|
43
43
|
|
|
@@ -163,7 +163,7 @@ and [70+ agents](https://github.com/vercel-labs/skills#supported-agents)) via
|
|
|
163
163
|
the [`skills`](https://skills.sh) CLI:
|
|
164
164
|
|
|
165
165
|
```bash
|
|
166
|
-
npx skills add
|
|
166
|
+
npx skills add starreel/starreel-mcp
|
|
167
167
|
```
|
|
168
168
|
|
|
169
169
|
## Environment variables
|
|
@@ -179,17 +179,17 @@ Prefer plain REST? The full production facade is described in
|
|
|
179
179
|
[`openapi.json`](./openapi.json) (OpenAPI 3.1, 100+ operations — generated from
|
|
180
180
|
this package's tool surface, so `operationId`s match MCP tool names 1:1).
|
|
181
181
|
Browse it rendered at
|
|
182
|
-
[
|
|
182
|
+
[starreel.github.io/starreel-mcp](https://starreel.github.io/starreel-mcp/), or
|
|
183
183
|
generate a typed client for any language:
|
|
184
184
|
|
|
185
185
|
```bash
|
|
186
|
-
npx openapi-typescript https://raw.githubusercontent.com/
|
|
186
|
+
npx openapi-typescript https://raw.githubusercontent.com/starreel/starreel-mcp/main/openapi.json -o starreel.d.ts
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
## Links
|
|
190
190
|
|
|
191
191
|
- Website: [starreel.ai](https://starreel.ai)
|
|
192
|
-
- API reference (OpenAPI): [
|
|
192
|
+
- API reference (OpenAPI): [starreel.github.io/starreel-mcp](https://starreel.github.io/starreel-mcp/)
|
|
193
193
|
- Full MCP / REST docs: [api.shortreelai.com/docs/mcp](https://api.shortreelai.com/docs/mcp)
|
|
194
194
|
- npm: [@starreel/mcp](https://www.npmjs.com/package/@starreel/mcp)
|
|
195
195
|
- 中文文档: [README.zh-CN.md](./README.zh-CN.md)
|
package/README.zh-CN.md
CHANGED
|
@@ -13,7 +13,7 @@ StarReel 的 MCP 服务器 —— 把 AI 短剧**编排产线**暴露给 Claude
|
|
|
13
13
|
(Claude Code / Codex / Cursor / OpenCode 等 70+ 工具):
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npx skills add
|
|
16
|
+
npx skills add starreel/starreel-mcp
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## 接入
|
|
@@ -29,7 +29,7 @@ claude mcp add starreel -e STARREEL_API_KEY=srk_live_xxx -- npx -y @starreel/mcp
|
|
|
29
29
|
(先在 shell 里 `export STARREEL_API_KEY=srk_live_xxx`):
|
|
30
30
|
|
|
31
31
|
```text
|
|
32
|
-
/plugin marketplace add
|
|
32
|
+
/plugin marketplace add starreel/starreel-mcp
|
|
33
33
|
/plugin install starreel@starreel
|
|
34
34
|
```
|
|
35
35
|
|
|
@@ -97,7 +97,7 @@ env = { "STARREEL_API_KEY" = "srk_live_xxx" }
|
|
|
97
97
|
|
|
98
98
|
想直接裸调 REST?整个产线门面见 [`openapi.json`](./openapi.json)
|
|
99
99
|
(OpenAPI 3.1,100+ 操作,从本包工具面生成,operationId 与 MCP 工具名一一对应)。
|
|
100
|
-
在线渲染版:[
|
|
100
|
+
在线渲染版:[starreel.github.io/starreel-mcp](https://starreel.github.io/starreel-mcp/);
|
|
101
101
|
也可用它给任意语言生成带类型客户端(如 `npx openapi-typescript`)。
|
|
102
102
|
|
|
103
103
|
## 环境变量
|
package/SKILL.md
CHANGED
|
@@ -91,6 +91,18 @@ Don't ask the user at every step. Sort work into three tiers:
|
|
|
91
91
|
`video_style_prompt`) are all free and the foundation that steers every later
|
|
92
92
|
generation. Set them up front via `create_drama` / `update_project_settings`
|
|
93
93
|
— don't build an empty shell, or all downstream generation drifts.
|
|
94
|
+
**Set the structured era contract for anything non-contemporary.**
|
|
95
|
+
`setting_brief` is free text: it supplies background but cannot hold the
|
|
96
|
+
frame. The one mechanism that outranks the visual lock is the structured
|
|
97
|
+
contract — `set_era_contract` per episode (`get_era_contract` reads it back),
|
|
98
|
+
one of `modern` / `republican` / `historical` / `fantasy`. Leave it empty and
|
|
99
|
+
the platform can only fight drift with prose in the prompt body; contemporary
|
|
100
|
+
objects bleeding into period frames almost always traces back to an empty
|
|
101
|
+
contract. **Xianxia / mythic-otherworld projects must use `fantasy`, not
|
|
102
|
+
`historical`** — the latter demands period-accurate realism and will judge
|
|
103
|
+
glowing energy, floating landforms and non-human forms as "wrong era",
|
|
104
|
+
dragging the look toward literal historical drama. A single scene can break
|
|
105
|
+
away via `update_scene`'s `era_contract` (scene level outranks episode level).
|
|
94
106
|
**Never pin a specific character's wardrobe / hair / look inside
|
|
95
107
|
`visual_lock` or `art_bible`** — those hold scene-level and world-level locks
|
|
96
108
|
only. The **single source of truth** for a character's appearance is the
|
|
@@ -173,12 +185,15 @@ content that will be rejected.
|
|
|
173
185
|
reveal), via `generate_frames` with `frame_type=last_frame` or, for a single
|
|
174
186
|
shot, `generate_shot_frame`. `generate_videos` needs at
|
|
175
187
|
least one first frame in the episode.
|
|
176
|
-
**Image model**: images use a drama-level model (default **
|
|
177
|
-
`
|
|
178
|
-
field `image_model` for one consistent look across
|
|
179
|
-
`generate_frames` / `generate_shot_frame` may override per
|
|
180
|
-
`
|
|
181
|
-
|
|
188
|
+
**Image model**: images use a drama-level model (default **ChatGPT Image 2.5
|
|
189
|
+
Flare** = `gpt-image-2.5-flare`), set via `create_drama` /
|
|
190
|
+
`update_project_settings` field `image_model` for one consistent look across
|
|
191
|
+
the whole drama; `generate_frames` / `generate_shot_frame` may override per
|
|
192
|
+
call. Options: `gpt-image-2.5-sunburst` (same price, sharper Chinese
|
|
193
|
+
glyphs/detail), `gemini-3.1-flash-image` (Nano Banana 2), `gemini-3-pro-image`
|
|
194
|
+
(Nano Banana Pro, finer, pricier), `gemini-3.1-flash-lite-image` (Lite, cheap),
|
|
195
|
+
`doubao-seedream-5-0-260128` (Seedream 5.0). Note the 2.5 models bill by input
|
|
196
|
+
volume (base 11 pts + 18 pts per reference image); the others are flat-rate.
|
|
182
197
|
**Video engine**: videos use a drama-level engine, set via `create_drama` /
|
|
183
198
|
`update_project_settings` field `video_engine`. Four options — surface the
|
|
184
199
|
choice to the customer with the price gaps and let them decide:
|
package/dist/tools/produce.js
CHANGED
|
@@ -63,6 +63,13 @@ const WORKFLOW_HINT = '★三档执行策略(别把三档混着问客户):' +
|
|
|
63
63
|
'★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——' +
|
|
64
64
|
'角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,' +
|
|
65
65
|
'定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。' +
|
|
66
|
+
'★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;' +
|
|
67
|
+
'真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位' +
|
|
68
|
+
'(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——' +
|
|
69
|
+
'平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。' +
|
|
70
|
+
'★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、' +
|
|
71
|
+
'非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)' +
|
|
72
|
+
'用 update_scene 的 era_contract 单独覆写,场级压过集级。' +
|
|
66
73
|
'★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。' +
|
|
67
74
|
'**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);' +
|
|
68
75
|
'②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。' +
|
|
@@ -95,8 +102,10 @@ const WORKFLOW_HINT = '★三档执行策略(别把三档混着问客户):' +
|
|
|
95
102
|
'别在出场景图前做场景 Bible。' +
|
|
96
103
|
'★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):' +
|
|
97
104
|
'建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。' +
|
|
98
|
-
'
|
|
99
|
-
'可选
|
|
105
|
+
'★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;' +
|
|
106
|
+
'可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/' +
|
|
107
|
+
'gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。' +
|
|
108
|
+
'★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。' +
|
|
100
109
|
'★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):' +
|
|
101
110
|
'【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);' +
|
|
102
111
|
'②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);' +
|
|
@@ -159,10 +168,11 @@ const VIDEO_ENGINES = ['seedance-2.5', 'hailuo-3', 'wan3.0', 'wan3.0-prime'];
|
|
|
159
168
|
// 后端内部 PUT /dramas 已接受写库,facade 白名单 Wave3 已放行(produce-create-fields.ts)。
|
|
160
169
|
// 不含内部产线/成本开关(strict_mode/best_of_n/shoppable/budget_points 等,需产品决策)。
|
|
161
170
|
const PROJECT_SETTINGS_FIELDS = {
|
|
162
|
-
// drama 级图片模型(整剧统一画风):默认
|
|
163
|
-
image_model: z.string().optional().describe('图片模型(★drama
|
|
164
|
-
'
|
|
165
|
-
'
|
|
171
|
+
// drama 级图片模型(整剧统一画风):默认 ChatGPT Image 2.5 Flare(v0.9.1558)
|
|
172
|
+
image_model: z.string().optional().describe('图片模型(★drama级·整剧统一画风·默认 ChatGPT Image 2.5 Flare)。可选:' +
|
|
173
|
+
'gpt-image-2.5-flare(默认·基础11点+每张参考图18点)/gpt-image-2.5-sunburst(同价·中文字形与细节更准·慢约5秒)/' +
|
|
174
|
+
'gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·31点)/' +
|
|
175
|
+
'doubao-seedream-5-0-260128(Seedream 5.0)。建剧即定、整剧统一;generate_frames 可临时覆盖某次出图'),
|
|
166
176
|
// drama 级视频引擎(整剧统一,单镜/批量/场景组/重生全走它)
|
|
167
177
|
video_engine: z.enum(VIDEO_ENGINES).optional().describe('视频引擎(★drama级·整剧统一·AI必须按剧选型主动引导:写实真人剧→seedance-2.5 或降本 hailuo-3;风格化/动画/3D卡通/空镜/产品镜→wan3.0(赶交付 wan3.0-prime);写实真人剧绝不选 wan——720p+ 真人脸被厂商审核一致拒):' +
|
|
168
178
|
'seedance-2.5(默认·全能力:帧链/场景组/就地编辑/延长/参考图锚·720p约212点/秒) / ' +
|
|
@@ -514,7 +524,7 @@ export function registerProduceTools(server, client) {
|
|
|
514
524
|
'打算在 generate_frames 里临时换模型,报价时就要把同一个 image_model 传进来,否则两边不是一个价。', {
|
|
515
525
|
episode_id: z.number().int().positive(),
|
|
516
526
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame;last_frame=补尾帧;both=首尾都补'),
|
|
517
|
-
image_model: z.string().optional().describe('按这个模型报价(须与随后 generate_frames 传的一致;不传=用 drama
|
|
527
|
+
image_model: z.string().optional().describe('按这个模型报价(须与随后 generate_frames 传的一致;不传=用 drama 级设定,默认 ChatGPT Image 2.5 Flare)'),
|
|
518
528
|
}, async ({ episode_id, frame_type, image_model }) => jsonResult(await client.producePost(`/episodes/${episode_id}/frames/quote`, { frame_type, image_model })));
|
|
519
529
|
server.tool('generate_frames', '确认后批量出帧:后台异步。用 get_storyboards 轮询,first_frame_image/last_frame_image 逐镜填充即完成。' +
|
|
520
530
|
'★图片生成较慢——每张几十秒到数分钟(尤其高清模型),整集可能十几分钟。轮询看 frame_status:' +
|
|
@@ -533,9 +543,10 @@ export function registerProduceTools(server, client) {
|
|
|
533
543
|
quote_id: z.string().describe('来自 quote_frames'),
|
|
534
544
|
...REVIEW_ARGS,
|
|
535
545
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame,须与报价时一致'),
|
|
536
|
-
image_model: z.string().optional().describe('临时覆盖本次出图模型(不传=用 drama
|
|
537
|
-
'
|
|
538
|
-
'gemini-3.1-flash-
|
|
546
|
+
image_model: z.string().optional().describe('临时覆盖本次出图模型(不传=用 drama 级设定,默认 ChatGPT Image 2.5 Flare)。可选:' +
|
|
547
|
+
'gpt-image-2.5-flare(默认·基础11点+每张参考图18点)/gpt-image-2.5-sunburst(同价·中文字形与细节更准)/' +
|
|
548
|
+
'gemini-3.1-flash-image(Nano Banana 2·71点)/gemini-3-pro-image(Nano Banana Pro·更精细·175点)/' +
|
|
549
|
+
'gemini-3.1-flash-lite-image(Nano Banana 2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream 5.0)'),
|
|
539
550
|
}, async ({ episode_id, quote_id, frame_type, image_model, review_token, acknowledge_review }) => jsonResult(await client.producePost(`/episodes/${episode_id}/frames/generate`, {
|
|
540
551
|
quote_id, frame_type, image_model, review_token, acknowledge_review,
|
|
541
552
|
})));
|
|
@@ -545,7 +556,7 @@ export function registerProduceTools(server, client) {
|
|
|
545
556
|
'★响应带 billing_kind/unit_points(实际计费档与单价);要在 generate_shot_frame 里换模型,报价时传同一个 image_model。', {
|
|
546
557
|
storyboard_id: z.number().int().positive(),
|
|
547
558
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame;both=首尾各一张'),
|
|
548
|
-
image_model: z.string().optional().describe('按这个模型报价(须与随后 generate_shot_frame 传的一致;不传=用 drama
|
|
559
|
+
image_model: z.string().optional().describe('按这个模型报价(须与随后 generate_shot_frame 传的一致;不传=用 drama 级设定,默认 ChatGPT Image 2.5 Flare)'),
|
|
549
560
|
}, async ({ storyboard_id, frame_type, image_model }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/frame/quote`, { frame_type, image_model })));
|
|
550
561
|
server.tool('generate_shot_frame', '确认后给**某一镜**出帧或重生该帧(异步)。这是修某一镜画面的正路:平台会带上该镜的角色身份锚、' +
|
|
551
562
|
'场景/道具参考图、画风锚与帧审计,重生出的图与全片一致;用外部工具出图再上传会绕开这整条链路,人物/服装/画风必漂。' +
|
|
@@ -561,7 +572,7 @@ export function registerProduceTools(server, client) {
|
|
|
561
572
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame,须与报价时一致;传了 reopen_pair_id 时会被忽略'),
|
|
562
573
|
replace_user_frame: z.boolean().optional().describe('默认 true(显式重生允许覆盖已上传帧);传 false 则保护已上传帧'),
|
|
563
574
|
reopen_pair_id: z.string().optional().describe('来自 get_storyboards 该镜的同名字段;只重掷有问题的那一侧,不必再传 frame_type'),
|
|
564
|
-
image_model: z.string().optional().describe('临时覆盖本次重画的图片模型(不传=用 drama
|
|
575
|
+
image_model: z.string().optional().describe('临时覆盖本次重画的图片模型(不传=用 drama 级设定,默认 ChatGPT Image 2.5 Flare);取值同 generate_frames'),
|
|
565
576
|
}, async ({ storyboard_id, quote_id, frame_type, replace_user_frame, reopen_pair_id, image_model }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/frame/generate`, { quote_id, frame_type, replace_user_frame, reopen_pair_id, image_model })));
|
|
566
577
|
// ---------- 出视频(videos,大额) ----------
|
|
567
578
|
server.tool('quote_videos', '报价:给某一集所有分镜批量出视频要多少点(与实际扣费同函数,较准)。返回 estimated_points、quote_id。零扣费。' +
|
|
@@ -797,7 +808,7 @@ export function registerProduceTools(server, client) {
|
|
|
797
808
|
atmosphere: z.string().optional().describe('氛围'),
|
|
798
809
|
director_note: z.string().optional().describe('导演注释'),
|
|
799
810
|
shot_intent: z.string().optional().describe('这镜为什么存在(叙事意图)'),
|
|
800
|
-
image_prompt: z.string().optional().describe('首帧画面提示词**正文**(全量覆盖本镜现值)。★先 get_shot_prompts 读现值再改;★原样保留其中的 @char:N / @scene:M
|
|
811
|
+
image_prompt: z.string().optional().describe('首帧画面提示词**正文**(全量覆盖本镜现值)。★先 get_shot_prompts 读现值再改;★原样保留其中的 @char:N / @scene:M 引用标记,删了就不注入对应定妆图/场景图。出图时平台会在正文之上再拼身份锚与一致性约束,不必你写。★写法坑:别写「no X / without X / 不要 X / 没有 X」这类否定式约束——图像模型把名词当正向线索,反而把 X 画出来;要正向写出那块画面该有什么(材质/形状/颜色/远近)。保存响应带 image_prompt_negation_advisory 即命中,按其 note 改写'),
|
|
801
812
|
video_prompt: z.string().optional().describe('视频(动态/运镜/表演)提示词**正文**(全量覆盖本镜现值)。★同 image_prompt:先读现值、保留 @char/@scene 标记'),
|
|
802
813
|
}, async ({ storyboard_id, ...fields }) => {
|
|
803
814
|
const payload = Object.fromEntries(Object.entries(fields).filter(([, v]) => v !== undefined));
|
|
@@ -853,17 +864,46 @@ export function registerProduceTools(server, client) {
|
|
|
853
864
|
'哪些是写了也不会生效的硬限制(纯器乐/时长/不做音效/不复刻具体曲目)、常见写坏的方式。' +
|
|
854
865
|
'免费,纯静态,与具体剧目无关——写 generate_bgm 的 prompt 之前先读它,别自己猜。' +
|
|
855
866
|
'也适合直接把要点转述给客户看。', {}, async () => jsonResult(await client.produceGet('/bgm-prompt-guide')));
|
|
856
|
-
server.tool('set_shot_name_card', '
|
|
857
|
-
'name
|
|
867
|
+
server.tool('set_shot_name_card', '给某一镜加/改/清「版式字卡」(终拼时烧进成片,含预览一致的书法字体与朱红印章)。' +
|
|
868
|
+
'name 传空字符串=清除本镜字卡。免费(纯数据,填了就显示)。' +
|
|
869
|
+
'两种用法:①不填 orient/placement/font_size = 角色名卡(画面侧边单列竖排人物名,适合群像出场镜);' +
|
|
870
|
+
'②填了其中任意一个 = 通用版式字卡,name 可以是**整句台词或旁白**(按标点自动切列、按最高列拟合字号)。' +
|
|
871
|
+
'placement="auto" 会按背景亮度与粗糙度自动挑位置(躲开人脸/亮部);orient="auto" 在背景太花时自动回退横排。' +
|
|
858
872
|
'★别自己下载视频叠字再上传——那会绕开渲染机字体与印章素材,预览/成片不一致。', {
|
|
859
873
|
storyboard_id: z.number().int().positive(),
|
|
860
|
-
name: z.string().describe('
|
|
874
|
+
name: z.string().describe('字卡正文(人物名,或版式模式下的任意文案/整句台词);空字符串=清除字卡'),
|
|
861
875
|
seal: z.string().optional().describe('印章文字(默认取名字末字)'),
|
|
862
|
-
side: z.enum(['left', 'right']).optional().describe('名卡在画面哪一侧,默认 right'),
|
|
876
|
+
side: z.enum(['left', 'right']).optional().describe('名卡在画面哪一侧,默认 right;placement="auto" 时仅作兜底'),
|
|
863
877
|
duration_ms: z.number().int().positive().optional().describe('显示时长毫秒,默认 3000'),
|
|
864
|
-
|
|
878
|
+
orient: z.enum(['vertical', 'horizontal', 'auto']).optional()
|
|
879
|
+
.describe('排版方向。不填=单列竖排(旧行为);auto=背景太花时自动回退横排'),
|
|
880
|
+
placement: z.enum(['fixed', 'auto']).optional()
|
|
881
|
+
.describe('选位方式。不填=贴 side 那一边的固定位;auto=按背景亮度/粗糙度滑窗选位,躲开人和亮部'),
|
|
882
|
+
font_size: z.number().int().positive().optional()
|
|
883
|
+
.describe('字号上限(默认 72);实际字号按最高列拟合,不会超过它'),
|
|
884
|
+
}, async ({ storyboard_id, name, seal, side, duration_ms, orient, placement, font_size }) => jsonResult(await client.producePut(`/storyboards/${storyboard_id}/name-card`, {
|
|
865
885
|
name, ...(seal !== undefined ? { seal } : {}), ...(side !== undefined ? { side } : {}),
|
|
866
886
|
...(duration_ms !== undefined ? { duration_ms } : {}),
|
|
887
|
+
...(orient !== undefined ? { orient } : {}),
|
|
888
|
+
...(placement !== undefined ? { placement } : {}),
|
|
889
|
+
...(font_size !== undefined ? { font_size } : {}),
|
|
890
|
+
})));
|
|
891
|
+
server.tool('extract_segment_to_library', '把某一镜(或某集成片)的某个时间区间抽出来,存成可复用的素材,进我的素材库。免费(纯剪切,不走厂商)。' +
|
|
892
|
+
'典型用法:闪回/回忆蒙太奇——画面全用已有镜头,边际成本为 0。' +
|
|
893
|
+
'区间是相对**该来源视频**的秒数;末端超出片长会自动夹回来并在 span 里回显实际区间。' +
|
|
894
|
+
'同源同区间重复调用会命中内容哈希、复用已有素材(reused=true),不会在库里堆重复行。' +
|
|
895
|
+
'★别自己下载视频再用本地 ffmpeg 切——厂商产物的 GOP 长达 10s,按关键帧切必然偏,' +
|
|
896
|
+
'这里走的是平台已经趟平的精确切点。', {
|
|
897
|
+
source_kind: z.enum(['storyboard', 'episode']).describe('从某一镜抽,还是从某集成片抽'),
|
|
898
|
+
source_id: z.number().int().positive().describe('storyboard_id 或 episode_id,与 source_kind 对应'),
|
|
899
|
+
start_sec: z.number().nonnegative().describe('区间起点(秒,相对该来源视频)'),
|
|
900
|
+
end_sec: z.number().positive().describe('区间终点(秒);超出片长会被夹回来'),
|
|
901
|
+
name: z.string().optional().describe('素材名;不填自动生成(剧名·来源·区间)'),
|
|
902
|
+
tags: z.string().optional().describe('逗号分隔的标签,会与自动标签合并'),
|
|
903
|
+
}, async ({ source_kind, source_id, start_sec, end_sec, name, tags }) => jsonResult(await client.producePost(`/${source_kind === 'episode' ? 'episodes' : 'storyboards'}/${source_id}/extract-segment`, {
|
|
904
|
+
start_sec, end_sec,
|
|
905
|
+
...(name !== undefined ? { name } : {}),
|
|
906
|
+
...(tags !== undefined ? { tags } : {}),
|
|
867
907
|
})));
|
|
868
908
|
server.tool('get_bgm_status', '查某集 AI 配乐生成状态:running(是否在生成)+已入库的配乐轨列表(track/覆盖镜段/淡入淡出)+cue 数。免费。' +
|
|
869
909
|
'配乐 done 后需重新 compose_episode 才进成片。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/bgm-status`)));
|
|
@@ -922,7 +962,38 @@ export function registerProduceTools(server, client) {
|
|
|
922
962
|
mood: z.string().optional(),
|
|
923
963
|
image_prompt: z.string().optional()
|
|
924
964
|
.describe('这一场**空景图**的提示词正文(全量覆盖本场现值)。★先 get_scene_prompt 读现值再改;★写空景——这张是场景基板,画面里不该有人物(人物由镜头帧那层注入)。出图时平台会在正文之上再拼画风块、空景约束与时代锁,不必你写'),
|
|
965
|
+
era_contract: z.object({
|
|
966
|
+
era: z.string().describe('modern / republican / historical / fantasy(也收中文「现代 / 民国 / 古代 / 仙侠」)'),
|
|
967
|
+
positive: z.array(z.string()).optional().describe('本场额外的正向约束(可留空,平台自带该档基线)'),
|
|
968
|
+
negative: z.array(z.string()).optional().describe('本场额外的禁止项(可留空)'),
|
|
969
|
+
}).nullable().optional()
|
|
970
|
+
.describe('**本场**的时代契约,非空时**压过**集级契约(set_era_contract 设的那条)。'
|
|
971
|
+
+ '只在这一场要破例时才填——例如奇幻世界里插一场现代回忆。'
|
|
972
|
+
+ '传 null 清空本场覆写、回到跟随集级。整集统一的时代**不要**逐场填,用 set_era_contract 设一次即可'),
|
|
925
973
|
}, async ({ scene_id, ...fields }) => jsonResult(await client.producePut(`/scenes/${scene_id}`, fields)));
|
|
974
|
+
server.tool('set_era_contract', '设**本集**的时代契约(免费,纯文本写库)。★这是唯一压得过视觉锁的时代机制——'
|
|
975
|
+
+ '古装/民国/仙侠类项目**出图前必设**,不设的话平台只能靠提示词正文堆字对抗,'
|
|
976
|
+
+ '时代错乱(现代物件混进古代画面、仙境被画成写实古代)基本都是这里空着导致的。\n'
|
|
977
|
+
+ '四档怎么选:\n'
|
|
978
|
+
+ '· modern —— 现代/当代都市。不确定时用这档。\n'
|
|
979
|
+
+ '· republican —— 民国、二十世纪早期。\n'
|
|
980
|
+
+ '· historical —— 可考据的历史朝代;这档会要求画面向**考据写实**靠拢。\n'
|
|
981
|
+
+ '· fantasy —— ★仙侠/奇幻/仙境:修真世界、妖灵化形一类**非写实**的东方奇幻。'
|
|
982
|
+
+ '这类项目**别填 historical**——那档要求考据写实,会把发光灵气、悬浮地貌、非人化形'
|
|
983
|
+
+ '一并判成「不合时代」,把画面往写实古代拽。\n'
|
|
984
|
+
+ '★设完不会自动重出已生成的图:要让画面跟上,得再调 generate_frames / regenerate_scene_image。'
|
|
985
|
+
+ '★某一场要破例,用 update_scene 的 era_contract 单独覆写(场级压过集级)。', {
|
|
986
|
+
episode_id: z.number().int().positive(),
|
|
987
|
+
era: z.string().nullable()
|
|
988
|
+
.describe('modern / republican / historical / fantasy(也收中文「现代 / 民国 / 古代 / 仙侠」)。传 null 清空本集契约'),
|
|
989
|
+
positive: z.array(z.string()).optional()
|
|
990
|
+
.describe('额外的正向约束(可留空,平台自带该档基线)。写世界观独有的东西,别重复该档已有的常识'),
|
|
991
|
+
negative: z.array(z.string()).optional()
|
|
992
|
+
.describe('额外的禁止项(可留空)。写该档基线没覆盖、但本项目必须禁的东西'),
|
|
993
|
+
}, async ({ episode_id, ...rest }) => jsonResult(await client.producePut(`/episodes/${episode_id}/era-contract`, rest)));
|
|
994
|
+
server.tool('get_era_contract', '读本集的时代契约现值 + 各场的场级覆写清单 + 四个可选档位的用途说明。免费。'
|
|
995
|
+
+ '改之前先读一次:能看清「集级设的是哪档、哪几场被单独覆写过」,避免整集统一的时代被逐场填乱。'
|
|
996
|
+
+ '★era_contract 为 null 就是**没设**——古装/仙侠项目看到 null 应当先 set_era_contract 再出图。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/era-contract`)));
|
|
926
997
|
server.tool('get_scene_prompt', '读某一场**场景图(空景基板)**的提示词正文,供直接微调后用 update_scene 的 image_prompt 写回。免费。' +
|
|
927
998
|
'★逐场按需:改哪场读哪场(整集列表 get_scenes 是纯资产视图,不含提示词)。' +
|
|
928
999
|
'★这是场景表里的正文层;出图时平台还会在其上拼画风块、空景约束与时代锁(不在此处,也无需你写)。' +
|
package/openapi.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "StarReel Production API",
|
|
5
|
-
"version": "0.1.
|
|
6
|
-
"description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → portraits & sheets → storyboards → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`; for video, quote == actual charge). Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.
|
|
5
|
+
"version": "0.1.65",
|
|
6
|
+
"description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → portraits & sheets → storyboards → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`; for video, quote == actual charge). Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.65 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -3042,6 +3042,128 @@
|
|
|
3042
3042
|
}
|
|
3043
3043
|
}
|
|
3044
3044
|
},
|
|
3045
|
+
"/episodes/{episode_id}/era-contract": {
|
|
3046
|
+
"put": {
|
|
3047
|
+
"operationId": "set_era_contract",
|
|
3048
|
+
"summary": "设**本集**的时代契约(免费,纯文本写库)",
|
|
3049
|
+
"description": "设**本集**的时代契约(免费,纯文本写库)。★这是唯一压得过视觉锁的时代机制——古装/民国/仙侠类项目**出图前必设**,不设的话平台只能靠提示词正文堆字对抗,时代错乱(现代物件混进古代画面、仙境被画成写实古代)基本都是这里空着导致的。\n四档怎么选:\n· modern —— 现代/当代都市。不确定时用这档。\n· republican —— 民国、二十世纪早期。\n· historical —— 可考据的历史朝代;这档会要求画面向**考据写实**靠拢。\n· fantasy —— ★仙侠/奇幻/仙境:修真世界、妖灵化形一类**非写实**的东方奇幻。这类项目**别填 historical**——那档要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。\n★设完不会自动重出已生成的图:要让画面跟上,得再调 generate_frames / regenerate_scene_image。★某一场要破例,用 update_scene 的 era_contract 单独覆写(场级压过集级)。",
|
|
3050
|
+
"tags": [
|
|
3051
|
+
"episodes"
|
|
3052
|
+
],
|
|
3053
|
+
"parameters": [
|
|
3054
|
+
{
|
|
3055
|
+
"name": "episode_id",
|
|
3056
|
+
"in": "path",
|
|
3057
|
+
"required": true,
|
|
3058
|
+
"schema": {
|
|
3059
|
+
"type": "integer",
|
|
3060
|
+
"exclusiveMinimum": 0
|
|
3061
|
+
}
|
|
3062
|
+
}
|
|
3063
|
+
],
|
|
3064
|
+
"requestBody": {
|
|
3065
|
+
"required": true,
|
|
3066
|
+
"content": {
|
|
3067
|
+
"application/json": {
|
|
3068
|
+
"schema": {
|
|
3069
|
+
"type": "object",
|
|
3070
|
+
"properties": {
|
|
3071
|
+
"era": {
|
|
3072
|
+
"type": "string"
|
|
3073
|
+
},
|
|
3074
|
+
"positive": {
|
|
3075
|
+
"type": "array",
|
|
3076
|
+
"items": {
|
|
3077
|
+
"type": "string"
|
|
3078
|
+
}
|
|
3079
|
+
},
|
|
3080
|
+
"negative": {
|
|
3081
|
+
"type": "array",
|
|
3082
|
+
"items": {
|
|
3083
|
+
"type": "string"
|
|
3084
|
+
}
|
|
3085
|
+
}
|
|
3086
|
+
},
|
|
3087
|
+
"required": [
|
|
3088
|
+
"era"
|
|
3089
|
+
]
|
|
3090
|
+
}
|
|
3091
|
+
}
|
|
3092
|
+
}
|
|
3093
|
+
},
|
|
3094
|
+
"responses": {
|
|
3095
|
+
"200": {
|
|
3096
|
+
"description": "StarReel envelope",
|
|
3097
|
+
"content": {
|
|
3098
|
+
"application/json": {
|
|
3099
|
+
"schema": {
|
|
3100
|
+
"type": "object",
|
|
3101
|
+
"properties": {
|
|
3102
|
+
"code": {
|
|
3103
|
+
"type": "integer"
|
|
3104
|
+
},
|
|
3105
|
+
"message": {
|
|
3106
|
+
"type": "string"
|
|
3107
|
+
},
|
|
3108
|
+
"data": {
|
|
3109
|
+
"description": "Operation result payload"
|
|
3110
|
+
}
|
|
3111
|
+
}
|
|
3112
|
+
}
|
|
3113
|
+
}
|
|
3114
|
+
}
|
|
3115
|
+
},
|
|
3116
|
+
"402": {
|
|
3117
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3118
|
+
}
|
|
3119
|
+
}
|
|
3120
|
+
},
|
|
3121
|
+
"get": {
|
|
3122
|
+
"operationId": "get_era_contract",
|
|
3123
|
+
"summary": "读本集的时代契约现值 + 各场的场级覆写清单 + 四个可选档位的用途说明",
|
|
3124
|
+
"description": "读本集的时代契约现值 + 各场的场级覆写清单 + 四个可选档位的用途说明。免费。改之前先读一次:能看清「集级设的是哪档、哪几场被单独覆写过」,避免整集统一的时代被逐场填乱。★era_contract 为 null 就是**没设**——古装/仙侠项目看到 null 应当先 set_era_contract 再出图。",
|
|
3125
|
+
"tags": [
|
|
3126
|
+
"episodes"
|
|
3127
|
+
],
|
|
3128
|
+
"parameters": [
|
|
3129
|
+
{
|
|
3130
|
+
"name": "episode_id",
|
|
3131
|
+
"in": "path",
|
|
3132
|
+
"required": true,
|
|
3133
|
+
"schema": {
|
|
3134
|
+
"type": "integer",
|
|
3135
|
+
"exclusiveMinimum": 0
|
|
3136
|
+
}
|
|
3137
|
+
}
|
|
3138
|
+
],
|
|
3139
|
+
"responses": {
|
|
3140
|
+
"200": {
|
|
3141
|
+
"description": "StarReel envelope",
|
|
3142
|
+
"content": {
|
|
3143
|
+
"application/json": {
|
|
3144
|
+
"schema": {
|
|
3145
|
+
"type": "object",
|
|
3146
|
+
"properties": {
|
|
3147
|
+
"code": {
|
|
3148
|
+
"type": "integer"
|
|
3149
|
+
},
|
|
3150
|
+
"message": {
|
|
3151
|
+
"type": "string"
|
|
3152
|
+
},
|
|
3153
|
+
"data": {
|
|
3154
|
+
"description": "Operation result payload"
|
|
3155
|
+
}
|
|
3156
|
+
}
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
}
|
|
3160
|
+
},
|
|
3161
|
+
"402": {
|
|
3162
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
}
|
|
3166
|
+
},
|
|
3045
3167
|
"/episodes/{episode_id}/export": {
|
|
3046
3168
|
"get": {
|
|
3047
3169
|
"operationId": "get_export",
|
|
@@ -3093,7 +3215,7 @@
|
|
|
3093
3215
|
"post": {
|
|
3094
3216
|
"operationId": "extract_assets",
|
|
3095
3217
|
"summary": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)",
|
|
3096
|
-
"description": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)。后台异步,文本步后付不欠费。前置:已 rewrite_script 产出改写稿(新项目强制;人物档案从改写稿提取才与剧本、分镜自洽)。★分钟级后台任务;用 get_run_status 判断是否还在跑,别拿 60 秒当失败判据。\n★【改写稿审查硬闸·免费】本步前必须先调 review_script:把返回的 findings 逐条原样告诉客户(每条带 code=问题类型、shots=命中镜号、action=该调哪个工具修),再把 review_token 传进本工具。未审查会被 400 拒。审查后又改了内容 → token 自动失效,复审一次即可(仍免费)。有 error 时默认拦截;客户知情并坚持照现状继续,才带 acknowledge_review:true——带病推进大概率产出废片且照常扣费,不要替客户做这个决定。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 →
|
|
3218
|
+
"description": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)。后台异步,文本步后付不欠费。前置:已 rewrite_script 产出改写稿(新项目强制;人物档案从改写稿提取才与剧本、分镜自洽)。★分钟级后台任务;用 get_run_status 判断是否还在跑,别拿 60 秒当失败判据。\n★【改写稿审查硬闸·免费】本步前必须先调 review_script:把返回的 findings 逐条原样告诉客户(每条带 code=问题类型、shots=命中镜号、action=该调哪个工具修),再把 review_token 传进本工具。未审查会被 400 拒。审查后又改了内容 → token 自动失效,复审一次即可(仍免费)。有 error 时默认拦截;客户知情并坚持照现状继续,才带 acknowledge_review:true——带病推进大概率产出废片且照常扣费,不要替客户做这个决定。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱);分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→assign_voices(分配音色)→frames→★review_frames→videos→generate_tts→compose;★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★分镜后的剧目级资产别漏——尤其 generate_motion_templates(动作模板:从分镜抽取统一全片运动语言,漏了动作会散乱)与 generate_color_script(色彩脚本:统一色调);分镜后、出图前一并做,仍走报价确认。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\"),尾帧用 frame_type=last_frame 可批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/色彩脚本/动作模板/场景图/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
3097
3219
|
"tags": [
|
|
3098
3220
|
"episodes"
|
|
3099
3221
|
],
|
|
@@ -4200,7 +4322,7 @@
|
|
|
4200
4322
|
"post": {
|
|
4201
4323
|
"operationId": "rewrite_script",
|
|
4202
4324
|
"summary": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)",
|
|
4203
|
-
"description": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)。按项目类型自动选改写 agent★保真自动路由:原稿已是剧本形态时自动走两步保真(台词逐句机器锁定、AI 不加戏,剧作缺口进 dramaturgy_suggestions 由客户决定);原稿是小说/大纲则走创作型改写。(广告走 ad 改写;MV 不走标准改写会被拦)。后台异步(分钟级),文本步按 token 后付、不欠费,无需报价。完成后用 get_script 审阅、edit_rewritten_script 改稿。★典型耗时 2~4 分钟(生产实测 ≈169 秒)。**60 秒内查不到结果是正常的,不是失败**——用 get_run_status 判断还在不在跑,别急着重发。★★**本工具是\"从原稿整篇重来\",不是\"再改一版\"**:已有可拍稿时重跑会把当前稿连同已做的所有修正一起覆盖,而且新一版**不保证保留旧版已经改好的地方**(生产三版实测:上一版拆好的长旁白段下一版又合回去、上一版正确的年代服装下一版漂走)。响应里的 overwrites_existing_script=true 就是这个意思。所以**首次改写成功之后,后续所有修改一律用 edit_rewritten_script 点改**——免费、秒级、只动指定的那几场,其余逐字不变,结果确定不抽卡;只有\"要一个完全不同的版本\"才重跑本工具。误重跑后用 get_script(include_previous=1) 取回上一版。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 →
|
|
4325
|
+
"description": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)。按项目类型自动选改写 agent★保真自动路由:原稿已是剧本形态时自动走两步保真(台词逐句机器锁定、AI 不加戏,剧作缺口进 dramaturgy_suggestions 由客户决定);原稿是小说/大纲则走创作型改写。(广告走 ad 改写;MV 不走标准改写会被拦)。后台异步(分钟级),文本步按 token 后付、不欠费,无需报价。完成后用 get_script 审阅、edit_rewritten_script 改稿。★典型耗时 2~4 分钟(生产实测 ≈169 秒)。**60 秒内查不到结果是正常的,不是失败**——用 get_run_status 判断还在不在跑,别急着重发。★★**本工具是\"从原稿整篇重来\",不是\"再改一版\"**:已有可拍稿时重跑会把当前稿连同已做的所有修正一起覆盖,而且新一版**不保证保留旧版已经改好的地方**(生产三版实测:上一版拆好的长旁白段下一版又合回去、上一版正确的年代服装下一版漂走)。响应里的 overwrites_existing_script=true 就是这个意思。所以**首次改写成功之后,后续所有修改一律用 edit_rewritten_script 点改**——免费、秒级、只动指定的那几场,其余逐字不变,结果确定不抽卡;只有\"要一个完全不同的版本\"才重跑本工具。误重跑后用 get_script(include_previous=1) 取回上一版。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱);分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→assign_voices(分配音色)→frames→★review_frames→videos→generate_tts→compose;★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★分镜后的剧目级资产别漏——尤其 generate_motion_templates(动作模板:从分镜抽取统一全片运动语言,漏了动作会散乱)与 generate_color_script(色彩脚本:统一色调);分镜后、出图前一并做,仍走报价确认。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\"),尾帧用 frame_type=last_frame 可批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/色彩脚本/动作模板/场景图/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
4204
4326
|
"tags": [
|
|
4205
4327
|
"episodes"
|
|
4206
4328
|
],
|
|
@@ -4498,7 +4620,7 @@
|
|
|
4498
4620
|
"put": {
|
|
4499
4621
|
"operationId": "set_script",
|
|
4500
4622
|
"summary": "给某一集设置**原始剧本**(content)",
|
|
4501
|
-
"description": "给某一集设置**原始剧本**(content)。这是 AI 改写的输入,不是最终可拍稿。免费。梗概/大纲/自己写好的成品稿都放这里,设完**必须调 rewrite_script 做 AI 改写**——不能跳过改写直接把稿子贴进 edit_rewritten_script(会被拒)。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 →
|
|
4623
|
+
"description": "给某一集设置**原始剧本**(content)。这是 AI 改写的输入,不是最终可拍稿。免费。梗概/大纲/自己写好的成品稿都放这里,设完**必须调 rewrite_script 做 AI 改写**——不能跳过改写直接把稿子贴进 edit_rewritten_script(会被拒)。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱);分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→assign_voices(分配音色)→frames→★review_frames→videos→generate_tts→compose;★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★分镜后的剧目级资产别漏——尤其 generate_motion_templates(动作模板:从分镜抽取统一全片运动语言,漏了动作会散乱)与 generate_color_script(色彩脚本:统一色调);分镜后、出图前一并做,仍走报价确认。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\"),尾帧用 frame_type=last_frame 可批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/色彩脚本/动作模板/场景图/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
4502
4624
|
"tags": [
|
|
4503
4625
|
"episodes"
|
|
4504
4626
|
],
|
|
@@ -5908,6 +6030,33 @@
|
|
|
5908
6030
|
},
|
|
5909
6031
|
"image_prompt": {
|
|
5910
6032
|
"type": "string"
|
|
6033
|
+
},
|
|
6034
|
+
"era_contract": {
|
|
6035
|
+
"type": "object",
|
|
6036
|
+
"properties": {
|
|
6037
|
+
"era": {
|
|
6038
|
+
"type": "string",
|
|
6039
|
+
"description": "modern / republican / historical / fantasy(也收中文「现代 / 民国 / 古代 / 仙侠」)"
|
|
6040
|
+
},
|
|
6041
|
+
"positive": {
|
|
6042
|
+
"type": "array",
|
|
6043
|
+
"items": {
|
|
6044
|
+
"type": "string"
|
|
6045
|
+
},
|
|
6046
|
+
"description": "本场额外的正向约束(可留空,平台自带该档基线)"
|
|
6047
|
+
},
|
|
6048
|
+
"negative": {
|
|
6049
|
+
"type": "array",
|
|
6050
|
+
"items": {
|
|
6051
|
+
"type": "string"
|
|
6052
|
+
},
|
|
6053
|
+
"description": "本场额外的禁止项(可留空)"
|
|
6054
|
+
}
|
|
6055
|
+
},
|
|
6056
|
+
"required": [
|
|
6057
|
+
"era"
|
|
6058
|
+
],
|
|
6059
|
+
"additionalProperties": false
|
|
5911
6060
|
}
|
|
5912
6061
|
}
|
|
5913
6062
|
}
|
|
@@ -6303,6 +6452,86 @@
|
|
|
6303
6452
|
}
|
|
6304
6453
|
}
|
|
6305
6454
|
},
|
|
6455
|
+
"/storyboards/{source_id}/extract-segment": {
|
|
6456
|
+
"post": {
|
|
6457
|
+
"operationId": "extract_segment_to_library",
|
|
6458
|
+
"summary": "把某一镜(或某集成片)的某个时间区间抽出来,存成可复用的素材,进我的素材库",
|
|
6459
|
+
"description": "把某一镜(或某集成片)的某个时间区间抽出来,存成可复用的素材,进我的素材库。免费(纯剪切,不走厂商)。典型用法:闪回/回忆蒙太奇——画面全用已有镜头,边际成本为 0。区间是相对**该来源视频**的秒数;末端超出片长会自动夹回来并在 span 里回显实际区间。同源同区间重复调用会命中内容哈希、复用已有素材(reused=true),不会在库里堆重复行。★别自己下载视频再用本地 ffmpeg 切——厂商产物的 GOP 长达 10s,按关键帧切必然偏,这里走的是平台已经趟平的精确切点。",
|
|
6460
|
+
"tags": [
|
|
6461
|
+
"storyboards"
|
|
6462
|
+
],
|
|
6463
|
+
"parameters": [
|
|
6464
|
+
{
|
|
6465
|
+
"name": "source_id",
|
|
6466
|
+
"in": "path",
|
|
6467
|
+
"required": true,
|
|
6468
|
+
"schema": {
|
|
6469
|
+
"type": "integer",
|
|
6470
|
+
"exclusiveMinimum": 0,
|
|
6471
|
+
"description": "storyboard_id 或 episode_id,与 source_kind 对应"
|
|
6472
|
+
}
|
|
6473
|
+
}
|
|
6474
|
+
],
|
|
6475
|
+
"requestBody": {
|
|
6476
|
+
"required": true,
|
|
6477
|
+
"content": {
|
|
6478
|
+
"application/json": {
|
|
6479
|
+
"schema": {
|
|
6480
|
+
"type": "object",
|
|
6481
|
+
"properties": {
|
|
6482
|
+
"start_sec": {
|
|
6483
|
+
"type": "number",
|
|
6484
|
+
"minimum": 0,
|
|
6485
|
+
"description": "区间起点(秒,相对该来源视频)"
|
|
6486
|
+
},
|
|
6487
|
+
"end_sec": {
|
|
6488
|
+
"type": "number",
|
|
6489
|
+
"exclusiveMinimum": 0,
|
|
6490
|
+
"description": "区间终点(秒);超出片长会被夹回来"
|
|
6491
|
+
},
|
|
6492
|
+
"name": {
|
|
6493
|
+
"type": "string"
|
|
6494
|
+
},
|
|
6495
|
+
"tags": {
|
|
6496
|
+
"type": "string"
|
|
6497
|
+
}
|
|
6498
|
+
},
|
|
6499
|
+
"required": [
|
|
6500
|
+
"start_sec",
|
|
6501
|
+
"end_sec"
|
|
6502
|
+
]
|
|
6503
|
+
}
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
},
|
|
6507
|
+
"responses": {
|
|
6508
|
+
"200": {
|
|
6509
|
+
"description": "StarReel envelope",
|
|
6510
|
+
"content": {
|
|
6511
|
+
"application/json": {
|
|
6512
|
+
"schema": {
|
|
6513
|
+
"type": "object",
|
|
6514
|
+
"properties": {
|
|
6515
|
+
"code": {
|
|
6516
|
+
"type": "integer"
|
|
6517
|
+
},
|
|
6518
|
+
"message": {
|
|
6519
|
+
"type": "string"
|
|
6520
|
+
},
|
|
6521
|
+
"data": {
|
|
6522
|
+
"description": "Operation result payload"
|
|
6523
|
+
}
|
|
6524
|
+
}
|
|
6525
|
+
}
|
|
6526
|
+
}
|
|
6527
|
+
}
|
|
6528
|
+
},
|
|
6529
|
+
"402": {
|
|
6530
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
6531
|
+
}
|
|
6532
|
+
}
|
|
6533
|
+
}
|
|
6534
|
+
},
|
|
6306
6535
|
"/storyboards/{storyboard_id}": {
|
|
6307
6536
|
"put": {
|
|
6308
6537
|
"operationId": "update_shot",
|
|
@@ -6862,8 +7091,8 @@
|
|
|
6862
7091
|
"/storyboards/{storyboard_id}/name-card": {
|
|
6863
7092
|
"put": {
|
|
6864
7093
|
"operationId": "set_shot_name_card",
|
|
6865
|
-
"summary": "
|
|
6866
|
-
"description": "
|
|
7094
|
+
"summary": "给某一镜加/改/清「版式字卡」(终拼时烧进成片,含预览一致的书法字体与朱红印章)",
|
|
7095
|
+
"description": "给某一镜加/改/清「版式字卡」(终拼时烧进成片,含预览一致的书法字体与朱红印章)。name 传空字符串=清除本镜字卡。免费(纯数据,填了就显示)。两种用法:①不填 orient/placement/font_size = 角色名卡(画面侧边单列竖排人物名,适合群像出场镜);②填了其中任意一个 = 通用版式字卡,name 可以是**整句台词或旁白**(按标点自动切列、按最高列拟合字号)。placement=\"auto\" 会按背景亮度与粗糙度自动挑位置(躲开人脸/亮部);orient=\"auto\" 在背景太花时自动回退横排。★别自己下载视频叠字再上传——那会绕开渲染机字体与印章素材,预览/成片不一致。",
|
|
6867
7096
|
"tags": [
|
|
6868
7097
|
"storyboards"
|
|
6869
7098
|
],
|
|
@@ -6887,7 +7116,7 @@
|
|
|
6887
7116
|
"properties": {
|
|
6888
7117
|
"name": {
|
|
6889
7118
|
"type": "string",
|
|
6890
|
-
"description": "
|
|
7119
|
+
"description": "字卡正文(人物名,或版式模式下的任意文案/整句台词);空字符串=清除字卡"
|
|
6891
7120
|
},
|
|
6892
7121
|
"seal": {
|
|
6893
7122
|
"type": "string"
|
|
@@ -6902,6 +7131,25 @@
|
|
|
6902
7131
|
"duration_ms": {
|
|
6903
7132
|
"type": "integer",
|
|
6904
7133
|
"exclusiveMinimum": 0
|
|
7134
|
+
},
|
|
7135
|
+
"orient": {
|
|
7136
|
+
"type": "string",
|
|
7137
|
+
"enum": [
|
|
7138
|
+
"vertical",
|
|
7139
|
+
"horizontal",
|
|
7140
|
+
"auto"
|
|
7141
|
+
]
|
|
7142
|
+
},
|
|
7143
|
+
"placement": {
|
|
7144
|
+
"type": "string",
|
|
7145
|
+
"enum": [
|
|
7146
|
+
"fixed",
|
|
7147
|
+
"auto"
|
|
7148
|
+
]
|
|
7149
|
+
},
|
|
7150
|
+
"font_size": {
|
|
7151
|
+
"type": "integer",
|
|
7152
|
+
"exclusiveMinimum": 0
|
|
6905
7153
|
}
|
|
6906
7154
|
},
|
|
6907
7155
|
"required": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.65",
|
|
4
4
|
"mcpName": "ai.starreel/starreel",
|
|
5
5
|
"description": "StarReel MCP server — drive the AI short-drama production pipeline (script → storyboards → frames → video → final cut) from Claude, Cursor, or any MCP client",
|
|
6
6
|
"license": "MIT",
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
],
|
|
48
48
|
"repository": {
|
|
49
49
|
"type": "git",
|
|
50
|
-
"url": "git+https://github.com/
|
|
50
|
+
"url": "git+https://github.com/starreel/starreel-mcp.git"
|
|
51
51
|
},
|
|
52
52
|
"homepage": "https://starreel.ai",
|
|
53
53
|
"bugs": {
|
|
54
|
-
"url": "https://github.com/
|
|
54
|
+
"url": "https://github.com/starreel/starreel-mcp/issues"
|
|
55
55
|
}
|
|
56
56
|
}
|
package/server.json
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
|
|
3
3
|
"name": "ai.starreel/starreel",
|
|
4
4
|
"description": "Turn a script into a finished, downloadable short-drama episode — via MCP or REST.",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.65",
|
|
6
6
|
"websiteUrl": "https://starreel.ai",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "@starreel/mcp",
|
|
11
|
-
"version": "0.1.
|
|
11
|
+
"version": "0.1.65",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
],
|
|
25
25
|
"repository": {
|
|
26
|
-
"url": "https://github.com/
|
|
26
|
+
"url": "https://github.com/starreel/starreel-mcp",
|
|
27
27
|
"source": "github"
|
|
28
28
|
}
|
|
29
29
|
}
|