@starreel/mcp 0.1.59 → 0.1.60
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 +1 -1
- package/SKILL.md +2 -1
- package/dist/tools/guide-data.js +2 -2
- package/dist/tools/produce.js +20 -1
- package/openapi.json +65 -3
- package/package.json +1 -1
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -128,7 +128,7 @@ See the [API docs](https://api.shortreelai.com/docs/mcp).
|
|
|
128
128
|
| Identity anchors | `generate_portraits_and_sheets` (portraits + character sheets = the consistency anchor) |
|
|
129
129
|
| Storyboards | `quote_storyboards` → `generate_storyboards` → `get_storyboards` |
|
|
130
130
|
| Frames & video | `quote_frames` → `generate_frames` · `quote_videos` → `generate_videos` |
|
|
131
|
-
| Audio | `generate_tts` · `generate_bgm` · `generate_sfx` · voice management |
|
|
131
|
+
| Audio | `generate_tts` · `generate_bgm` (steerable via `prompt`) · `get_bgm_prompt_guide` · `generate_sfx` · voice management |
|
|
132
132
|
| Finishing | `compose_episode` (free) · `get_final_cut` · `render_multi_aspect` · posters & covers |
|
|
133
133
|
| Localization | `translate_subtitles` · localization jobs |
|
|
134
134
|
| Ads / MV modes | product library & product sheets · MV lyrics → story → script |
|
package/SKILL.md
CHANGED
|
@@ -595,7 +595,8 @@ to close") tells the vendor to fit that entire sequence into each 3-second shot.
|
|
|
595
595
|
`quote/generate_frames`, `chain_frames`, `quote/generate_videos`
|
|
596
596
|
- **Audio**: `generate_tts` (required before final cut), `clone_voice`,
|
|
597
597
|
`speak_with_voice`, `set_character_voice`, `list_voices`, `delete_voice`,
|
|
598
|
-
`generate_bgm
|
|
598
|
+
`generate_bgm` (optional `prompt` steers the music; read `get_bgm_prompt_guide` first),
|
|
599
|
+
`get_bgm_prompt_guide`, `replace_shot_dialogue`
|
|
599
600
|
- **Finish**: `compose_episode`, `get_final_cut`, `get_export`,
|
|
600
601
|
`generate_episode_poster`, `generate_cover`
|
|
601
602
|
- **Assemble it yourself**: `export_handoff_pack`, `get_handoff_toolchain` —
|
package/dist/tools/guide-data.js
CHANGED
|
@@ -248,7 +248,7 @@ export const OPTIONAL_BOOSTS = [
|
|
|
248
248
|
{ what: '口型同步', tool: 'lipsync_episode', when: 'TTS 配音项目需要对口型时' },
|
|
249
249
|
{ what: '海报 / 封面', tool: 'generate_episode_poster', when: '成片后;`generate_drama_poster` / `generate_cover` 同族' },
|
|
250
250
|
{ what: '音效 / 特效 / 转场(本地库匹配)', tool: 'generate_sfx', when: '免费;`generate_effects` / `generate_transitions` 同族' },
|
|
251
|
-
{ what: '配乐', tool: 'generate_bgm', when: '
|
|
251
|
+
{ what: '配乐', tool: 'generate_bgm', when: '按整集情绪弧线生成;终拼自动接管。客户想指定音乐方向就带 prompt(整集一条),写法先读 `get_bgm_prompt_guide`(免费);不带 prompt 就是全自动' },
|
|
252
252
|
{ what: '字幕翻译', tool: 'translate_subtitles', when: '出海;双语烧录在项目设定里开' },
|
|
253
253
|
];
|
|
254
254
|
export const BILLING = {
|
|
@@ -257,7 +257,7 @@ export const BILLING = {
|
|
|
257
257
|
'quote_id 一次性、约 15 分钟过期;绝不擅自确认,视频报价可能上万点。',
|
|
258
258
|
pay_as_you_go: '文本步(改写 / 提取 / 自动填充 / 增强提示词)按 token 后付,无需报价但要事先告知。',
|
|
259
259
|
free_families: [
|
|
260
|
-
'所有 get_* / list_* / scan_* / review_* / check_* / recommend_* / get_capabilities_guide / get_autofill_status',
|
|
260
|
+
'所有 get_* / list_* / scan_* / review_* / check_* / recommend_* / get_capabilities_guide / get_autofill_status / get_bgm_prompt_guide',
|
|
261
261
|
'compose_episode / rerender_episode / render_multi_aspect / generate_sfx / generate_effects / generate_transitions',
|
|
262
262
|
'import_storyboard_table / adopt_external_script / get_script_format_spec / check_script_format',
|
|
263
263
|
'get_storyboard_table_spec / check_storyboard_table / get_bulk_import_spec / check_bulk_import / bulk_import_storyboards',
|
package/dist/tools/produce.js
CHANGED
|
@@ -818,7 +818,26 @@ export function registerProduceTools(server, client) {
|
|
|
818
818
|
})));
|
|
819
819
|
server.tool('generate_bgm', '给整集生成/更换 AI 配乐(按情绪弧线)。后台异步,按用量后付不欠费。返回情绪弧线段数与预估耗时;' +
|
|
820
820
|
'用 get_bgm_status 轮询生成进度。★配乐生成/改动**不会自动进已有成片**——完成后必须重新 ' +
|
|
821
|
-
'compose_episode(免费)才能听到;get_final_cut 的 bgm_stale=true 就是在提示这一步。别用 re-render(吃旧时间线,不含新配乐)
|
|
821
|
+
'compose_episode(免费)才能听到;get_final_cut 的 bgm_stale=true 就是在提示这一步。别用 re-render(吃旧时间线,不含新配乐)。\n' +
|
|
822
|
+
'★prompt 可选:不传=全自动(和以前一样)。传了就是在自动结果上再加方向,整集一条,系统仍按情绪弧线分幕。' +
|
|
823
|
+
'怎么写见 get_bgm_prompt_guide(免费);要点=只写音乐维度(情绪气质/主奏配器/速度动态/厚薄空间/风格参照),' +
|
|
824
|
+
'别写剧情(「主角发现真相时要紧张」→写「紧张,节奏推进感强」)。' +
|
|
825
|
+
'只出纯器乐:要人声/歌词/拟音当乐器都不会生效,会在 prompt_warnings 里点名但**不拦生成**。\n' +
|
|
826
|
+
'★prompt_mode: guide(默认)=你的要求与平台专业护栏(时代与题材匹配/配器节制/高潮保规模/段间差异)一起生效;' +
|
|
827
|
+
'override=直通,跳过护栏,只保留技术底线(纯器乐/时长/可循环)。override 效果自负,' +
|
|
828
|
+
'**先用 guide 试**,确实拧不过来再换。不传 prompt 时沿用该集上次填的(get_bgm_status 可查)。', {
|
|
829
|
+
episode_id: z.number().int().positive(),
|
|
830
|
+
prompt: z.string().optional().describe('配乐方向,整集一条,≤800 字。只写音乐维度,别写剧情。传空字符串=清除已存的提示词。'
|
|
831
|
+
+ '不传=沿用该集上次填的(没填过就是全自动)。'),
|
|
832
|
+
prompt_mode: z.enum(['guide', 'override']).optional().describe('guide(默认)=提示词与平台护栏一起生效;override=直通跳过审美护栏(技术底线仍在)。'),
|
|
833
|
+
}, async ({ episode_id, prompt, prompt_mode }) => jsonResult(await client.producePost(`/episodes/${episode_id}/bgm`, {
|
|
834
|
+
...(prompt === undefined ? {} : { prompt }),
|
|
835
|
+
...(prompt_mode ? { prompt_mode } : {}),
|
|
836
|
+
})));
|
|
837
|
+
server.tool('get_bgm_prompt_guide', '取「AI 配乐提示词」的书写规范:两个档位怎么选、该写哪些维度(附可照抄的示例)、' +
|
|
838
|
+
'哪些是写了也不会生效的硬限制(纯器乐/时长/不做音效/不复刻具体曲目)、常见写坏的方式。' +
|
|
839
|
+
'免费,纯静态,与具体剧目无关——写 generate_bgm 的 prompt 之前先读它,别自己猜。' +
|
|
840
|
+
'也适合直接把要点转述给客户看。', {}, async () => jsonResult(await client.produceGet('/bgm-prompt-guide')));
|
|
822
841
|
server.tool('set_shot_name_card', '给某一镜加/改/清「角色名卡」(画面侧边竖排人物名+朱红印章,终拼时烧进成片,含预览一致的书法字体)。' +
|
|
823
842
|
'name 传空字符串=清除本镜名卡。免费(纯数据,填了就显示)。适合群像出场镜逐个标注人物名。' +
|
|
824
843
|
'★别自己下载视频叠字再上传——那会绕开渲染机字体与印章素材,预览/成片不一致。', {
|
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.60",
|
|
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.60 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"tags": [
|
|
30
|
+
{
|
|
31
|
+
"name": "bgm-prompt-guide",
|
|
32
|
+
"description": "Operations under /bgm-prompt-guide"
|
|
33
|
+
},
|
|
30
34
|
{
|
|
31
35
|
"name": "bulk-import",
|
|
32
36
|
"description": "Operations under /bulk-import"
|
|
@@ -85,6 +89,42 @@
|
|
|
85
89
|
}
|
|
86
90
|
],
|
|
87
91
|
"paths": {
|
|
92
|
+
"/bgm-prompt-guide": {
|
|
93
|
+
"get": {
|
|
94
|
+
"operationId": "get_bgm_prompt_guide",
|
|
95
|
+
"summary": "取「AI 配乐提示词」的书写规范:两个档位怎么选、该写哪些维度(附可照抄的示例)、哪些是写了也不会生效的硬限制(纯器乐/时长/不做音效/不复刻具体曲目)、常见写坏的方式",
|
|
96
|
+
"description": "取「AI 配乐提示词」的书写规范:两个档位怎么选、该写哪些维度(附可照抄的示例)、哪些是写了也不会生效的硬限制(纯器乐/时长/不做音效/不复刻具体曲目)、常见写坏的方式。免费,纯静态,与具体剧目无关——写 generate_bgm 的 prompt 之前先读它,别自己猜。也适合直接把要点转述给客户看。",
|
|
97
|
+
"tags": [
|
|
98
|
+
"bgm-prompt-guide"
|
|
99
|
+
],
|
|
100
|
+
"responses": {
|
|
101
|
+
"200": {
|
|
102
|
+
"description": "StarReel envelope",
|
|
103
|
+
"content": {
|
|
104
|
+
"application/json": {
|
|
105
|
+
"schema": {
|
|
106
|
+
"type": "object",
|
|
107
|
+
"properties": {
|
|
108
|
+
"code": {
|
|
109
|
+
"type": "integer"
|
|
110
|
+
},
|
|
111
|
+
"message": {
|
|
112
|
+
"type": "string"
|
|
113
|
+
},
|
|
114
|
+
"data": {
|
|
115
|
+
"description": "Operation result payload"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"402": {
|
|
123
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
88
128
|
"/bulk-import/lint": {
|
|
89
129
|
"post": {
|
|
90
130
|
"operationId": "check_bulk_import",
|
|
@@ -2510,7 +2550,7 @@
|
|
|
2510
2550
|
"post": {
|
|
2511
2551
|
"operationId": "generate_bgm",
|
|
2512
2552
|
"summary": "给整集生成/更换 AI 配乐(按情绪弧线)",
|
|
2513
|
-
"description": "给整集生成/更换 AI 配乐(按情绪弧线)。后台异步,按用量后付不欠费。返回情绪弧线段数与预估耗时;用 get_bgm_status 轮询生成进度。★配乐生成/改动**不会自动进已有成片**——完成后必须重新 compose_episode(免费)才能听到;get_final_cut 的 bgm_stale=true 就是在提示这一步。别用 re-render(吃旧时间线,不含新配乐)。",
|
|
2553
|
+
"description": "给整集生成/更换 AI 配乐(按情绪弧线)。后台异步,按用量后付不欠费。返回情绪弧线段数与预估耗时;用 get_bgm_status 轮询生成进度。★配乐生成/改动**不会自动进已有成片**——完成后必须重新 compose_episode(免费)才能听到;get_final_cut 的 bgm_stale=true 就是在提示这一步。别用 re-render(吃旧时间线,不含新配乐)。\n★prompt 可选:不传=全自动(和以前一样)。传了就是在自动结果上再加方向,整集一条,系统仍按情绪弧线分幕。怎么写见 get_bgm_prompt_guide(免费);要点=只写音乐维度(情绪气质/主奏配器/速度动态/厚薄空间/风格参照),别写剧情(「主角发现真相时要紧张」→写「紧张,节奏推进感强」)。只出纯器乐:要人声/歌词/拟音当乐器都不会生效,会在 prompt_warnings 里点名但**不拦生成**。\n★prompt_mode: guide(默认)=你的要求与平台专业护栏(时代与题材匹配/配器节制/高潮保规模/段间差异)一起生效;override=直通,跳过护栏,只保留技术底线(纯器乐/时长/可循环)。override 效果自负,**先用 guide 试**,确实拧不过来再换。不传 prompt 时沿用该集上次填的(get_bgm_status 可查)。",
|
|
2514
2554
|
"tags": [
|
|
2515
2555
|
"episodes"
|
|
2516
2556
|
],
|
|
@@ -2525,6 +2565,28 @@
|
|
|
2525
2565
|
}
|
|
2526
2566
|
}
|
|
2527
2567
|
],
|
|
2568
|
+
"requestBody": {
|
|
2569
|
+
"required": false,
|
|
2570
|
+
"content": {
|
|
2571
|
+
"application/json": {
|
|
2572
|
+
"schema": {
|
|
2573
|
+
"type": "object",
|
|
2574
|
+
"properties": {
|
|
2575
|
+
"prompt": {
|
|
2576
|
+
"type": "string"
|
|
2577
|
+
},
|
|
2578
|
+
"prompt_mode": {
|
|
2579
|
+
"type": "string",
|
|
2580
|
+
"enum": [
|
|
2581
|
+
"guide",
|
|
2582
|
+
"override"
|
|
2583
|
+
]
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
}
|
|
2587
|
+
}
|
|
2588
|
+
}
|
|
2589
|
+
},
|
|
2528
2590
|
"responses": {
|
|
2529
2591
|
"200": {
|
|
2530
2592
|
"description": "StarReel envelope",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.60",
|
|
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.60",
|
|
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.60",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|