@starreel/mcp 0.1.202 → 0.1.207
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 +12 -1
- package/dist/i18n/tools.en.json +6 -2
- package/dist/i18n/tools.zh-CN.json +8 -4
- package/dist/tools/guide-data.js +2 -0
- package/dist/tools/produce.js +37 -1
- package/openapi.json +229 -6
- package/package.json +1 -1
- package/server.json +2 -2
package/dist/tools/produce.js
CHANGED
|
@@ -206,6 +206,7 @@ export const WORKFLOW_HINT = AUTOPILOT_HINT +
|
|
|
206
206
|
'get_jobs 清空后再用 get_storyboards 核对 seam_state:晋升被拒的替换图不留在 get_jobs 里,那道缝会仍是 unchained(review_frames 也会报 seam_unchained),按它的 action 重接。' +
|
|
207
207
|
'没落地就审,审的是旧首帧,token 在新首帧落地后作废。' +
|
|
208
208
|
'逐镜/批量出帧的集平台多半没自动接过(get_storyboards 的 seam_state=unchained 就是),跳过它不报错——代价是镜与镜之间画面对不上,成片一处一个跳切。' +
|
|
209
|
+
'接完还担心拼起来跳(人物左右位置、运动方向、景别对不上),出视频前可选 audit_seam_directions(查主体跳边/运动反向/景别跳级)(先 dry_run 报价,按 token 扣费,提示性不拦),结论用 get_seam_directions 读、讲给客户挑着修。' +
|
|
209
210
|
'★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——' +
|
|
210
211
|
'所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。' +
|
|
211
212
|
'跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。' +
|
|
@@ -843,7 +844,9 @@ export function registerProduceTools(server, client) {
|
|
|
843
844
|
'generate_shot_frame 单镜重生)再复审。' +
|
|
844
845
|
'★还会报**镜间接缝**(warning,不拦):code=seam_unchained(标了连续却从没做过首尾帧衔接,或发起的衔接重生没落地 / 衔接后首帧又被重生)/' +
|
|
845
846
|
'seam_broken(接过但没接上,或上一镜尾帧在衔接之后又重生过),shots 是「与上一镜的缝有问题」的那一镜。出视频前修最便宜——视频按首帧生成,' +
|
|
846
|
-
'首帧与上镜尾帧对不上,成片就是一次跳切。修法看 action(整集 chain_frames 先 dry_run;单道 chain_shot_from_prev / chain_shot_from)。' +
|
|
847
|
+
'首帧与上镜尾帧对不上,成片就是一次跳切。修法看 action(整集 chain_frames 先 dry_run;单道 chain_shot_from_prev / chain_shot_from)。' +
|
|
848
|
+
'★有相邻镜时响应还带 seam_direction_advisory(提示性,不影响 review_token):相邻镜方向对照(主体跳边/运动反向/景别跳级)的已有结论;' +
|
|
849
|
+
'还没观察过的接缝要先 audit_seam_directions dry_run 报价,客户同意后再执行。' + AGENT_QC_HINT, { episode_id: z.number().int().positive(), base_review_token: BASE_REVIEW_ARG }, async ({ episode_id, base_review_token }) => jsonResult(await client.producePost(`/episodes/${episode_id}/review/frames`, base_review_token ? { base_review_token } : undefined)));
|
|
847
850
|
server.tool('review_assets', '【资产层硬闸·免费】审查本集**出镜**用到的角色形象图、场景图、道具图——覆盖与质量:' +
|
|
848
851
|
'出镜角色缺定妆图 / 缺设定图 / 还在生成 / 生成失败 / 设定图被一致性闸拒收(hint 带拒收理由);' +
|
|
849
852
|
'场景缺空景基板;分镜引用的道具缺道具图 / 被拒;道具图与本镜时代形制冲突;缺色彩脚本(warning)。' +
|
|
@@ -2328,6 +2331,39 @@ export function registerProduceTools(server, client) {
|
|
|
2328
2331
|
dry_run: z.boolean().optional().describe('默认 true,只读计划'),
|
|
2329
2332
|
confirm_usage_billing: z.boolean().optional().describe('仅客户明确接受按实际文本 token 用量计费后传 true'),
|
|
2330
2333
|
}, async ({ episode_id, dry_run, confirm_usage_billing }) => jsonResult(await client.producePost(`/episodes/${episode_id}/audit-seams`, { dry_run: dry_run !== false, confirm_usage_billing: confirm_usage_billing === true })));
|
|
2334
|
+
server.tool('preview_seams', '★查转场/接缝问题先跑这个,不要反复导出整片。免费零扣费(纯 ffmpeg,不调厂商,也不现场合成配音)。'
|
|
2335
|
+
+ '按集为每处相邻镜接缝渲染一段短片:前镜出点前 1 秒 + 后镜入点后 1 秒(转场长于 0.5 秒时两侧各取 2×转场),'
|
|
2336
|
+
+ '套用当前 trim 窗口与转场设置,与终拼同一套建轴和渲染逻辑,看到的就是 compose_episode 重拼会得到的接缝(只缩小画幅;不含配乐与字幕)。'
|
|
2337
|
+
+ '同时给出两侧边缘帧对照图,并附上 audit_seams 的现有结论。'
|
|
2338
|
+
+ '异步:本工具只起任务,用 get_seam_previews 轮询到 status=done。'
|
|
2339
|
+
+ 'seams 可选,只重渲指定序号的缝(改了某处 trim/转场后复查用)。'
|
|
2340
|
+
+ '★看完再决定怎么修:动作没接上先 recommend_trim_window → trim_shot;转场不合适改转场;'
|
|
2341
|
+
+ '叠化重影、放大插镜、遮挡这类补救手法本身常引入新问题,改完务必再跑一次本工具复查那道缝。', {
|
|
2342
|
+
episode_id: z.number().int().positive(),
|
|
2343
|
+
seams: z.array(z.number().int().min(0)).optional().describe('只渲染这些接缝序号(0 = 第 1 镜与第 2 镜之间);缺省 = 全部'),
|
|
2344
|
+
}, async ({ episode_id, seams }) => jsonResult(await client.producePost(`/episodes/${episode_id}/seam-previews`, seams?.length ? { seams } : {})));
|
|
2345
|
+
server.tool('get_seam_previews', '查 preview_seams 的进度与结果。免费。status=running 时看 progress.done/total;'
|
|
2346
|
+
+ 'status=done 时 result.seams[] 每道缝给出:from_shot_id/to_shot_id、transition(有效转场)、'
|
|
2347
|
+
+ 'left/right(两侧在源视频上的入出点 src_in_ms/src_out_ms,已含 trim)、preview_url(短片)、'
|
|
2348
|
+
+ 'compare_image_url(左=前镜转场开始前最后一帧,右=后镜转场结束后第一帧)、audit(audit_seams 结论;not_enabled=本剧未开启)。'
|
|
2349
|
+
+ 'result.synth_skipped_shot_ids 非空表示这些镜配音尚未合成,预览按无配音处理。单镜集 seam_count=0。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/seam-previews`)));
|
|
2350
|
+
server.tool('audit_seam_directions', '出视频前的接缝方向对照(提示性,不拦任何步骤):对每对相邻镜拿「上一镜尾帧(没有就首帧)↔ 本镜首帧」看五件事——' +
|
|
2351
|
+
'同一主体在画面左右跳边(视线也反了会一并写明)、运动方向反了、景别跳级(同一主体大远景↔特写)。单镜都对、拼起来跳,多半是这几维。' +
|
|
2352
|
+
'视线单独反向、主光方向会被观察但不报:生产回放里这两维误报率太高(宁漏不扰)。' +
|
|
2353
|
+
'与 audit_seams 互补:那个比身份/服装/道具/物体状态,不管方向和位置。' +
|
|
2354
|
+
'★何时调:首帧(和要的尾帧)都出完、chain_frames 跑过之后,review_frames / generate_videos 之前。' +
|
|
2355
|
+
'换场、声明跳切、插入镜、字卡黑场的接缝自动跳过。' +
|
|
2356
|
+
'★先 dry_run(默认,免费):回待观察接缝与 estimated_points(上界)/ typical_points(通常花费),两个都告诉客户,按实际文本 token 扣费;' +
|
|
2357
|
+
'客户同意后传 dry_run=false + confirm_usage_billing=true。执行是异步的,立即返回;过一两分钟用 get_seam_directions 读结论。' +
|
|
2358
|
+
'已观察过且两侧帧没换的接缝不重复扣费。', {
|
|
2359
|
+
episode_id: z.number().int().positive(),
|
|
2360
|
+
dry_run: z.boolean().optional().describe('默认 true:只回计划与报价'),
|
|
2361
|
+
confirm_usage_billing: z.boolean().optional().describe('仅客户看过报价、明确同意按实际文本 token 扣费后传 true'),
|
|
2362
|
+
}, async ({ episode_id, dry_run, confirm_usage_billing }) => jsonResult(await client.producePost(`/episodes/${episode_id}/audit-seam-directions`, { dry_run: dry_run !== false, confirm_usage_billing: confirm_usage_billing === true })));
|
|
2363
|
+
server.tool('get_seam_directions', '(免费)读 audit_seam_directions 的结论:issues 每条带接缝镜号、问题(主体跳边、运动反向、景别跳级)与 fixes 修复建议' +
|
|
2364
|
+
'(chain_shot_from mode=reframe 以上一镜尾帧为锚重出本镜首帧 / update_shot 写明朝向后 generate_shot_frame / 上一镜已出视频时 align_prev_shot / split_shot 插过渡景别)。' +
|
|
2365
|
+
'结论是提示性的:讲给客户,由客户挑要修的;有意的反打、转身、冲击剪辑可忽略。not_audited>0 = 还有接缝没观察或帧已换过;running=true = 还在跑。' +
|
|
2366
|
+
'review_frames 的 seam_direction_advisory 是同一份结论的摘要。本工具只看出视频前的静帧;视频出完后查接缝用 preview_seams(免费短片预览)。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/seam-directions`)));
|
|
2331
2367
|
// ========== P2 · 连续性 / 场景组 / 多画幅 ==========
|
|
2332
2368
|
server.tool('chain_frames', '整集首尾帧接力链:让每镜首帧承接上镜尾帧,镜间画面连续(比各镜独立出帧更顺)。' +
|
|
2333
2369
|
'★何时调:首帧出完、tail_frame_plan 要的尾帧也补完之后,review_frames / generate_videos 之前。' +
|