@starreel/mcp 0.1.118 → 0.1.119
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 +1 -0
- package/dist/tools/guide-data.js +2 -1
- package/dist/tools/produce.js +11 -0
- package/openapi.json +69 -3
- package/package.json +1 -1
- package/server.json +2 -2
package/SKILL.md
CHANGED
|
@@ -92,6 +92,7 @@ announces a condensed version as MCP `instructions` at connect time.
|
|
|
92
92
|
| A song + lyrics | `create_drama` (`project_type: "mv"`) → `set_mv_lyrics` → `generate_mv_story` → `generate_mv_script` | `rewrite_script` (blocked for MV) |
|
|
93
93
|
| A product / brand | `create_drama` (`project_type: "ad"` or `"brand_film"`) → `add_product` → `generate_product_sheet` | writing brand copy as dialogue (it gets spoken) |
|
|
94
94
|
| Generated shots / a cut that needs changes | `scan_dialogue_coverage` / `scan_intra_shot_cuts` first, then `get_shot_prompts` · `update_shot` · `replace_shot_dialogue` · `repair_episode_dialogue` · `split_shot` · `trim_shot` · `regenerate_shot_video` · `edit_video_shot` → `rerender_episode` | re-composing to fix what a clip *says* |
|
|
95
|
+
| Wants old portraits / sheets / a shot's old tail frame "deleted" | `set_character_portrait` (old assets listed in `old_assets`) · `clear_shot_frame` (old tail frame) → `regenerate_shot_video`. Both only **unlink** — files are not deleted (`physically_deleted` is always empty; `in_history: false` means the platform kept no record, so save that URL if it matters). Tell the customer exactly that | telling the customer the old image was deleted; writing `last_frame_image: null` through the internal API |
|
|
95
96
|
| Wants to assemble the cut themselves | `export_handoff_pack` → `get_handoff_toolchain` → **`register_external_delivery`** when the cut is final | `compose_episode` (pick one); delivering a cut the platform has no record of |
|
|
96
97
|
| A multi-language release | `translate_subtitles` · `subtitle_secondary_lang` in project settings | — |
|
|
97
98
|
|
package/dist/tools/guide-data.js
CHANGED
|
@@ -77,7 +77,8 @@ export const ENTRY_POINTS = [
|
|
|
77
77
|
customer_has: '自有的定妆图 / 场景图 / 道具图 / 镜头图(客户真实素材)',
|
|
78
78
|
use: [
|
|
79
79
|
'upload_image',
|
|
80
|
-
'set_character_portrait(须单人·单张单角度·无文字;换图后按 next_step 重出设定图,stale_frames
|
|
80
|
+
'set_character_portrait(须单人·单张单角度·无文字;换图后按 next_step 重出设定图,stale_frames 是要逐镜重生的镜;旧图只是解除引用不删除,old_assets 逐项列出)',
|
|
81
|
+
'clear_shot_frame(清掉某镜旧尾帧再重生视频,免得旧人物被尾帧带回来;解除引用不删文件,still_referenced_by 列出仍用这张图的镜)',
|
|
81
82
|
'upload_scene_image(须空景无人·无叠加文字)',
|
|
82
83
|
'upload_prop_sheet',
|
|
83
84
|
'upload_shot_frame(只用于客户自有真实素材)',
|
package/dist/tools/produce.js
CHANGED
|
@@ -1080,6 +1080,9 @@ export function registerProduceTools(server, client) {
|
|
|
1080
1080
|
'★换图后响应含 stale_frames=[{storyboard_id,storyboard_number,frames}]——这些镜的首帧还是旧定妆图生成的、已被污染。' +
|
|
1081
1081
|
'要让新定妆图生效:对每个 stale_frame 用 quote_shot_frame+generate_shot_frame 重生该镜(平台会自动以新定妆图/设定图/人脸锁作锚,保全片一致)。' +
|
|
1082
1082
|
'不必逐镜自己指定模型/首尾帧。★千万别自制首尾帧再 upload_shot_frame——外部图没有角色身份锚/画风锚,人物·服装·画风必漂,那才是废片根源(不是"杜绝废片")。' +
|
|
1083
|
+
'★换图只是**解除引用**,旧定妆图/设定图的文件不会被删除。响应里的 old_assets 逐项列出被解除的旧资产:' +
|
|
1084
|
+
'unlinked=[{kind,url,in_history}](in_history=false 表示平台没留记录——典型是客户上传的旧定妆图,要留就把 url 存下来),' +
|
|
1085
|
+
'physically_deleted 恒为空。客户说「删掉旧图」时,如实告诉他只是不再使用、文件仍在,别说成已删除。' +
|
|
1083
1086
|
'传本地文件(file_path,自动上传 COS)或已托管的图片 URL(image_url),二选一。登记免费;内容检查是一次小额视觉审核,按用量后付。', {
|
|
1084
1087
|
character_id: z.number().int().positive(),
|
|
1085
1088
|
file_path: z.string().optional().describe('本地定妆图路径(与 image_url 二选一;自动上传 COS)'),
|
|
@@ -1142,6 +1145,14 @@ export function registerProduceTools(server, client) {
|
|
|
1142
1145
|
const video_url = await client.uploadLocalFile(file_path, 'footage');
|
|
1143
1146
|
return jsonResult(await client.producePost(`/storyboards/${storyboard_id}/footage`, { video_url }));
|
|
1144
1147
|
});
|
|
1148
|
+
server.tool('clear_shot_frame', '清除某镜的尾帧(解除引用,免费)。用于换了定妆图/改了剧情后,旧尾帧会把旧人物/旧画面带进重生的视频时,先清掉它再 regenerate_shot_video。' +
|
|
1149
|
+
'只能清尾帧:首帧是出视频的起点,要换首帧用 generate_shot_frame 重生或 upload_shot_frame 替换。' +
|
|
1150
|
+
'★这是解除引用,不是删除:文件不会被删,响应里 unlinked[].in_history=true 的可在 get_asset_versions 找回,physically_deleted 恒为空——如实告诉客户。' +
|
|
1151
|
+
'本镜已有视频会被标为过期(video_stale)。尾帧已定稿(pinned)会返回 409,客户确认后带 release_pin:true(会一并解除定稿);尾帧正在生成也会 409,等它结束再清。' +
|
|
1152
|
+
'响应的 still_referenced_by 列出同剧仍在用这张图的其它镜(典型:下一镜首帧是它的裸拷贝)——这些不会被连带清掉,需要的话逐镜重生。', {
|
|
1153
|
+
storyboard_id: z.number().int().positive(),
|
|
1154
|
+
release_pin: z.boolean().optional().describe('尾帧已定稿时,客户确认后传 true:清除并解除定稿'),
|
|
1155
|
+
}, async ({ storyboard_id, release_pin }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/frame/clear`, { frame_type: 'last_frame', ...(release_pin ? { release_pin: true } : {}) })));
|
|
1145
1156
|
server.tool('clear_shot_footage', '清除某镜的实拍素材(video_url 置空、来源标记清掉),让这一镜恢复可 AI 生成视频。免费。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceDelete(`/storyboards/${storyboard_id}/footage`)));
|
|
1146
1157
|
server.tool('upload_scene_image', '用客户自有图片作为某场景的场景图(空景基板·背景锚:同场景每一镜都锚在它上面)。自动上传+登记。' +
|
|
1147
1158
|
'★★图片规范(登记前平台会自动检查,不合规返回 422 且不登记):**空景,画面里不能有任何人物**' +
|
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 → 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.
|
|
5
|
+
"version": "0.1.119",
|
|
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.119 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
"post": {
|
|
374
374
|
"operationId": "set_character_portrait",
|
|
375
375
|
"summary": "用客户自有图片作为角色定妆图(身份锚,优先级高于 AI 生成;之后 AI 重生默认不覆盖)",
|
|
376
|
-
"description": "用客户自有图片作为角色定妆图(身份锚,优先级高于 AI 生成;之后 AI 重生默认不覆盖)。★★图片规范(登记前平台会自动检查,不合规返回 422 且不登记):**只有该角色一人**(不能有其他人/合影/背景路人);**单张单一角度**(不是拼图/九宫格/多视角设定图——设定图由平台据定妆图生成);正面或 3/4 侧、面部清晰无遮挡、干净背景;**图上无任何文字**(水印/字幕/名字标签/logo/衣服印字都不行,字样会被复刻进每一镜)。上传前先看一眼客户给的图,不合规就先请客户换图,别直接传。被拒时把 message 里的问题原样告诉客户;只有客户看过问题后明确坚持用这张图,才带 allow_issues:true 重传(自动检查可能误判)。★换图会失效原有派生资产(设定图/多角度头像/发型·身材参考)并重建人脸锁,但**设定图不会自动重出**——换完必须 generate_character_sheet(character_id) 据新定妆图重出设定图(响应里的 next_step 会提示),否则该角色只剩定妆图一个锚。★换图后响应含 stale_frames=[{storyboard_id,storyboard_number,frames}]——这些镜的首帧还是旧定妆图生成的、已被污染。要让新定妆图生效:对每个 stale_frame 用 quote_shot_frame+generate_shot_frame 重生该镜(平台会自动以新定妆图/设定图/人脸锁作锚,保全片一致)。不必逐镜自己指定模型/首尾帧。★千万别自制首尾帧再 upload_shot_frame——外部图没有角色身份锚/画风锚,人物·服装·画风必漂,那才是废片根源(不是\"杜绝废片\")
|
|
376
|
+
"description": "用客户自有图片作为角色定妆图(身份锚,优先级高于 AI 生成;之后 AI 重生默认不覆盖)。★★图片规范(登记前平台会自动检查,不合规返回 422 且不登记):**只有该角色一人**(不能有其他人/合影/背景路人);**单张单一角度**(不是拼图/九宫格/多视角设定图——设定图由平台据定妆图生成);正面或 3/4 侧、面部清晰无遮挡、干净背景;**图上无任何文字**(水印/字幕/名字标签/logo/衣服印字都不行,字样会被复刻进每一镜)。上传前先看一眼客户给的图,不合规就先请客户换图,别直接传。被拒时把 message 里的问题原样告诉客户;只有客户看过问题后明确坚持用这张图,才带 allow_issues:true 重传(自动检查可能误判)。★换图会失效原有派生资产(设定图/多角度头像/发型·身材参考)并重建人脸锁,但**设定图不会自动重出**——换完必须 generate_character_sheet(character_id) 据新定妆图重出设定图(响应里的 next_step 会提示),否则该角色只剩定妆图一个锚。★换图后响应含 stale_frames=[{storyboard_id,storyboard_number,frames}]——这些镜的首帧还是旧定妆图生成的、已被污染。要让新定妆图生效:对每个 stale_frame 用 quote_shot_frame+generate_shot_frame 重生该镜(平台会自动以新定妆图/设定图/人脸锁作锚,保全片一致)。不必逐镜自己指定模型/首尾帧。★千万别自制首尾帧再 upload_shot_frame——外部图没有角色身份锚/画风锚,人物·服装·画风必漂,那才是废片根源(不是\"杜绝废片\")。★换图只是**解除引用**,旧定妆图/设定图的文件不会被删除。响应里的 old_assets 逐项列出被解除的旧资产:unlinked=[{kind,url,in_history}](in_history=false 表示平台没留记录——典型是客户上传的旧定妆图,要留就把 url 存下来),physically_deleted 恒为空。客户说「删掉旧图」时,如实告诉他只是不再使用、文件仍在,别说成已删除。传本地文件(file_path,自动上传 COS)或已托管的图片 URL(image_url),二选一。登记免费;内容检查是一次小额视觉审核,按用量后付。",
|
|
377
377
|
"tags": [
|
|
378
378
|
"characters"
|
|
379
379
|
],
|
|
@@ -10424,6 +10424,72 @@
|
|
|
10424
10424
|
}
|
|
10425
10425
|
}
|
|
10426
10426
|
},
|
|
10427
|
+
"/storyboards/{storyboard_id}/frame/clear": {
|
|
10428
|
+
"post": {
|
|
10429
|
+
"operationId": "clear_shot_frame",
|
|
10430
|
+
"summary": "清除某镜的尾帧(解除引用,免费)",
|
|
10431
|
+
"description": "清除某镜的尾帧(解除引用,免费)。用于换了定妆图/改了剧情后,旧尾帧会把旧人物/旧画面带进重生的视频时,先清掉它再 regenerate_shot_video。只能清尾帧:首帧是出视频的起点,要换首帧用 generate_shot_frame 重生或 upload_shot_frame 替换。★这是解除引用,不是删除:文件不会被删,响应里 unlinked[].in_history=true 的可在 get_asset_versions 找回,physically_deleted 恒为空——如实告诉客户。本镜已有视频会被标为过期(video_stale)。尾帧已定稿(pinned)会返回 409,客户确认后带 release_pin:true(会一并解除定稿);尾帧正在生成也会 409,等它结束再清。响应的 still_referenced_by 列出同剧仍在用这张图的其它镜(典型:下一镜首帧是它的裸拷贝)——这些不会被连带清掉,需要的话逐镜重生。",
|
|
10432
|
+
"tags": [
|
|
10433
|
+
"storyboards"
|
|
10434
|
+
],
|
|
10435
|
+
"parameters": [
|
|
10436
|
+
{
|
|
10437
|
+
"name": "storyboard_id",
|
|
10438
|
+
"in": "path",
|
|
10439
|
+
"required": true,
|
|
10440
|
+
"schema": {
|
|
10441
|
+
"type": "integer",
|
|
10442
|
+
"exclusiveMinimum": 0
|
|
10443
|
+
}
|
|
10444
|
+
}
|
|
10445
|
+
],
|
|
10446
|
+
"requestBody": {
|
|
10447
|
+
"required": false,
|
|
10448
|
+
"content": {
|
|
10449
|
+
"application/json": {
|
|
10450
|
+
"schema": {
|
|
10451
|
+
"type": "object",
|
|
10452
|
+
"properties": {
|
|
10453
|
+
"frame_type": {
|
|
10454
|
+
"type": "string",
|
|
10455
|
+
"description": "(assembled by the client from tool args — see tool 'clear_shot_frame')"
|
|
10456
|
+
},
|
|
10457
|
+
"release_pin": {
|
|
10458
|
+
"type": "boolean"
|
|
10459
|
+
}
|
|
10460
|
+
}
|
|
10461
|
+
}
|
|
10462
|
+
}
|
|
10463
|
+
}
|
|
10464
|
+
},
|
|
10465
|
+
"responses": {
|
|
10466
|
+
"200": {
|
|
10467
|
+
"description": "StarReel envelope",
|
|
10468
|
+
"content": {
|
|
10469
|
+
"application/json": {
|
|
10470
|
+
"schema": {
|
|
10471
|
+
"type": "object",
|
|
10472
|
+
"properties": {
|
|
10473
|
+
"code": {
|
|
10474
|
+
"type": "integer"
|
|
10475
|
+
},
|
|
10476
|
+
"message": {
|
|
10477
|
+
"type": "string"
|
|
10478
|
+
},
|
|
10479
|
+
"data": {
|
|
10480
|
+
"description": "Operation result payload"
|
|
10481
|
+
}
|
|
10482
|
+
}
|
|
10483
|
+
}
|
|
10484
|
+
}
|
|
10485
|
+
}
|
|
10486
|
+
},
|
|
10487
|
+
"402": {
|
|
10488
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
10489
|
+
}
|
|
10490
|
+
}
|
|
10491
|
+
}
|
|
10492
|
+
},
|
|
10427
10493
|
"/storyboards/{storyboard_id}/frame/generate": {
|
|
10428
10494
|
"post": {
|
|
10429
10495
|
"operationId": "generate_shot_frame",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.119",
|
|
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.119",
|
|
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.119",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|