가이드

텍스트 투 비디오 vs 이미지 투 비디오: 다섯 가지 API 모드 설명

대부분의 영상 모델은 프롬프트 이상의 입력을 받습니다. 이미지에서 시작하거나, 첫 프레임과 마지막 프레임을 고정하거나, 캐릭터와 제품을 위한 참조 이미지를 전달하거나, 기존 클립을 기반으로 작업할 수 있습니다. 이 가이드는 각 모드가 무엇인지, 언제 쓰는지, 어떻게 호출하는지를 설명합니다.

다섯 가지 모드 한눈에 보기

모든 모드는 같은 엔드포인트 POST /v1/generations를 사용합니다. 달라지는 것은 프롬프트와 함께 보내는 입력입니다.

영상 생성 모드
모드보내는 것적합한 용도
텍스트 투 비디오a prompt아이디어 탐색, B-롤, 이미지가 없는 장면
이미지 투 비디오image_url로 시작 프레임과 프롬프트제품 샷, 아트워크, 정지 이미지를 정확한 룩 그대로 움직이게 하기
첫 프레임과 마지막 프레임image_url 와 end_image_url, 그리고 프롬프트전환, 공개 연출, 정해진 이미지로 끝나야 하는 샷
참조 이미지image_urls로 여러 이미지와 프롬프트샷 전반에 걸쳐 캐릭터, 제품, 장소의 일관성 유지
영상 투 영상원본 클립과 프롬프트이미 가진 영상을 새 스타일로 바꾸거나 다시 작업하기

모든 모델이 모든 모드를 지원하지는 않습니다. 아래의 지원 표는 주요 모델을 다루며, 모델 페이지의 각 모델 페이지에 해당 모델의 작업이 나열되어 있습니다.

텍스트 투 비디오

텍스트 투 비디오는 가장 단순한 모드입니다. 샷을 설명하면 얼굴과 세트부터 색상과 프레이밍까지 나머지는 모델이 모두 결정합니다. 이런 자유는 아이디어를 탐색하거나 B-롤, 설정 샷, 추상적인 배경 같은 일반적인 영상이 필요할 때 유용합니다.

영상이 특정한 무언가를 보여 주어야 할 때는 맞지 않는 모드입니다. 제품, 로고, 특정 인물, 브랜드 가이드와 일치해야 하는 레이아웃 같은 것들입니다. 생성할 때마다 그런 세부 사항을 새로 만들어 내므로, 같은 프롬프트의 두 클립이 서로 일치하지 않습니다.

좋은 텍스트 프롬프트는 피사체, 동작, 배경, 카메라, 조명, 그리고 모델이 생성하는 경우 소리를 다룹니다. Seedance 2.0 가이드에 더 많은 프롬프트 팁이 있습니다.

이미지 투 비디오

이미지 투 비디오에서는 이미지가 첫 프레임이 됩니다. 제품, 얼굴, 구도, 색상 등 그 안의 모든 것이 시작 시점에 고정되고, 프롬프트는 그다음에 일어나는 일만 설명하면 됩니다. 제품 사진, 일러스트, 키 아트를 움직이게 할 때, 그리고 룩이 정확해야 하는 모든 샷에 쓰는 모드입니다.

일반적인 워크플로는 Nano Banana Pro나 GPT Image 2 같은 이미지 모델로 먼저 정지 이미지를 만들어 완성도를 맞춘 다음 움직이게 하는 것입니다. 정지 이미지는 영상보다 반복해서 다듬기에 더 저렴하고 빠릅니다.

다음은 Seedance 2.0의 이미지 투 비디오 요청입니다. 소리가 있는 5초 720p 클립이며 $0.75입니다. adaptive 화면 비율은 프레임을 이미지의 모양에 맞춥니다.

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": "seedance-2.0",
    "input": {
      "prompt": "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
      "image_url": "https://example.com/coffee.jpg",
      "resolution": "720p",
      "duration": 5,
      "aspect_ratio": "adaptive",
      "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": "seedance-2.0",
    "input": {
        "prompt": "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
        "image_url": "https://example.com/coffee.jpg",
        "resolution": "720p",
        "duration": 5,
        "aspect_ratio": "adaptive",
        "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: "seedance-2.0",
    input: {
      prompt: "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
      image_url: "https://example.com/coffee.jpg",
      resolution: "720p",
      duration: 5,
      aspect_ratio: "adaptive",
      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);

이미지가 아니라 움직임을 설명하세요. 모델은 이미 이미지를 볼 수 있습니다. "나무 테이블 위의 흰 커피잔"을 다시 쓰는 것보다 "김이 피어오르고 컵이 들어 올려진다"가 더 잘 작동합니다.

첫 프레임과 마지막 프레임

end_image_url를 추가하면 모델이 선택한 두 이미지 사이의 움직임을 생성합니다. 끝이 고정되므로 장면 간 전환, 비포 앤 애프터 샷, 제품 공개 연출, 다음 클립으로 깔끔하게 컷되어야 하는 클립에 적합합니다. 루프를 만들려면 양쪽 끝에 같은 이미지를 써 보세요.

두 프레임은 하나의 샷의 있을 법한 양 끝이어야 합니다. 같은 장면, 프레이밍, 조명이어야 합니다. 너무 다르면 모델이 몇 초 안에 큰 변화를 만들어 내야 해서 결과를 예측하기 어려워집니다. 소리 없는 5초 1080p Kling 3.0 클립은 $0.60입니다.

요청 본문
{
  "model": "kling-3.0",
  "input": {
    "prompt": "Time-lapse: the empty plot fills with a small wooden cabin as the camera holds still, clouds racing overhead",
    "image_url": "https://example.com/plot-empty.jpg",
    "end_image_url": "https://example.com/plot-cabin.jpg",
    "resolution": "1080p",
    "duration": 5,
    "audio": false
  },
  "max_cost_usd": 1
}

Seedance 2.5, Seedance 2.0, Seedance 2.0 Mini, Veo 3.1, Veo 3.1 Fast, Veo 3.1 Lite, Kling 3.0, Kling 3.0 Omni, Wan 3.0, Grok Imagine Video 1.5가 카탈로그에서 첫·마지막 프레임을 지원합니다. Hailuo 2.3은 시작 프레임은 받지만 마지막 프레임은 받지 않습니다.

참조 이미지

참조 이미지는 프레임이 아닙니다. 모델은 이를 통해 인물, 제품, 장소가 어떻게 생겼는지 학습한 다음, 프롬프트가 설명하는 새로운 샷에 넣습니다. 그래서 참조는 일관성을 위한 모드입니다. 열 개의 샷에 걸쳐 같은 캐릭터를, 또는 다른 배경에서 같은 제품을 보여 줄 수 있습니다.

이미지를 image_urls로 보내고, 프롬프트에서 각 이미지를 위치로 가리키세요. 예: "첫 번째 이미지의 여성이 두 번째 이미지의 가방을 들고 있다". 한도는 모델에 따라 다릅니다. Seedance 2.5는 최대 30장, Wan 3.0은 최대 10장, Seedance 2.0은 최대 9장, Seedance 2.0 Mini는 최대 9장, Veo 3.1 Fast는 최대 3장, Veo 3.1 Lite는 최대 3장입니다. Seedance 모델에서는 한 요청에서 프레임과 참조 중 하나만 보내세요.

소리가 있는 8초 720p Veo 3.1 Fast 요청은 $0.80입니다.

요청 본문
{
  "model": "veo-3.1-fast",
  "input": {
    "prompt": "The man from the first image walks into the bakery from the second image, picks up a loaf and smiles at the camera. Bell over the door, quiet chatter.",
    "image_urls": [
      "https://example.com/man.jpg",
      "https://example.com/bakery.jpg"
    ],
    "resolution": "720p",
    "duration": 8,
    "aspect_ratio": "16:9",
    "audio": true
  },
  "max_cost_usd": 1.5
}

영상 투 영상

영상 투 영상은 이미 가진 클립에서 시작합니다. 원본이 움직임과 타이밍을 이끌고, 프롬프트는 새 스타일, 새 배경, 다른 세부 사항처럼 바뀌어야 할 것을 설명합니다. 실제 촬영 영상의 스타일을 바꾸거나, 이전 생성물을 다시 작업하거나, 연기는 유지한 채 룩만 바꾸는 데 적합합니다.

이 가이드의 모델 중 Seedance 2.5, Kling 3.0 Omni, Wan 3.0이 영상 투 영상을 지원하며, Kling 3.0 Motion Control도 원본 영상에서 작업합니다. 원본 클립의 입력은 모델마다 다르므로 개발하기 전에 모델 페이지를 확인하세요.

영상 입력이 있는 작업은 일부 모델에서 가격이 다릅니다. Seedance 2.5에서는 청구되는 초가 출력에 입력 클립을 더한 값이며 더 낮은 영상 입력 포함 요율이 적용됩니다. 10초 원본으로 만든 10초 720p 클립은 $3.00이고, 프롬프트로 만든 같은 클립은 $2.50입니다. Kling 3.0 Omni는 영상 입력이 있는 작업에 자체 요율을 표시하며, 720p 초당 $0.13입니다.

어떤 모델이 어떤 모드를 지원하나요

2026년 10월 Revana 카탈로그 기준:

모델별 지원하는 생성 모드
모델텍스트이미지첫·마지막참조영상
Seedance 2.5yesyesyesyesyes
Seedance 2.0yesyesyesyesno
Seedance 2.0 Miniyesyesyesyesno
Veo 3.1yesyesyesnono
Veo 3.1 Fastyesyesyesyesno
Veo 3.1 Liteyesyesyesyesno
Kling 3.0yesyesyesnono
Kling 3.0 Omniyesyesyesyesyes
Wan 3.0yesyesyesyesyes
Hailuo 2.3yesyesnonono
Grok Imagine Video 1.5yesyesyesyesno

모드에 따라 가격이 달라지나요?

대부분 그렇지 않습니다. 영상 모델은 출력 초, 해상도, 일부 모델에서는 소리에 따라 청구됩니다. 5초 720p Seedance 2.0 클립은 프롬프트에서 시작하든 이미지에서 시작하든 $0.75이며, 마지막 프레임이나 참조 이미지를 추가해도 카탈로그 가격은 바뀌지 않습니다. 예외는 위에서 다룬 영상 입력입니다.

각 작업의 금액은 제출할 때 선불 잔액에서 보류되고, 작업이 성공한 경우에만 청구됩니다. 모든 요율은 요금 페이지에 있습니다.

모드 선택 방법

  • 아직 자산이 없다면: 텍스트 투 비디오로 시작하거나, 이미지 모델로 정지 이미지를 만들어 움직이게 하세요.
  • 룩이 정확해야 한다면: 승인한 프레임에서 시작하는 이미지 투 비디오.
  • 결말이 중요하다면: 첫 프레임과 마지막 프레임.
  • 여러 샷에서 같은 캐릭터나 제품이 필요하다면: 참조 이미지.
  • 이미 영상이 있다면: 영상 투 영상.

모델이 지원하지 않는 필드나 값은 요금이 청구되기 전에 422 오류로 거부되므로, 잘못된 모드를 써도 비용이 들지 않습니다. 전체 필드 레퍼런스는 문서에 있습니다.

써 볼 준비가 되셨나요? API 키를 받고 첫 요청을 보내 보세요.

자주 묻는 질문

텍스트 투 비디오와 이미지 투 비디오는 무엇이 다른가요?

텍스트 투 비디오는 프롬프트만으로 작업하므로 모델이 샷의 모든 것을 만들어 냅니다. 이미지 투 비디오는 이미지를 첫 프레임으로 사용하므로 룩이 고정되고, 프롬프트는 움직임만 설명합니다.

이미지 투 비디오가 텍스트 투 비디오보다 비용이 더 드나요?

카탈로그 가격으로는 그렇지 않습니다. 영상 모델은 출력 초, 해상도, 일부 모델에서는 소리에 따라 청구됩니다. 2026년 10월 기준 5초 720p Seedance 2.0 클립은 어느 쪽이든 $0.75입니다.

첫 프레임과 마지막 프레임이란 무엇인가요?

시작 이미지를 image_url로, 마지막 이미지를 end_image_url로 보내면 모델이 그 사이의 움직임을 생성합니다. 전환, 공개 연출, 루프에 유용합니다.

참조 이미지를 몇 장 보낼 수 있나요?

모델에 따라 다릅니다. Seedance 2.5는 최대 30장, Wan 3.0은 최대 10장, Seedance 2.0은 최대 9장, Seedance 2.0 Mini는 최대 9장, Veo 3.1 Fast는 최대 3장, Veo 3.1 Lite는 최대 3장입니다.

시작 프레임과 참조 이미지를 함께 사용할 수 있나요?

Seedance 모델에서는 안 됩니다. 한 요청에서 프레임과 참조 중 하나만 보내세요.

어떤 모델이 영상 투 영상을 지원하나요?

주요 모델 중에서는 Seedance 2.5, Kling 3.0 Omni, Wan 3.0이 영상 투 영상을 지원하며, Kling 3.0 Motion Control도 마찬가지입니다. 모델 페이지에서 모든 모델의 작업 목록을 볼 수 있습니다.

하나의 키로 모든 모드 사용해 보기

텍스트, 이미지, 프레임, 참조 작업은 Revana에서 모두 같은 요청을 사용합니다. $10부터 시작하는 선불 크레딧.