@starreel/mcp 0.1.135 → 0.1.136
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 -1
- package/dist/tools/guide-data.js +1 -1
- package/dist/tools/produce.js +4 -2
- package/openapi.json +88 -81
- package/package.json +1 -1
- package/server.json +2 -2
package/SKILL.md
CHANGED
|
@@ -1103,7 +1103,7 @@ to close") tells the vendor to fit that entire sequence into each 3-second shot.
|
|
|
1103
1103
|
- **Audio**: `generate_tts` (required before final cut), `clone_voice`,
|
|
1104
1104
|
`design_voice` → `get_voice_design` → `save_designed_voice` (no sample needed),
|
|
1105
1105
|
`speak_with_voice`, `set_character_voice`, `list_voices`, `delete_voice`,
|
|
1106
|
-
`generate_bgm` (optional `prompt` steers the music; read `get_bgm_prompt_guide` first; optional `director` hard-locks mood / instruments / bpm / tonality for the whole episode or per act — call the free read-only `get_bgm_plan` first to see the acts; to let the client pick between full-length versions, `quote_bgm_candidates` → `generate_bgm` with `candidates` 2–3 + `quote_id` → `select_bgm_candidate`, each candidate billed per song),
|
|
1106
|
+
`generate_bgm` (optional `prompt` steers the music; read `get_bgm_prompt_guide` first; optional `director` hard-locks mood / instruments / bpm / tonality for the whole episode or per act (saved per episode like `prompt`: omit it to reuse the last one, pass `null` to clear) — call the free read-only `get_bgm_plan` first to see the acts; to let the client pick between full-length versions, `quote_bgm_candidates` → `generate_bgm` with `candidates` 2–3 + `quote_id` → `select_bgm_candidate`, each candidate billed per song),
|
|
1107
1107
|
`get_bgm_prompt_guide`, `replace_shot_dialogue`, `revoice_narration`
|
|
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`
|
package/dist/tools/guide-data.js
CHANGED
|
@@ -290,7 +290,7 @@ export const OPTIONAL_BOOSTS = [
|
|
|
290
290
|
{ what: '口型同步', tool: 'lipsync_episode', when: 'TTS 配音项目需要对口型时' },
|
|
291
291
|
{ what: '海报 / 封面', tool: 'generate_episode_poster', when: '成片后;`generate_drama_poster` / `generate_cover` 同族' },
|
|
292
292
|
{ what: '音效 / 特效 / 转场(本地库匹配)', tool: 'generate_sfx', when: '免费;`generate_effects` / `generate_transitions` 同族' },
|
|
293
|
-
{ what: '配乐', tool: 'generate_bgm', when: '按整集情绪弧线生成;终拼自动接管。客户想指定音乐方向就带 prompt(整集一条),写法先读 `get_bgm_prompt_guide`(免费);不带 prompt 就是全自动。客户给了明确参数(情绪/主奏配器/BPM/大小调)用 director 锁定(
|
|
293
|
+
{ what: '配乐', tool: 'generate_bgm', when: '按整集情绪弧线生成;终拼自动接管。客户想指定音乐方向就带 prompt(整集一条),写法先读 `get_bgm_prompt_guide`(免费);不带 prompt 就是全自动。客户给了明确参数(情绪/主奏配器/BPM/大小调)用 director 锁定(硬约束,按集保存、下次不传沿用,可按幕;按幕前先 get_bgm_plan 免费看分幕)。客户想先听几版再定:candidates=2~3 出完整候选(每首单独计费,先 quote_bgm_candidates 报价),select_bgm_candidate 挑' },
|
|
294
294
|
{ what: '字幕翻译', tool: 'translate_subtitles', when: '出海;双语烧录在项目设定里开' },
|
|
295
295
|
];
|
|
296
296
|
export const BILLING = {
|
package/dist/tools/produce.js
CHANGED
|
@@ -1488,6 +1488,8 @@ export function registerProduceTools(server, client) {
|
|
|
1488
1488
|
'★director 可选=结构化锁定(硬约束):逐项指定 mood 情绪 / instruments 主奏配器 / bpm / tonality 大小调,' +
|
|
1489
1489
|
'生成时**强制覆盖**配乐总监的判断(不像 prompt 只是方向,可能被护栏或 AI 取舍改写);没锁的项仍自动判断。' +
|
|
1490
1490
|
'整集锁写在 director 顶层;只锁某一幕写进 director.acts[{act,…}](同名字段覆盖整集的)。' +
|
|
1491
|
+
'★director 按集保存(同 prompt):这次传了就记下,下次不传沿用上次的(get_bgm_status 的 director 可查);传 null 清除。' +
|
|
1492
|
+
'分镜改动后已存的幕号不存在了,那一条会被忽略并在 director_warnings 里说明,不拦生成。' +
|
|
1491
1493
|
'幕是按情绪弧线自动分的:按幕锁之前先调 get_bgm_plan(免费,只读)看本集分几幕、每幕覆盖哪些镜。' +
|
|
1492
1494
|
'参数拼错(bpm 越界、调性不是 major/minor/modal、幕号不存在)会 400;配器里写人声/环境声会被丢掉并在 director_warnings 点名。' +
|
|
1493
1495
|
'客户说「要慢一点、小调、用古筝」这类**明确参数**用 director;说「整体更压抑」这类**方向**用 prompt;两者可同时用。\n' +
|
|
@@ -1508,11 +1510,11 @@ export function registerProduceTools(server, client) {
|
|
|
1508
1510
|
...BGM_LOCK_FIELDS,
|
|
1509
1511
|
}).strict()).optional().describe('按幕锁定;同名字段覆盖整集的,没写的继承整集'),
|
|
1510
1512
|
// strict:拼错的字段(如 tempo)要报校验错误;zod 默认会静默剥掉它,转发出去的就是空锁 ⇒ 一次不受控的扣费生成
|
|
1511
|
-
}).strict().optional().describe('结构化锁定(硬约束)
|
|
1513
|
+
}).strict().nullable().optional().describe('结构化锁定(硬约束),按集保存:传了就记下,下次不传沿用上次的;传 null 清除。顶层字段整集生效'),
|
|
1512
1514
|
}, async ({ episode_id, prompt, prompt_mode, director, candidates, quote_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/bgm`, {
|
|
1513
1515
|
...(prompt === undefined ? {} : { prompt }),
|
|
1514
1516
|
...(prompt_mode ? { prompt_mode } : {}),
|
|
1515
|
-
...(director ? {
|
|
1517
|
+
...(director === undefined ? {} : { director }),
|
|
1516
1518
|
...(candidates === undefined ? {} : { candidates }),
|
|
1517
1519
|
...(quote_id ? { quote_id } : {}),
|
|
1518
1520
|
})));
|
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.136",
|
|
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.136 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -3693,7 +3693,7 @@
|
|
|
3693
3693
|
"post": {
|
|
3694
3694
|
"operationId": "generate_bgm",
|
|
3695
3695
|
"summary": "给整集生成/更换 AI 配乐(按情绪弧线)",
|
|
3696
|
-
"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 可查)。\n★director 可选=结构化锁定(硬约束):逐项指定 mood 情绪 / instruments 主奏配器 / bpm / tonality 大小调,生成时**强制覆盖**配乐总监的判断(不像 prompt 只是方向,可能被护栏或 AI 取舍改写);没锁的项仍自动判断。整集锁写在 director 顶层;只锁某一幕写进 director.acts[{act,…}](同名字段覆盖整集的)
|
|
3696
|
+
"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 可查)。\n★director 可选=结构化锁定(硬约束):逐项指定 mood 情绪 / instruments 主奏配器 / bpm / tonality 大小调,生成时**强制覆盖**配乐总监的判断(不像 prompt 只是方向,可能被护栏或 AI 取舍改写);没锁的项仍自动判断。整集锁写在 director 顶层;只锁某一幕写进 director.acts[{act,…}](同名字段覆盖整集的)。★director 按集保存(同 prompt):这次传了就记下,下次不传沿用上次的(get_bgm_status 的 director 可查);传 null 清除。分镜改动后已存的幕号不存在了,那一条会被忽略并在 director_warnings 里说明,不拦生成。幕是按情绪弧线自动分的:按幕锁之前先调 get_bgm_plan(免费,只读)看本集分几幕、每幕覆盖哪些镜。参数拼错(bpm 越界、调性不是 major/minor/modal、幕号不存在)会 400;配器里写人声/环境声会被丢掉并在 director_warnings 点名。客户说「要慢一点、小调、用古筝」这类**明确参数**用 director;说「整体更压抑」这类**方向**用 prompt;两者可同时用。\n★candidates 可选=候选整版对比:每幕出 2~3 首**完整**候选让客户挑(挑中的直接用,听到什么成片里就是什么)。每首单独按首计费 ⇒ 费用是单首的 N 倍,**必须先 quote_bgm_candidates 报价、把点数告诉客户、客户同意后**带 quote_id 调本工具。不传或传 1=原行为(每幕一首,无需报价)。生成后 get_bgm_status 的 candidate_groups 给每首的试听地址,select_bgm_candidate 挑选(免费),不挑默认第 1 首。",
|
|
3697
3697
|
"tags": [
|
|
3698
3698
|
"episodes"
|
|
3699
3699
|
],
|
|
@@ -3726,90 +3726,97 @@
|
|
|
3726
3726
|
]
|
|
3727
3727
|
},
|
|
3728
3728
|
"director": {
|
|
3729
|
-
"
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
"
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
"description": "情绪词,最多 3 个,每个 ≤12 字(如 压抑、苍凉)"
|
|
3738
|
-
},
|
|
3739
|
-
"instruments": {
|
|
3740
|
-
"type": "array",
|
|
3741
|
-
"items": {
|
|
3742
|
-
"type": "string"
|
|
3743
|
-
},
|
|
3744
|
-
"maxItems": 3,
|
|
3745
|
-
"description": "主奏乐器,最多 3 件,每件 ≤16 字(如 古筝、大提琴);人声/环境声会被丢掉"
|
|
3746
|
-
},
|
|
3747
|
-
"bpm": {
|
|
3748
|
-
"type": "number",
|
|
3749
|
-
"minimum": 40,
|
|
3750
|
-
"maximum": 160,
|
|
3751
|
-
"description": "速度 40~160"
|
|
3752
|
-
},
|
|
3753
|
-
"tonality": {
|
|
3754
|
-
"type": "string",
|
|
3755
|
-
"enum": [
|
|
3756
|
-
"major",
|
|
3757
|
-
"minor",
|
|
3758
|
-
"modal"
|
|
3759
|
-
],
|
|
3760
|
-
"description": "major 大调明亮 / minor 小调暗色 / modal 调式色彩"
|
|
3761
|
-
},
|
|
3762
|
-
"acts": {
|
|
3763
|
-
"type": "array",
|
|
3764
|
-
"items": {
|
|
3765
|
-
"type": "object",
|
|
3766
|
-
"properties": {
|
|
3767
|
-
"act": {
|
|
3768
|
-
"type": "integer",
|
|
3769
|
-
"exclusiveMinimum": 0,
|
|
3770
|
-
"description": "幕序号,从 1 开始(get_bgm_plan 可查)"
|
|
3729
|
+
"anyOf": [
|
|
3730
|
+
{
|
|
3731
|
+
"type": "object",
|
|
3732
|
+
"properties": {
|
|
3733
|
+
"mood": {
|
|
3734
|
+
"type": "array",
|
|
3735
|
+
"items": {
|
|
3736
|
+
"type": "string"
|
|
3771
3737
|
},
|
|
3772
|
-
"
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
"
|
|
3738
|
+
"maxItems": 3,
|
|
3739
|
+
"description": "情绪词,最多 3 个,每个 ≤12 字(如 压抑、苍凉)"
|
|
3740
|
+
},
|
|
3741
|
+
"instruments": {
|
|
3742
|
+
"type": "array",
|
|
3743
|
+
"items": {
|
|
3744
|
+
"type": "string"
|
|
3779
3745
|
},
|
|
3780
|
-
"
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3746
|
+
"maxItems": 3,
|
|
3747
|
+
"description": "主奏乐器,最多 3 件,每件 ≤16 字(如 古筝、大提琴);人声/环境声会被丢掉"
|
|
3748
|
+
},
|
|
3749
|
+
"bpm": {
|
|
3750
|
+
"type": "number",
|
|
3751
|
+
"minimum": 40,
|
|
3752
|
+
"maximum": 160,
|
|
3753
|
+
"description": "速度 40~160"
|
|
3754
|
+
},
|
|
3755
|
+
"tonality": {
|
|
3756
|
+
"type": "string",
|
|
3757
|
+
"enum": [
|
|
3758
|
+
"major",
|
|
3759
|
+
"minor",
|
|
3760
|
+
"modal"
|
|
3761
|
+
],
|
|
3762
|
+
"description": "major 大调明亮 / minor 小调暗色 / modal 调式色彩"
|
|
3763
|
+
},
|
|
3764
|
+
"acts": {
|
|
3765
|
+
"type": "array",
|
|
3766
|
+
"items": {
|
|
3767
|
+
"type": "object",
|
|
3768
|
+
"properties": {
|
|
3769
|
+
"act": {
|
|
3770
|
+
"type": "integer",
|
|
3771
|
+
"exclusiveMinimum": 0,
|
|
3772
|
+
"description": "幕序号,从 1 开始(get_bgm_plan 可查)"
|
|
3773
|
+
},
|
|
3774
|
+
"mood": {
|
|
3775
|
+
"type": "array",
|
|
3776
|
+
"items": {
|
|
3777
|
+
"type": "string"
|
|
3778
|
+
},
|
|
3779
|
+
"maxItems": 3,
|
|
3780
|
+
"description": "情绪词,最多 3 个,每个 ≤12 字(如 压抑、苍凉)"
|
|
3781
|
+
},
|
|
3782
|
+
"instruments": {
|
|
3783
|
+
"type": "array",
|
|
3784
|
+
"items": {
|
|
3785
|
+
"type": "string"
|
|
3786
|
+
},
|
|
3787
|
+
"maxItems": 3,
|
|
3788
|
+
"description": "主奏乐器,最多 3 件,每件 ≤16 字(如 古筝、大提琴);人声/环境声会被丢掉"
|
|
3789
|
+
},
|
|
3790
|
+
"bpm": {
|
|
3791
|
+
"type": "number",
|
|
3792
|
+
"minimum": 40,
|
|
3793
|
+
"maximum": 160,
|
|
3794
|
+
"description": "速度 40~160"
|
|
3795
|
+
},
|
|
3796
|
+
"tonality": {
|
|
3797
|
+
"type": "string",
|
|
3798
|
+
"enum": [
|
|
3799
|
+
"major",
|
|
3800
|
+
"minor",
|
|
3801
|
+
"modal"
|
|
3802
|
+
],
|
|
3803
|
+
"description": "major 大调明亮 / minor 小调暗色 / modal 调式色彩"
|
|
3804
|
+
}
|
|
3784
3805
|
},
|
|
3785
|
-
"
|
|
3786
|
-
|
|
3787
|
-
},
|
|
3788
|
-
"bpm": {
|
|
3789
|
-
"type": "number",
|
|
3790
|
-
"minimum": 40,
|
|
3791
|
-
"maximum": 160,
|
|
3792
|
-
"description": "速度 40~160"
|
|
3793
|
-
},
|
|
3794
|
-
"tonality": {
|
|
3795
|
-
"type": "string",
|
|
3796
|
-
"enum": [
|
|
3797
|
-
"major",
|
|
3798
|
-
"minor",
|
|
3799
|
-
"modal"
|
|
3806
|
+
"required": [
|
|
3807
|
+
"act"
|
|
3800
3808
|
],
|
|
3801
|
-
"
|
|
3802
|
-
}
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
"act"
|
|
3806
|
-
],
|
|
3807
|
-
"additionalProperties": false
|
|
3809
|
+
"additionalProperties": false
|
|
3810
|
+
},
|
|
3811
|
+
"description": "按幕锁定;同名字段覆盖整集的,没写的继承整集"
|
|
3812
|
+
}
|
|
3808
3813
|
},
|
|
3809
|
-
"
|
|
3814
|
+
"additionalProperties": false
|
|
3815
|
+
},
|
|
3816
|
+
{
|
|
3817
|
+
"type": "null"
|
|
3810
3818
|
}
|
|
3811
|
-
|
|
3812
|
-
"additionalProperties": false
|
|
3819
|
+
]
|
|
3813
3820
|
},
|
|
3814
3821
|
"candidates": {
|
|
3815
3822
|
"type": "integer",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.136",
|
|
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.136",
|
|
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.136",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|