@starreel/mcp 0.1.256 → 0.1.257

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 CHANGED
@@ -1559,6 +1559,23 @@ to close") tells the vendor to fit that entire sequence into each 3-second shot.
1559
1559
  with their timestamps (first frame becomes a soft constraint; ±1 s timing; same
1560
1560
  price). Shots whose first frame is a copy of the previous shot's last frame keep
1561
1561
  first-frame mode (`reason: strict-continuity`) so the seam stays exact.
1562
+ - **Storyboard grid reference (closed beta, `seedance-2.5` only)**:
1563
+ `set_shot_storyboard_grid` (free) mounts one multi-panel storyboard image
1564
+ (line art / stick figures, ideally ≤15 panels) on a shot; the video is then
1565
+ generated as one multi-shot clip following the grid's story, action, shot
1566
+ order, camera positions and blocking. The grid is sent as reference image 1,
1567
+ **not** as the first frame, and is **not** matched panel-by-panel — when the
1568
+ frames must match exactly, use keyframes instead. The platform drops the
1569
+ first/last frame (they are mutually exclusive with the grid), appends the
1570
+ shot's character portraits and scene image, and writes the asset-reference
1571
+ block at the top of the prompt; the grid never defines faces or art style.
1572
+ Write the shot's `video_prompt` as a synopsis plus per-panel details the
1573
+ sketch cannot show (shot size, camera move, action, materials, style).
1574
+ Advisories (>15 panels, more panels than seconds) do not block. Non-2.5
1575
+ engine → 400; grid shots never join scene groups; mounting marks the
1576
+ existing video stale. `quote_regenerate_shot_video` returns `storyboard_grid`
1577
+ when the grid will be used. Read with `get_shot_storyboard_grid`, remove with
1578
+ `clear_shot_storyboard_grid`. A 400 "未开启" means the project is not in the beta.
1562
1579
  - **Era contract**: `set_era_contract` / `get_era_contract` — see the project
1563
1580
  settings tier above. Non-contemporary projects must set this before frames.
1564
1581
  - **Lengthen a finished cut**: `quote_extend_final` (free, quote first) →
@@ -274,7 +274,7 @@ export const PIPELINE = [
274
274
  },
275
275
  {
276
276
  step: '8 出视频',
277
- tools: ['quote_videos', 'generate_videos', 'cancel_videos(停整集出视频:已派的照常出完扣费,未派的不再派·免费)', 'get_scene_group_plan', 'generate_scene_groups', 'quote_regenerate_shot_video', 'regenerate_shot_video', 'quote_edit_video_shot', 'edit_video_shot', 'upload_shot_footage(实拍素材镜:客户录屏/产品实拍直接当该镜视频,不出视频不扣费)', 'get_edit_capabilities', 'get_repaint_capabilities', 'quote_repaint_shot_video', 'repaint_shot_video', 'quote_reskin_shot_video', 'reskin_shot_video', 'get_repaint_status', 'restore_repaint_original', 'get_av_anchors(定妆视频锚现况:挂锚的镜首尾帧不送)', 'clear_character_av_anchor(客户确认后摘锚·免费)'],
277
+ tools: ['quote_videos', 'generate_videos', 'cancel_videos(停整集出视频:已派的照常出完扣费,未派的不再派·免费)', 'get_scene_group_plan', 'generate_scene_groups', 'quote_regenerate_shot_video', 'regenerate_shot_video', 'quote_edit_video_shot', 'edit_video_shot', 'upload_shot_footage(实拍素材镜:客户录屏/产品实拍直接当该镜视频,不出视频不扣费)', 'get_edit_capabilities', 'get_repaint_capabilities', 'quote_repaint_shot_video', 'repaint_shot_video', 'quote_reskin_shot_video', 'reskin_shot_video', 'get_repaint_status', 'restore_repaint_original', 'get_av_anchors(定妆视频锚现况:挂锚的镜首尾帧不送)', 'clear_character_av_anchor(客户确认后摘锚·免费)', 'set_shot_storyboard_grid(宫格分镜参考·内测·2.5:线稿宫格一次出一段多镜头,不严格对齐)', 'get_shot_storyboard_grid', 'clear_shot_storyboard_grid'],
278
278
  billing: '报价确认后扣点',
279
279
  note: 'video_engine 必须在出视频前定(写实真人剧 seedance-2.5 或降本 hailuo-3 / 动漫·风格化 seedance-2.5 或 wan3.0·wan 绝不用于写实真人;' + MODEL_AVAILABILITY_NOTE + ');切换不回溯已生成镜头。',
280
280
  },
