mcpField
A
ai-video-gen

ai-video-gen

github.com/calesthioクリエイティブ・メディア72.7k1.3k 回インストール今日更新
リポジトリ

ai-video-gen について

ai-video-genは、複数のAPIゲートウェイと動画プロバイダーを通じて、テキストから動画を生成するスキルです。video_selectorでリクエストを振り分け、利用可否やコストを確認し、自動フォールバックにも対応します。

主な機能

  1. 01テキストからの動画生成
  2. 02参照画像を使った画像から動画への生成
  3. 03複数のゲートウェイと動画プロバイダー
  4. 04Gemini Omniによる複数ターン編集
  5. 05プロバイダー選択と自動フォールバック

活用シーン

  1. 01文章の指示からクリップを生成
  2. 02商品写真を動画化
  3. 03縦型のソーシャルメディア動画を作成
  4. 04会話形式で既存クリップを編集

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/calesthio/openmontage --skill ai-video-gen

インストール後、Claude Code で/ai-video-genを入力して読み込まれたか確認します。

詳細

動画生成(マルチゲートウェイ)

テキストプロンプトから AI 動画を生成します。以下の 4 つの API 経路を通じて、複数のプロバイダーを利用できます。

ゲートウェイ環境変数プロバイダーツール
fal.aiFAL_KEYSeedance 2.0(標準版+高速版)、Kling v3/v2.1、MiniMax、VEOseedance_video、kling_video、minimax_video、veo_video
HeyGenHEYGEN_API_KEYVEO 3.1、Kling Pro、Sora v2、Runway Gen-4、Seedance Pro / Lite(1.x)heygen_video
Kling OfficialKLING_API_KEYKling 公式の Classic、Turbo、基本的な Omni 動画kling_official_video
Gemini APIGEMINI_API_KEY / GOOGLE_API_KEYGemini Omni Flash(生成+会話形式の編集)gemini_omni_video

反復編集 — Gemini Omni。 概要で再生成ではなく既存のクリップを調整(オブジェクトの追加/削除、スタイル変更、照明や画面上のテキストの変更)が求められている場合、Gemini Omni Flash は複数ターンにわたるステートフルな編集が可能な、フリート内で唯一のプロバイダーです。プロンプトを作成する前に、Layer 3 の gemini-omni で、信頼できるプロンプト作成ガイド(参照画像タグ、タイムコードの構文、編集プロンプトのルール)を確認してください。

優先するプレミアム標準 — Seedance 2.0。 プレミアムゲートウェイが設定されている場合(FAL_KEY → seedance_video、または HeyGen の Video Agent / Avatar Shots 経路)、シネマティックな映像、予告編、高忠実度のクリップ制作では Seedance 2.0 を優先的な標準として使用します。フリート内で唯一、1 回の処理でのネイティブな音声同期、マルチショット生成、監督レベルのカメラ制御、引用された台詞とのリップシンクに対応するモデルであり、2026 年初頭時点で Artificial Analysis Elo の第 1 位です。ユーザーに明確な理由(予算、プロバイダーの希望、フォトリアルな風景なら VEO、特定のアニメ調なら Kling といったスタイルの適合性)がある場合にのみ、別のモデルを選んでください。信頼できるプロンプト作成およびパラメーターガイドについては、Layer 3 の seedance-2-0 を参照してください。

重要: プロバイダーのツールを直接呼び出すのではなく、必ず video_selector を使用してください。セレクターは利用可能かどうかの確認、コストの比較、自動フォールバックを処理します。また、そのスコアリングエンジンはシネマティックな用途に Seedance 2.0 を優先するよう、すでに調整されています。

認証

ユーザーが利用できるプロバイダーと、コストや品質に関する目標に最も適した、設定済みのゲートウェイを使用してください。

  • HeyGen: マルチモデルゲートウェイを利用するには、HEYGEN_API_KEY を設定します。
  • fal.ai: fal.ai 経由で Kling、MiniMax、Veo を利用するには、FAL_KEY を設定します。
  • Kling Official: provider="kling_official" を指定して Kling の公式直接 API を利用するには、KLING_API_KEY を設定します。
  • Gemini API: Gemini Omni による動画生成と会話形式の編集を利用するには、GEMINI_API_KEY または GOOGLE_API_KEY を設定します。

レジストリと現在のタスクへの適合性を確認せずに、いずれかのゲートウェイを標準または最有力候補と説明しないでください。

