@starreel/mcp 0.1.90 → 0.1.92
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 +32 -1
- package/dist/tools/produce.js +12 -6
- package/openapi.json +7 -7
- package/package.json +1 -1
- package/server.json +2 -2
package/SKILL.md
CHANGED
|
@@ -709,7 +709,11 @@ the mouth isn't readable (back turned, wide, off-screen) that is invisible; on
|
|
|
709
709
|
sustained close-ups, regenerate instead. Reach for `regenerate_shot_video` when
|
|
710
710
|
the shot is a close-up, or when the picture itself is also wrong.
|
|
711
711
|
`repair_episode_dialogue` runs in the background — poll it with
|
|
712
|
-
`get_dialogue_repair_status`.
|
|
712
|
+
`get_dialogue_repair_status`. If the status carries `aborted`, the batch stopped
|
|
713
|
+
early on an account-level failure (`credits` = out of points; `account_overdue` =
|
|
714
|
+
the platform's upstream vendor account, not yours) and the `remaining` shots never
|
|
715
|
+
ran. Resubmitting unchanged will fail the same way — top up for `credits`; for
|
|
716
|
+
`account_overdue`, tell the user and retry later instead of looping.
|
|
713
717
|
Either way, `compose_episode` afterwards — the final cut still holds the old audio until you do.
|
|
714
718
|
|
|
715
719
|
Four distinct causes; they need **opposite** fixes, so identify the family first.
|
|
@@ -794,6 +798,33 @@ The platform's default shot breakdown still asks for one continuous action per
|
|
|
794
798
|
shot. Apply the beat approach shot by shot on complaints; don't rewrite a whole
|
|
795
799
|
episode this way unprompted.
|
|
796
800
|
|
|
801
|
+
### Writing shots yourself — one main action per shot (动作过载 / "像快进")
|
|
802
|
+
|
|
803
|
+
When you write storyboards yourself (`bulk_import_storyboards`, `update_shot`,
|
|
804
|
+
`split_shot`), you bypass the platform's shot breakdown and its "one continuous
|
|
805
|
+
action" rule, so apply it yourself **before any frame or video is generated** —
|
|
806
|
+
post-production cannot fix it.
|
|
807
|
+
|
|
808
|
+
- **One main action per shot.** The beats above are the *phases of that one
|
|
809
|
+
action* (wind-up → main action → settle), within the same budget: about
|
|
810
|
+
2 beats in 3 s, 3 beats in 5 s.
|
|
811
|
+
- **A new thing is a new shot.** A discovery ("finds something in their hand",
|
|
812
|
+
"the person is gone"), a new goal, or turning to address someone else each
|
|
813
|
+
get their own shot — and the discovery shot needs room for the reaction.
|
|
814
|
+
Four independent actions in one 4–5 s shot (look back, answer, turn, notice
|
|
815
|
+
the other person has vanished) read as fast-forward or are simply not
|
|
816
|
+
performed.
|
|
817
|
+
- **Write the joins.** State the pose the shot starts from and ends on
|
|
818
|
+
(`action_in` / `action_out`), so the next shot can start from it.
|
|
819
|
+
- **Don't repair density with speed.** `speed_factor` slow-motion or longer
|
|
820
|
+
crossfades only stretch what the vendor animated; they cannot un-cram a
|
|
821
|
+
shot. Split it (`split_shot`) or cut actions, then regenerate.
|
|
822
|
+
|
|
823
|
+
`check_bulk_import` and `review_storyboards` flag this as `action_overload`
|
|
824
|
+
(advisory, never blocks). The count is word-based: several people each doing
|
|
825
|
+
one thing, or one continuous chain (bend → reach → pick up), can trigger it —
|
|
826
|
+
judge the flagged shot, don't split blindly.
|
|
827
|
+
|
|
797
828
|
### "画面里多出一个人 / 多出一件道具" — something appears that shouldn't be there
|
|
798
829
|
|
|
799
830
|
Two completely different causes with opposite fixes. **Look at the shot's own
|
package/dist/tools/produce.js
CHANGED
|
@@ -435,7 +435,7 @@ export function registerProduceTools(server, client) {
|
|
|
435
435
|
'image_prompt/video_prompt 可不填(没填的镜由平台按景别+场景+光线+action 拼基础描述);填了就**逐字照用**,平台不覆盖。frame_visual_contract 是内部帧契约,导入时忽略。', {}, async () => jsonResult(await client.produceGet('/bulk-import/spec')));
|
|
436
436
|
server.tool('check_bulk_import', '**导入前的 JSON 自检**:用导入端点**同一份 zod schema** 校验,再把导入路由的"静默行为"变成 warning。返回 errors / warnings / stats(镜数·总秒·角色·场景·mode·promptsToBuild)。免费·不落库·可反复跑。' +
|
|
437
437
|
'★errors = 导入会 400 或会出错覆盖的:不是合法 JSON / schema 不过(逐条带 path,如 storyboards[2].shot_type)/ 镜号重复 + 残留 <...> 占位符;必须清零。' +
|
|
438
|
-
'★warnings = 导入照常但会缺东西或有副作用的:bound_characters/scene_ref 引用不到(静默跳过)/ 没有 action+description(死镜)/ dialogue 含镜头语言(会被念出来)/ 单镜>15 秒 / 镜号跳号 / mode=replace(替换本集全部分镜)/ 全无角色绑定(人物会漂)。' +
|
|
438
|
+
'★warnings = 导入照常但会缺东西或有副作用的:bound_characters/scene_ref 引用不到(静默跳过)/ 没有 action+description(死镜)/ dialogue 含镜头语言(会被念出来)/ 单镜>15 秒 / action_overload(一镜塞了超过时长承载量的独立动作——约 3 秒 2 拍、5 秒 3 拍;一镜一个主要动作,另起的事拆下一镜;多人各做一件事可忽略)/ 镜号跳号 / mode=replace(替换本集全部分镜)/ 全无角色绑定(人物会漂)。' +
|
|
439
439
|
'★这里绿了,bulk_import_storyboards 就能一次过。', { payload: z.union([z.string(), z.record(z.string(), z.unknown())]).describe('要检查的 JSON:对象,或 JSON 字符串(客户贴的文本)') }, async ({ payload }) => jsonResult(await client.producePost('/bulk-import/lint', { payload })));
|
|
440
440
|
server.tool('bulk_import_storyboards', '把一份结构化 JSON 一次性建成本集的分镜(按 storyboard_number 去重更新)。**不建角色/场景/道具**——它们由 extract_assets 从剧本提取,导入只按名字绑定已有的(回执 characters_unmatched / char_refs_unresolved 列出没绑上的;先 extract 再导)。免费·确定性·不调 AI。' +
|
|
441
441
|
'★三步走:① get_bulk_import_spec 取契约与成品示例;② check_bulk_import 自检到 errors 清零;③ 再调本工具。' +
|
|
@@ -623,7 +623,8 @@ export function registerProduceTools(server, client) {
|
|
|
623
623
|
'分镜里的问题一旦整集出图就变成整集废图,单镜修不回来。按 findings.action 用 update_shot/split_shot 修完再复审。' +
|
|
624
624
|
'★code=forbidden_term 的 finding 带 `terms` 字段(命中的具体词,如「背景音乐」「强光」)与 `shots`(镜号),' +
|
|
625
625
|
'照着这两个去 update_shot 改掉即可,不用逐字猜。' +
|
|
626
|
-
'★禁区词判**否定语义**:写「无背景音乐」「不要配乐」不算违规(那是在遵守约束),不必为此改稿。'
|
|
626
|
+
'★禁区词判**否定语义**:写「无背景音乐」「不要配乐」不算违规(那是在遵守约束),不必为此改稿。' +
|
|
627
|
+
'★warnings 里的「动作过载」(action_overload,advisory 不拦):一镜塞了超过时长承载量的独立动作,出视频前用 split_shot 拆开或删动作——成片后靠慢放/叠化补救不了。多人各做一件事或本身连贯的一串可忽略。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/review/storyboards`)));
|
|
627
628
|
server.tool('review_frames', '【第③道硬闸·免费】审查镜头图片层:角色身份锚覆盖(缺定妆图的角色在镜头里必漂)、出图失败率、' +
|
|
628
629
|
'孤儿角色变体、场景图被人物污染。★generate_videos 之前必须先跑本工具——出视频是全链最贵的一步,' +
|
|
629
630
|
'拿着漂移的首帧整集出视频是最典型的废片形态。按 findings.action 修完(多为 generate_character_portraits / ' +
|
|
@@ -1228,7 +1229,7 @@ export function registerProduceTools(server, client) {
|
|
|
1228
1229
|
director_note: z.string().optional().describe('导演注释'),
|
|
1229
1230
|
shot_intent: z.string().optional().describe('这镜为什么存在(叙事意图)'),
|
|
1230
1231
|
duration: z.number().positive().optional().describe('本镜时长(秒,可带小数如 2.5)。上限=本剧视频引擎的单镜上限,超出直接拒并告知上限(更长内容用 split_shot 拆镜)。有台词时平台按语速律只抬不降,抬了会在回执 speech_duration_note 里说。★改时长不会自动重出视频:已有视频仍是旧长度,要厂商按新时长出就 regenerate_shot_video(报价按新时长算)。★别拿加长治「动作太慢」——同样的动作摊到更长时间里只会更慢,见 qa_tools「动作太慢」'),
|
|
1231
|
-
speed_factor: z.number().positive().nullable().optional().describe('成片变速:<1 慢镜、>1 快放、null 清除(0.5–2.0,越界被钳到范围内)。只在终拼/剪映导出时变速播放(画面 setpts + 声音 atempo,音高不变),**不重出视频、不扣费**,但会改变本镜在成片里占的时长。适合做慢镜/升格氛围;治不了「动作没演出来」——那是视频内容本身,要改 video_prompt
|
|
1232
|
+
speed_factor: z.number().positive().nullable().optional().describe('成片变速:<1 慢镜、>1 快放、null 清除(0.5–2.0,越界被钳到范围内)。只在终拼/剪映导出时变速播放(画面 setpts + 声音 atempo,音高不变),**不重出视频、不扣费**,但会改变本镜在成片里占的时长。适合做慢镜/升格氛围;治不了「动作没演出来」——那是视频内容本身,要改 video_prompt 重出;也治不了一镜塞太多动作(action_overload)——那要拆镜重出。有台词的镜慎用(人声也跟着变快变慢)'),
|
|
1232
1233
|
image_prompt: z.string().optional().describe('首帧画面提示词**正文**(全量覆盖本镜现值)。★先 get_shot_prompts 读现值再改;★原样保留其中的 @char:N / @scene:M 引用标记,删了就不注入对应定妆图/场景图。出图时平台会在正文之上再拼身份锚与一致性约束,不必你写。★写法坑:别写「no X / without X / 不要 X / 没有 X」这类否定式约束——图像模型把名词当正向线索,反而把 X 画出来;要正向写出那块画面该有什么(材质/形状/颜色/远近)。保存响应带 image_prompt_negation_advisory 即命中,按其 note 改写'),
|
|
1233
1234
|
video_prompt: z.string().optional().describe('视频(动态/运镜/表演)提示词**正文**(全量覆盖本镜现值)。★同 image_prompt:先读现值、保留 @char/@scene 标记'),
|
|
1234
1235
|
first_frame_prompt: z.string().optional().describe('本镜**开始时**画面是什么样(首帧目标状态正文,全量覆盖现值)。送达提示词里作为 [START FRAME] 段排在最前,优先级高于 image_prompt——所以 image_prompt 改了不生效时,往往是这条在压着它。★同 image_prompt:先 get_shot_prompts 读现值、原样保留 @char/@scene 标记'),
|
|
@@ -1274,7 +1275,10 @@ export function registerProduceTools(server, client) {
|
|
|
1274
1275
|
})));
|
|
1275
1276
|
server.tool('get_dialogue_repair_status', '查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。'
|
|
1276
1277
|
+ '\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 '
|
|
1277
|
-
+ 'dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。'
|
|
1278
|
+
+ 'dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。'
|
|
1279
|
+
+ '\n★返回里带 **aborted** = 上一批因整账户级失败被提前中止(kind=account_overdue 平台上游账户欠费 / '
|
|
1280
|
+
+ 'credits 点数不足),remaining 镜未执行。此时**原样重提必然同因失败**:credits 先充值;'
|
|
1281
|
+
+ 'account_overdue 不是你的点数问题,停下告知用户稍后再试,别反复重提。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/dialogue-repair-status`)));
|
|
1278
1282
|
server.tool('get_shot_name_card', '读这一镜的**人物名片**现值(免费):名字、头衔、显示位置那些。'
|
|
1279
1283
|
+ '\n★改之前先读一遍——set_shot_name_card 是**整体覆盖**,不读就改会把没打算动的字段清掉。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceGet(`/storyboards/${storyboard_id}/name-card`)));
|
|
1280
1284
|
server.tool('generate_bgm', '给整集生成/更换 AI 配乐(按情绪弧线)。后台异步,按用量后付不欠费。返回情绪弧线段数与预估耗时;' +
|
|
@@ -1502,8 +1506,10 @@ export function registerProduceTools(server, client) {
|
|
|
1502
1506
|
aspects: z.array(z.enum(['9:16', '16:9', '1:1', '4:5'])).optional().describe('目标画幅集'),
|
|
1503
1507
|
}, async ({ episode_id, aspects }) => jsonResult(await client.producePost(`/episodes/${episode_id}/render-multi-aspect`, aspects ? { aspects } : {})));
|
|
1504
1508
|
// ========== P2 · 口型 / 海报封面 ==========
|
|
1505
|
-
|
|
1506
|
-
|
|
1509
|
+
const LIPSYNC_UNAVAILABLE_HINT = '\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;' +
|
|
1510
|
+
'按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。';
|
|
1511
|
+
server.tool('lipsync_shot', '给单镜做口型同步(对白与人物嘴型对齐)。按用量后付。' + LIPSYNC_UNAVAILABLE_HINT, { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/lipsync`)));
|
|
1512
|
+
server.tool('lipsync_episode', '给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status 查进度。' + LIPSYNC_UNAVAILABLE_HINT, { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/lipsync-batch`)));
|
|
1507
1513
|
server.tool('get_lipsync_status', '查整集口型同步进度。免费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/lipsync-status`)));
|
|
1508
1514
|
server.tool('generate_episode_poster', '给某一集生成海报图。图片步,按用量后付。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/poster`)));
|
|
1509
1515
|
server.tool('generate_drama_poster', '给整部剧生成海报图(KV)。图片步,按用量后付。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.producePost(`/dramas/${drama_id}/poster`)));
|
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.92",
|
|
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.92 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"post": {
|
|
138
138
|
"operationId": "check_bulk_import",
|
|
139
139
|
"summary": "**导入前的 JSON 自检**:用导入端点**同一份 zod schema** 校验,再把导入路由的\"静默行为\"变成 warning",
|
|
140
|
-
"description": "**导入前的 JSON 自检**:用导入端点**同一份 zod schema** 校验,再把导入路由的\"静默行为\"变成 warning。返回 errors / warnings / stats(镜数·总秒·角色·场景·mode·promptsToBuild)。免费·不落库·可反复跑。★errors = 导入会 400 或会出错覆盖的:不是合法 JSON / schema 不过(逐条带 path,如 storyboards[2].shot_type)/ 镜号重复 + 残留 <...> 占位符;必须清零。★warnings = 导入照常但会缺东西或有副作用的:bound_characters/scene_ref 引用不到(静默跳过)/ 没有 action+description(死镜)/ dialogue 含镜头语言(会被念出来)/ 单镜>15 秒 / 镜号跳号 / mode=replace(替换本集全部分镜)/ 全无角色绑定(人物会漂)。★这里绿了,bulk_import_storyboards 就能一次过。",
|
|
140
|
+
"description": "**导入前的 JSON 自检**:用导入端点**同一份 zod schema** 校验,再把导入路由的\"静默行为\"变成 warning。返回 errors / warnings / stats(镜数·总秒·角色·场景·mode·promptsToBuild)。免费·不落库·可反复跑。★errors = 导入会 400 或会出错覆盖的:不是合法 JSON / schema 不过(逐条带 path,如 storyboards[2].shot_type)/ 镜号重复 + 残留 <...> 占位符;必须清零。★warnings = 导入照常但会缺东西或有副作用的:bound_characters/scene_ref 引用不到(静默跳过)/ 没有 action+description(死镜)/ dialogue 含镜头语言(会被念出来)/ 单镜>15 秒 / action_overload(一镜塞了超过时长承载量的独立动作——约 3 秒 2 拍、5 秒 3 拍;一镜一个主要动作,另起的事拆下一镜;多人各做一件事可忽略)/ 镜号跳号 / mode=replace(替换本集全部分镜)/ 全无角色绑定(人物会漂)。★这里绿了,bulk_import_storyboards 就能一次过。",
|
|
141
141
|
"tags": [
|
|
142
142
|
"bulk-import"
|
|
143
143
|
],
|
|
@@ -3543,7 +3543,7 @@
|
|
|
3543
3543
|
"get": {
|
|
3544
3544
|
"operationId": "get_dialogue_repair_status",
|
|
3545
3545
|
"summary": "查台词修复的进度(免费)",
|
|
3546
|
-
"description": "查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)
|
|
3546
|
+
"description": "查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。\n★返回里带 **aborted** = 上一批因整账户级失败被提前中止(kind=account_overdue 平台上游账户欠费 / credits 点数不足),remaining 镜未执行。此时**原样重提必然同因失败**:credits 先充值;account_overdue 不是你的点数问题,停下告知用户稍后再试,别反复重提。",
|
|
3547
3547
|
"tags": [
|
|
3548
3548
|
"episodes"
|
|
3549
3549
|
],
|
|
@@ -4629,7 +4629,7 @@
|
|
|
4629
4629
|
"post": {
|
|
4630
4630
|
"operationId": "lipsync_episode",
|
|
4631
4631
|
"summary": "给整集批量口型同步",
|
|
4632
|
-
"description": "给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status
|
|
4632
|
+
"description": "给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status 查进度。\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。",
|
|
4633
4633
|
"tags": [
|
|
4634
4634
|
"episodes"
|
|
4635
4635
|
],
|
|
@@ -5504,7 +5504,7 @@
|
|
|
5504
5504
|
"post": {
|
|
5505
5505
|
"operationId": "review_storyboards",
|
|
5506
5506
|
"summary": "【第②道硬闸·免费】审查分镜:禁区词(会被厂商审核拒、白扣费)、镜头时长分布、相邻构图重复、同场景角色站位漂移、情绪曲线峰谷、关键镜标记",
|
|
5507
|
-
"description": "【第②道硬闸·免费】审查分镜:禁区词(会被厂商审核拒、白扣费)、镜头时长分布、相邻构图重复、同场景角色站位漂移、情绪曲线峰谷、关键镜标记。★generate_frames 之前必须先跑本工具——分镜里的问题一旦整集出图就变成整集废图,单镜修不回来。按 findings.action 用 update_shot/split_shot 修完再复审。★code=forbidden_term 的 finding 带 `terms` 字段(命中的具体词,如「背景音乐」「强光」)与 `shots`(镜号),照着这两个去 update_shot 改掉即可,不用逐字猜。★禁区词判**否定语义**:写「无背景音乐」「不要配乐」不算违规(那是在遵守约束)
|
|
5507
|
+
"description": "【第②道硬闸·免费】审查分镜:禁区词(会被厂商审核拒、白扣费)、镜头时长分布、相邻构图重复、同场景角色站位漂移、情绪曲线峰谷、关键镜标记。★generate_frames 之前必须先跑本工具——分镜里的问题一旦整集出图就变成整集废图,单镜修不回来。按 findings.action 用 update_shot/split_shot 修完再复审。★code=forbidden_term 的 finding 带 `terms` 字段(命中的具体词,如「背景音乐」「强光」)与 `shots`(镜号),照着这两个去 update_shot 改掉即可,不用逐字猜。★禁区词判**否定语义**:写「无背景音乐」「不要配乐」不算违规(那是在遵守约束),不必为此改稿。★warnings 里的「动作过载」(action_overload,advisory 不拦):一镜塞了超过时长承载量的独立动作,出视频前用 split_shot 拆开或删动作——成片后靠慢放/叠化补救不了。多人各做一件事或本身连贯的一串可忽略。",
|
|
5508
5508
|
"tags": [
|
|
5509
5509
|
"episodes"
|
|
5510
5510
|
],
|
|
@@ -9093,7 +9093,7 @@
|
|
|
9093
9093
|
"post": {
|
|
9094
9094
|
"operationId": "lipsync_shot",
|
|
9095
9095
|
"summary": "给单镜做口型同步(对白与人物嘴型对齐)",
|
|
9096
|
-
"description": "给单镜做口型同步(对白与人物嘴型对齐)
|
|
9096
|
+
"description": "给单镜做口型同步(对白与人物嘴型对齐)。按用量后付。\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。",
|
|
9097
9097
|
"tags": [
|
|
9098
9098
|
"storyboards"
|
|
9099
9099
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.92",
|
|
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.92",
|
|
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.92",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|