Claude Opus 5 is now live on CometAPI →
Q

Wan2.7

每秒:$0.08
發布時間:May 31, 2026

Wan2.7 是一款面向高品質視覺合成並提升動作一致性的影片生成模型。適用於電影級內容創作與專業影片製作工作流程。

商業用途

Wan 2.7 的技術規格

ItemWan 2.7(影片套件)
ProviderAlibaba Tongyi Lab
Model familyWan 2.7 Video Suite
Architecture27B 參數 Mixture-of-Experts (MoE)
Input types文字、圖片、影片、音訊參考
Output types生成/編輯的影片片段(可選音訊)
Supported modes文字轉影片(T2V)、圖片轉影片(I2V)、參考轉影片(R2V)、影片編輯
Resolution720P 與 1080P 輸出
Video duration2–15 秒
Audio support原生音訊生成、語音參考、口型同步工作流程
Reference capability多參考圖片/影片、身份一致性
Character consistency依工作流程支援多個參考主體
Release generationWan 2.6 的主要後繼版本

什麼是 Wan 2.7?

Wan 2.7 是 Alibaba 的旗艦多模態影片生成套件,面向可控的 AI 影片製作工作流程,而非僅僅進行簡單的提示詞到影片生成。該模型家族將生成、編輯、續寫與基於參考的一致性整合為一體,使創作者能打造更強主體保真與場景控制的短片段。

不同於早期主要依賴提示詞品質的影片生成器,Wan 2.7 透過幀錨定、參考輸入、音訊同步與結構化多鏡頭流程來強調可控性。

Wan 2.7 的主要功能

  • Thinking Mode 規劃管線:模型在渲染前規劃場景構圖與運動,提升提示遵從度並降低連貫性失誤。
  • 首幀與末幀控制:使用者可定義開場與結尾幀,系統在兩者之間進行運動內插。
  • 基於參考的身份一致性:在多個鏡頭間維持角色外觀、服飾、物件與風格的一致。
  • 原生多模態工作流程:在同一流程中支援文字、圖片、音訊與影片參考。
  • 整合式音訊生成:可與影像同步生成背景音樂、環境聲與語音。
  • 支援編輯與續寫:可在不從零開始的情況下,延長、轉換或重塑既有影片。

Wan 2.7 的基準表現

相較於文字 LLM,Wan 2.7 的公開基準披露仍較有限,但第三方評估與社群測試顯示,其在運動穩定性、提示遵從度與可控性方面相較 Wan 2.6 有明顯提升。

生態系觀察回饋包括:

  • 相較早期 Wan 版本,運動連貫性更強。
  • 在第三方文字轉影片評測排行榜中的名次更高。
  • 多主體一致性與參考保留能力更佳。
  • 相較許多早期開源影片模型,音訊整合更好。

正式基準的透明度仍有限,因此對效能聲稱應審慎解讀。

Wan 2.7 與其他影片模型比較

FeatureWan 2.7Veo 3.1Seedance 2.0
原生音訊流程中等
基於參考的一致性中等中等
首幀 + 末幀控制部分有限
影片編輯流程有限
最高常見解析度1080P更高端的電影級輸出1080P
多參考支援強調中等中等

Wan 2.7 的限制

  • 與長片製作工具相比,片段時長較短。
  • 最高輸出 1080P,限制了超高解析度工作流程。
  • 快速運動畫面仍可能產生不穩定偽影。
  • 多參考工作流程增加了複雜度與提示工程需求。
  • 公開基準報告相對稀少。

代表性使用場景

  1. 保持角色一致性的短片與分鏡腳本。
  2. 具有音訊同步的行銷短片。
  3. 社群媒體影片生成。
  4. 產品視覺化與概念預告片。
  5. 影片續寫與場景插值工作流程。
  6. 基於參考的頭像與角色動畫。

如何在 CometAPI 中使用 WAN 2.7 影片 API

步驟 1:在 Kie Al Playground 試用 WAN 2.7 影片 API

首先,使用 CometAPI Playground 中的 WAN 2.7 影片 API 測試 WAN 2.7 的功能。上傳圖片、添加提示詞或使用參考,在整合 WAN 2.7 AI 影片至生產工作流程前預覽生成的 WAN 影片。

步驟 2:取得 WAN 2.7 API 金鑰並查閱 API 文件

從 CometAPI 主控台取得 WAN 2.7 API 金鑰並查閱文件。了解 WAN 2.7 影片 API 的端點、驗證與參數,以支援文字轉影片、圖片轉影片與 WAN 影片工作流程。

步驟 3:生成 WAN 2.7 AI 影片並整合至你的工作流程

使用 WAN 2.7 影片 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

存取完整的範例程式碼和 API 資源,以簡化您的 Wan2.7 整合流程。我們詳盡的文件提供逐步指引,協助您在專案中充分發揮 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