Claude Opus 5 is now live on CometAPI →
Q

Wan2.7

毎秒:$0.08
リリース日:May 31, 2026

Wan2.7は、高品質な映像合成とモーションの一貫性の向上を目的として設計された映像生成モデルです。シネマティックなコンテンツ制作やプロフェッショナルな映像制作ワークフローに適しています。

新着
商用利用

Wan 2.7 の技術仕様

項目Wan 2.7 (Video Suite)
提供元Alibaba Tongyi Lab
モデルファミリーWan 2.7 Video Suite
アーキテクチャ27B パラメータの Mixture-of-Experts(MoE)
入力タイプテキスト、画像、動画、音声リファレンス
出力タイプ任意の音声付きの生成/編集済み動画クリップ
対応モードテキストから動画(T2V)、画像から動画(I2V)、リファレンスから動画(R2V)、動画編集
解像度720P および 1080P 出力
動画の長さ2–15秒
音声サポートネイティブ音声生成、音声リファレンス、リップシンクのワークフロー
リファレンス機能複数リファレンスの画像/動画、アイデンティティの一貫性
キャラクターの一貫性ワークフローに応じて複数の参照対象に対応
リリース世代Wan 2.6 のメジャー後継

Wan 2.7 とは?

Wan 2.7 は、単純なプロンプトから動画の生成ではなく、制御可能な AI フィルムメイキングのワークフロー向けに構築された Alibaba のフラッグシップなマルチモーダル動画生成スイートです。このモデルファミリーは、生成、編集、継続、リファレンス駆動の一貫性を1つのシステムに統合し、被写体の保持とシーン制御を強化した短編シネマティッククリップの制作を可能にします。

プロンプト品質に主眼を置いていた従来の動画生成モデルと異なり、Wan 2.7 はフレームアンカリング、リファレンス入力、音声同期、構造化されたマルチショットのワークフローによって制御性を重視しています。

Wan 2.7 の主な機能

  • Thinking Mode の計画パイプライン: モデルはレンダリング前にシーン構図と動きを計画し、プロンプト遵守性を改善し、整合性の破綻を減らします。
  • 初期フレームと最終フレームの制御: ユーザーが冒頭と終端のフレームを定義でき、システムがその間の動きを補間します。
  • リファレンス駆動のアイデンティティ一貫性: 複数のショットにわたり、キャラクターの外見、衣装、オブジェクト、スタイルを維持します。
  • ネイティブなマルチモーダルワークフロー: 同一ワークフロー内でテキスト、画像、音声、動画のリファレンスをサポートします。
  • 音声生成の統合: 映像と併せて、BGM、環境音、音声の同期を生成できます。
  • 編集と継続のサポート: 既存の動画をゼロから作り直すことなく、延長、変換、スタイル変更が可能です。

Wan 2.7 のベンチマーク性能

テキスト LLM と比較すると、Wan 2.7 の公開ベンチマーク開示は依然として限定的ですが、第三者評価やコミュニティによるテストでは、Wan 2.6 と比べて動きの安定性、プロンプト遵守性、制御性に顕著な改善が示されています。

報告されているエコシステムでの観測には次が含まれます:

  • 従来の Wan リリースと比べて、動きの連続性が強化。
  • 第三者のテキストから動画評価におけるリーダーボードでより高い順位。
  • 複数被写体の一貫性とリファレンスの保持が改善。
  • 多くの従来のオープンな動画モデルよりも優れた音声統合。

正式なベンチマークの透明性はなお限定的であるため、性能に関する主張は慎重に解釈すべきです。

Wan 2.7 と他の動画モデルの比較

機能Wan 2.7Veo 3.1Seedance 2.0
ネイティブ音声ワークフロー強い強い中程度
リファレンス駆動の一貫性強い中程度中程度
初期 + 最終フレーム制御あり一部限定的
動画編集ワークフローありあり限定的
最大共通解像度1080Pより高品質なシネマティック出力1080P
マルチリファレンス対応強く重視中程度中程度

Wan 2.7 の制約

  • 長編制作ツールと比べて、クリップの尺が短い。
  • 最大出力が1080Pのため、超高解像度ワークフローに制約がある。
  • 高速な動きのシーンでは、依然として不安定なアーティファクトが生じる場合がある。
  • マルチリファレンスのワークフローは、複雑性とプロンプト設計の要求を高める。
  • 公開ベンチマークの報告は相対的に少ない。

代表的なユースケース

  1. キャラクターの一貫性を維持した短編映像や絵コンテ。
  2. 音声同期を伴うマーケティング用クリップ。
  3. ソーシャルメディア向け動画生成。
  4. 製品ビジュアライゼーションやコンセプトトレーラー。
  5. 動画の継続生成とシーン補間のワークフロー。
  6. リファレンスに基づくアバター/キャラクターアニメーション。

CometAPI での WAN 2.7 Video API の使い方

ステップ 1: Kie Al Playground で WAN 2.7 Video API を試す

まず、CometAPI Playground で WAN 2.7 Video API を使用して WAN 2.7 の機能をテストします。画像をアップロードし、プロンプトを追加するか、リファレンスを使用して、WAN 2.7 の AI 動画を本番ワークフローに統合する前に生成された WAN 動画をプレビューします。

ステップ 2: WAN 2.7 の API キーを取得し、API ドキュメントを確認する

CometAPI コンソールから WAN 2.7 の API キーを取得し、ドキュメントを確認します。テキストから動画、画像から動画、WAN 動画のワークフローをサポートするために、WAN 2.7 Video API のエンドポイント、認証、パラメータを把握します。

ステップ 3: WAN 2.7 の AI 動画を生成し、ワークフローへ統合する

WAN 2.7 Video API を使用して、プロンプト、画像、またはリファレンスから WAN 2.7 の AI 動画を生成します。WAN 2.7 の出力をプロダクトのワークフロー、コンテンツパイプライン、または AI 動画ツールに統合し、スケーラブルな動画生成を実現します。

よくある質問

Wan2.7の料金

Wan2.7の競争力のある価格設定をご確認ください。さまざまな予算や利用ニーズに対応できるよう設計されています。柔軟なプランにより、使用した分だけお支払いいただけるため、要件の拡大に合わせて簡単にスケールアップできます。Wan2.7がコストを管理しながら、お客様のプロジェクトをどのように強化できるかをご覧ください。

Wan Video Generation Pricing

Pricing (Per Second)

Model720p1080p
wan2.6$0.08$0.12
wan2.7$0.08$0.12

💡 Billed per second. Total cost = price per second × video duration (seconds).

Wan2.7のサンプルコードとAPI

Wan2.7の包括的なサンプルコードとAPIリソースにアクセスして、統合プロセスを効率化しましょう。詳細なドキュメントでは段階的なガイダンスを提供し、プロジェクトでWan2.7の潜在能力を最大限に活用できるよう支援します。

# Create a video with wan2.7
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=wan2.7" \
  -F "prompt=Create a cinematic detective sequence with clear timed shots. Shot 1 [0-2s]: a rainy city street at night, neon signs reflected in puddles. Shot 2 [2-4s]: a detective in a dark coat enters an old building. Shot 3 [4-5s]: close-up on a clue lit by a narrow flashlight beam." \
  -F "seconds=5" \
  -F "size=1280x720")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '
' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")

  progress=$(echo "$status_response" | grep -o '"progress"[[:space:]]*:[[:space:]]*"\?[^",}]*"\?' | head -1 | sed 's/.*:[[:space:]]*"\?//;s/"$//')
  status=$(echo "$status_response" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"status"[[:space:]]*:[[:space:]]*"//;s/"$//')

  echo "Progress: $progress, Status: $status"

  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ] || [ "$status" = "error" ]; then
    echo "Video generation failed!"
    exit 1
  fi

  if [ "$progress" = "100%" ] || [ "$progress" = "100" ] || [ "$status" = "completed" ] || [ "$status" = "success" ]; then
    echo "Video generation completed!"
    break
  fi

  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

cURL Code Example

# Create a video with wan2.7
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=wan2.7" \
  -F "prompt=Create a cinematic detective sequence with clear timed shots. Shot 1 [0-2s]: a rainy city street at night, neon signs reflected in puddles. Shot 2 [2-4s]: a detective in a dark coat enters an old building. Shot 3 [4-5s]: close-up on a clue lit by a narrow flashlight beam." \
  -F "seconds=5" \
  -F "size=1280x720")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '\n' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")
  
  progress=$(echo "$status_response" | grep -o '"progress"[[:space:]]*:[[:space:]]*"\?[^",}]*"\?' | head -1 | sed 's/.*:[[:space:]]*"\?//;s/"$//')
  status=$(echo "$status_response" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"status"[[:space:]]*:[[:space:]]*"//;s/"$//')
  
  echo "Progress: $progress, Status: $status"
  
  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ] || [ "$status" = "error" ]; then
    echo "Video generation failed!"
    exit 1
  fi
  
  if [ "$progress" = "100%" ] || [ "$progress" = "100" ] || [ "$status" = "completed" ] || [ "$status" = "success" ]; then
    echo "Video generation completed!"
    break
  fi
  
  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

Python Code Example

# Create a video with wan2.7 using raw HTTP requests
import os
import time
import requests

api_key = os.environ.get("COMETAPI_KEY")
base_url = "https://api.cometapi.com/v1"
headers = {"Authorization": f"Bearer {api_key}"}

# Step 1: Submit the video generation request
print("Submitting video generation request...")
response = requests.post(
    f"{base_url}/videos",
    headers=headers,
    files={
        "model": (None, "wan2.7"),
        "prompt": (None, "Create a cinematic detective sequence with clear timed shots. Shot 1 [0-2s]: a rainy city street at night, neon signs reflected in puddles. Shot 2 [2-4s]: a detective in a dark coat enters an old building. Shot 3 [4-5s]: close-up on a clue lit by a narrow flashlight beam."),
        "seconds": (None, "5"),
        "size": (None, "1280x720"),
    },
)

result = response.json()
print(f"Response: {result}")

video_id = result.get("id") or result.get("task_id")
print(f"Video ID: {video_id}")

# Step 2: Poll for progress until 100%
print("\nChecking video generation progress...")
while True:
    try:
        status_response = requests.get(f"{base_url}/videos/{video_id}", headers=headers)
        status_result = status_response.json()

        data = status_result.get("data") or status_result
        progress = data.get("progress", "0%")
        status = data.get("status", "unknown")

        print(f"Progress: {progress}, Status: {status}")

        if status in ["FAILURE", "failed", "error"]:
            print("Video generation failed!")
            print(status_result)
            exit(1)

        if progress == "100%" or progress == 100 or status in ["completed", "success"]:
            print("Video generation completed!")
            break
    except Exception as e:
        print(f"Temporary error: {e}, retrying...")

    time.sleep(10)

# Step 3: Download the video to output directory
print(f"\nDownloading video to ./output/{video_id}.mp4...")
os.makedirs("./output", exist_ok=True)

video_response = requests.get(f"{base_url}/videos/{video_id}/content", headers=headers)

output_path = f"./output/{video_id}.mp4"
with open(output_path, "wb") as f:
    f.write(video_response.content)

if os.path.exists(output_path):
    file_size = os.path.getsize(output_path)
    print(f"Video saved to {output_path}")
    print(f"File size: {file_size} bytes")
else:
    print("Failed to download video")
    exit(1)

JavaScript Code Example

// Create a video with wan2.7 using raw HTTP requests
import fs from "fs";
import path from "path";

const apiKey = process.env.COMETAPI_KEY;
const baseUrl = "https://api.cometapi.com/v1";
const headers = { Authorization: `Bearer ${apiKey}` };

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// Step 1: Submit the video generation request
console.log("Submitting video generation request...");
const formData = new FormData();
formData.append("model", "wan2.7");
formData.append("prompt", "Create a cinematic detective sequence with clear timed shots. Shot 1 [0-2s]: a rainy city street at night, neon signs reflected in puddles. Shot 2 [2-4s]: a detective in a dark coat enters an old building. Shot 3 [4-5s]: close-up on a clue lit by a narrow flashlight beam.");
formData.append("seconds", "5");
formData.append("size", "1280x720");

const submitResponse = await fetch(`${baseUrl}/videos`, {
  method: "POST",
  headers,
  body: formData,
});

const result = await submitResponse.json();
console.log("Response:", JSON.stringify(result, null, 2));

const videoId = result.id || result.task_id;
console.log("Video ID:", videoId);

// Step 2: Poll for progress until 100%
console.log("\nChecking video generation progress...");
while (true) {
  try {
    const statusResponse = await fetch(`${baseUrl}/videos/${videoId}`, { headers });
    const statusResult = await statusResponse.json();
    const data = statusResult.data || statusResult;
    const progress = data.progress || "0%";
    const status = data.status || "unknown";

    console.log(`Progress: ${progress}, Status: ${status}`);

    if (status === "FAILURE" || status === "failed" || status === "error") {
      console.log("Video generation failed!");
      console.log(JSON.stringify(statusResult, null, 2));
      process.exit(1);
    }

    if (progress === "100%" || progress === 100 || status === "completed" || status === "success") {
      console.log("Video generation completed!");
      break;
    }
  } catch (e) {
    console.log(`Temporary error: ${e.message}, retrying...`);
  }

  await sleep(10000);
}

// Step 3: Download the video to output directory
console.log(`\nDownloading video to ./output/${videoId}.mp4...`);
fs.mkdirSync("./output", { recursive: true });

const videoResponse = await fetch(`${baseUrl}/videos/${videoId}/content`, { headers });
const outputPath = path.join("./output", `${videoId}.mp4`);
fs.writeFileSync(outputPath, Buffer.from(await videoResponse.arrayBuffer()));

if (fs.existsSync(outputPath)) {
  const stats = fs.statSync(outputPath);
  console.log(`Video saved to ${outputPath}`);
  console.log(`File size: ${stats.size} bytes`);
} else {
  console.log("Failed to download video");
  process.exit(1);
}

Wan2.7のバージョン

Wan2.7に複数のスナップショットが存在する理由としては、アップデート後の出力変動により旧版スナップショットの一貫性維持が必要な場合、開発者に適応・移行期間を提供するため、グローバル/リージョナルエンドポイントに対応する異なるスナップショットによるユーザー体験最適化などが考えられます。各バージョンの詳細な差異については、公式ドキュメントをご参照ください。

Version
wan2.7