fal.ai Kling(kling_video、provider="kling")と Kling Official(kling_official_video、provider="kling_official")は異なる経路です。公式プロバイダーが選択されている場合は、fal.ai のキュー URL、FAL_KEY、画像アップロードの動作を流用しないでください。

curl -X POST "https://api.heygen.com/v1/workflows/executions" \
  -H "X-Api-Key: $HEYGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_type": "GenerateVideoNode", "input": {"prompt": "A drone shot flying over a coastal city at sunset"}}'

標準ワークフロー

  1. workflow_type: "GenerateVideoNode" とプロンプトを指定して POST /v1/workflows/executions を呼び出します
  2. レスポンスで execution_id を受け取ります
  3. ステータスが completed になるまで、10 秒ごとに GET /v1/workflows/executions/{id} をポーリングします
  4. 出力から返された video_url を使用します

動画生成の実行

エンドポイント

POST https://api.heygen.com/v1/workflows/executions

リクエストフィールド
フィールド型必須説明
workflow_typestringY"GenerateVideoNode" を指定する必要があります
input.promptstringY生成する動画のテキストによる説明
input.providerstring動画生成プロバイダー(デフォルト:"veo_3_1")。下記のプロバイダーを参照してください。
input.aspect_ratiostringアスペクト比(デフォルト:"16:9")。一般的な値:"16:9"、"9:16"、"1:1"
input.reference_image_urlstring画像から動画を生成する際の参照画像 URL
input.tail_image_urlstring最終フレームのガイダンスに使用する末尾画像 URL
input.configobjectプロバイダー固有の設定の上書き
プロバイダー
プロバイダー値説明
VEO 3.1"veo_3_1"Google VEO 3.1(デフォルト、最高品質)
VEO 3.1 Fast"veo_3_1_fast"VEO 3.1 の高速版
VEO 3"veo3"Google VEO 3
VEO 3 Fast"veo3_fast"VEO 3 の高速版
VEO 2"veo2"Google VEO 2
Kling Pro"kling_pro"Kling Pro モデル
Kling V2"kling_v2"Kling V2 モデル
Sora V2"sora_v2"OpenAI Sora V2
Sora V2 Pro"sora_v2_pro"OpenAI Sora V2 Pro
Runway Gen-4"runway_gen4"Runway Gen-4
Seedance Lite"seedance_lite"Seedance Lite
Seedance Pro"seedance_pro"Seedance Pro
LTX Distilled"ltx_distilled"LTX Distilled(最速)
curl
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
  -H "X-Api-Key: $HEYGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_type": "GenerateVideoNode",
    "input": {
      "prompt": "A drone shot flying over a coastal city at golden hour, cinematic lighting",
      "provider": "veo_3_1",
      "aspect_ratio": "16:9"
    }
  }'
TypeScript
interface GenerateVideoInput {
  prompt: string;
  provider?: string;
  aspect_ratio?: string;
  reference_image_url?: string;
  tail_image_url?: string;
  config?: Record<string, any>;
}

interface ExecuteResponse {
  data: {
    execution_id: string;
    status: "submitted";
  };
}

async function generateVideo(input: GenerateVideoInput): Promise<string> {
  const response = await fetch("https://api.heygen.com/v1/workflows/executions", {
    method: "POST",
    headers: {
      "X-Api-Key": process.env.HEYGEN_API_KEY!,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      workflow_type: "GenerateVideoNode",
      input,
    }),
  });

  const json: ExecuteResponse = await response.json();
  return json.data.execution_id;
}
Python
import requests
import os

def generate_video(
    prompt: str,
    provider: str = "veo_3_1",
    aspect_ratio: str = "16:9",
    reference_image_url: str | None = None,
    tail_image_url: str | None = None,
) -> str:
    payload = {
        "workflow_type": "GenerateVideoNode",
        "input": {
            "prompt": prompt,
            "provider": provider,
            "aspect_ratio": aspect_ratio,
        },
    }

    if reference_image_url:
        payload["input"]["reference_image_url"] = reference_image_url
    if tail_image_url:
        payload["input"]["tail_image_url"] = tail_image_url

    response = requests.post(
        "https://api.heygen.com/v1/workflows/executions",
        headers={
            "X-Api-Key": os.environ["HEYGEN_API_KEY"],
            "Content-Type": "application/json",
        },
        json=payload,
    )

    data = response.json()
    return data["data"]["execution_id"]
