@starreel/mcp 0.1.133 → 0.1.134

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
@@ -1108,8 +1108,10 @@ to close") tells the vendor to fit that entire sequence into each 3-second shot.
1108
1108
  - **Mix** (free; settings only — `compose_episode` again to hear them, `rerender_episode`
1109
1109
  reuses the old timeline): whole drama via `update_project_settings`
1110
1110
  (`bgm_volume_preset` / `bgm_volume_db` / `lufs_target`); one episode via
1111
- `set_episode_audio`; one music section's level and fades via `list_bgm_cues` →
1112
- `update_bgm_cue`. Don't download the cut to re-mix it locally.
1111
+ `set_episode_audio` (music level, plus `clip_audio_gain_db` for the clips' own sound and
1112
+ `voice_gain_db` for the TTS dialogue + narration track); one music section's level, fades,
1113
+ where in the track it starts (`track_offset_ms`) and how late after its first shot it comes in
1114
+ (`start_shift_ms`) via `list_bgm_cues` → `update_bgm_cue`. Don't download the cut to re-mix it locally.
1113
1115
  - **Finish**: `compose_episode`, `get_final_cut`, `get_export`,
1114
1116
  `generate_episode_poster`, `generate_cover`
1115
1117
  - **What did this drama cost?** `get_drama_bill` — per kind `charged` / `refunded`
