tutorial9 분 읽기

Seedance 2.0 Video API 빠른 시작: Python 및 Node.js 개발자 가이드

바이트댄스(ByteDance)의 Seedance 2.0 비디오 생성 API를 프로덕션 환경에 통합하는 개발자 완벽 가이드. Python 및 Node.js 기반 비동기 폴링, 웹훅(Webhook), 해상도 최적화, 429 지수 백오프, 비용 절감 ROI를 다룹니다.

ToAPIs 개발 평가팀
TL;DR - 핵심 요약
  • Seedance 2.0 Video API는 텍스트 프롬프트와 첫 프레임 참조 이미지(R2V/I2V)를 기반으로 720p 및 1080p 시네마틱 비디오 클립을 네이티브 렌더링합니다.
  • 작업 실행은 비동기 큐 분산 모델을 엄격히 적용합니다: 작업을 제출해 task_id를 획득한 후 3초 간격 폴링 또는 웹훅(Webhook) 콜백을 수신합니다.
  • ToAPIs 통합 게이트웨이를 사용하면 복잡한 현지 법인 심사 및 고액의 연간 약정을 완전히 건너뛰고, 공식가 대비 37% 저렴한 초당 종량제를 이용할 수 있습니다.
  • 프로덕션 파이프라인은 429 요청 제한을 방지하는 지터(Jitter) 포함 지수 백오프와 클러스터 지연 시 Kling 3.0 및 MiniMax H3로의 무중단 페일오버를 구현해야 합니다.

Seedance 2.0 Video API 빠른 시작: Python 및 Node.js 개발자 가이드

대상 엔드포인트 (Target Endpoint): https://api.toapis.com/v1/videos/generations
작업 확인 엔드포인트 (Task Query): https://api.toapis.com/v1/tasks/video-status?task_id={task_id}
모델 식별자 (Model Identifier): doubao-seedance-2-0 / seedance-2.0
인증 헤더 (Auth Header): Authorization: Bearer $TOAPIS_API_KEY
지원 프로토콜: REST, Server-Sent Events (SSE), Webhook 비동기 알림


⚡ TL;DR: 엔지니어링 핵심 요약

  • 지원 모달리티: 텍스트-투-비디오(Text-to-Video, T2V) 및 이미지-투-비디오(Image-to-Video / Reference-to-Video R2V) 지원, 24fps / 30fps 고화질 비디오 출력.
  • 해상도 옵션: 720p 와이드(1280x720), 720p 세로형(720x1280, 숏폼 및 릴스용), 1080p 풀HD(1920x1080), 1:1 정사각 지원.
  • 비동기 작업 아키텍처: POST /v1/videos/generations 호출 후 반환된 task_id를 기반으로 3초 간격 폴링 또는 웹훅(Webhook) 수신.
  • 초당 과금 비용 혜택: 초당 순수 생성 시간 기준 과금(720p 기준 $0.028/초, 1080p 기준 $0.048/초). 공식 엔터프라이즈 요율 대비 37% 비용 절감 및 최소 월 약정액 없음.
  • 견고한 장애 복구: 429 요청 제한을 방지하는 지수 백오프 알고리즘과 상위 클러스터 지연 시 Kling 3.0 Omni 또는 MiniMax H3로 무중단 자동 전환.

1. 문제 분석: 공식 엔터프라이즈 연동의 높은 진입 장벽

바이트댄스(ByteDance)의 Seedance 2.0 Video API는 2026년 생성형 비디오 시장에서 새로운 표준을 정립했습니다. 혁신적인 DiT(Diffusion-Transformer) 아키텍처와 대용량 시공간 토크나이저를 결합하여 물리적 시공간 일관성, 다중 캐릭터 모션, 유체 및 광원 시뮬레이션에서 기존 모델들을 크게 앞서고 있습니다.

