Vidu: Q2 Text-to-Video
Vidu Q2는 텍스트 장면 지시로 영상을 만들며, 길이 1–10초, 540p·720p·1080p 출력과 다섯 가지 화면비를 지원합니다. 이 viduq2 프로필은 프롬프트로 스타일과 움직임을 지정하고, 비동기 작업을 통해 결과를 반환합니다.
모델 소개
이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.
Vidu Q2는 viduq2로 선택하는 텍스트 기반 영상 프로필을 통해 글로 설명한 장면에서 영상을 만듭니다. 필수 입력은 정확한 모델 ID와 장면을 설명하는 프롬프트입니다. 외형과 움직임을 말로 지정할 수 있는 짧은 상품 구상, 장소를 소개하는 전경, 인물 동작에 사용하세요. 설정된 이 방식은 텍스트 기반 영상 생성이며, 설명이 이 선택자에 별도 이미지 참조 모드나 영상 편집 모드를 부여하지는 않습니다.
화면에 보이는 순서를 중심으로 지시를 구성하세요. 피사체, 장소, 동작, 숏 크기, 카메라 움직임, 마지막 구도를 지정합니다. 상품 구상에는 탁자 위 물체, 소재를 가로지르는 빛, 알아보기 쉬운 디테일에서 끝나는 느린 카메라 접근을 설명하세요. 장소 장면에서는 중심 대상으로 다가가기 전에 환경을 소개합니다. 의도한 결말을 담을 여유가 있도록 동작을 선택한 클립 길이에 맞추세요.
프롬프트 상한은 2,000자입니다. 핵심 피사체와 동작을 먼저 적고, 원하는 결과에 영향을 주는 조명·소재·환경·카메라 디테일을 더하세요. 시각적 스타일은 프롬프트에서 지정합니다. Q2 전용 가이드에 따르면 별도의 style 및 movement_amplitude 매개변수는 이 모델에 적용되지 않습니다. 따라서 general 또는 anime 프리셋과 움직임 진폭 옵션은 명확한 장면 설명을 대신할 수 없습니다.
모델별 길이 설정은 한 초부터 열 초까지의 정수 초를 받습니다. Q2 해상도 선택지는 540p, 720p, 1080p이며, 문서상 기본값은 720p입니다. 동작과 용도에 맞게 길이와 해상도를 함께 선택하세요. 짧게 드러내는 장면과 더 오래 이어지는 움직임은 타이밍이 달라야 합니다. 요청 길이를 늘리는 것은 화면의 순서를 위한 것이어야 하며, 변함없는 지시를 단순히 늘이는 데 그쳐서는 안 됩니다. 최종 배치를 준비할 때 반환된 클립의 실제 크기와 길이를 확인하세요.
문서화된 aspect_ratio 선택지는 16:9, 9:16, 3:4, 4:3, 1:1이며 기본값은 16:9입니다. 가이드는 Q2 제품군에 3:4와 4:3을 명시적으로 포함합니다. 생성 전에 화면을 선택하고 이에 맞는 구도를 설명하세요. 세로 화면에서는 주 피사체가 잘 보이게 하고, 가로 화면에서는 너비를 활용해 주변 환경을 보여 줍니다. 마지막 화면은 의도한 페이지·프레젠테이션 또는 이후 자막 작업에 충분히 명확하도록 만드세요.
seed 필드는 변화를 제어합니다. 생략하거나 0을 주면 무작위 값을 선택하고, 영이 아닌 값을 주면 반복 가능한 생성용으로 문서화된 고정 seed 옵션을 선택합니다. 버전을 비교할 때 반환된 seed를 프롬프트 및 설정과 함께 보관하세요. 공통 작업 설명에는 Q3 모델 전용 audio 및 off_peak 제어도 나옵니다. 이 Q3 옵션은 이 Q2 프로필에 부여된 기능이 아니므로, 문서화된 텍스트 입력과 영상 출력을 중심으로 요청을 계획하세요.
생성은 비동기 방식입니다. 제출하면 task_id와 초기 상태가 반환되며, 새로 만든 작업에는 created가 사용됩니다. 처리를 추적하는 동안 이 작업 ID를 보관하세요. 문서화된 결과 조회는 성공 결과에 state=success를 사용하고 creations 배열을 반환합니다. 각 항목의 영상 URL은 creations[].url에 있습니다. 작업에 항상 생성물이 정확히 하나만 있다고 가정하지 말고, 반환된 모든 영상을 저장하세요.
결과 문서에는 실제 영상의 길이, fps, 해상도의 너비와 높이도 보고된다고 나옵니다. 예제의 프레임 속도나 크기를 고정된 Q2 사양으로 보지 말고, 보고된 값을 완성 클립과 함께 보관하세요. 작업 생성 응답에는 요청 구성과 함께 credits 값이 포함됩니다. 각 영상이 생성 설정과 연결된 상태를 유지하도록, 이 보고된 작업 메타데이터와 완료된 작업 ID를 결과와 함께 보관하세요.
전체 시퀀스를 원래 지시와 비교하세요. 피사체 외형, 물체 형태, 움직임 방향, 카메라 연속성, 의도한 마지막 화면을 확인합니다. 수정할 때는 지시와 어긋난 구체적인 디테일을 지정하고, 잘된 장면 부분을 유지하세요. 이후 비교가 실제 결과물을 바탕으로 이루어지도록 프롬프트, 정확한 선택자, 설정, 작업 ID, 완성 영상을 함께 보관하세요.
Ailoot Ultra · 동영상 POST /v1/videos viduq2
viduq2시작하기
Vidu Q2는 텍스트 장면 지시로 영상을 만들며, 길이 1–10초, 540p·720p·1080p 출력과 다섯 가지 화면비를 지원합니다. 이 viduq2 프로필은 프롬프트로 스타일과 움직임을 지정하고, 비동기 작업을 통해 결과를 반환합니다.
- 허용 입력
- 텍스트
- 결과
- 동영상
Ailoot에서 사용 가능 · 입력 및 메서드
Ailoot Ultra · 동영상 POST /v1/videos
- 입력
text- 출력
video
| 필드 | 유형 | 요건 | 값과 한도 | 기본값 |
|---|---|---|---|---|
필드model | 유형string | 요건필수 | 값과 한도 viduq2 | 기본값— |
필드prompt | 유형string | 요건필수 | 값과 한도 조건: 생성할 장면을 설명하세요. 문서에 명시된 제한은 2000자입니다. Ailoot는 문자열이 비어 있지 않은지 확인하고 텍스트를 보존합니다. | 기본값— |
필드duration | 유형integer | 요건선택 사항 | 값과 한도 최솟값: 1 최댓값: 10 조건: viduq2 모델별 설명에는 정수 단위 1–10초가 명시되어 있습니다. 모델별 기본 길이는 문서에 명시되지 않았습니다. 단위: 초 | 기본값— |
필드seed | 유형string | 요건선택 사항 | 값과 한도 조건: 무작위 동작을 사용하려면 생략하거나 문자열 "0"을 전송하세요. 영이 아닌 seed를 제공하면 문서에 명시된 고정 seed 동작이 선택됩니다. 숫자 범위는 명시되어 있지 않습니다. | 기본값— |
필드aspect_ratio | 유형string | 요건선택 사항 | 값과 한도 16:9, 9:16, 3:4, 4:3, 1:1 | 기본값16:9 |
필드resolution | 유형string | 요건선택 사항 | 값과 한도 540p, 720p, 1080p 조건: viduq2 모델별 목록에는 1–10초에 대한 이 구간들이 문서화되어 있습니다. 공통 열거형과 표에는 360p도 나오지만, 적용 여부가 해당 목록과 충돌하므로 여기서는 지원을 단정하지 않습니다. | 기본값720p |
필드style | 유형string | 요건선택 사항 | 값과 한도 general, anime 조건: 공통 요청은 이 필드를 허용하지만, 문서에는 viduq2에 효과가 없다고 명시되어 있습니다. | 기본값general |
필드movement_amplitude | 유형string | 요건선택 사항 | 값과 한도 auto, small, medium, large 조건: 공통 요청은 이 필드를 허용하지만, 문서에는 q2 모델에 효과가 없다고 명시되어 있습니다. | 기본값auto |
입력 자료 조합
메서드 매개변수와 수명 주기
| 매개변수 | 명세 |
|---|---|
매개변수content_type | 명세application/json |
매개변수required | 명세model, prompt |
매개변수optional | 명세duration, seed, aspect_ratio, resolution, style, movement_amplitude |
매개변수material_types | 명세text |
매개변수additional_properties | 명세true |
매개변수validation_scope | 명세Ailoot는 model/prompt 문자열이 비어 있지 않은지 검증합니다. 아래 선택 사항의 유형과 제한은 문서에 명시된 요청 계약입니다. 다른 요청 필드는 선택한 모델에 전달되도록 보존됩니다. |
메서드 별칭: /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을 보존하세요.
원래 작업을 폴링하고 state를 조회하세요. success와 소유한 creations[].url 결과가 완료 판정 기준입니다.
반환된 소유 동영상 URL을 모두 다운로드하세요. 예제를 근거로 출력 수, 길이 또는 프레임 속도가 고정되어 있다고 판단하지 마세요.
요금
최종 요금 계산 방식
표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.
요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.
- 빠른 모드
- 미지정 빠른 모드를 선택한 경우
- Flex 모드
- 미지정 flex 모드를 선택한 경우
- 최대 추론 수준
- 미지정 최대 추론 수준에 default 조정값을 적용하는 경우
비교용 예상 요금
설정별 가격
각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.
| 설정 | 요금표 | 예측 수량 | 요금 |
|---|---|---|---|
| 설정기본 토큰 요금 | 요금표기본 요금 | 예측 수량— | 요금 입력 · 입력 토큰 · 비교 전용 추정치 — / 1K 토큰 출력 · 출력 토큰 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 읽기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기 · 비교 전용 추정치 — / 1K 토큰 입력 · 캐시 쓰기, 1시간 · 비교 전용 추정치 — / 1K 토큰 |
| 설정예상 생성 비용 | 요금표— | 예측 수량1회 생성 예상치 | 요금 출력 · 예상 생성 비용 · 비교 전용 추정치 $5.12 생성 전 추정치 이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다. |
Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. 금액 확보와 정산 방식 →
요청 예제
Ailoot Ultra · 동영상
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
cat > request.json <<'JSON_REQUEST'
{"model":"viduq2","prompt":"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene."}
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: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 the 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("state")!="success":raise SystemExit("Poll the same original job until its owned result is returned.")
creations=r.get("creations")
if not isinstance(creations,list) or not creations:raise SystemExit("No completed video creations.")
urls=[]
for item in creations:
value=item.get("url") if isinstance(item,dict) else None
values=[value] if isinstance(value,str) else value
if not isinstance(values,list) or not values:raise SystemExit("No completed video URL.")
for u in values:
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 the actual Ailoot-owned signed result.")
urls.append(u)
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 · 동영상
JSON은 네이티브 state와 creations 배열을 유지하고 공개 id/provider_task_id/polling_url을 추가합니다. 선택된 동영상 URL은 게시 전에는 비어 있으며 완료 후에는 Ailoot가 소유한 서명된 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에서 가져오세요.
creations[].url에 실제로 반환된 URL을 모두 다운로드하세요. 콘텐츠 인덱스는 실제 반환된 출력 하나를 식별합니다.
원래 응답을 확인해야 할 경우
고정된 명세에는 최종 실패 상태 목록이 없습니다. 원본 응답/헤더/id를 보존하고, 알 수 없는 상태나 result_pending_check 오류가 발생하면 같은 작업을 확인하세요. 결과를 알 수 없는 생성을 절대로 다시 제출하지 마세요.
응답 필드
| 필드 | 유형 | 의미 |
|---|---|---|
필드id | 유형string | 의미반환된 공개 Ailoot 작업 또는 연산 식별자입니다. |
필드provider_task_id | 유형string | 의미공개 id와 별개인 원래 작업 식별자입니다. |
필드polling_url | 유형string | 의미원래 작업에 대해 반환된 Ailoot 조회 경로입니다. |
필드task_id | 유형string when supplied | 의미생성 응답에 포함된 원래 식별자입니다. |
필드state | 유형string when supplied | 의미네이티브 작업 상태: 고정된 대기 상태는 created, 완료 상태는 success입니다. |
필드err_code | 유형string when supplied | 의미작업 진단 정보입니다. 저장된 명세에는 열거된 오류 코드 목록이 없습니다. |
필드creations[].url | 유형string|string[] | 의미선택한 완료 동영상 URL은 각각 Ailoot가 소유한 서명된 URL로 대체됩니다. |
필드creations[].video.duration | 유형number when supplied | 의미반환된 동영상 길이입니다. 실제 완료 결과를 확인하세요. |
필드creations[].video.fps | 유형integer when supplied | 의미반환된 프레임 속도입니다. 고정된 프레임 속도를 보장하지 않습니다. |
필드creations[].video.resolution.width | 유형integer when supplied | 의미픽셀 단위로 반환된 출력 너비입니다. |
필드creations[].video.resolution.height | 유형integer when supplied | 의미픽셀 단위로 반환된 출력 높이입니다. |
오류와 다음 단계
| 응답 | 조건 | 다음 단계 |
|---|---|---|
응답400 · invalid_request_error | 조건JSON/모델이 유효하지 않거나 필수 문자열이 없거나 비어 있거나 콘텐츠 인덱스가 유효하지 않습니다. | 다음 단계 |
응답401 · authentication_error | 조건유효하지 않은 Ailoot API 키입니다. | 다음 단계 |
응답403 · permission_error | 조건이 API 키 그룹은 해당 미디어 경로에 접근하도록 허용되지 않았습니다. | 다음 단계 |
응답404 · not_found_error | 조건원래 작업 또는 요청한 출력이 없거나 동일한 사용자/API 키/그룹의 소유가 아닙니다. | 다음 단계 |
응답502 · result_pending_check | 조건최초 제출 또는 상태 정보가 불완전하거나 대조하여 확인할 수 없습니다. 원래 ID를 보존하고 다시 제출하지 마세요. | 다음 단계 |
응답503 · result_pending_check | 조건원래 연결, 경로 또는 소유 미디어를 아직 확인 중입니다. 해당 원래 작업을 계속 확인하세요. | 다음 단계 |
응답503 · server_error | 조건미디어 서비스 또는 원래 작업 저장소를 사용할 수 없습니다. | 다음 단계 |
별칭
모델 별칭
Ailoot Ultra viduq2
메서드 경로 별칭
/v1/videos/generations
관련 호출용 ID
FAQ · Vidu: Q2 Text-to-Video
- 어떤 입력과 결과를 사용할 수 있나요?
POST /v1/videos·viduq2:text→video- 요청은 어떤 필드를 사용하나요?
POST /v1/videos·viduq2:model,prompt,duration,seed,aspect_ratio,resolution,style,movement_amplitude- 어떤 제한이 적용되나요?
POST /v1/videos·viduq2:duration.minimum:1;duration.maximum:10