@starreel/mcp 0.1.18 → 0.1.19

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.
@@ -40,6 +40,39 @@ const ETHNICITY_CODES = [
40
40
  const FRAME_TYPE_ARG = z.enum(['first_frame', 'last_frame', 'both']);
41
41
  const ASPECT_RATIOS = ['9:16', '16:9', '1:1', '4:5', '4:3', '21:9'];
42
42
  const VIDEO_RESOLUTIONS = ['480p', '720p', '1080p', '4k'];
43
+ // 「项目设定页」通用视觉/音频/字幕/转场设定 —— create_drama 与 update_project_settings 共用。
44
+ // 后端内部 PUT /dramas 已接受写库,facade 白名单 Wave3 已放行(produce-create-fields.ts)。
45
+ // 不含内部产线/成本开关(strict_mode/best_of_n/shoppable/budget_points 等,需产品决策)。
46
+ const PROJECT_SETTINGS_FIELDS = {
47
+ // 整剧视觉一致性锚(注入所有出图/视频 prompt,决定跨镜一致)
48
+ cinematography_prompt: z.string().optional().describe('摄影DNA:镜头/镜片/光圈/调色一揽子,注入所有出图/视频prompt,整剧镜头一致'),
49
+ art_bible: z.string().optional().describe('美术圣经:色调/材质/气质,注入所有生图prompt,统一视觉风格'),
50
+ visual_lock: z.string().optional().describe('视觉锁定:民族外貌/服装约束/禁止元素,最高优先级、无条件注入所有生图prompt'),
51
+ video_style_prompt: z.string().optional().describe('视频风格锁定·正向风格词(前置注入,描述渲染质感/美术)'),
52
+ video_negative_prompt: z.string().optional().describe('视频风格锁定·负向排除词(末尾追加,防风格跳变)'),
53
+ motifs: z.string().optional().describe('视觉母题:反复出现的物件/颜色,逗号分隔(每个应≥3镜复现)'),
54
+ theme: z.string().optional().describe('主题(一句话核心冲突·防跑题);★≠theme_statement,这是UI「主题」框对应的列'),
55
+ // 音频(BGM 源/开关/音量 + 用视频原声)
56
+ bgm_enabled: z.boolean().optional().describe('BGM总开关:false=终拼不混任何BGM,保留视频原声'),
57
+ bgm_source: z.enum(['own', 'clip']).optional().describe("BGM来源:own=自有BGM流水线(默认,抑制裸片BGM);clip=保留视频原生BGM、终拼不叠加"),
58
+ bgm_volume_preset: z.enum(['off', 'low', 'auto', 'high']).optional().describe('BGM音量档:off静音/low轻(-28dB)/auto自适应(默认,静段可闻·对白不压麦)/high强'),
59
+ bgm_volume_db: z.number().optional().describe('自定义BGM音量(dB,负值),覆盖预设档、关自适应'),
60
+ use_clip_audio: z.boolean().optional().describe('用视频原声:true=跳过TTS配音,直接用视频自带声音(★直接改成片音频)'),
61
+ // 字幕(烧录/双语/仅译文/位置/边距/动效)
62
+ show_subtitles: z.boolean().optional().describe('字幕烧录总开关:false=不烧字幕轨'),
63
+ subtitle_secondary_lang: z.string().optional().describe('双语字幕第二语言(如 en/ja);设了即双语(需先字幕同步翻译该语言)'),
64
+ subtitle_translation_only: z.boolean().optional().describe('仅显示译文(不显原文)'),
65
+ subtitle_position: z.enum(['bottom', 'top']).optional().describe('字幕位置(默认 bottom)'),
66
+ subtitle_margin_v: z.number().optional().describe('字幕边距 MarginV 像素(与画面边缘距离,默认 80)'),
67
+ subtitle_animation: z.string().optional().describe('字幕动效:fade(默认)/bounce弹跳/typewriter打字机/highlight高亮'),
68
+ // 转场 + 多画幅裁切 + 片头尾卡
69
+ default_transition: z.string().optional().describe('镜头间转场预设(默认 fade;21种+智能)'),
70
+ default_transition_ms: z.number().optional().describe('转场时长 ms(默认 250;短剧 200-400 体感佳)'),
71
+ reframe_mode: z.string().optional().describe('一源多画幅裁切策略'),
72
+ reframe_anchor: z.string().optional().describe('多画幅裁切锚点'),
73
+ cover_card_default: z.string().optional().describe('片头封面卡默认'),
74
+ poster_card_default: z.string().optional().describe('片尾海报卡默认'),
75
+ };
43
76
  /** 把友好 ethnicity 枚举 + note 组装成后端认的结构化族裔锁 { code, note? }。 */
44
77
  function buildEthnicityLock(ethnicity, note) {
45
78
  if (!ethnicity)
@@ -74,6 +107,7 @@ export function registerProduceTools(server, client) {
74
107
  .describe('项目类型(默认 drama)。ad=广告(改写走 ad_script_rewriter);mv=音乐(走歌词→故事→剧本子流程);brand_film=品牌微电影(默认16:9)'),
75
108
  rewrite_mode: z.enum(['standard', 'director']).optional().describe('AI改写深度:standard 或 director(导演级)'),
76
109
  director_style: z.string().optional().describe('导演风格包 key'),
110
+ ...PROJECT_SETTINGS_FIELDS,
77
111
  }, async (args) => {
78
112
  const { ethnicity, ethnicity_note, ...rest } = args;
79
113
  const body = { ...rest };
@@ -164,8 +198,11 @@ export function registerProduceTools(server, client) {
164
198
  server.tool('get_final_cut', '查某一集成片状态与下载链接。status=completed 时返回 download_url(我方 COS 直链,可直接下载)。免费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/final-cut`)));
165
199
  server.tool('get_export', '查某一集导出/母版状态(成片终拼后的可下载母版)。免费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/export`)));
166
200
  // ========== 项目设定(建后可改)==========
167
- server.tool('update_project_settings', '建剧后修改项目设定(画幅/分辨率/世界观Brief/族裔/题材/改写深度/导演风格/字幕/长镜,及各类型专属字段)。免费。' +
168
- '⚠️ 世界观 Brief/族裔/画幅等改后,已生成的内容不会自动更新,需重生对应内容。', {
201
+ server.tool('update_project_settings', '建剧后修改项目设定。除画幅/分辨率/世界观Brief/族裔/题材/导演风格外,现覆盖★整剧视觉一致性锚' +
202
+ '(摄影DNA cinematography_prompt/美术圣经 art_bible/视觉锁定 visual_lock/视频风格正负向词/视觉母题 motifs)、' +
203
+ '音频(bgm_source 自有vs原生/bgm_volume_preset 音量/use_clip_audio 用视频原声)、' +
204
+ '字幕(show_subtitles/双语 subtitle_secondary_lang/位置/边距/动效)、转场——即项目设定页全部通用设定。免费。' +
205
+ '⚠️ 世界观 Brief/族裔/画幅/一致性锚等改后,已生成的内容不会自动更新,需重生对应内容。', {
169
206
  drama_id: z.number().int().positive(),
170
207
  genre: z.string().optional(),
171
208
  style: z.string().optional(),
@@ -192,6 +229,7 @@ export function registerProduceTools(server, client) {
192
229
  // MV 专属
193
230
  mv_lyrics: z.string().optional(),
194
231
  mv_audio_url: z.string().optional(),
232
+ ...PROJECT_SETTINGS_FIELDS,
195
233
  }, async (args) => {
196
234
  const { drama_id, ethnicity, ethnicity_note, ...rest } = args;
197
235
  const body = { ...rest };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
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",