모델 가이드

Wan 3.0 API: 30초 클립, 가격, 코드

Wan 3.0은 Alibaba의 소리를 지원하는 영상 모델로, 클립을 조정하는 다섯 가지 방법과 2~30초 길이를 제공합니다. API가 받는 것, 길이와 해상도별 비용, 호출 방법을 정리했습니다.

Wan 3.0이 제공하는 것

Wan은 Alibaba의 영상 모델 계열이며, Wan 3.0은 Revana 카탈로그에서 가장 최신의 Wan 세대입니다. 받는 입력은 다음과 같습니다.

  • 다섯 가지 입력 모드. 텍스트 투 비디오, 이미지 투 비디오, 첫·마지막 프레임, 참조 이미지, 영상 투 영상.
  • 넓은 범위의 길이. 클립당 2~30초 어디든 가능하므로, 빠른 2초 테스트와 전체 30초 테이크를 같은 모델로 처리합니다.
  • 영상과 함께 소리. audio를 true로 설정하면 앰비언스, 효과음, 음성이 같은 패스에서 생성됩니다.
  • 모든 채널에 맞는 프레이밍. 적응형, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 프레이밍 중에서 선택하세요.
  • 캐릭터, 제품, 배경을 위한 최대 10장의 참조 이미지.

품질 점수나 순위는 게시하지 않습니다. 카탈로그는 모델이 무엇을 받고 비용이 얼마인지를 알려 줍니다. 출력이 제품에 맞는지는 자신의 프롬프트로 테스트해 보아야 합니다.

Wan 3.0과 Wan 3.0 Prime 중 무엇을 쓸까?

둘 다 Revana에 있습니다. 카탈로그에는 두 모델의 해상도, 길이, 참조 이미지 한도가 같게 표시되어 있습니다. 표시된 차이점은 Prime이 영상 투 영상이나 21:9를 지원하지 않는다는 것과 자체 초당 요율이 있다는 것입니다(아래 가격 표 참고).

Wan 3.0과 Wan 3.0 Prime 비교
Wan 3.0Wan 3.0 Prime
작업텍스트 투 비디오, 이미지 투 비디오, 첫·마지막 프레임, 참조 이미지, 비디오 투 비디오텍스트 투 비디오, 이미지 투 비디오, 첫·마지막 프레임, 참조 이미지
해상도480p, 720p, 1080p480p, 720p, 1080p
길이2~30초2~30초
화면 비율적응형, 16:9, 4:3, 1:1, 3:4, 9:16 또는 21:9적응형, 16:9, 4:3, 1:1, 3:4 또는 9:16
참조 이미지최대 10장최대 10장
시작가$0.05 / s$0.07 / s
경로경로 3개경로 3개

실용적인 선택 방법은 같은 프롬프트 서너 개를 480p에서 두 모델에 모두 실행하고 결과를 나란히 비교하는 것입니다. 5초 테스트는 Wan 3.0에서 $0.25, Prime에서 $0.35입니다.

Wan 3.0 가격 (2026년 10월)

두 모델 모두 출력 영상 1초당 청구되며, 소리 켜짐/꺼짐과 관계없이 해상도별로 요율이 하나입니다.

Wan 3.0과 Prime의 초당 및 클립당 가격
해상도Wan 3.0 / 초10초 클립30초 클립Prime / 초Prime 30초
480p$0.05$0.50$1.50$0.07$2.10
720p$0.09$0.90$2.70$0.13$3.90
1080p$0.17$1.70$5.10$0.26$7.80

제출할 때 작업의 금액이 선불 잔액에서 보류되고, 작업이 성공한 경우에만 청구되며, 실패하면 보류가 해제됩니다. 금액은 cost_usd로 반환됩니다. 크레딧 팩과 모든 모델의 요율은 요금 페이지를 참고하세요.

Wan 2.6과 Wan 2.7