@@ -1366,6 +1366,29 @@ export function registerProduceTools(server, client) {
1366
1366
  ...REVIEW_ARGS,
1367
1367
  ...ASSET_REVIEW_ARG,
1368
1368
  }, async ({ storyboard_id, quote_id, keyframe_ids, image_model, review_token, asset_review_token, acknowledge_review, auto_acknowledge }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/keyframes/generate`, { quote_id, keyframe_ids, image_model, review_token, asset_review_token, acknowledge_review, auto_acknowledge })));
1369
+ server.tool('get_shot_storyboard_grid', '★**内测**·读**某一镜**挂的宫格分镜参考(故事板)。免费。回 grid(image_url / cells / advisories,null = 没挂)、'
1370
+ + 'enabled(本剧是否在内测名单)、video_engine 与 engine_supported(只有 Seedance 2.5 支持宫格参考)、tips(宫格怎么画、提示词怎么写)。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceGet(`/storyboards/${storyboard_id}/storyboard-grid`)));
1371
+ server.tool('set_shot_storyboard_grid', '★**内测**·给**某一镜**挂一张**宫格分镜图**(故事板,Seedance 2.5 官方多模态能力):客户手画的线稿 / 火柴人多宫格,'
1372
+ + '一张图里按从左到右、从上到下排好这一段的镜头顺序、动作、机位与站位,出视频时**一次出成一段多镜头视频**。免费(只挂载,出视频照常报价扣费)。'
1373
+ + '\n★宫格作参考图「图片1」送(不是首帧),**不严格对齐**画面细节——它只管剧情、动作、镜头顺序、机位与站位;'
1374
+ + '**要逐格严格对齐画面,改用关键帧**(set_shot_keyframes 单镜中间关键帧,或场景组关键帧),不是本工具。'
1375
+ + '\n★出视频时平台自动:不送首尾帧(厂商规定与宫格互斥)、把本镜角色定妆图与场景图接在宫格之后、在提示词最前面写好素材指代'
1376
+ + '(宫格图@图片1、角色图@图片N、场景图@图片M);宫格图不当身份参考,人物长相以定妆图为准,也不会沿用宫格的线稿画风。'
1377
+ + '\n★本镜视频提示词(update_shot 的 video_prompt)请写:故事梗概 + 按格逐镜补齐宫格里画不出的信息(景别、运镜、动作、材质、风格);写实片可再写一句「宫格只作脚本参考」。'
1378
+ + '\n★建议 ≤15 格(超过易画面静止、顺序错乱,会回 advisories 提示但不拦截);推荐线稿 / 火柴人,不要过度锐化的 AI 直出图,图上少写字;'
1379
+ + '格数多于本镜秒数也会提示(动作会被挤压)。'
1380
+ + '\n★前提:本镜或本剧视频引擎是 seedance-2.5,否则 400;挂了宫格的镜不并场景组。挂 / 换宫格会把本镜已有视频标为待重生。'
1381
+ + '之后照常 quote_regenerate_shot_video(回 storyboard_grid 字段即确认本次按宫格出)→ regenerate_shot_video。'
1382
+ + '回 400「本剧未开启」= 不在内测名单,别重试。传 file_path(本地图,自动上传)或 image_url 二选一。', {
1383
+ storyboard_id: z.number().int().positive(),
1384
+ cells: z.number().int().min(2).max(36).describe('宫格的格数,例如 3×3 填 9'),
1385
+ file_path: z.string().optional().describe('本地宫格图路径(自动上传)'),
1386
+ image_url: z.string().optional().describe('已上传的宫格图地址(与 file_path 二选一)'),
1387
+ }, async ({ storyboard_id, cells, file_path, image_url }) => {
1388
+ const url = file_path ? await client.uploadLocalFile(file_path, 'image') : image_url;
1389
+ return jsonResult(await client.producePut(`/storyboards/${storyboard_id}/storyboard-grid`, { image_url: url, cells }));
1390
+ });
1391
+ server.tool('clear_shot_storyboard_grid', '★**内测**·清除**某一镜**的宫格分镜参考,本镜回到普通首帧出视频模式。免费。本镜已有视频会被标为待重生。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceDelete(`/storyboards/${storyboard_id}/storyboard-grid`)));
1369
1392
  server.tool('quote_extend_final', '★成片续写**报价**(免费·无副作用):在已有成片后面再接几轮 AI 生成的片段,把片子拉长。'
1370
1393
  + '回 rounds(轮数)/duration_per_round(每轮秒数)/max_rounds(上限)/estimated_points(预估点数)。'
1371
1394
  + '\n★**必须先 quote_extend_final 报价,再调 extend_final**' + MODE_DECIDES('报价确认') + '(派发前平台按同参整单报价过预算预检,超出硬上限回 402 BUDGET_WOULD_EXCEED、未扣费,那就停下问客户)' + '——每轮都真扣厂商的钱。'
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.256",
6
- "description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → 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. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. 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.256 tool surface (operationIds match MCP tool names 1:1)."
5
+ "version": "0.1.257",
6
+ "description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → 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. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. 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.257 tool surface (operationIds match MCP tool names 1:1)."
7
7
  },
8
8
  "servers": [
9
9
  {
@@ -17236,6 +17236,98 @@
17236
17236
  }
17237
17237
  }
17238
17238
  },
17239
+ "/storyboards/{storyboard_id}/storyboard-grid": {
17240
+ "get": {
17241
+ "operationId": "get_shot_storyboard_grid",
17242
+ "summary": "★**内测**·读**某一镜**挂的宫格分镜参考(故事板)",
17243
+ "description": "★**内测**·读**某一镜**挂的宫格分镜参考(故事板)。免费。回 grid(image_url / cells / advisories,null = 没挂)、enabled(本剧是否在内测名单)、video_engine 与 engine_supported(只有 Seedance 2.5 支持宫格参考)、tips(宫格怎么画、提示词怎么写)。",
17244
+ "tags": [
17245
+ "storyboards"
17246
+ ],
17247
+ "parameters": [
17248
+ {
17249
+ "name": "storyboard_id",
17250
+ "in": "path",
17251
+ "required": true,
17252
+ "schema": {
17253
+ "type": "integer",
17254
+ "exclusiveMinimum": 0
17255
+ }
17256
+ }
17257
+ ],
17258
+ "responses": {
17259
+ "200": {
17260
+ "description": "StarReel envelope",
17261
+ "content": {
17262
+ "application/json": {
17263
+ "schema": {
17264
+ "type": "object",
17265
+ "properties": {
17266
+ "code": {
17267
+ "type": "integer"
17268
+ },
17269
+ "message": {
17270
+ "type": "string"
17271
+ },
17272
+ "data": {
17273
+ "description": "Operation result payload"
17274
+ }
17275
+ }
17276
+ }
17277
+ }
17278
+ }
17279
+ },
17280
+ "402": {
17281
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
17282
+ }
17283
+ }
17284
+ },
17285
+ "delete": {
17286
+ "operationId": "clear_shot_storyboard_grid",
17287
+ "summary": "★**内测**·清除**某一镜**的宫格分镜参考,本镜回到普通首帧出视频模式",
17288
+ "description": "★**内测**·清除**某一镜**的宫格分镜参考,本镜回到普通首帧出视频模式。免费。本镜已有视频会被标为待重生。",
17289
+ "tags": [
17290
+ "storyboards"
17291
+ ],
17292
+ "parameters": [
17293
+ {
17294
+ "name": "storyboard_id",
17295
+ "in": "path",
17296
+ "required": true,
17297
+ "schema": {
17298
+ "type": "integer",
17299
+ "exclusiveMinimum": 0
17300
+ }
17301
+ }
17302
+ ],
17303
+ "responses": {
17304
+ "200": {
17305
+ "description": "StarReel envelope",
17306
+ "content": {
17307
+ "application/json": {
17308
+ "schema": {
17309
+ "type": "object",
17310
+ "properties": {
17311
+ "code": {
17312
+ "type": "integer"
17313
+ },
17314
+ "message": {
17315
+ "type": "string"
17316
+ },
17317
+ "data": {
17318
+ "description": "Operation result payload"
17319
+ }
17320
+ }
17321
+ }
17322
+ }
17323
+ }
17324
+ },
17325
+ "402": {
17326
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
17327
+ }
17328
+ }
17329
+ }
17330
+ },
17239
17331
  "/storyboards/{storyboard_id}/trim": {
17240
17332
  "put": {
17241
17333
  "operationId": "trim_shot",
@@ -18667,6 +18759,10 @@
18667
18759
  }
18668
18760
  },
18669
18761
  "x-unmapped-tools": [
18762
+ {
18763
+ "tool": "set_shot_storyboard_grid",
18764
+ "reason": "unmappable: local file upload flow"
18765
+ },
18670
18766
  {
18671
18767
  "tool": "upload_image",
18672
18768
  "reason": "unmappable: local file upload flow"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.256",
3
+ "version": "0.1.257",
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.256",
5
+ "version": "0.1.257",
6
6
  "websiteUrl": "https://starreel.ai",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "@starreel/mcp",
11
- "version": "0.1.256",
11
+ "version": "0.1.257",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  },