그러나 개발팀이 공식 기업 창구를 통해 Seedance 2.0 Video API를 직접 연동하려면 다음과 같은 심각한 운영 장벽에 직면하게 됩니다:

  1. 엄격한 현지 법인 인증 및 높은 선결제 요구: 중국 본토 법인 사업자 등록, 오프라인 계약 체결, 그리고 연간 $5,000 이상의 높은 선불 최소 약정이 요구됩니다.
  2. 독자적인 서명 프로토콜 및 SDK 파편화: 공식 API는 독자적인 HMAC-SHA256 서명 메커니즘을 사용하므로 표준 OpenAI SDK나 범용 HTTP 클라이언트에 쉽게 결합하기 어렵습니다.
  3. HTTP 504 게이트웨이 타임아웃: 비디오 생성은 20~50초의 집중적인 GPU 연산이 필요합니다. 연결을 유지하는 단순 동기식 HTTP 요청은 프록시나 로드 밸런서에서 타임아웃 오류를 일으킵니다.
  4. 동시성 제한 및 불투명한 429 오류: 초급 계정의 동시 요청 한도가 극히 낮아 트래픽 급증 시 처리되지 않은 429 Too Many Requests 에러가 발생합니다.

ToAPIs 통합 비디오 API 게이트웨이를 활용하면 표준 Bearer Token 하나로 Seedance 2.0을 제어하고 자동화된 비동기 상태 관리와 초당 종량제 혜택을 누릴 수 있습니다.


2. 시스템 아키텍처: 비동기 작업 라이프사이클

비디오 합성은 대규모 GPU 클러스터에서 수십억 개의 텐서 연산을 수반하므로 Seedance 2.0 Video API는 비동기 분산 큐 방식을 따릅니다:

text
┌─────────────────┐             ┌─────────────────────┐             ┌─────────────────────────┐
│ 클라이언트 앱   │             │ ToAPIs 통합 게이트웨이 │             │ ByteDance GPU 클러스터  │
│ (백엔드 서비스) │             │ (api.toapis.com)    │             │ (Seedance 2.0 엔진)     │
└────────┬────────┘             └──────────┬──────────┘             └────────────┬────────────┘
         │                                 │                                     │
         │ 1. POST /v1/videos/generations  │                                     │
         │────────────────────────────────>│ 2. 토큰 검증 & 작업 큐 등록         │
         │                                 │────────────────────────────────────>│
         │ 3. HTTP 202: task_id 반환       │                                     │
         │<────────────────────────────────│                                     │
         │                                 │                                     │
         │ 4. GET /v1/tasks/video-status   │                                     │
         │    (3초 대기 후 폴링)           │                                     │
         │────────────────────────────────>│ 5. 대기열 상태 및 진행률 확인       │
         │                                 │────────────────────────────────────>│
         │ 6. 진행 상태: "PROCESSING" (35%)│<────────────────────────────────────│
         │<────────────────────────────────│                                     │
         │                                 │                                     │
         │ 7. GET /v1/tasks/video-status   │                                     │
         │    (3초 대기 후 폴링)           │                                     │
         │────────────────────────────────>│ 8. 렌더링 완료, CDN 배치 완료       │
         │                                 │────────────────────────────────────>│
         │ 9. 완료 응답: "SUCCESS" + MP4 URL│<───────────────────────────────────│
         │<────────────────────────────────│                                     │
         │                                 │                                     │
         │ 10. 자체 S3 / 스토리지로 저장   │                                     │
         │─────────────────────────────────┴─────────────────────────────────────┘

라이프사이클은 3단계로 구성됩니다:

  • 단계 A (작업 접수 Dispatch): 프롬프트, 화면비, 길이, 참조 이미지를 제출하면 게이트웨이가 즉시 HTTP 202 Accepted와 고유한 task_id를 반환합니다.
  • 단계 B (큐 대기 및 렌더링 Synthesize): 워커 노드가 시공간 잠재 확산 연산을 수행하며, 폴링 시 QUEUED 또는 PROCESSING 상태와 진행률이 반환됩니다.
  • 단계 C (CDN 배포 Delivery): 합성이 완료되면 H.264/MP4로 인코딩되어 글로벌 CDN에 배치되며 24시간 동안 유효한 안전한 다운로드 URL이 반환됩니다.

