빠른 시작

약 5분 만에 처음부터 시작해 AI 영상을 생성해 봅니다.

시작 전에 반드시 알아두세요: Seedance 2.0에는 모델이 6개 있으며, 단일 모델이 아닙니다. "자동 모드 감지" 기능은 존재하지 않습니다. 입력 유형에 맞는 정확한 model 값을 직접 선택해야 합니다. 전체 매트릭스는 모델 개요를 참고하세요.

사전 준비

베이스 URL

https://api.evolink.ai

1단계: API 키 저장

export EVOLINK_API_KEY="your-api-key-here"

2단계: 올바른 모델 선택

가지고 있는 입력에 따라 모델을 고르세요.

입력 자료사용할 모델
텍스트 프롬프트만seedance-2.0-text-to-video
참조 이미지 1~2장seedance-2.0-image-to-video
이미지 + 비디오 + 오디오 (멀티모달)seedance-2.0-reference-to-video

더 빠르고 저렴한 생성을 원한다면 위 모델 이름에 fast- 접두사를 붙이세요. 예: seedance-2.0-fast-text-to-video. Fast 모델 참고.

3단계: 첫 요청 보내기

다음은 text-to-video 예제입니다.

import os
import requests

response = requests.post(
    "https://api.evolink.ai/v1/videos/generations",
    headers={
        "Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}",
        "Content-Type": "application/json"
    },
    json={
        "model": "seedance-2.0-text-to-video",
        "prompt": "A golden retriever running through a sunlit meadow, cinematic slow motion",
        "duration": 5,
        "quality": "720p",
        "aspect_ratio": "16:9"
    }
)

task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")

응답 (HTTP 200)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "pending",
    "progress": 0,
    "type": "video",
    "task_info": {
        "can_cancel": true,
        "estimated_time": 165,
        "video_duration": 5
    },
    "usage": {
        "billing_rule": "per_second",
        "credits_reserved": 50,
        "user_group": "default"
    }
}

billing_rule은 항상 per_second입니다. duration 값이 길수록 비용이 늘어납니다.

4단계: 영상 폴링하기

모든 생성 요청은 비동기입니다. 작업 ID를 사용해 결과를 폴링하세요.

import time

task_id = task["id"]

while True:
    status = requests.get(
        f"https://api.evolink.ai/v1/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}"}
    )
    result = status.json()

    if result["status"] == "completed":
        print(f"Video URL: {result['results'][0]}")
        break
    if result["status"] == "failed":
        print("Generation failed")
        break

    print(f"Progress: {result['progress']}%")
    time.sleep(5)

중요: 생성된 영상 URL은 24시간 동안 유효합니다. 즉시 자체 스토리지로 다운로드해 보관하세요.

프로덕션 환경에서는 폴링보다 웹훅(callback_url) 사용을 권장합니다.

자주 발생하는 함정

증상원인해결 방법
model에서 400 invalid_request"model": "seedance-2.0"이라고 작성함전체 모델 ID를 사용하세요. 예: seedance-2.0-text-to-video
image_urls 전달 시 오류text-to-video는 미디어 입력을 받지 않음seedance-2.0-image-to-video를 사용하세요
quality: "1080p" 거부됨1080p는 지원하지 않음480p 또는 720p를 사용하세요
30 MB 또는 6000 px를 넘는 이미지 거부됨이미지 입력 한도 초과허용 범위 내로 압축하세요 (image-to-video 참고)

다음 단계