이전 Wan 모델도 720p와 1080p로 계속 사용할 수 있습니다.

이전 Wan 모델
모델작업길이소리시작가 / 초경로
Wan 2.6텍스트 투 비디오, 이미지 투 비디오, 영상 투 영상5초, 10초 또는 15초yes$0.07경로 2개
Wan 2.7텍스트 투 비디오, 이미지 투 비디오, 첫·마지막 프레임, 영상 투 영상, 참조 이미지2~15초no$0.09경로 2개

15초 Wan 3.0 클립 생성하기

"model": "wan-3.0"와 함께 POST /v1/generations를 보낸 다음 생성이 끝날 때까지 폴링하세요. 소리가 있는 이 15초 720p 클립은 $1.35입니다.

cURL
export REVANA_API_KEY="sr_live_..."

# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-3.0",
    "input": {
      "prompt": "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
      "resolution": "720p",
      "duration": 15,
      "aspect_ratio": "16:9",
      "audio": true
    },
    "max_cost_usd": 2
  }'

# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
  -H "Authorization: Bearer $REVANA_API_KEY"
Python
import os
import time

import requests

API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

resp = requests.post(f"{API}/generations", headers=HEADERS, json={
    "model": "wan-3.0",
    "input": {
        "prompt": "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
        "resolution": "720p",
        "duration": 15,
        "aspect_ratio": "16:9",
        "audio": True,
    },
    "max_cost_usd": 2,
})
resp.raise_for_status()
job = resp.json()

while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()

if job["status"] == "succeeded":
    print(job["output"]["urls"], job["cost_usd"])
else:
    print("Failed:", job["error"])
Node.js
// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
  Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
  "Content-Type": "application/json",
};

const res = await fetch(`${API}/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "wan-3.0",
    input: {
      prompt: "A hot air balloon rises over a misty valley at sunrise. Shot 1: wide shot as the balloon lifts off a meadow. Shot 2: view from the basket as the valley opens up below. Shot 3: the balloon drifts past the camera into the sun. Burner roar, birdsong, wind.",
      resolution: "720p",
      duration: 15,
      aspect_ratio: "16:9",
      audio: true,
    },
    max_cost_usd: 2,
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();

while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 5000));
  job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}

if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);

첫 번째 호출은 생성 id와 상태 queued이 담긴 202를 반환합니다. 완료된 작업은 다음과 같습니다.

응답
{
  "id": "gen_01JBX7Q2M4",
  "model": "wan-3.0",
  "status": "succeeded",
  "output": {
    "urls": [
      "https://cdn.revana.si/g/gen_01JBX7Q2M4/0.mp4"
    ]
  },
  "cost_usd": 1.35,
  "attempts": 1,
  "error": null,
  "created_at": "2026-10-19T14:02:11Z",
  "completed_at": "2026-10-19T14:03:47Z"
}

이미지 움직이게 하기

이미지를 image_url로 보내세요. adaptive를 사용하면 모델이 프레임을 이미지에 맞춥니다. 이 8초 1080p 클립은 $1.36입니다.

요청 본문
{
  "model": "wan-3.0",
  "input": {
    "prompt": "The waves in the painting start to move and crash against the rocks while the clouds drift slowly. Ocean surf, gulls.",
    "image_url": "https://example.com/painting.jpg",
    "resolution": "1080p",
    "duration": 8,
    "aspect_ratio": "adaptive",
    "audio": true
  },
  "max_cost_usd": 2
}

참조 이미지

최대 10장의 이미지를 image_urls로 전달하고 각각을 위치로 가리키세요. 이 12초 정사각형 클립은 $1.08입니다.

요청 본문
{
  "model": "wan-3.0",
  "input": {
    "prompt": "The robot from the first image waters the plants in the greenhouse from the second image, then stops to watch a butterfly. Soft electronic hum, dripping water.",
    "image_urls": [
      "https://example.com/robot.jpg",
      "https://example.com/greenhouse.jpg"
    ],
    "resolution": "720p",
    "duration": 12,
    "aspect_ratio": "1:1",
    "audio": true
  },
  "max_cost_usd": 2
}

Wan 3.0은 원본 클립이 새 클립을 이끄는 영상 투 영상도 지원합니다. 시작·마지막 프레임은 다른 모델과 같게 image_url와 end_image_url로 사용합니다.

Wan 3.0 프롬프트 팁

  • 아주 짧은 클립으로 움직임을 테스트하세요. Wan 3.0은 2초짜리 클립도 받으므로, 480p 빠른 움직임 테스트는 $0.10입니다.
  • 긴 클립에는 샷 리스트를 쓰세요. 15~30초라면 샷에 번호를 매기고 각각에 피사체, 동작, 카메라 움직임을 적으세요.
  • 소리를 설명하세요. 바탕에 깔리는 것(바람, 군중, 음악)과 특정 순간에 일어나는 것(문, 대사 한 줄)을 말하세요. 음악을 원하지 않으면 "음악 없음"이라고 쓰세요.
  • 등장인물을 적게 유지하세요. 긴 클립에서는 한두 명의 캐릭터가 군중보다 더 안정적으로 일관성을 유지합니다.
  • 텍스트는 편집기에 맡기세요. 현재의 영상 모델에서는 화면 속 정확한 문구가 안정적이지 않습니다.

라우팅과 폴백

현재 Revana에서 Wan 3.0에는 세 개의 경로, Wan 3.0 Prime에는 세 개의 경로가 있습니다. 라우터는 각 작업을 가장 저렴한 경로로 먼저 보내고, 실패하거나 시간이 초과되면 다음 경로로 넘깁니다. 모든 경로가 같은 모델을 같은 표시 가격으로 제공하며, 성공한 경로에 대해서만 한 번 청구됩니다.

대체 경로는 결과를 얻을 확률을 높이지만 가동 시간을 보장하지는 않습니다. 모든 경로가 실패하면 작업은 failed로 끝나며 비용은 발생하지 않습니다.

모델 페이지에서 모든 Wan 모델을 둘러보고, API 문서를 읽거나, API 키를 받아 샘플을 실행해 보세요.

자주 묻는 질문

Wan 3.0 API는 얼마인가요?

2026년 10월 기준 Wan 3.0은 480p 초당 $0.05, 720p $0.09, 1080p $0.17이며 소리가 포함됩니다. 10초 720p 클립은 $0.90입니다.

Wan 3.0 영상은 얼마나 길게 만들 수 있나요?

요청당 2~30초이며 duration 필드로 설정합니다.

Wan 3.0과 Wan 3.0 Prime은 무엇이 다른가요?

Prime은 초당 $0.07부터 시작하며 Wan 3.0은 $0.05입니다. Prime은 영상 투 영상이나 21:9를 지원하지 않습니다. 해상도, 길이, 참조 이미지 한도는 같습니다. 선택하기 전에 자신의 프롬프트로 둘 다 테스트해 보세요.

Wan 3.0은 오디오를 생성하나요?

네. audio를 true로 설정하면 영상과 함께 소리가 생성되고, false로 설정하면 무음입니다. 어느 쪽이든 가격은 같습니다.

Wan 3.0은 참조 이미지를 몇 장 받나요?

image_urls로 최대 10장입니다. 프롬프트에서 각 이미지를 위치로 가리키세요.

Wan 3.0은 어떤 화면 비율을 지원하나요?

Wan 3.0은 적응형, 16:9, 4:3, 1:1, 3:4, 9:16, 21:9를 지원합니다. 적응형은 프레임을 입력 이미지에 맞춥니다.

하나의 키로 Wan 3.0 호출하기

같은 키와 요청 형식으로 Wan 3.0, Wan 3.0 Prime과 다른 모든 모델을 실행하세요. $10부터 시작하는 선불 크레딧.