3. 코드 실전: 프로덕션 연동 가이드

3.1 60초 빠른 시작: cURL 작업 제출 및 상태 확인

터미널에서 API 키를 환경변수로 지정한 후 다음 명령어를 실행합니다:

bash
export TOAPIS_API_KEY="sk-toapis-your-active-api-key"

# 1단계: 비디오 생성 작업 제출
curl -X POST "https://api.toapis.com/v1/videos/generations" \
  -H "Authorization: Bearer $TOAPIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-0",
    "prompt": "영화 같은 항공 촬영 샷, 아침 안개에 싸인 스코틀랜드 고성, 엷은 안개를 가르는 황금빛 틴들 광선, 8k 해상도 24fps",
    "aspect_ratio": "16:9",
    "duration": 5,
    "quality": "standard"
  }'

게이트웨이 응답 예시 (HTTP 202 Accepted):

json
{
  "code": 0,
  "message": "Task submitted successfully",
  "data": {
    "task_id": "task_seedance_9f81a7b03c4e4d8a",
    "status": "QUEUED",
    "created_at": 1761037200,
    "model": "doubao-seedance-2-0",
    "estimated_seconds": 32
  }
}
bash
# 2단계: 반환된 task_id로 생성 상태 확인
curl -X GET "https://api.toapis.com/v1/tasks/video-status?task_id=task_seedance_9f81a7b03c4e4d8a" \
  -H "Authorization: Bearer $TOAPIS_API_KEY"

3.2 프로덕션용 Python 비동기 폴링 클라이언트

프로덕션 환경에서는 폴링 루프에 타임아웃 제어와 429 지수 백오프를 필수로 적용해야 합니다:

python
"""
ToAPIs 게이트웨이를 통한 Seedance 2.0 Video API 프로덕션 클라이언트
핵심 기능:
- 타입 안전한 요청 페이로드 구성
- 타임아웃 안전장치를 갖춘 지능형 상태 폴링
- HTTP 429 동시성 제한 방지를 위한 지터 포함 지수 백오프
- 렌더링된 MP4 비디오 스트림 로컬 디스크 다운로드
"""

import os
import time
import random
import logging
from typing import Optional, Dict, Any
import requests

logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger("Seedance2Client")

class SeedanceAPIError(Exception):
    """Seedance API 예외 클래스"""
    pass

