Reference-to-Video API
reference-to-video는 Seedance 2.0의 가장 강력한 모드입니다. 단일 요청에 참조 이미지 최대 9개 + 참조 비디오 3개 + 참조 오디오 클립 3개를 포함할 수 있으며, 모델은 이 모든 자료에서 신호를 받아 새로운 영상을 합성합니다.
대표적인 활용 사례:
- 스타일 참조 — 특정 아트 스타일을 정의하는 이미지 몇 장; 새 영상이 그 스타일을 그대로 반영
- 캐릭터 / 제품 참조 — 동일한 가상 캐릭터나 제품이 새로운 장면과 동작에서 일관되게 등장하도록 유지
- 카메라 워크 참조 — 원하는 카메라 페이싱과 움직임을 보여주는 데모 영상
- 음악 기반 페이싱 — 시각적 리듬과 분위기를 이끄는 참조 오디오 클립
- 영상 편집 / 확장 — 기존 푸티지를 이어 붙이거나 확장 또는 리라이트
엔드포인트
POST https://api.evolink.ai/v1/videos/generations
모델 ID: seedance-2.0-reference-to-video
Fast 변형은
seedance-2.0-fast-reference-to-video이며 매개변수 구조는 동일합니다.
요청 매개변수
| 매개변수 | 유형 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
model | string | 예 | — | seedance-2.0-reference-to-video로 지정해야 합니다 |
prompt | string | 예 | — | 영상 설명. 각 참조 자료의 역할을 자연어로 명시합니다(예: "video 1의 1인칭 시점을 사용하고, audio 1을 전체 배경 음악으로 사용"). 한국어/중국어 500자 이하 또는 영어 1000단어 이하 |
image_urls | array<string> | 아니요 | — | 참조 이미지 URL 0~9개 |
video_urls | array<string> | 아니요 | — | 참조 비디오 URL 0~3개 |
audio_urls | array<string> | 아니요 | — | 참조 오디오 URL 0~3개 |
duration | integer | 아니요 | 5 | 영상 길이(초). 4~15 |
quality | string | 아니요 | 720p | 480p 또는 720p |
aspect_ratio | string | 아니요 | 16:9 | 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive |
generate_audio | boolean | 아니요 | true | 동기화된 오디오 생성 여부 |
callback_url | string | 아니요 | — | 작업 완료 콜백을 받을 HTTPS URL |
중요한 제약:
image_urls,video_urls,audio_urls는 모두 비울 수 있습니다(이 경우 순수 text-to-video와 동일). 그러나audio_urls만 단독으로 제공하는 것은 허용되지 않습니다. 오디오를 제공할 때는 시각적 앵커로서 이미지 또는 비디오 중 적어도 하나를 함께 제공해야 합니다.
프롬프트로 역할 할당하기
이 모델에는 태그 문법이 없습니다 (@Image1, @Video1 같은 태그는 존재하지 않습니다). 각 자료의 역할은 자연어로 지정하며, 모델은 배열 순서에 따라 "image 1 / video 1 / audio 1" 같은 표현을 인식합니다.
자주 쓰이는 패턴:
| 의도 | 권장 프롬프트 표현 |
|---|---|
| image 1을 첫 프레임으로 사용 | "Use image 1 as the first frame of the video" |
| video 1로 카메라 워크 결정 | "Replicate video 1's camera movement and pacing" |
| audio 1을 BGM으로 사용 | "Use audio 1 as background music throughout the entire video" |
| image 1의 캐릭터 유지 | "The character's appearance stays consistent with image 1" |
| image 2의 스타일 전이 | "The overall art style references image 2's color palette and texture" |
이 패턴들은 한 프롬프트 안에서 자유롭게 조합할 수 있습니다. 자료의 순서가 유효성에 영향을 주지는 않지만, 모델이 "image 1 / image 2"를 어떻게 해석하는지에는 영향을 주므로 재현성을 위해 순서를 안정적으로 유지하세요.
입력 자료 한도
이미지
| 제약 | 한도 |
|---|---|
| 개수 | 0~9 |
| 형식 | .jpeg, .png, .webp |
| 크기 | 한 변당 300~6000 px |
| 종횡비 | 0.4 ~ 2.5 |
| 이미지당 최대 용량 | 30 MB 이하 |
비디오
| 제약 | 한도 |
|---|---|
| 개수 | 0~3 |
| 형식 | .mp4, .mov |
| 클립당 길이 | 2~15초 |
| 총 길이 | 15초 이하 |
| 해상도 | 480p ~ 720p |
| 프레임 레이트 | 24 ~ 60 FPS |
| 클립당 최대 용량 | 50 MB 이하 |
오디오
| 제약 | 한도 |
|---|---|
| 개수 | 0~3 |
| 형식 | .wav, .mp3 |
| 클립당 길이 | 2~15초 |
| 총 길이 | 15초 이하 |
| 클립당 최대 용량 | 15 MB 이하 |
전체
| 제약 | 한도 |
|---|---|
| 요청 본문 전체 | 64 MB 이하 (Base64 인라인 불가) |
| 최소 콘텐츠 | 이미지 1개 또는 비디오 1개 이상 (오디오 단독 불가) |
요청 예제
cURL — 3-모달 합성 (이미지 + 비디오 + 오디오)
curl -X POST https://api.evolink.ai/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-reference-to-video",
"prompt": "Replicate video 1's first-person perspective and camera pacing. Use audio 1 as the soundtrack for the entire video. Scene: a young rider weaving through a rain-soaked city street at night, neon reflections on wet asphalt.",
"image_urls": ["https://example.com/rider-style.jpg"],
"video_urls": ["https://example.com/pov-reference.mp4"],
"audio_urls": ["https://example.com/synthwave-bgm.mp3"],
"duration": 10,
"quality": "720p",
"aspect_ratio": "16:9"
}'
Python — 이미지만 (최대 9장)
import requests
response = requests.post(
"https://api.evolink.ai/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"model": "seedance-2.0-reference-to-video",
"prompt": "The overall art style references the color palette and texture of the 3 provided images. Scene: a small-town summer market at dusk, warm tones.",
"image_urls": [
"https://example.com/style-ref-1.jpg",
"https://example.com/style-ref-2.jpg",
"https://example.com/style-ref-3.jpg"
],
"duration": 8,
"aspect_ratio": "16:9"
}
)
task = response.json()
print(f"Task ID: {task['id']}")
Node.js — 비디오 단독 참조 (카메라 복제)
const res = await fetch("https://api.evolink.ai/v1/videos/generations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "seedance-2.0-reference-to-video",
prompt: "Replicate video 1's orbital camera movement and velocity curve. Subject: a classical sculpture in a museum hall at dusk.",
video_urls: ["https://example.com/orbit-shot.mp4"],
duration: 8,
quality: "720p",
aspect_ratio: "16:9"
})
});
const task = await res.json();
console.log("Task ID:", task.id);
응답
{
"id": "task-unified-1774857405-abc123",
"object": "video.generation.task",
"created": 1774857405,
"model": "seedance-2.0-reference-to-video",
"status": "pending",
"progress": 0,
"type": "video",
"task_info": {
"can_cancel": true,
"estimated_time": 180,
"video_duration": 10
},
"usage": {
"billing_rule": "per_second",
"credits_reserved": 60,
"user_group": "default"
}
}
과금 안내
- 출력 영상의
duration을 기준으로 초 단위 과금 - 참조 비디오의 입력 길이도 과금에 포함됩니다 (10초 참조 비디오는 입력 10초로 과금)
- 오디오 생성 자체에는 추가 비용이 없습니다
FAQ
참조 자료가 출력에 그대로 등장하나요? 아니요. 모델은 이를 스타일 / 구도 / 동작 / 리듬에 대한 신호로 사용합니다. 최종 결과물은 완전히 새로 생성된 콘텐츠입니다.
참조 자료 없이 요청을 보낼 수 있나요? 가능합니다. 이 경우 순수 text-to-video처럼 동작합니다. 다만 참조 자료가 없다면 더 저렴한 text-to-video를 직접 사용하는 편이 낫습니다.
자료의 순서가 중요한가요?
네. 프롬프트에서 "video 1"이라고 하면 모델은 이를 video_urls[0]에 매핑합니다. 안정적인 순서를 유지하면 실험을 재현하기 쉽습니다.
관련 문서
- 모델 개요
- Text-to-Video API
- Image-to-Video API
- Fast 모델 —
seedance-2.0-fast-reference-to-video - Async Tasks / Webhooks