ByteDance: Seedance 2.5
Seedance 2.5는 텍스트와 이미지·영상·오디오 참조 자료로 영상을 만들며, 편집과 확장 작업 흐름이 문서화되어 있습니다. 구체적인 2.5 예제는 상품 이미지에 여러 움직임 참조를 결합하고 생성 사운드를 켜서, 서로 맞물리는 광고 시퀀스를 만듭니다.
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
Seedance 2.5는 글로 설명한 장면과 멀티모달 참조 자료를 이용해 영상을 만듭니다. 정확한 선택자 doubao-seedance-2-5-260628에는 전용 작업 설명과 예제가 있습니다. 이 작업 설명은 이미지, 영상, 오디오, 텍스트를 입력 미디어로 쓰는 영상 생성, 편집, 확장을 다룹니다. 참조로 피사체 외형, 동작, 카메라 움직임, 스타일, 사운드를 전달하고, 이 자료로 어떤 결과를 만들지 설명하세요.
입력 조합에는 텍스트만 사용하기, 선택적으로 텍스트를 더한 이미지 또는 영상, 이미지와 오디오, 영상과 오디오, 이미지·영상·오디오의 동시 사용이 있습니다. 열거된 조합은 오디오 전용 요청이 아니라 시각 미디어에 오디오를 결합하는 방식입니다. 각 항목을 역할별로 정리하세요. 이미지는 피사체나 시각적 스타일을 정하고, 영상은 움직임이나 기존 장면을 보여 주며, 오디오는 사운드 참조를 제공합니다. 배경 참조를 주인공으로 오해하지 않도록 요청한 숏에서 중요한 역할을 명시하세요.
구체적인 2.5 예제는 상품 광고 시퀀스입니다. 이미지와 여러 영상 참조를 제공한 뒤, 시작 초점, 순서 있는 상품 배치, 디테일 숏, 슬로모션 동작, 마지막 브랜드 구도를 설명합니다. 요청은 reference_image와 reference_video 역할을 부여하고, 구도·움직임·카메라 워크·효과에 개별 참조를 사용합니다. 캠페인 구상을 위한 실용적인 구조입니다. 화면에 보일 각 전개를 계획하고, 각 전개의 참조를 지정하며, 마지막 배치를 명시하세요.
글로 작성한 시퀀스는 무엇이 일어나는지와 어떻게 촬영하는지를 구분할 수 있습니다. 먼저 상품에 일어나는 동작을 설명하고, 숏 크기, 카메라 경로, 속도감, 다음 화면으로의 전환을 설명하세요. 한 참조가 상품을 정하고 다른 참조가 카메라 움직임을 보여 준다면 각각의 역할을 나누어 적습니다. 여러 물체가 있는 장면에서는 위치와 상호작용 순서를 설명하세요. 모든 참조 디테일이 그대로 나타난다고 가정하지 말고, 실제 생성된 상품 형태, 배치, 움직임을 확인하세요.
편집에서는 기존 영상과 배경, 동작, 시각적 스타일 등 수정할 요소를 지정하면서 유지할 연속성을 명시하세요. 확장에서는 제공된 영상에서 장면이 어떻게 이어져야 하는지 설명합니다. 새 구간뿐 아니라 연결 지점도 검토하세요. 피사체 외형, 움직임 방향, 카메라 위치, 사운드 타이밍은 결과가 하나의 장면으로 느껴지는지에 모두 영향을 줍니다. 원본 영상과 완성 수정본을 함께 보관해, 의도한 연속성에 맞게 변경되었는지 확인하세요.
문서의 2.5 멀티모달 예제는 generate_audio=true를 설정하고 16:9 구도로 십오 초 시퀀스를 요청합니다. 이는 해당 예제의 값이며, 보편적인 길이 상한이나 참조 자료 제한을 나타내지는 않습니다. 음악·효과음·화면 동작의 관계를 포함해 요청한 장면의 사운드 의도를 명확히 하고, 실제 영상·오디오 출력을 평가하세요. 사운드 참조와 생성 사운드트랙을 함께 검토해 의도한 속도감과 표현을 확인해야 합니다.
이 정확한 프로필에서 제공하는 설정 중 길이, 구도, 해상도를 선택하세요. 요청 구성을 프롬프트와 함께 보관하고, 실제 반환된 작업 필드와 비교합니다. 완성 클립을 용도에 맞춰 준비할 때는 반환된 길이, 해상도, 화면비를 사용하세요. 이후 비교에서도 같은 선택 버전을 사용하도록 수정 기록에 정확한 프로필 ID를 남기세요.
영상 토큰 사용량은 (입력 영상 길이 + 출력 영상 길이) × 출력 너비 × 출력 높이 × 출력 프레임 속도 / 1024로 계산합니다. 입력 영상이 있는 요청과 없는 요청은 별개의 과금 범주입니다. 작업 조회는 usage.completion_tokens와 usage.total_tokens를 보고합니다. 이 보고 수량을 완성 클립과 함께 보관하세요.
생성은 비동기 방식입니다. 제출하면 ID가 반환되고, 설정된 작업 흐름에서 상태를 받은 뒤 성공 후 content.video_url을 얻습니다. 완성 클립을 원본 미디어와 시퀀스 지시와 함께 저장하세요. 전체 결과에 걸쳐 계획한 모든 전개, 물체 상호작용, 인물 외형, 구도, 사운드 일치를 검토합니다. 수정할 때는 놓친 구체적인 디테일을 지적하고, 전체 지시를 무관한 내용으로 바꾸지 말고 잘된 부분을 유지하세요.
Ailoot Ultra · 동영상 POST /v1/videos doubao-seedance-2-5-260628
doubao-seedance-2-5-260628시작하기
Seedance 2.5는 텍스트와 이미지·영상·오디오 참조 자료로 영상을 만들며, 편집과 확장 작업 흐름이 문서화되어 있습니다. 구체적인 2.5 예제는 상품 이미지에 여러 움직임 참조를 결합하고 생성 사운드를 켜서, 서로 맞물리는 광고 시퀀스를 만듭니다.
- 허용 입력
- 텍스트 · 이미지 · 동영상 · 오디오
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot Ultra · 동영상 POST /v1/videos
- 입력
text,image,video,audio- 출력
video
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 doubao-seedance-2-5-260628 | 기본값— |
필드content | 유형array | 요건필수 | 값과 한도 조건: 네이티브 텍스트/미디어 객체입니다. 바깥쪽 배열은 비어 있으면 안 됩니다. 이 Ailoot 범용 생성자는 중첩 노드의 유형을 검증하지 않습니다. | 기본값— |
필드generate_audio | 유형boolean | 요건선택 사항 | 값과 한도 조건: 2.5 예제는 true로 설정하지만, 복사된 선택자 설명에는 2.0/fast/1.5만 나열되어 있습니다. 그 외의 설정이나 기본값은 보장하지 않습니다. | 기본값— |
필드duration | 유형integer | 요건선택 사항 | 값과 한도 조건: 2.5 예제의 리터럴 15는 최댓값이나 기본값이 아닙니다. | 기본값— |
필드resolution | 유형string | 요건선택 사항 | 값과 한도 조건: 복사된 설명을 근거로 2.5 전용 기본값/열거형을 추론하지 않습니다. | 기본값— |
필드ratio | 유형string | 요건선택 사항 | 값과 한도 조건: Adaptive의 명시된 적용 범위는 2.0/fast/1.5입니다. 2.5 예제에는 16:9만 있습니다. | 기본값— |
필드watermark | 유형boolean | 요건선택 사항 | 값과 한도 | 기본값false |
필드seed | 유형integer | 요건선택 사항 | 값과 한도 최솟값: -1 최댓값: 4,294,967,295 | 기본값-1 |
필드execution_expires_after | 유형integer | 요건선택 사항 | 값과 한도 최솟값: 3,600 최댓값: 259,200 단위: 초 | 기본값172,800 |
필드service_tier | 유형string | 요건선택 사항 | 값과 한도 조건: 2.0/fast는 오프라인 flex를 제외합니다. 2.5의 적용 범위는 확정되지 않았습니다. | 기본값— |
필드safety_identifier | 유형string | 요건선택 사항 | 값과 한도 | 기본값— |
입력 자료 조합
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수content_type | 명세application/json |
매개변수required | 명세content, model |
매개변수optional | 명세generate_audio, duration, resolution, ratio, watermark, seed, execution_expires_after, service_tier, safety_identifier |
매개변수material_types | 명세text, image, video, audio |
매개변수additional_properties | 명세true |
매개변수validation_scope | 명세Ailoot는 필수 필드의 유형과 비어 있지 않은 model/content 배열을 확인합니다. 다른 요청 필드는 선택한 모델에 전달되도록 보존됩니다. |
매개변수material_combinations | 명세text, image, video, image, audio, image, video, video, audio, image, video, audio |
매개변수optional_text_with_media | 명세true |
매개변수reference_media_count_and_size_limits | 명세null |
메서드 별칭: /v1/videos/generations
수명 주기: submit_once_poll_original
GET /v1/videos/{request_id}
GET /v1/videos/generations/{request_id}
GET /v1/videos/{request_id}/content
GET /v1/videos/generations/{request_id}/content
한 번 생성하고 반환된 공개 id/polling_url을 보존하세요.
원래 작업을 폴링하세요. succeeded 이후 실제 소유한 content.video_url을 다운로드하세요.
요금
최종 요금 계산 방식
표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.
요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.
- 빠른 모드
- 미지정 빠른 모드를 선택한 경우
- Flex 모드
- 미지정 flex 모드를 선택한 경우
- 최대 추론 수준
- 미지정 최대 추론 수준에 default 조정값을 적용하는 경우
비교용 예상 요금
설정별 가격
각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.
| 설정 | 요금표 | 예측 수량 | 과금 단위 | 요금 |
|---|---|---|---|---|
| 설정기본 토큰 요금 | 요금표기본 요금 | 예측 수량— | 과금 단위— | 요금 입력 · 입력 토큰 · 비교 전용 추정치 — / 1K 토큰 출력 · 출력 토큰 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 읽기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기, 1시간 · 비교 전용 추정치 — / 1K 토큰 |
| 설정입력에 영상이 포함됩니다. | 요금표— | 예측 수량— | 과금 단위1K 동영상 토큰당 | 요금 출력 · 비교 전용 추정치 $0.012 1K 동영상 토큰당 |
| 설정입력에 영상이 포함되지 않습니다. | 요금표— | 예측 수량— | 과금 단위1K 동영상 토큰당 | 요금 출력 · 비교 전용 추정치 $0.02 1K 동영상 토큰당 |
| 설정예상 생성 비용 | 요금표— | 예측 수량1회 생성 예상치 | 과금 단위— | 요금 출력 · 예상 생성 비용 · 비교 전용 추정치 $0.822402 생성 전 추정치 이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다. |
Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →
요청 예제
Ailoot Ultra · 동영상
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
cat > request.json <<'JSON_REQUEST'
{"model":"doubao-seedance-2-5-260628","content":[{"type":"text","text":"女孩抱着狐狸,女孩睁开眼,温柔地看向镜头,狐狸友善地抱着,镜头缓缓拉出,女孩的头发被风吹动"}]}
JSON_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_POLL'
import json
from pathlib import Path
from urllib.parse import quote,urljoin,urlsplit
r=json.loads(Path("result.json").read_text())
i=r.get("id")
if not isinstance(i,str) or not i.startswith("native302_"):raise SystemExit("Keep original response/headers/id; do not resubmit creation.")
u=urljoin("https://api.ailoot.ai",r.get("polling_url") or "/v1/videos/"+quote(i,safe=""))
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/videos/"):raise SystemExit("Use actual Ailoot lookup path.")
Path("poll-url.txt").write_text(u)
PY_POLL
curl --fail-with-body --silent --show-error "$(cat poll-url.txt)" -H "Authorization: Bearer $AILOOT_API_KEY" -D status-headers.txt -o status.json
set -eu
python3 - <<'PY_ASSETS'
import json
from pathlib import Path
from urllib.parse import urlsplit
r=json.loads(Path("status.json").read_text())
if r.get("status")!="succeeded":raise SystemExit("Poll same original job until an owned result is returned.")
u=r.get("content",{}).get("video_url")
urls=[u] if isinstance(u,str) else u
if not isinstance(urls,list) or not urls:raise SystemExit("No completed video URL.")
for u in urls:
if not isinstance(u,str):raise SystemExit("Invalid returned URL.")
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or not p.path.startswith("/v1/media/assets/") or not p.path.endswith("/content") or not p.query:raise SystemExit("Wait for actual Ailoot-owned signed result.")
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_ASSETS
index=0
while IFS= read -r asset_url; do
curl --fail-with-body --silent --show-error "$asset_url" -o "video-${index}.bin"
index=$((index + 1))
done < asset-urls.txt
결과 수신 및 저장
Ailoot Ultra · 동영상
공개 id/polling_url이 있는 네이티브 JSON입니다. 게시 후에는 content.video_url에 Ailoot가 소유한 서명된 URL이 포함됩니다. 게시 전에는 선택된 출력 URL이 비워집니다.
GET /v1/videos/{request_id}GET /v1/videos/generations/{request_id}GET /v1/videos/{request_id}/contentGET /v1/videos/generations/{request_id}/content
완료된 결과 모두 보관
완료된 모든 동영상과 반환된 파일을 저장하고, 실제로 반환된 모든 자산 URL에서 가져오세요.
content.video_url에 있는 모든 실제 URL을 보존하세요. index는 실제 반환된 출력을 식별해야 합니다.
원래 응답을 확인해야 할 경우
원본 응답/헤더/id를 보존하고 해당 작업을 폴링하세요. 결과를 알 수 없는 생성을 절대로 다시 제출하지 마세요.
응답 필드
| 필드 | 유형 |
|---|---|
필드id | 유형string |
필드provider_task_id | 유형string |
필드polling_url | 유형string |
필드status | 유형string when supplied |
필드content.video_url | 유형string|string[] |
필드usage | 유형object when supplied |
오류와 다음 단계
| 응답 | 조건 | 다음 단계 |
|---|---|---|
응답400 · invalid_request_error | 조건JSON/모델/필수 필드 유형 또는 콘텐츠 인덱스가 유효하지 않습니다. | 다음 단계 |
응답401 · authentication_error | 조건유효하지 않은 Ailoot API 키입니다. | 다음 단계 |
응답404 · not_found_error | 조건작업/출력이 없거나 동일한 사용자/API 키/그룹의 소유가 아닙니다. | 다음 단계 |
응답502 · result_pending_check | 조건최초 제출/상태 정보가 불완전합니다. 원래 ID를 보존하고 다시 제출하지 마세요. | 다음 단계 |
응답503 · result_pending_check | 조건원래 미디어/경로/정산을 확인 중입니다. 원래 작업을 계속 진행하세요. | 다음 단계 |
별칭
모델 별칭
Ailoot Ultra doubao-seedance-2-5-260628
메서드 경로 별칭
/v1/videos/generations
관련 호출용 ID
FAQ · ByteDance: Seedance 2.5
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/videos·doubao-seedance-2-5-260628:text,image,video,audio→video- 요청은 어떤 필드를 사용하나요?
POST /v1/videos·doubao-seedance-2-5-260628:model,content,generate_audio,duration,resolution,ratio,watermark,seed,execution_expires_after,service_tier,safety_identifier- 어떤 제한이 적용되나요?
POST /v1/videos·doubao-seedance-2-5-260628:seed.minimum:-1;seed.maximum:4294967295;execution_expires_after.minimum:3600;execution_expires_after.maximum:259200