class SeedanceClient:
    def __init__(self, api_key: Optional[str] = None, base_url: str = "https://api.toapis.com/v1"):
        self.api_key = api_key or os.getenv("TOAPIS_API_KEY")
        if not self.api_key:
            raise ValueError("API 키가 없습니다. TOAPIS_API_KEY를 설정해주세요.")
        self.base_url = base_url.rstrip("/")
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json",
            "User-Agent": "ToAPIs-Seedance-SDK/2.0"
        }

    def submit_video_task(
        self,
        prompt: str,
        aspect_ratio: str = "16:9",
        duration: int = 5,
        quality: str = "standard",
        seed: Optional[int] = None,
        image_url: Optional[str] = None
    ) -> str:
        """비디오 생성 작업을 제출하고 task_id를 반환합니다"""
        url = f"{self.base_url}/videos/generations"
        payload: Dict[str, Any] = {
            "model": "doubao-seedance-2-0",
            "prompt": prompt,
            "aspect_ratio": aspect_ratio,
            "duration": duration,
            "quality": quality
        }
        if seed is not None:
            payload["seed"] = seed
        if image_url:
            payload["image_url"] = image_url

        logger.info(f"Seedance 2.0 작업 제출 중: 비율={aspect_ratio}, 길이={duration}s...")
        response = requests.post(url, json=payload, headers=self.headers, timeout=30)
        
        if response.status_code == 429:
            raise SeedanceAPIError("요청 한도(429)에 도달했습니다. 재시도 로직이 필요합니다.")
        response.raise_for_status()
        
        data = response.json()
        task_id = data.get("data", {}).get("task_id")
        if not task_id:
            raise SeedanceAPIError(f"예상치 못한 응답 스키마: {data}")
            
        logger.info(f"작업 대기열 접수 완료. Task ID: {task_id}")
        return task_id

    def poll_until_complete(
        self,
        task_id: str,
        initial_interval: float = 3.0,
        max_timeout: float = 180.0
    ) -> str:
        """SUCCESS 또는 FAILED 상태가 될 때까지 폴링하여 CDN 비디오 URL을 반환합니다"""
        url = f"{self.base_url}/tasks/video-status"
        params = {"task_id": task_id}
        start_time = time.time()
        current_interval = initial_interval

        while time.time() - start_time < max_timeout:
            time.sleep(current_interval)
            elapsed = int(time.time() - start_time)

            try:
                res = requests.get(url, params=params, headers=self.headers, timeout=15)
            except requests.RequestException as req_err:
                logger.warning(f"네트워크 오류 (작업 {task_id}): {req_err}. 재시도 중...")
                continue

            if res.status_code == 429:
                backoff = current_interval * 1.5 + random.uniform(0.5, 1.5)
                logger.warning(f"HTTP 429 수신. {backoff:.1f}초 대기 중...")
                time.sleep(backoff)
                continue

            if res.status_code != 200:
                logger.warning(f"상태 확인 오류 (HTTP {res.status_code}): {res.text}")
                continue

            body = res.json().get("data", {})
            status = body.get("status")
            progress = body.get("progress", 0)
            logger.info(f"[{elapsed}초 경과] 상태: {status} ({progress}%)")

            if status == "SUCCESS":
                video_url = body.get("video_url")
                if not video_url:
                    raise SeedanceAPIError("작업이 SUCCESS이나 video_url이 없습니다.")
                logger.info(f"비디오 생성 완료! 소요시간: {elapsed}초, URL: {video_url}")
                return video_url
            elif status in ("FAILED", "CANCELED"):
                error_msg = body.get("error_message", "알 수 없는 렌더링 오류")
                raise SeedanceAPIError(f"작업 {task_id} 실패: {error_msg}")

        raise TimeoutError(f"작업 {task_id}이 최대 타임아웃({max_timeout}초)을 초과했습니다.")

    def download_video(self, video_url: str, output_path: str) -> None:
        """비디오 스트림을 다운로드하여 로컬 파일로 저장합니다"""
        logger.info(f"CDN에서 비디오를 다운로드하여 {output_path}에 저장합니다...")
        with requests.get(video_url, stream=True, timeout=60) as r:
            r.raise_for_status()
            with open(output_path, "wb") as f:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
        logger.info(f"파일 저장 완료: {output_path} ({os.path.getsize(output_path)} 바이트)")

if __name__ == "__main__":
    client = SeedanceClient()
    test_prompt = "클로즈업 매크로 촬영: 정밀한 스틸 기어 금형에 부어지는 녹은 구리 액체, 튀는 불꽃, 어두운 기계 공방 분위기, 레이트레이싱 반사광, 1080p 30fps"
    
    try:
        t_id = client.submit_video_task(prompt=test_prompt, aspect_ratio="16:9", duration=5)
        v_url = client.poll_until_complete(t_id)
        client.download_video(v_url, "seedance_gear_korea.mp4")
    except Exception as exc:
        logger.error(f"실행 오류: {exc}")

3.3 Node.js / TypeScript 프로덕션 클라이언트 (Webhook 지원)

Next.js나 NestJS 등 웹 서비스를 운영하는 엔지니어를 위한 TypeScript 구현체입니다:

typescript
import axios, { AxiosInstance } from 'axios';

export interface SeedanceGenerateOptions {
  prompt: string;
  aspectRatio?: '16:9' | '9:16' | '1:1' | '4:3' | '21:9';
  duration?: 5 | 10;
  quality?: 'standard' | 'high';
  seed?: number;
  imageUrl?: string;
  webhookUrl?: string;
}

export interface TaskStatusResponse {
  taskId: string;
  status: 'QUEUED' | 'PROCESSING' | 'SUCCESS' | 'FAILED';
  progress?: number;
  videoUrl?: string;
  errorMessage?: string;
}

export class SeedanceVideoService {
  private client: AxiosInstance;

  constructor(apiKey?: string, baseURL = 'https://api.toapis.com/v1') {
    const token = apiKey || process.env.TOAPIS_API_KEY;
    if (!token) {
      throw new Error('환경변수 TOAPIS_API_KEY가 설정되지 않았습니다.');
    }

    this.client = axios.create({
      baseURL,
      headers: {
        Authorization: `Bearer ${token}`,
        'Content-Type': 'application/json',
      },
      timeout: 20000,
    });
  }

  /**
   * Seedance 2.0 비디오 생성 작업 제출
   */
  async submitTask(options: SeedanceGenerateOptions): Promise<string> {
    const payload = {
      model: 'doubao-seedance-2-0',
      prompt: options.prompt,
      aspect_ratio: options.aspectRatio || '16:9',
      duration: options.duration || 5,
      quality: options.quality || 'standard',
      seed: options.seed,
      image_url: options.imageUrl,
      webhook_url: options.webhookUrl,
    };

    const res = await this.client.post('/videos/generations', payload);
    const taskId = res.data?.data?.task_id;
    if (!taskId) {
      throw new Error('응답에 task_id가 포함되어 있지 않습니다.');
    }
    return taskId;
  }

  /**
   * 완료될 때까지 상태 폴링
   */
  async waitForCompletion(
    taskId: string,
    intervalMs = 3000,
    maxWaitMs = 180000
  ): Promise<string> {
    const startTime = Date.now();

    while (Date.now() - startTime < maxWaitMs) {
      await new Promise((resolve) => setTimeout(resolve, intervalMs));

      const res = await this.client.get('/tasks/video-status', {
        params: { task_id: taskId },
      });

      const data = res.data?.data;
      const status = data?.status;

      if (status === 'SUCCESS') {
        return data.video_url;
      }
      if (status === 'FAILED') {
        throw new Error(`Seedance 작업 실패: ${data.error_message || '알 수 없는 오류'}`);
      }
    }

    throw new Error(`작업 ${taskId}이 대기 시간(${maxWaitMs / 1000}초)을 초과했습니다.`);
  }
}

4. 아키텍처 심화: 고가용성 및 장애 복구 전략

대규모 서비스에서 비디오 API를 운영할 때는 다음의 핵심 아키텍처 규칙을 준수해야 합니다:

4.1 폴링 vs Webhook 아키텍처 결정 테이블

일일 생성량이 500건 미만인 초기 단계에는 3초 간격 폴링이 적합하지만, 대규모 서비스에서는 Webhook 푸시가 필수적입니다:

text
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 폴링 vs Webhook 아키텍처 비교표                                                 │
├──────────────────┬─────────────────────────────┬────────────────────────────────┤
│ 평가 항목        │ 클라이언트 폴링 (/status)   │ Webhook 콜백 (POST /hook)      │
├──────────────────┼─────────────────────────────┼────────────────────────────────┤
│ 최적 처리 규모   │ 일 500건 미만               │ 일 500건 이상                  │
│ 서버 오버헤드    │ 높음 (작업당 10~20회 왕복)  │ 최소화 (단일 이벤트 푸시)      │
│ 게이트웨이 부하  │ 피크 시 QPS 급증            │ 폴링 요청 부하 없음            │
│ 방화벽 요구사항  │ NAT / Localhost 환경 지원   │ 공인 HTTPS 엔드포인트 필수     │
│ 장애 복구 용이성 │ 루프 내 재시도 내장         │ 데드레터 큐 및 멱등성 설계 요함│
└──────────────────┴─────────────────────────────┴────────────────────────────────┘

webhook_url을 지정하면 렌더링 완료 시 X-ToAPIs-Signature 헤더와 함께 결과가 즉시 전송됩니다.

4.2 429 방지: 지터 포함 지수 백오프 공식

동시에 다수의 영상 생성을 요청할 경우 아래의 공식을 적용해 재시도 간격을 분산합니다:

WaitTime=min⁡(MaxWait,BaseInterval×2attempt)+Uniform(0,1)\text{WaitTime} = \min(\text{MaxWait}, \text{BaseInterval} \times 2^{\text{attempt}}) + \text{Uniform}(0, 1)

이 방식은 수많은 스레드가 동시에 깨어나는 "Thundering Herd" 현상을 방지합니다.

4.3 자동 페일오버 (Disaster Recovery Matrix)

상위 Seedance 클러스터의 점검이나 지연(P95 > 90초) 발생 시 타사 모델로 자동 전환하도록 설계합니다:

python
FALLBACK_CASCADE = [
    {"model": "doubao-seedance-2-0", "timeout_sec": 45},
    {"model": "kling-3-omni", "timeout_sec": 60},
    {"model": "minimax-h3", "timeout_sec": 45}
]

ToAPIs는 모든 비디오 모델에 동일한 /v1/videos/generations 인터페이스를 제공하므로 "model" 파라미터만 변경하면 즉시 대체됩니다.

4.4 주요 파라미터 사양

파라미터타입필수기본값허용 값 및 설명
promptString필수-1~1,000자. 영어 및 한국어 지원 (영어가 표현력 최상).
aspect_ratioString선택"16:9""16:9", "9:16", "1:1", "4:3", "21:9".
durationInteger선택55초 또는 10초.
qualityString선택"standard""standard" (720p) 또는 "high" (1080p).
seedInteger선택무작위1~2147483647. 결정론적 결과 재현용.
image_urlString선택nullI2V/R2V용 공인 HTTPS 이미지 링크.
camera_motionString선택null"pan_left", "pan_right", "zoom_in", "zoom_out" 등.

Seedance 2.0 비디오 생성 API - 720p 및 1080p 화질과 FPS 비교 벤치마크 (2026)

5. 비용 분석: 공식 계약 vs 통합 게이트웨이

비디오 대형 모델은 토큰이 아니라 **렌더링된 비디오 시간(초 단위)**으로 과금됩니다.

5.1 공식 요율 vs ToAPIs 도매 요율 비교

평가 항목공식 엔터프라이즈 직접 계약ToAPIs 통합 게이트웨이비용 절감 및 장점
최소 계약액 및 보증금월 $500 ~ $2,000 약정$0 (1달러부터 충전 가능)자금 묶임 리스크 100% 해소
결제 수단중국 법인 계좌 전신환 송금신용카드, Stripe, 암호화폐글로벌 결제 즉시 지원
720p 요율 (초당)$0.045 / 초$0.028 / 초37.7% 비용 절감
1080p 요율 (초당)$0.075 / 초$0.048 / 초36.0% 비용 절감
5초 비디오 1건 비용$0.225$0.140건당 $0.085 절감
10초 비디오 1건 비용$0.450$0.280건당 $0.170 절감
실패 작업 청구 여부요청 즉시 과금$0.00 (성공 작업만 과금)장애 손실 리스크 제로

5.2 월 5,000건 생성 시의 ROI 시뮬레이션 (5초 720p 영상 기준)

월 5,000건의 5초 SNS 광고 영상을 대량 생성하는 기업의 비용 모델:

월간 총 렌더링 시간=5,000 건×5 초=25,000 초\text{월간 총 렌더링 시간} = 5,000 \text{ 건} \times 5 \text{ 초} = 25,000 \text{ 초}

공식 직접 계약 비용=25,000 초×0.045 USD=1,125.00 USD / 월\text{공식 직접 계약 비용} = 25,000 \text{ 초} \times 0.045 \text{ USD} = 1,125.00 \text{ USD / 월}

ToAPIs 게이트웨이 비용=25,000 초×0.028 USD=700.00 USD / 월\text{ToAPIs 게이트웨이 비용} = 25,000 \text{ 초} \times 0.028 \text{ USD} = 700.00 \text{ USD / 월}

월간 직접 절감액=1,125.00 USD−700.00 USD=425.00 USD / 월\text{월간 직접 절감액} = 1,125.00 \text{ USD} - 700.00 \text{ USD} = 425.00 \text{ USD / 월}

연간 누적 절감액=425.00 USD×12=5,100.00 USD / 년\text{연간 누적 절감액} = 425.00 \text{ USD} \times 12 = 5,100.00 \text{ USD / 년}

1080p 풀HD 영상으로 업그레이드할 경우 연간 절감액은 $8,100.00 USD에 달해 인프라 비용 절감 근거로 매우 강력합니다.


6. 자주 묻는 질문 (FAQ) 및 다음 단계

기술 FAQ

Q1: Seedance 2.0은 자체 음향 및 오디오 생성을 지원하나요?

현재 Seedance 2.0은 비디오 렌더링에 특화되어 오디오 트랙을 생성하지 않습니다. 상용 파이프라인에서는 생성된 MP4를 Suno API 또는 ElevenLabs와 연동하여 후처리 합성합니다.

Q2: 생성된 비디오 다운로드 링크의 유효 기간은 얼마인가요?

완료 후 CDN 비디오 URL은 24시간 동안 유지됩니다. 성공 콜백 수신 즉시 자체 AWS S3, Cloudflare R2 또는 Google Cloud Storage로 이관 저장하는 것을 권장합니다.

Q3: 틱톡이나 릴스용 9:16 세로형 비디오를 만들 수 있나요?

네. "aspect_ratio"를 "9:16"으로 지정하면 왜곡이나 크롭 없이 원본 720x1280 또는 1080x1920 세로형 비디오가 네이티브 생성됩니다.

Q4: 단일 요청으로 생성 가능한 최대 길이는 얼마인가요?

단일 요청당 5초 또는 10초를 지원합니다. 더 긴 영상은 이전 클립의 마지막 프레임을 image_url로 전달하여 연속 생성하는 시퀀스 파이프라인을 구축할 수 있습니다.


Seedance 2.0 Video API 지금 시작하기

본문에서 언급된 모델 및 API

ByteDanceVIDEO

Seedance 2.0

현재 요율:Input 1,314.29 credits/1M, Output 1,314.29 credits/1M
ByteDanceVIDEO

Seedance 2.5

현재 요율:Input 2,000 credits/1M, Output 2,000 credits/1M
ToAPIsAI Model

kling-3-omni

현재 요율:실시간 요금 확인
MiniMaxVIDEO

minimax-h3

현재 요율:20.8 credits /second

관련 기술 블로그

tutorial10분 읽기

신용카드 없이 Seedance 2.0 무료 API 키 발급 및 비디오 생성 테스트 가이드

해외 신용카드 등록이나 기업 사업자 인증 없이 바이트댄스 Seedance 2.0 비디오 생성 API 무료 테스트 크레딧을 발급받는 실전 개발자 가이드. cURL 및 Python 비동기 폴링 완전 코드, 잔액 조회 API, 해상도별 비용 최적화 계산식 포함.

TO
ToAPIs 연구 및 엔지니어링 팀
#Seedance 2.0