@@ -1511,24 +1511,35 @@ export function registerProduceTools(server, client) {
1511
1511
  server.tool('get_bgm_plan', '查本集配乐会分成几幕(免费、只读、不生成):每幕的幕号 act、覆盖镜号 sb_from~sb_to、时长、平均情绪强度。' +
1512
1512
  '要用 generate_bgm 的 director.acts 按幕锁定参数时,先调这个拿幕号。' +
1513
1513
  '★这是独立的只读工具:看分幕**不要**去调 generate_bgm——那个一调就是扣费生成。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/bgm-plan`)));
1514
- server.tool('set_episode_audio', '设置**本集**配乐音量(覆盖整剧设定,免费)。整剧统一的用 update_project_settings。' +
1514
+ server.tool('set_episode_audio', '设置**本集**成片混音(免费):配乐音量(覆盖整剧设定)、片段原声增益、配音轨增益。整剧统一的配乐音量用 update_project_settings。' +
1515
1515
  '★只改设置:成片要 compose_episode 重新合成才变(rerender_episode 用旧时间线,不带上)。' +
1516
- '★想调某一段配乐的音量或淡入淡出,用 list_bgm_cues + update_bgm_cue。', {
1516
+ '★想调某一段配乐的音量、淡入淡出或起点,用 list_bgm_cues + update_bgm_cue。' +
1517
+ '★原声=视频片段自带的声音(原声剧里就是角色台词);配音轨=TTS 生成的对白与旁白(两者在同一轨里预混,只能整轨调,分不开)。' +
1518
+ '★本集若走逐镜合成片终拼(每镜都有合成片),配音已烤进每镜、与原声是同一条音频,这两个增益不生效——响应里会有 warning,照实转告客户。', {
1517
1519
  episode_id: z.number().int().positive(),
1518
1520
  bgm_volume_preset: z.enum(['off', 'low', 'auto', 'high', 'inherit']).optional()
1519
1521
  .describe('本集配乐音量档:off静音/low轻(-28dB)/auto自适应/high强(-16dB)/inherit跟随整剧'),
1520
1522
  bgm_volume_db: z.number().min(-60).max(0).nullable().optional()
1521
1523
  .describe('本集自定义配乐音量(dB,-60~0),覆盖档位并关自适应;null=清除、跟随整剧'),
1524
+ clip_audio_gain_db: z.number().min(-30).max(6).nullable().optional()
1525
+ .describe('片段原声比系统默认响/轻多少(dB,-30~+6;0=默认);原声剧台词听不清→调高,环境噪音太吵→调低;null=清回默认'),
1526
+ voice_gain_db: z.number().min(-24).max(6).nullable().optional()
1527
+ .describe('配音轨(TTS 对白与旁白)比系统默认响/轻多少(dB,-24~+6;0=默认);null=清回默认'),
1522
1528
  }, async ({ episode_id, ...rest }) => jsonResult(await client.producePut(`/episodes/${episode_id}/audio`, rest)));
1523
- server.tool('list_bgm_cues', '列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms。' +
1529
+ server.tool('list_bgm_cues', '列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms、track_offset_ms / start_shift_ms(null=系统决定)。' +
1524
1530
  'episode_id 为 null 的是**整剧共用段**,改它会影响所有集。免费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/bgm-cues`)));
1525
- server.tool('update_bgm_cue', '调某一段配乐的音量与淡入淡出(免费)。只改这三项;换曲目或改覆盖范围用 generate_bgm 重新生成。' +
1526
- '★例:配乐进得太突兀→加大 fade_in_ms;某段压对白→降 gain_db。改完 compose_episode 重新合成才生效。', {
1531
+ server.tool('update_bgm_cue', '调某一段配乐的音量、淡入淡出与起点(免费)。换曲目或改覆盖镜号范围用 generate_bgm 重新生成。' +
1532
+ '★例:配乐进得太突兀→加大 fade_in_ms;某段压对白→降 gain_db;想从曲子的高潮部分开始→设 track_offset_ms;' +
1533
+ '想等这段第一镜开口之后再进→设 start_shift_ms。改完 compose_episode 重新合成才生效。', {
1527
1534
  episode_id: z.number().int().positive(),
1528
1535
  cue_id: z.number().int().positive().describe('来自 list_bgm_cues'),
1529
1536
  gain_db: z.number().min(-60).max(0).nullable().optional().describe('这段配乐的音量(dB,-60~0),设了就覆盖音量档;null=恢复跟随本集/整剧音量档'),
1530
1537
  fade_in_ms: z.number().int().min(0).max(15000).optional().describe('淡入毫秒(整数,0~15000)'),
1531
1538
  fade_out_ms: z.number().int().min(0).max(15000).optional().describe('淡出毫秒(整数,0~15000)'),
1539
+ track_offset_ms: z.number().int().min(0).max(600000).nullable().optional()
1540
+ .describe('从配乐文件第几毫秒开始播(0~600000),覆盖系统自动挑的切入点;超过曲长会钳到曲尾前 1 秒;null=交回系统自动挑'),
1541
+ start_shift_ms: z.number().int().min(0).max(60000).nullable().optional()
1542
+ .describe('这段配乐在它第一镜开始后再晚多少毫秒进(0~60000);默认卡在第一镜起点。段尾不变,至少留 1 秒;null=不平移'),
1532
1543
  }, async ({ episode_id, cue_id, ...rest }) => jsonResult(await client.producePut(`/episodes/${episode_id}/bgm-cues/${cue_id}`, rest)));
1533
1544
  server.tool('get_bgm_prompt_guide', '取「AI 配乐提示词」的书写规范:两个档位怎么选、该写哪些维度(附可照抄的示例)、' +
1534
1545
  '哪些是写了也不会生效的硬限制(纯器乐/时长/不做音效/不复刻具体曲目)、常见写坏的方式。' +
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.133",
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.133 tool surface (operationIds match MCP tool names 1:1)."
5
+ "version": "0.1.134",
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.134 tool surface (operationIds match MCP tool names 1:1)."
7
7
  },
8
8
  "servers": [
9
9
  {
@@ -3475,8 +3475,8 @@
3475
3475
  "/episodes/{episode_id}/audio": {
3476
3476
  "put": {
3477
3477
  "operationId": "set_episode_audio",
3478
- "summary": "设置**本集**配乐音量(覆盖整剧设定,免费)",
3479
- "description": "设置**本集**配乐音量(覆盖整剧设定,免费)。整剧统一的用 update_project_settings。★只改设置:成片要 compose_episode 重新合成才变(rerender_episode 用旧时间线,不带上)。★想调某一段配乐的音量或淡入淡出,用 list_bgm_cues + update_bgm_cue。",
3478
+ "summary": "设置**本集**成片混音(免费):配乐音量(覆盖整剧设定)、片段原声增益、配音轨增益",
3479
+ "description": "设置**本集**成片混音(免费):配乐音量(覆盖整剧设定)、片段原声增益、配音轨增益。整剧统一的配乐音量用 update_project_settings。★只改设置:成片要 compose_episode 重新合成才变(rerender_episode 用旧时间线,不带上)。★想调某一段配乐的音量、淡入淡出或起点,用 list_bgm_cues + update_bgm_cue。★原声=视频片段自带的声音(原声剧里就是角色台词);配音轨=TTS 生成的对白与旁白(两者在同一轨里预混,只能整轨调,分不开)。★本集若走逐镜合成片终拼(每镜都有合成片),配音已烤进每镜、与原声是同一条音频,这两个增益不生效——响应里会有 warning,照实转告客户。",
3480
3480
  "tags": [
3481
3481
  "episodes"
3482
3482
  ],
@@ -3519,6 +3519,30 @@
3519
3519
  "type": "null"
3520
3520
  }
3521
3521
  ]
3522
+ },
3523
+ "clip_audio_gain_db": {
3524
+ "anyOf": [
3525
+ {
3526
+ "type": "number",
3527
+ "minimum": -30,
3528
+ "maximum": 6
3529
+ },
3530
+ {
3531
+ "type": "null"
3532
+ }
3533
+ ]
3534
+ },
3535
+ "voice_gain_db": {
3536
+ "anyOf": [
3537
+ {
3538
+ "type": "number",
3539
+ "minimum": -24,
3540
+ "maximum": 6
3541
+ },
3542
+ {
3543
+ "type": "null"
3544
+ }
3545
+ ]
3522
3546
  }
3523
3547
  }
3524
3548
  }
@@ -3823,8 +3847,8 @@
3823
3847
  "/episodes/{episode_id}/bgm-cues": {
3824
3848
  "get": {
3825
3849
  "operationId": "list_bgm_cues",
3826
- "summary": "列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms",
3827
- "description": "列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms。episode_id 为 null 的是**整剧共用段**,改它会影响所有集。免费。",
3850
+ "summary": "列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms、track_offset_ms / start",
3851
+ "description": "列出本集的配乐段(AI 配乐按情绪分幕,每段覆盖一段镜号 sb_from~sb_to):id、覆盖范围、gain_db(null=跟随音量档)、fade_in_ms / fade_out_ms、track_offset_ms / start_shift_ms(null=系统决定)。episode_id 为 null 的是**整剧共用段**,改它会影响所有集。免费。",
3828
3852
  "tags": [
3829
3853
  "episodes"
3830
3854
  ],
@@ -3870,8 +3894,8 @@
3870
3894
  "/episodes/{episode_id}/bgm-cues/{cue_id}": {
3871
3895
  "put": {
3872
3896
  "operationId": "update_bgm_cue",
3873
- "summary": "调某一段配乐的音量与淡入淡出(免费)",
3874
- "description": "调某一段配乐的音量与淡入淡出(免费)。只改这三项;换曲目或改覆盖范围用 generate_bgm 重新生成。★例:配乐进得太突兀→加大 fade_in_ms;某段压对白→降 gain_db。改完 compose_episode 重新合成才生效。",
3897
+ "summary": "调某一段配乐的音量、淡入淡出与起点(免费)",
3898
+ "description": "调某一段配乐的音量、淡入淡出与起点(免费)。换曲目或改覆盖镜号范围用 generate_bgm 重新生成。★例:配乐进得太突兀→加大 fade_in_ms;某段压对白→降 gain_db;想从曲子的高潮部分开始→设 track_offset_ms;想等这段第一镜开口之后再进→设 start_shift_ms。改完 compose_episode 重新合成才生效。",
3875
3899
  "tags": [
3876
3900
  "episodes"
3877
3901
  ],
@@ -3924,6 +3948,30 @@
3924
3948
  "type": "integer",
3925
3949
  "minimum": 0,
3926
3950
  "maximum": 15000
3951
+ },
3952
+ "track_offset_ms": {
3953
+ "anyOf": [
3954
+ {
3955
+ "type": "integer",
3956
+ "minimum": 0,
3957
+ "maximum": 600000
3958
+ },
3959
+ {
3960
+ "type": "null"
3961
+ }
3962
+ ]
3963
+ },
3964
+ "start_shift_ms": {
3965
+ "anyOf": [
3966
+ {
3967
+ "type": "integer",
3968
+ "minimum": 0,
3969
+ "maximum": 60000
3970
+ },
3971
+ {
3972
+ "type": "null"
3973
+ }
3974
+ ]
3927
3975
  }
3928
3976
  }
3929
3977
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.133",
3
+ "version": "0.1.134",
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.133",
5
+ "version": "0.1.134",
6
6
  "websiteUrl": "https://starreel.ai",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "@starreel/mcp",
11
- "version": "0.1.133",
11
+ "version": "0.1.134",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  },