Skip to content

feat: add multiPrompt support for Kling v3 multi-shot video generation #1353

@ystknsh

Description

@ystknsh

概要

Kling v3 モデルの multi_prompt パラメータ(マルチショット動画生成)に対応する。

1つの API コールで複数ショットを定義し、ショットごとに異なるプロンプトとデュレーションを指定できる。

  • prompt(必須): メインプロンプト。常に送信される
  • multi_prompt(オプション): ショットごとの追加制御。prompt と併用
  • 最大6ショット、各ショット最低1秒、合計デュレーション = 動画のデュレーション

Note: 2026-04 時点の Replicate API スキーマに基づく。実装前に最新仕様を確認すること。

対応モデル(Replicate)

モデル multi_prompt
kwaivgi/kling-v3-video 対応
kwaivgi/kling-v3-omni-video 対応
その他 非対応

MulmoScript での使い方

{
  "moviePrompt": "A cinematic nature documentary",
  "movieParams": {
    "model": "kwaivgi/kling-v3-video",
    "multiPrompt": [
      { "prompt": "A bird takes flight from a branch", "duration": 3 },
      { "prompt": "It soars over a vast forest canopy", "duration": 4 },
      { "prompt": "It dives into a lake catching a fish", "duration": 3 }
    ]
  }
}

実装ステップ

1. スキーマ (src/types/schema.ts)

beat レベルの movieParams extension に multiPrompt を追加(speed と同階層):

multiPrompt: z
  .array(z.object({
    prompt: z.string().describe("Text prompt for this shot"),
    duration: z.number().int().positive().describe("Duration of this shot in seconds (min 1s)"),
  }))
  .optional()
  .describe("Multi-shot mode: array of shot definitions (max 6, total = video duration). Kling v3 only."),

2. Agent 型定義 (src/types/agent.ts)

export type MultiPromptShot = { prompt: string; duration: number };
export type ReplicateMovieAgentParams = {
  // ...既存フィールド...
  multiPrompt?: MultiPromptShot[];
};

3. モデルメタデータ (src/types/provider2agent.ts)

ReplicateMovieModelParamsmulti_prompt_param?: string を追加し、Kling v3 モデルに設定:

"kwaivgi/kling-v3-video": {
  // ...既存フィールド...
  multi_prompt_param: "multi_prompt",
},

4. Replicate Agent (src/agents/movie_replicate_agent.ts)

generateMovie()multiPrompt パラメータを追加。audio 処理ブロックの後に:

if (multiPrompt && multiPrompt.length > 0) {
  const multiPromptParam = provider2MovieAgent.replicate.modelParams[model]?.multi_prompt_param;
  if (multiPromptParam) {
    (input as Record<string, unknown>)[multiPromptParam] = JSON.stringify(multiPrompt);
  } else {
    GraphAILogger.warn(`movieReplicateAgent: model ${model} does not support multiPrompt — ignoring`);
  }
}

注意: multi_prompt API パラメータは JSON 文字列(配列ではない)。

5. パイプライン配線

  • src/actions/images.ts — movieGenerator params に追加
  • src/actions/image_references.ts — reference movie generator params に追加

6. ドキュメント

docs/movie_reference_images.md の Replicate テーブルに multiPrompt 列を追加。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions