Claude Opus 5 is now live on CometAPI →
Q

Wan2.6

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

Wan2.6 は、安定かつ効率的な動画合成のために設計された動画生成モデルです。一般的な動画制作タスクにおいて、信頼性の高い画質と滑らかなモーション生成を提供します。

新着
商用利用

Wan 2.6 の技術仕様

ItemWan 2.6 Video Suite
ProviderAlibaba / Tongyi Lab
Model familyWan 2.6
Release timeframeDecember 2025 generation
Input typesText, images, reference videos, audio inputs
Output typeVideo with optional synchronized audio
Core modesText-to-Video (T2V), Image-to-Video (I2V), Reference-to-Video (R2V)
Flash variantsI2V Flash, R2V Flash
Resolution support720P and 1080P
Duration support2–15 seconds (workflow dependent)
Audio capabilitiesNative audio generation, voice references, lip sync
Multi-shot support2–8 scene segments in a single workflow
Reference supportUp to 5 references (mixed image/video depending on workflow)
API workflowAsync task creation + polling

Wan 2.6 とは?

Wan 2.6 は、制御可能な短尺制作に焦点を当てた Alibaba のマルチモーダル動画生成システムです。純粋にプロンプト駆動とするのではなく、テキストプロンプト、画像リファレンス、参照動画、音声コンディショニング、シーン連結を組み合わせてクリエイター向けワークフローを実現します。従来の Wan リリースからの主なアップグレードは、より強力なリファレンス主導の一貫性と、長めのナラティブ生成の導入でした。

Wan 2.6 の主な機能

  • Reference-to-video workflows: 画像または動画のリファレンスを投入して、生成全体でキャラクターの同一性、スタイル、声の連続性を維持できます。
  • Multi-shot narrative generation: 複数のプロンプトを連結し、単一の生成ワークフロー内でシーン遷移と物語の進行をサポートします。
  • Native audio synchronization: 生成音声、カスタム音声アップロード、リップシンクのワークフローをネイティブにサポートします。
  • Flexible input modes: プロンプトのみの生成、ファーストフレームのアニメーション化、リファレンス駆動のワークフローをサポートします。
  • Flash variants for iteration: 高速版により、最終的な高品質レンダーの前に迅速なテストが可能です。
  • Longer clips: 以前の世代と比べてクリップ長を拡張し、ナラティブコンテンツ制作を支援します。

Wan 2.6 のベンチマーク性能

Wan 2.6 の正式なベンチマーク公開は依然として限定的で、テキスト LLM プロバイダと比べ標準化されたベンチマーク指標の公開は少なめです。評価の多くは、公開リーダーボードではなく、ワークフローテストやエコシステム比較に基づいています。コミュニティのテストで一貫して指摘される点は次のとおりです。

  • 旧世代の Wan よりキャラクター一貫性が向上。
  • 音声と映像の同期が改善。
  • マルチショットの連続性が強化。
  • リファレンス条件付けの信頼性が向上。

ベンチマークの公開が少ないため、導入前のプロダクションテストが依然として重要です。

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

FeatureWan 2.6Wan 2.7Veo 系モデル
Native audio generation強力より強力強力
Multi-shot workflowあり改善中程度
Reference-to-video強調さらに強力な制御中程度
Clip duration最大 15s同等 / ワークフロー依存さまざま
Multi-reference support最大 5 refs拡張されたワークフロー中程度
Editing workflows中程度より良い編集サポート強力

Wan 2.6 の制限事項

  • 短いクリップ長のため、長尺制作にはなお制約がある。
  • 動きの大きいシーンでは時間的な不安定性が残る場合がある。
  • リファレンス依存のワークフローはセットアップの複雑性が増す。
  • 公開ベンチマークの報告が限定的。
  • 非同期生成パイプラインにより統合の複雑性が増す。

代表的なユースケース

  1. キャラクターの一貫性を保つマーケティング動画。
  2. 複数シーンのソーシャルメディア向けクリップ。
  3. クリエイターアバターのアニメーション。
  4. リファレンス駆動のプロダクト動画。
  5. 同期音声付きの AI ストーリーテリング。
  6. アイデンティティ保持が求められるブランドコンテンツ。

よくある質問

Wan2.6の料金

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

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.6のサンプルコードとAPI

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

# Create a video with wan2.6
# 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.6" \
  -F "prompt=Create a cinematic multi-shot chase across a moonlit desert market. Shot 1 [0-2s]: a wide establishing view of lanterns and dust in the air. Shot 2 [2-4s]: a small brass robot darts between fabric stalls. Shot 3 [4-5s]: close-up on the robot finding a glowing compass." \
  -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.6
# 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.6" \
  -F "prompt=Create a cinematic multi-shot chase across a moonlit desert market. Shot 1 [0-2s]: a wide establishing view of lanterns and dust in the air. Shot 2 [2-4s]: a small brass robot darts between fabric stalls. Shot 3 [4-5s]: close-up on the robot finding a glowing compass." \
  -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.6 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.6"),
        "prompt": (None, "Create a cinematic multi-shot chase across a moonlit desert market. Shot 1 [0-2s]: a wide establishing view of lanterns and dust in the air. Shot 2 [2-4s]: a small brass robot darts between fabric stalls. Shot 3 [4-5s]: close-up on the robot finding a glowing compass."),
        "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.6 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.6");
formData.append("prompt", "Create a cinematic multi-shot chase across a moonlit desert market. Shot 1 [0-2s]: a wide establishing view of lanterns and dust in the air. Shot 2 [2-4s]: a small brass robot darts between fabric stalls. Shot 3 [4-5s]: close-up on the robot finding a glowing compass.");
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.6のバージョン

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

Version
wan2.6