@starreel/mcp 0.1.112 → 0.1.114

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
@@ -1184,7 +1184,7 @@ Full reference: https://api.shortreelai.com/docs/mcp
1184
1184
  ### 资产引用与版本有效性
1185
1185
 
1186
1186
  - `get_storyboards.asset_versions` 对首帧、尾帧和视频分别返回四项事实:`generated`(已生成)、`input_consistent`(与当前输入一致)、`review_valid`(审核有效)、`adopted`(已采用)。`null` 表示证据不足,不能当作 true。
1187
- - `ready` 和生成数量只表示产物存在;当前有效数量使用 `get_pipeline_status.asset_versions_summary.*.current_effective`。换帧后旧视频仍可查看,但失效版本不能混入当前有效汇总。
1187
+ - `ready` 和生成数量只表示产物存在;当前有效数量使用 `get_pipeline_status.asset_versions_summary.*.current_effective`。出图、出视频两步的 `status=done` 同样只表示已生成,旁边的 `validity` 拆出当前有效、生成后输入已变(`changed_by` 给出是哪类依赖变了)、无法判断、未审核、审核未过;`validity.note` 非空时先告知客户,再决定重出哪些镜,不要因输入变更就整集重出。换帧后旧视频仍可查看,但失效版本不能混入当前有效汇总。
1188
1188
  - `get_asset_versions(storyboard_id)` 查看历史版本链接、依赖 ID/版本哈希及各自状态。历史没有快照时不从当前绑定伪造依赖。
1189
1189
  - `get_image_dispatch(image_id)` 查一张镜头帧的派发台账:每张参考图的用途、所属角色、是否送达模型,派发前被剔的图在哪一步因什么被剔(如时代预检点名的冲突物件),以及最终发给模型的提示词。画面「不像某角色/少了某道具」时先查它,确认是参考没送到还是模型没画对,再决定改什么;`ledger` 不是 `full` 时缺失项为 `null`,不能当作已送达。
1190
1190
  - `get_stale_portrait_frames(episode_id)` 换定妆图后查影响范围:列出在用帧仍基于角色旧资产的镜头,每条附证据(`ledger-old-asset` / `references-previous-asset` / `portrait-born-after-frame`)。`unknown` 是证据不足,不是已过期,不要据此批量重出。先把 `stale` 清单和 `has_video` 告诉客户,由客户决定重出哪些镜——重出帧和视频都要付费。
