Dreamina Seedance 2.0은 BytePlus ModelArk에서 제공되는 ByteDance의 플래그십 영상 생성 모델로, 공식 카탈로그는 고충실도 오디오-비주얼 동기화, 높은 모션 품질, 감정 표현을 갖춘 메인라인 영상 모델이자 상업 광고, 영화·TV 제작, 소셜 미디어 마케팅에 특화 최적화된 모델로 소개합니다.
- 입력
- 텍스트 이미지
- 출력
- 동영상 $7/M
가격 수준 비교
같은 종류의 모델 5개 중 가격 위치
이 막대는 Synthorai에 있는 같은 종류의 모델 가운데 이 모델의 가격이 어디쯤인지 보여 줍니다. 양쪽 끝에는 가장 싼 모델과 가장 비싼 모델의 이름이 있습니다. 기본 요율 기준이며 배치·리전·캐시 쓰기 할인은 가격 페이지에 있습니다.
사양 및 제한
동영상
| 해상도 | 480p - 4K(4K에서 10-bit) 연속 범위이며 고정된 선택지가 아닙니다. |
|---|---|
| 길이 | 4-15 s 연속 범위이며 고정된 선택지가 아닙니다. |
| 프레임 레이트 | 24 fps |
| 화면 비율 | 6종(16:9, 9:16, 1:1 포함) |
| 동영상 입력 | 텍스트 기반 영상 생성 · 첫 프레임 및 첫/마지막 프레임 이미지 기반 영상 생성 |
| 네이티브 오디오 | 지원, 사운드까지 생성 |
| 포맷 | .mp4 |
모델
| 모달리티 | 텍스트 + 이미지 → 동영상 |
|---|
- ByteDance Dreamina Seedance 2.0 시리즈의 플래그십으로, 고충실도 오디오-비주얼 동기화를 갖춘 카탈로그의 메인라인 영상 생성 모델
- 텍스트 기반 영상 생성 + 첫 프레임 / 첫
- 마지막 프레임 이미지 기반 영상 생성
- 480p-4k 출력(4k에서 10-bit 인코딩), 24 fps, 4-15초, 6가지 화면비, .mp4
- 사운드 온 출력은 generate_audio
- 시리즈에는 멀티모달 참조(이미지/영상/오디오), 영상 편집, 영상 확장도 포함
- 모델 id에 버전 날짜 260128이 인코딩됨
프롬프트 하나, 게이트웨이를 거쳐 측정
Dreamina Seedance 2.0
모델이 반환한 크기 1280×720 길이 5s 지연 시간 133 s
프롬프트 하나에 모델당 요청 한 번, 재시도도 골라내기도 없이 각 모델이 처음 반환한 결과입니다. 크기와 길이는 고정하지 않고 모델마다 기본값을 그대로 썼습니다. 모든 모델에 맞춘 요청은 어느 모델의 장점도 살리지 못하기 때문입니다. 여기 있는 파일은 웹용으로 다시 인코딩한 것이므로, 압축 품질이 아니라 구도와 프롬프트 반영 정도를 보고 판단하세요.
30초 만에 Dreamina Seedance 2.0 사용하기
비동기 작업 API입니다. 작업을 만든 뒤 폴링하거나, Prefer: wait로 연결을 유지한 채 완료를 기다립니다. POST /v1/videos
import time
import requests
BASE = "https://synthorai.io/v1"
HEADERS = {"Authorization": "Bearer sk-syn-..."}
# 1) create the video generation job (POST /v1/videos)
task = requests.post(
f"{BASE}/videos",
headers=HEADERS,
json={
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
},
).json()
# 2) poll the job until it reaches a terminal state
while task["status"] in ("queued", "in_progress"):
time.sleep(5)
task = requests.get(f"{BASE}/videos/{task['id']}", headers=HEADERS).json()
# 3) completed → signed video URL (valid ~24h - download and store it promptly)
if task["status"] == "completed":
print(task["data"][0]["url"])
else:
print(task["error"])const HEADERS = {
Authorization: "Bearer sk-syn-...",
"Content-Type": "application/json",
};
interface VideoTask {
id: string;
status: "queued" | "in_progress" | "completed" | "failed" | "cancelled";
data?: Array<{ url: string }>;
error?: { code: string; message: string };
}
// 1) create the video generation job (POST /v1/videos)
const created = await fetch("https://synthorai.io/v1/videos", {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
model: "dreamina-seedance-2-0-260128",
prompt: "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
resolution: "720p",
duration: 5,
}),
});
let task = (await created.json()) as VideoTask;
// 2) poll the job until it reaches a terminal state
while (task.status === "queued" || task.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://synthorai.io/v1/videos/${task.id}`, { headers: HEADERS });
task = (await res.json()) as VideoTask;
}
// 3) completed → signed video URL (valid ~24h — download and store it promptly)
if (task.status === "completed") console.log(task.data?.[0]?.url);
else console.error(task.error);# Create the job; "Prefer: wait" holds the request up to 60s and returns the
# completed task when generation finishes in time (else the queued task).
curl https://synthorai.io/v1/videos \
-H "Authorization: Bearer sk-syn-..." \
-H "Content-Type: application/json" \
-H "Prefer: wait=60" \
-d '{
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5
}'
# Still queued / in_progress? Poll until completed → data[0].url (valid ~24h).
curl https://synthorai.io/v1/videos/vid_9f2e8c1a4b7d \
-H "Authorization: Bearer sk-syn-..."package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const base = "https://synthorai.io/v1"
type videoTask struct {
ID string `json:"id"`
Status string `json:"status"`
Data []struct {
URL string `json:"url"`
} `json:"data"`
}
func call(method, url string, body []byte) (t videoTask) {
req, _ := http.NewRequest(method, url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-syn-...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&t)
return t
}
func main() {
// 1) create the video generation job (POST /v1/videos)
payload, _ := json.Marshal(map[string]any{
"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
})
task := call("POST", base+"/videos", payload)
// 2) poll the job until it reaches a terminal state
for task.Status == "queued" || task.Status == "in_progress" {
time.Sleep(5 * time.Second)
task = call("GET", base+"/videos/"+task.ID, nil)
}
// 3) completed → signed video URL (valid ~24h — download and store promptly)
if task.Status == "completed" {
fmt.Println(task.Data[0].URL)
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// JDK built-in HttpClient — no extra dependency needed.
HttpClient http = HttpClient.newHttpClient();
// 1) create the job; "Prefer: wait=60" holds the request up to 60s and
// returns the completed task when generation finishes in time
HttpRequest create = HttpRequest.newBuilder(URI.create("https://synthorai.io/v1/videos"))
.header("Authorization", "Bearer sk-syn-...")
.header("Content-Type", "application/json")
.header("Prefer", "wait=60")
.POST(HttpRequest.BodyPublishers.ofString("""
{"model": "dreamina-seedance-2-0-260128",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p", "duration": 5}"""))
.build();
String task = http.send(create, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(task); // {"id":"vid_…","status":…} — completed → data[0].url
// 2) still queued / in_progress? Poll GET https://synthorai.io/v1/videos/{id} until the
// status turns completed, then download data[0].url (valid ~24h).Dreamina Seedance 2.0 소개
- 텍스트 프롬프트, 첫 프레임 또는 첫/마지막 프레임 이미지, 멀티모달 참조로부터 4-15초 길이의 .mp4 클립을 24 fps, 480p부터 4K(10비트 인코딩)까지의 해상도, 6가지 화면비로 생성하며, generate_audio 스위치로 동기화된 사운드를 넣을 수 있습니다.
- 2.0의 세 티어 중 1080p와 4K에 도달하는 것은 이 모델뿐이고, 큐 배치를 위한 priority 값을 받는 것도 이 모델뿐입니다.
- BytePlus 자체 가이드는 생성 품질이 가장 중요할 때 쓰라고 안내합니다.
- 멀티모달 참조는 최대 이미지 9장, 합계 15초의 영상 3개, 오디오 클립 3개를 받고, 영상 편집과 확장을 지원하며 확장은 최대 3개 구간까지 이어 붙일 수 있습니다.
- 생성되는 오디오는 모노이고 오디오는 기본으로 켜져 있습니다.
- 실제 인물의 얼굴이 담긴 참조 소재는 문서화된 적법 출처 집합으로 제한됩니다.
- Synthorai는 비동기 /v1/videos 작업 API로 이 모델을 서빙합니다.
- 작업을 생성한 뒤 폴링하거나 Prefer: wait로 요청을 열어 둔 채 서명된 영상 URL이 준비될 때까지 기다리면 됩니다.
자주 묻는 질문
Dreamina Seedance 2.0 API는 무료로 사용해 볼 수 있나요?
네. 신규 계정에는 체험 호출 10회와 최대 $1의 무료 크레딧을 드리며, 카드 등록은 필요 없습니다. 결제 수단을 추가하기 전에 실제 워크로드로 Dreamina Seedance 2.0을 충분히 시험해 볼 수 있는 양입니다.
Dreamina Seedance 2.0은 어떤 작업에 가장 강한가요?
고충실도 오디오-비주얼 동기화, 480p부터 4K 출력, 4-15초, 텍스트·첫 프레임·첫/마지막 프레임 입력. 자세한 내용은 공급자의 공식 릴리스 노트를 바탕으로 정리한 소개 섹션에서 확인하세요.
Dreamina Seedance 2.0 가격은 얼마인가요?
Synthorai에서 Dreamina Seedance 2.0 가격은 동영상 토큰 100만 개당 $7입니다(동영상 토큰 ≈ 가로 × 세로 × 24fps × 초 ÷ 1024). 생성에 성공한 경우에만 과금됩니다. 종량제이며 플랫폼 마진도, 구독도 없습니다.
Dreamina Seedance 2.0 API로 동영상을 어떻게 생성하나요?
Synthorai의 /v1/videos로 POST 요청(model="dreamina-seedance-2-0-260128")을 보내 비동기 작업을 만듭니다. 그런 다음 작업을 폴링하거나, Prefer: wait 헤더로 연결을 유지한 채 기다리면 동영상 URL을 받을 수 있습니다. 공급자 SDK는 필요 없습니다.
Dreamina Seedance 2.0은 어떻게 이용하나요?
쓰던 OpenAI SDK에서 base_url="https://synthorai.io/v1", model="dreamina-seedance-2-0-260128"만 지정하면 됩니다. API 키 하나로 게이트웨이의 모든 모델을 쓸 수 있습니다.
관련 모델
비교
이 페이지의 모든 값은 공급자 공식 문서(위 링크)에서 그대로 옮겨 적었으며, 확인한 날짜를 함께 표기합니다. 가격은 카탈로그 전체와 비교해 보여 주지만, 공급자마다 정의가 다른 사양 값은 차이만 밝히고 차트로 비교하지 않습니다. 저희가 직접 측정한 수치는 없고, 점수도 매기지 않습니다.