@starreel/mcp 0.1.28 → 0.1.30
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/SKILL.md +10 -0
- package/dist/tools/produce.js +20 -2
- package/package.json +1 -1
- package/server.json +2 -2
package/SKILL.md
CHANGED
|
@@ -122,6 +122,16 @@ content that will be rejected.
|
|
|
122
122
|
reveal), via `generate_frames` with `frame_type=last_frame` or, for a single
|
|
123
123
|
shot, `generate_shot_frame`. `generate_videos` needs at
|
|
124
124
|
least one first frame in the episode.
|
|
125
|
+
**Image model**: images use a drama-level model (default **Nano Banana 2** =
|
|
126
|
+
`gemini-3.1-flash-image`), set via `create_drama` / `update_project_settings`
|
|
127
|
+
field `image_model` for one consistent look across the whole drama;
|
|
128
|
+
`generate_frames` / `generate_shot_frame` may override per call. Options:
|
|
129
|
+
`gemini-3-pro-image` (Nano Banana Pro, finer, pricier), `gemini-3.1-flash-lite-image`
|
|
130
|
+
(Lite, cheap), `doubao-seedream-5-0-260128` (Seedream 5.0), `gpt-image-2`.
|
|
131
|
+
**Images are slow** (tens of seconds to minutes each; a whole episode can take
|
|
132
|
+
10+ min): poll `get_storyboards` and read `frame_status` — `pending` = still
|
|
133
|
+
generating (keep waiting, NEVER re-call generate_frames — that double-charges),
|
|
134
|
+
`ready` = done, `failed` = the only real failure. Never treat a slow image as failed.
|
|
125
135
|
|
|
126
136
|
**Redraw on-platform, never off-platform.** When a shot's image is wrong,
|
|
127
137
|
fix it with `quote_shot_frame` → `generate_shot_frame` (`frame_type`:
|
package/dist/tools/produce.js
CHANGED
|
@@ -32,8 +32,15 @@ const WORKFLOW_HINT = '★三档执行策略(别把三档混着问客户):' +
|
|
|
32
32
|
'广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。' +
|
|
33
33
|
'★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,' +
|
|
34
34
|
'仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。' +
|
|
35
|
+
'★分镜后的剧目级资产别漏——尤其 generate_motion_templates(动作模板:从分镜抽取统一全片运动语言,漏了动作会散乱)' +
|
|
36
|
+
'与 generate_color_script(色彩脚本:统一色调);分镜后、出图前一并做,仍走报价确认。' +
|
|
37
|
+
'★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);' +
|
|
38
|
+
'别在出场景图前做场景 Bible。' +
|
|
35
39
|
'★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):' +
|
|
36
40
|
'建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。' +
|
|
41
|
+
'★图片模型默认香蕉2(Nano Banana 2 = gemini-3.1-flash-image·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认香蕉2;' +
|
|
42
|
+
'可选 gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0)/gpt-image-2(ChatGPT Image2);generate_frames 可临时覆盖某次。' +
|
|
43
|
+
'★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。' +
|
|
37
44
|
'③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/色彩脚本/动作模板/场景图/场景组/口型/海报/音效/配乐/字幕翻译——' +
|
|
38
45
|
'这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。' +
|
|
39
46
|
'★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**' +
|
|
@@ -56,6 +63,10 @@ const VIDEO_RESOLUTIONS = ['480p', '720p', '1080p', '4k'];
|
|
|
56
63
|
// 后端内部 PUT /dramas 已接受写库,facade 白名单 Wave3 已放行(produce-create-fields.ts)。
|
|
57
64
|
// 不含内部产线/成本开关(strict_mode/best_of_n/shoppable/budget_points 等,需产品决策)。
|
|
58
65
|
const PROJECT_SETTINGS_FIELDS = {
|
|
66
|
+
// drama 级图片模型(整剧统一画风):默认 Nano Banana 2(香蕉2)
|
|
67
|
+
image_model: z.string().optional().describe('图片模型(★drama级·整剧统一画风·默认香蕉2 Nano Banana 2)。可选:' +
|
|
68
|
+
'gemini-3.1-flash-image(香蕉2·默认·71点)/gemini-3-pro-image(香蕉Pro·精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·31点)/' +
|
|
69
|
+
'doubao-seedream-5-0-260128(Seedream 5.0)/gpt-image-2(ChatGPT Image 2)。建剧即定、整剧统一;generate_frames 可临时覆盖某次出图'),
|
|
59
70
|
// 整剧视觉一致性锚(注入所有出图/视频 prompt,决定跨镜一致)
|
|
60
71
|
cinematography_prompt: z.string().optional().describe('摄影DNA:镜头/镜片/光圈/调色一揽子,注入所有出图/视频prompt,整剧镜头一致'),
|
|
61
72
|
art_bible: z.string().optional().describe('美术圣经:色调/材质/气质,注入所有生图prompt,统一视觉风格'),
|
|
@@ -200,12 +211,18 @@ export function registerProduceTools(server, client) {
|
|
|
200
211
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame;last_frame=补尾帧;both=首尾都补'),
|
|
201
212
|
}, async ({ episode_id, frame_type }) => jsonResult(await client.producePost(`/episodes/${episode_id}/frames/quote`, { frame_type })));
|
|
202
213
|
server.tool('generate_frames', '确认后批量出帧:后台异步。用 get_storyboards 轮询,first_frame_image/last_frame_image 逐镜填充即完成。' +
|
|
214
|
+
'★图片生成较慢——每张几十秒到数分钟(尤其高清模型),整集可能十几分钟。轮询看 frame_status:' +
|
|
215
|
+
'**pending=还在生成(继续耐心等,别当失败、别重复调 generate_frames,重复触发=白花钱)**、' +
|
|
216
|
+
'ready=完成、failed=才是真失败。别因为「等了一会儿还没出」就判定生成失败或重试。' +
|
|
203
217
|
'出视频前必须先出帧,否则视频会退化成无一致性锚点的画面。' +
|
|
204
218
|
'frame_type 要与 quote_frames 用的一致(默认 first_frame)。尾帧只在想固定某镜结尾画面时才补,常规只需首帧。' + CONFIRM_HINT, {
|
|
205
219
|
episode_id: z.number().int().positive(),
|
|
206
220
|
quote_id: z.string().describe('来自 quote_frames'),
|
|
207
221
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame,须与报价时一致'),
|
|
208
|
-
|
|
222
|
+
image_model: z.string().optional().describe('临时覆盖本次出图模型(不传=用 drama 级设定,默认香蕉2)。可选:' +
|
|
223
|
+
'gemini-3.1-flash-image(Nano Banana 2·默认·71点)/gemini-3-pro-image(Nano Banana Pro·更精细·175点)/' +
|
|
224
|
+
'gemini-3.1-flash-lite-image(Nano Banana 2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream 5.0)/gpt-image-2(ChatGPT Image 2)'),
|
|
225
|
+
}, async ({ episode_id, quote_id, frame_type, image_model }) => jsonResult(await client.producePost(`/episodes/${episode_id}/frames/generate`, { quote_id, frame_type, image_model })));
|
|
209
226
|
// ---------- 单镜出帧/重生(改某一镜的画面走这里,别去外部平台出图再传回来) ----------
|
|
210
227
|
server.tool('quote_shot_frame', '报价:重画/补出**某一镜的某一帧**要多少点(一帧=一张图)。返回 estimated_points、quote_id。零扣费。' +
|
|
211
228
|
'客户说「第 N 镜画错了/要改」时用它,而不是拿别的图像平台出图再 upload_shot_frame。', {
|
|
@@ -226,7 +243,8 @@ export function registerProduceTools(server, client) {
|
|
|
226
243
|
frame_type: FRAME_TYPE_ARG.optional().describe('默认 first_frame,须与报价时一致;传了 reopen_pair_id 时会被忽略'),
|
|
227
244
|
replace_user_frame: z.boolean().optional().describe('默认 true(显式重生允许覆盖已上传帧);传 false 则保护已上传帧'),
|
|
228
245
|
reopen_pair_id: z.string().optional().describe('来自 get_storyboards 该镜的同名字段;只重掷有问题的那一侧,不必再传 frame_type'),
|
|
229
|
-
|
|
246
|
+
image_model: z.string().optional().describe('临时覆盖本次重画的图片模型(不传=用 drama 级设定,默认香蕉2);取值同 generate_frames'),
|
|
247
|
+
}, 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 })));
|
|
230
248
|
// ---------- 出视频(videos,大额) ----------
|
|
231
249
|
server.tool('quote_videos', '报价:给某一集所有分镜批量出视频要多少点(与实际扣费同函数,较准)。返回 estimated_points、quote_id。零扣费。' +
|
|
232
250
|
'⚠️ 视频是大额花费,务必把点数清楚告诉用户并等其确认。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/videos/quote`)));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.30",
|
|
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",
|
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.30",
|
|
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.30",
|
|
12
12
|
"transport": { "type": "stdio" },
|
|
13
13
|
"environmentVariables": [
|
|
14
14
|
{
|