@@ -487,6 +487,7 @@ export function registerProduceTools(server, client) {
487
487
  server.tool('get_pipeline_status', '查某一集完整工作流的进度(script_rewrite/提取/分镜/语音/出图/出视频/合成/配乐/终拼…各步 ' +
488
488
  'done/partial/pending/not_required)。照它按序推进、不跳步。免费。' +
489
489
  'asset_versions_summary 将 generated、input_consistent、review_valid、adopted 和 current_effective 分开计数;不能把 generate_videos.completed 当当前有效数量。' +
490
+ '★generate_images / generate_videos 的 status=done 只表示「已生成」,不代表可交付:看同一步的 validity(current_effective 当前有效 / input_changed 生成后输入已变,changed_by 列出是剧级设定、镜头本身还是哪个角色变了 / input_unknown / unreviewed / review_failed),validity.note 不为空时先把它告诉客户。输入变了不一定影响画面,别据此整集重出(付费),先用 get_asset_versions 逐镜看原因。' +
490
491
  '★not_required=当前模式不需要该步(如原声剧的 TTS 三步、关配乐的 generate_bgm),不是没做完,别去补做。' +
491
492
  '图片/视频分母已剔除卡镜(shots_not_applicable);merge_episode.bgm_stale=true 表示配乐晚于成片,重新 compose_episode 即可。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/pipeline-status`)));
492
493
  // ---------- 角色定妆图(一致性锚) ----------
@@ -816,7 +817,13 @@ export function registerProduceTools(server, client) {
816
817
  + '走 TTS 配音的片子不会有这个问题。'
817
818
  + '\n★**很慢**:每镜要完整解码音轨,实测 6~10 秒/镜(后端限并发 4),整集几十镜要等几分钟。'
818
819
  + '别在产线中途反复调,放在成片前查一次。'
819
- + '\n★shots_probe_failed 是**没测成**的镜数,不代表那些镜有问题。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/silent-shot-audio-audit`)));
820
+ + '\n★shots_probe_failed 是**没测成**的镜数,不代表那些镜有问题。'
821
+ + '\n★★probe_speech:true 再对**台词栏为空**的镜跑人声检测(已标定判据):厂商在无台词镜里自己念出一句话时,'
822
+ + '响度比测不出来,这个能——命中的镜列在 unexpected_speech,text 是念出的内容。更慢(每镜下载+转写),'
823
+ + '一次最多 20 镜,skipped_by_limit 是剩下的、再调一次接着扫。只报不改:由客户决定 mute_only 静掉还是重生成。', {
824
+ episode_id: z.number().int().positive(),
825
+ probe_speech: z.boolean().optional().describe('true=对无台词镜额外跑人声检测(慢,一次≤20镜)'),
826
+ }, async ({ episode_id, probe_speech }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/silent-shot-audio-audit${probe_speech ? '?probe_speech=1' : ''}`)));
820
827
  server.tool('get_asset_recovery', '列本集可恢复的**历史视频产物**(免费·只读):以前生成过、后来被覆盖掉的整集成片与逐镜视频。'
821
828
  + '\n用途:客户说「上一版那个成片好」「这一镜前天那条视频比现在这条好」时,从这里找回来。'
822
829
  + '\n★★只管视频,**不含图片帧**:首尾帧不在这里,列表里也永远不会出现。'
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.112",
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.112 tool surface (operationIds match MCP tool names 1:1)."
5
+ "version": "0.1.114",
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.114 tool surface (operationIds match MCP tool names 1:1)."
7
7
  },
8
8
  "servers": [
9
9
  {
@@ -5485,7 +5485,7 @@
5485
5485
  "get": {
5486
5486
  "operationId": "get_pipeline_status",
5487
5487
  "summary": "查某一集完整工作流的进度(script_rewrite/提取/分镜/语音/出图/出视频/合成/配乐/终拼…各步 done/partial/pending/not_required)",
5488
- "description": "查某一集完整工作流的进度(script_rewrite/提取/分镜/语音/出图/出视频/合成/配乐/终拼…各步 done/partial/pending/not_required)。照它按序推进、不跳步。免费。asset_versions_summary 将 generated、input_consistent、review_valid、adopted 和 current_effective 分开计数;不能把 generate_videos.completed 当当前有效数量。★not_required=当前模式不需要该步(如原声剧的 TTS 三步、关配乐的 generate_bgm),不是没做完,别去补做。图片/视频分母已剔除卡镜(shots_not_applicable);merge_episode.bgm_stale=true 表示配乐晚于成片,重新 compose_episode 即可。",
5488
+ "description": "查某一集完整工作流的进度(script_rewrite/提取/分镜/语音/出图/出视频/合成/配乐/终拼…各步 done/partial/pending/not_required)。照它按序推进、不跳步。免费。asset_versions_summary 将 generated、input_consistent、review_valid、adopted 和 current_effective 分开计数;不能把 generate_videos.completed 当当前有效数量。★generate_images / generate_videos 的 status=done 只表示「已生成」,不代表可交付:看同一步的 validity(current_effective 当前有效 / input_changed 生成后输入已变,changed_by 列出是剧级设定、镜头本身还是哪个角色变了 / input_unknown / unreviewed / review_failed),validity.note 不为空时先把它告诉客户。输入变了不一定影响画面,别据此整集重出(付费),先用 get_asset_versions 逐镜看原因。★not_required=当前模式不需要该步(如原声剧的 TTS 三步、关配乐的 generate_bgm),不是没做完,别去补做。图片/视频分母已剔除卡镜(shots_not_applicable);merge_episode.bgm_stale=true 表示配乐晚于成片,重新 compose_episode 即可。",
5489
5489
  "tags": [
5490
5490
  "episodes"
5491
5491
  ],
@@ -6841,7 +6841,7 @@
6841
6841
  "get": {
6842
6842
  "operationId": "audit_silent_shot_audio",
6843
6843
  "summary": "查**无台词镜里的异常发声**:本该沉默的反应镜,音轨却比同场说话镜还响——成片里的表现是「有人在画外乱说话」",
6844
- "description": "查**无台词镜里的异常发声**:本该沉默的反应镜,音轨却比同场说话镜还响——成片里的表现是「有人在画外乱说话」。免费。\n★用在**原声剧**上(use_clip_audio=true,即直接用 AI 视频自带声音那种)。走 TTS 配音的片子不会有这个问题。\n★**很慢**:每镜要完整解码音轨,实测 6~10 秒/镜(后端限并发 4),整集几十镜要等几分钟。别在产线中途反复调,放在成片前查一次。\n★shots_probe_failed 是**没测成**的镜数,不代表那些镜有问题。",
6844
+ "description": "查**无台词镜里的异常发声**:本该沉默的反应镜,音轨却比同场说话镜还响——成片里的表现是「有人在画外乱说话」。免费。\n★用在**原声剧**上(use_clip_audio=true,即直接用 AI 视频自带声音那种)。走 TTS 配音的片子不会有这个问题。\n★**很慢**:每镜要完整解码音轨,实测 6~10 秒/镜(后端限并发 4),整集几十镜要等几分钟。别在产线中途反复调,放在成片前查一次。\n★shots_probe_failed 是**没测成**的镜数,不代表那些镜有问题。\n★★probe_speech:true 再对**台词栏为空**的镜跑人声检测(已标定判据):厂商在无台词镜里自己念出一句话时,响度比测不出来,这个能——命中的镜列在 unexpected_speech,text 是念出的内容。更慢(每镜下载+转写),一次最多 20 镜,skipped_by_limit 是剩下的、再调一次接着扫。只报不改:由客户决定 mute_only 静掉还是重生成。",
6845
6845
  "tags": [
6846
6846
  "episodes"
6847
6847
  ],
@@ -6854,6 +6854,14 @@
6854
6854
  "type": "integer",
6855
6855
  "exclusiveMinimum": 0
6856
6856
  }
6857
+ },
6858
+ {
6859
+ "name": "probe_speech",
6860
+ "in": "query",
6861
+ "required": false,
6862
+ "schema": {
6863
+ "type": "string"
6864
+ }
6857
6865
  }
6858
6866
  ],
6859
6867
  "responses": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.112",
3
+ "version": "0.1.114",
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.112",
5
+ "version": "0.1.114",
6
6
  "websiteUrl": "https://starreel.ai",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "@starreel/mcp",
11
- "version": "0.1.112",
11
+ "version": "0.1.114",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  },