レスポンス形式
{
  "data": {
    "execution_id": "node-gw-v1d2e3o4",
    "status": "submitted"
  }
}

ステータスの確認

エンドポイント

GET https://api.heygen.com/v1/workflows/executions/{execution_id}

curl
curl -X GET "https://api.heygen.com/v1/workflows/executions/node-gw-v1d2e3o4" \
  -H "X-Api-Key: $HEYGEN_API_KEY"
レスポンス形式(完了時)
{
  "data": {
    "execution_id": "node-gw-v1d2e3o4",
    "status": "completed",
    "output": {
      "video": {
        "video_url": "https://resource.heygen.ai/generated/video.mp4",
        "video_id": "abc123"
      },
      "asset_id": "asset-xyz789"
    }
  }
}

完了までのポーリング

async function generateVideoAndWait(
  input: GenerateVideoInput,
  maxWaitMs = 600000,
  pollIntervalMs = 10000
): Promise<{ video_url: string; video_id: string; asset_id: string }> {
  const executionId = await generateVideo(input);
  console.log(`Submitted video generation: ${executionId}`);

  const startTime = Date.now();
  while (Date.now() - startTime < maxWaitMs) {
    const response = await fetch(
      `https://api.heygen.com/v1/workflows/executions/${executionId}`,
      { headers: { "X-Api-Key": process.env.HEYGEN_API_KEY! } }
    );
    const { data } = await response.json();

    switch (data.status) {
      case "completed":
        return {
          video_url: data.output.video.video_url,
          video_id: data.output.video.video_id,
          asset_id: data.output.asset_id,
        };
      case "failed":
        throw new Error(data.error?.message || "Video generation failed");
      case "not_found":
        throw new Error("Workflow not found");
      default:
        await new Promise((r) => setTimeout(r, pollIntervalMs));
    }
  }

  throw new Error("Video generation timed out");
}

使用例

シンプルなテキストから動画への変換
curl -X POST "https://api.heygen.com/v1/workflows/executions" \
  -H "X-Api-Key: $HEYGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_type": "GenerateVideoNode",
    "input": {
      "prompt": "A person walking through a sunlit park, shallow depth of field"
    }
  }'
画像から動画への変換
{
  "workflow_type": "GenerateVideoNode",
  "input": {
    "prompt": "Animate this product photo with a slow zoom and soft particle effects",
    "reference_image_url": "https://example.com/product-photo.png",
    "provider": "kling_pro"
  }
}
ソーシャルメディア向けの縦型フォーマット
{
  "workflow_type": "GenerateVideoNode",
  "input": {
    "prompt": "A trendy coffee shop interior, camera slowly panning across the counter",
    "aspect_ratio": "9:16",
    "provider": "veo_3_1"
  }
}
LTX による高速生成
{
  "workflow_type": "GenerateVideoNode",
  "input": {
    "prompt": "Abstract colorful shapes morphing and flowing",
    "provider": "ltx_distilled"
  }
}

ベストプラクティス

  1. プロンプトは具体的に記述してください — カメラの動き、照明、スタイル、雰囲気の詳細を含めます
  2. 映画的な表現や動きを重視する制作では、FAL_KEY が設定されている場合、Seedance 2.0(seedance_video 経由)をデフォルトにしてください — 1回の処理で音声同期、マルチショット、リップシンク、ディレクターレベルのカメラワークに対応します。ユーザーが Google または OpenAI の動きやキャラクターを明確に希望する場合は VEO 3.1 / Sora V2 Pro を使用してください。速度が最優先の場合に限り、ltx_distilled または veo3_fast を使用してください
  3. 画像から動画を生成する際は参照画像を使用してください — 商品写真や静止画像のアニメーション化に適しています
  4. 動画生成は最も時間のかかるワークフローです — 最大 5 分かかることを想定し、10 秒ごとにポーリングしてください
  5. アスペクト比は重要です — ソーシャルメディアのストーリーやリールには 9:16、横向きには 16:9、正方形には 1:1 を使用してください
  6. 出力には asset_id が含まれます — これを使用して、生成した動画をほかの HeyGen ワークフローで参照してください
  7. 出力 URL は一時的なものです — 生成した動画は速やかにダウンロードまたは保存してください

コメント