ai-video-gen について
ai-video-genは、複数のAPIゲートウェイと動画プロバイダーを通じて、テキストから動画を生成するスキルです。video_selectorでリクエストを振り分け、利用可否やコストを確認し、自動フォールバックにも対応します。
主な機能
- 01テキストからの動画生成
- 02参照画像を使った画像から動画への生成
- 03複数のゲートウェイと動画プロバイダー
- 04Gemini Omniによる複数ターン編集
- 05プロバイダー選択と自動フォールバック
活用シーン
- 01文章の指示からクリップを生成
- 02商品写真を動画化
- 03縦型のソーシャルメディア動画を作成
- 04会話形式で既存クリップを編集
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ calesthio/ openmontage --skill ai-video-genインストール後、Claude Code で/ai-video-genを入力して読み込まれたか確認します。
詳細
動画生成(マルチゲートウェイ)
テキストプロンプトから AI 動画を生成します。以下の 4 つの API 経路を通じて、複数のプロバイダーを利用できます。
| ゲートウェイ | 環境変数 | プロバイダー | ツール |
|---|---|---|---|
| fal.ai | FAL_KEY | Seedance 2.0(標準版+高速版)、Kling v3/v2.1、MiniMax、VEO | seedance_video、kling_video、minimax_video、veo_video |
| HeyGen | HEYGEN_API_KEY | VEO 3.1、Kling Pro、Sora v2、Runway Gen-4、Seedance Pro / Lite(1.x) | heygen_video |
| Kling Official | KLING_API_KEY | Kling 公式の Classic、Turbo、基本的な Omni 動画 | kling_official_video |
| Gemini API | GEMINI_API_KEY / GOOGLE_API_KEY | Gemini 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"}}'
標準ワークフロー
workflow_type: "GenerateVideoNode"とプロンプトを指定してPOST /v1/workflows/executionsを呼び出します- レスポンスで
execution_idを受け取ります - ステータスが
completedになるまで、10 秒ごとにGET /v1/workflows/executions/{id}をポーリングします - 出力から返された
video_urlを使用します
動画生成の実行
エンドポイント
POST https://api.heygen.com/v1/workflows/executions
リクエストフィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
workflow_type | string | Y | "GenerateVideoNode" を指定する必要があります |
input.prompt | string | Y | 生成する動画のテキストによる説明 |
input.provider | string | 動画生成プロバイダー(デフォルト:"veo_3_1")。下記のプロバイダーを参照してください。 | |
input.aspect_ratio | string | アスペクト比(デフォルト:"16:9")。一般的な値:"16:9"、"9:16"、"1:1" | |
input.reference_image_url | string | 画像から動画を生成する際の参照画像 URL | |
input.tail_image_url | string | 最終フレームのガイダンスに使用する末尾画像 URL | |
input.config | object | プロバイダー固有の設定の上書き |
プロバイダー
| プロバイダー | 値 | 説明 |
|---|---|---|
| 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"
}
}
ベストプラクティス
- プロンプトは具体的に記述してください — カメラの動き、照明、スタイル、雰囲気の詳細を含めます
- 映画的な表現や動きを重視する制作では、
FAL_KEYが設定されている場合、Seedance 2.0(seedance_video経由)をデフォルトにしてください — 1回の処理で音声同期、マルチショット、リップシンク、ディレクターレベルのカメラワークに対応します。ユーザーが Google または OpenAI の動きやキャラクターを明確に希望する場合は VEO 3.1 / Sora V2 Pro を使用してください。速度が最優先の場合に限り、ltx_distilledまたはveo3_fastを使用してください - 画像から動画を生成する際は参照画像を使用してください — 商品写真や静止画像のアニメーション化に適しています
- 動画生成は最も時間のかかるワークフローです — 最大 5 分かかることを想定し、10 秒ごとにポーリングしてください
- アスペクト比は重要です — ソーシャルメディアのストーリーやリールには
9:16、横向きには16:9、正方形には1:1を使用してください - 出力には
asset_idが含まれます — これを使用して、生成した動画をほかの HeyGen ワークフローで参照してください - 出力 URL は一時的なものです — 生成した動画は速やかにダウンロードまたは保存してください