30초 영상, 50개 이상의 참조 소재. 지금 사용해 보기

SeeGen AI API

SeeGen AI API에 오신 것을 환영합니다 — 여러 주요 모델을 아우르는 시네마틱 비디오와 고품질 이미지 생성을 하나의 API로 제공합니다.

개요

SeeGen AI는 통합 생성 API입니다. 여러 주요 AI 비디오/이미지 모델을 하나의 일관된 엔드포인트 세트로 호출할 수 있습니다. model 파라미터로 모델을 선택하세요 — 인증, 작업 제출, 상태 폴링, Webhook은 모든 모델에서 동일한 방식으로 동작합니다.

현재 사용 가능한 모델:

  • Video — Seedance 2.5 (sd2.5), Seedance 2.0 Pro (sd2), Fast (sd2-fast), Mini (sd2-mini), Wan 3.0 Video Prime (wan3.0-video-prime), Wan 3.0 Video (wan3.0-video)
  • 이미지 — GPT Image 2(gpt-image-2), Nano Banana 2(nano-banana-2), Nano Banana Pro(nano-banana-pro), Seedream 5.0 Lite(seedream-v5.0-lite), Seedream 5.0 Pro(seedream-v5.0-pro)

기본 URL: https://seegen.ai/api/v1

모델: 위 별칭 중 하나를 model 필드에 지정하세요(예: sd2, gpt-image-2).

SeeGen AI를 선택하는 이유

SeeGen AI를 선택해야 할 더 많은 이유:

  • Seedance 2.0뿐만 아니라 Wan 3.0, Nano Banana, ChatGPT Image 등도 이용 가능합니다.
  • 구독 불필요 — 사용한 만큼만 지불
  • 최신 모델에 빠르게 액세스
  • 24/7 고객 지원
  • 공식 모델 관련 문의 지원
  • 개발자용 콘솔 액세스
  • 기업과 개인 사용자 모두 이용 가능

요금제

40% OFF

API Pack

$500$833

125,000 크레딧 ($0.004/크레딧)

5s 영상 ~781개

40% OFF

API-XL Pack

$2,000$3,332

500,000 크레딧 ($0.004/크레딧)

5s 영상 ~3,125개

Seedance 2.0 / Fast / Mini / 2.5 — 비용 계산 방식

out = 출력 초, in = 각 입력 비디오의 ⌈duration⌉(각각 올림) 합계(out × 2/3을 최솟값으로 함)로 정의합니다. Seedance 2.5는 Seedance 2.0과 동일한 계산 방식을 따릅니다. 해당 모델의 기본 요율은 작업 공식을 적용하기 전에 1.5배로 곱한 뒤 반올림합니다(1080P는 sd2.5의 네이티브 출력이며, 720P 요율의 2.5배). 모델과 무관한 업스케일 추가 요금은 2K / 4K에서 출력 1초당 +30 / +40크레딧으로 동일합니다(1080P는 sd2-fast / sd2-mini에서만 +20).

비디오 입력 없음비디오 입력 포함
sd2.5: 480P30 × out23 × (out + in)
sd2.5: 720P60 × out45 × (out + in)
sd2.5: 1080P (네이티브)150 × out113 × (out + in)
sd2.5: 2K(60 + 30) × out45 × (out + in) + 30 × out
sd2.5: 4K(60 + 40) × out45 × (out + in) + 40 × out
sd2-pro: 480P20 × out15 × (out + in)
sd2-pro: 720P40 × out30 × (out + in)
sd2-pro: 1080P (네이티브)100 × out75 × (out + in)
sd2-pro: 2K(40 + 30) × out30 × (out + in) + 30 × out
sd2-pro: 4K (네이티브)200 × out150 × (out + in)
sd2-fast: 480P16 × out12 × (out + in)
sd2-fast: 720P32 × out24 × (out + in)
sd2-fast: 1080P(32 + 20) × out24 × (out + in) + 20 × out
sd2-fast: 2K(32 + 30) × out24 × (out + in) + 30 × out
sd2-fast: 4K(32 + 40) × out24 × (out + in) + 40 × out
sd2-mini: 480P10 × out7.5 × (out + in)
sd2-mini: 720P20 × out15 × (out + in)
sd2-mini: 1080P(20 + 20) × out15 × (out + in) + 20 × out
sd2-mini: 2K(20 + 30) × out15 × (out + in) + 30 × out
sd2-mini: 4K(20 + 40) × out15 × (out + in) + 40 × out

참고: sd2-pro의 1080P와 4K는 공식 네이티브 출력입니다(4K = 720P 요율의 5배). sd2-pro의 2K와 sd2-fast / sd2-mini의 1080P/2K/4K는 모두 SeeGen AI가 업스케일한 것입니다. sd2.5는 480P/720P/1080P를 네이티브로 생성하며(1080P = 720P 요율의 2.5배, 업스케일 추가 요금 없음), 2K/4K는 자동 업스케일을 사용합니다. 원하는 등급은 outputResolution: "4k"와 같이 요청할 수 있습니다(예: "2k" / "4k"; 게이트웨이가 네이티브인지 업스케일인지 자동으로 선택하며, 달라지는 것은 가격과 Native 라벨뿐입니다). sd2-minisd2-pro의 50% 가격으로, 가장 저렴한 등급입니다. Seedance 2.5는 Seedance 2.0의 영상별 길이 올림, 최소 입력 길이 하한, 업스케일 계산 방식을 그대로 사용합니다. 해당 모델의 기본 요율은 작업 계산 전에 1.5배로 곱한 뒤 반올림합니다(예: 비디오 포함 1080P: 75 × 1.5 → 113). 모델과 무관한 2K / 4K 업스케일 추가 요금은 출력 1초당 +30 / +40크레딧으로 유지됩니다. 업스케일이 실패하면 완료된 작업은 부분 환불 없이 720P로 폴백됩니다.

  • sd2.5 480P, 4초 출력, 비디오 입력 없음: 120크레딧
  • sd2.5 720P, 5초 출력, 비디오 입력 없음: 300크레딧
  • sd2.5 720P, 5초 출력 + 3초 입력 비디오(최소 입력 4초): 405크레딧
  • sd2.5 1080P 네이티브, 5초 출력, 비디오 입력 없음: 750크레딧
  • sd2.5 1080P 네이티브, 5초 출력 + 5초 입력 비디오: 1,130크레딧

Wan 3.0 Video / Prime — 비용 계산

out = 출력 초, in = 각 참조 동영상의 길이를 초 단위로 올림한 합계입니다. 참조 동영상이 없으면 credits = out × rate, 있으면 credits = (out + in) × rate입니다. 아래 표에서 모델과 해상도에 맞는 요율을 사용하세요.

모델기본 출력크레딧 / 초2초 예시
wan3.0-video-prime480P2244
720P4590
1080P90180
wan3.0-video480P1632
720P3264
1080P64128

참고: 480P, 720P, 1080P는 네이티브 출력이며 2K/4K 업스케일은 지원하지 않습니다. 참조 이미지와 오디오는 과금 시간에 추가되지 않습니다. 오디오 생성을 꺼도 가격은 동일합니다. 참조 동영상의 총길이와 출력 길이의 합은 30초를 초과할 수 없습니다.

  • wan3.0-video 480P, 참조 동영상 없이 2초 출력: 2 × 16 = 32 크레딧
  • wan3.0-video-prime 480P, 참조 동영상 없이 2초 출력: 2 × 22 = 44 크레딧
  • wan3.0-video 720P, 5초 출력 + 3초 참조 동영상: (5 + 3) × 32 = 256 크레딧
  • wan3.0-video-prime 720P, 5초 출력 + 2.2초 참조 동영상(3초로 올림): (5 + 3) × 45 = 360 크레딧

🎉 기간 한정 혜택: 모든 이미지 생성 33% 할인 — 아래의 모든 이미지 가격은 이미 할인이 적용된 금액입니다.

GPT Image 2.5 Flare / Sunburst

해상도중간 품질고품질XHigh 품질Max 품질
1k35132023355075
2k (기본값)7102335375584125
4k1015406067100154230

각 작업은 이미지 1장을 생성합니다. N개의 변형을 얻으려면 N개의 작업을 제출하세요. 실패한 작업은 크레딧이 자동으로 환불됩니다.

gpt-image-2 — 이미지당 크레딧

해상도중간 품질고품질
1k10154770
2k (기본값)233584125
4k4060154230

각 작업은 이미지 1장을 생성합니다. N개의 변형을 얻으려면 N개의 작업을 제출하세요. 실패한 작업은 크레딧이 자동으로 환불됩니다.

nano-banana-2 및 nano-banana-pro — 이미지당 크레딧

해상도nano-banana-2nano-banana-pro
1k20304060
2k (기본값)30454060
4k477074110

각 작업은 이미지 1장을 생성합니다. N개의 변형을 얻으려면 N개의 작업을 제출하세요. 실패한 작업은 크레딧이 자동으로 환불됩니다.

Seedream 5.0 — 이미지당 크레딧

모델 / 등급크레딧
Lite 2k / 4k (정액)710
Pro 1k (기본값)1015
Pro 2k2030

각 작업은 이미지 1장을 생성합니다. N개의 변형을 얻으려면 N개의 작업을 제출하세요. 실패한 작업은 크레딧이 자동으로 환불됩니다. 참조 이미지는 별도로 과금되지 않습니다.

잔액 확인: GET /api/v1/account/credits

API 계정용 자동 충전

API 키와 SeeGen AI 대시보드는 동일한 계정 단위 크레딧 잔액을 사용합니다. 자동 충전으로 API 작업에 필요한 잔액을 유지할 수 있지만, 설정은 Credits 페이지에서 해야 하며 현재 별도의 설정 API는 없습니다.

Credits에서 자동 충전을 설정하세요:

  1. Credits를 열고 유지할 최소 잔액을 지정한 다음 충전 패키지를 선택합니다.
  2. 결제 수단을 한 번 승인합니다. 이 설정 단계는 승인 정보를 저장하며 카드에 청구하지 않습니다.
  3. 유연한 승인이 활성화되면 다시 승인하지 않고 Credits에서 최소 잔액이나 패키지를 변경할 수 있습니다. 이전 고정 가격 승인을 사용하는 계정은 일회성 업그레이드가 필요할 수 있습니다.

API 요청 시 동작 방식

  • API 작업 제출이 성공하여 크레딧이 차감되고 잔액이 임계값 이상에서 미만으로 내려가면 SeeGen AI가 자동 충전을 비동기로 대기열에 추가합니다. 작업 제출은 충전 완료를 기다리지 않습니다.
  • 제출 전에 계정의 크레딧이 부족하면 API는 HTTP 402를 반환하고 작업을 만들지 않습니다. 거부된 요청으로는 자동 충전이 시작되지 않으며 요청도 자동 재시도되지 않습니다. 크레딧이 확보된 후 다시 시도하세요.
  • 현재 잔액은 GET /api/v1/account/credits로 확인할 수 있습니다. 자동 충전 진행 상황과 실패는 Credits 및 Payment History에 표시되며, 중요한 결과는 계정의 청구 이메일 주소로 전송됩니다. 현재 고객용 자동 충전 Webhook이나 상태 API는 없습니다.

API 패키지 자동 충전 보너스

  • $500.00 API Pack: 127,500 크레딧(125,000 + 2% 보너스).
  • $2,000.00 API-XL Pack: 525,000 크레딧(500,000 + 5% 보너스).
  • 이 패키지를 직접 구매하면 기존과 같이 각각 125,000 및 500,000 크레딧이 추가됩니다.

인증

모든 API 요청에는 Authorization 헤더에 Bearer 토큰이 필요합니다. API 키는 계정 설정에서 생성하고 관리할 수 있습니다.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://seegen.ai/api/v1/account/credits

중요: API 키는 생성 시 한 번만 표시됩니다. 안전하게 보관하세요. 계정당 최대 10개까지 API 키를 생성할 수 있습니다.

빠른 시작

두 단계로 비디오를 생성하세요: 작업을 생성한 뒤 결과를 폴링합니다.

# 1. Create a text-to-video task
TASK_ID=$(curl -s -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A golden retriever running on the beach at sunset",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask | jq -r '.taskId')

echo "Task created: $TASK_ID"

# 2. Poll for result
while true; do
  RESULT=$(curl -s -H "Authorization: Bearer $API_KEY" \
    "https://seegen.ai/api/v1/jobs/queryTask?taskId=$TASK_ID")
  STATUS=$(echo $RESULT | jq -r '.status')
  echo "Status: $STATUS"
  if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ]; then
    echo $RESULT | jq .
    break
  fi
  sleep 5
done

엔드포인트

POST/api/v1/jobs/createTask

새 비디오 생성 작업 생성

GET/api/v1/jobs/queryTask

작업 상태 및 결과 조회

GET/api/v1/account/credits

크레딧 잔액 확인

POST/api/v1/assets/upload

검토용 에셋(이미지/비디오/오디오) 업로드

GET/api/v1/assets/status

에셋 검토 상태 조회

GET/api/v1/assets/list

업로드한 에셋 목록 조회

POST/api/v1/upscale/create

독립형 비디오 업스케일 작업 제출(720p / 1080p / 2K / 4K)

GET/api/v1/upscale/query

독립형 업스케일 작업의 상태와 결과를 폴링

모델 선택(비디오)

워크플로, 기본 해상도, 속도 및 가격을 기준으로 동영상 모델을 선택하세요. 비용을 추정하려면 이 표를 요금 섹션과 함께 사용하세요.

모델T2VI2VFirst–LastMulti-RefR2V네이티브 1080p네이티브 4K오디오720p / 5s
sd2.5업스케일300 크레딧
sd2200 크레딧
sd2-fast업스케일업스케일160 크레딧
sd2-mini업스케일업스케일100 크레딧
wan3.0-video-prime225 크레딧
wan3.0-video160 크레딧

T2V = 텍스트로 비디오 생성 · I2V = 이미지로 비디오 생성(첫 프레임) · First–Last = 시작 + 종료 키프레임 · Multi-Ref = 이미지/비디오/오디오 참조 혼합 · R2V = 캐릭터 마커가 있는 참조 이미지 1~9장

Seedance 2.0 / 2.0 Fast / 2.0 Mini / Seedance 2.5

텍스트로 비디오 생성

텍스트 프롬프트로 비디오를 생성합니다. 이미지는 필요하지 않습니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "prompt": "A futuristic city with flying cars at night, neon lights reflecting on wet streets",
      "duration": "5s",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
파라미터타입필수설명
promptstring생성할 비디오에 대한 텍스트 설명. 최대 20000자.
durationstring아니요동영상 길이: "4s"~"15s"; sd2.5는 최대 "30s"까지 지원(기본값: "5s")
resolutionstring아니요resolution으로 화면 비율을 지정합니다. 옵션: auto(기본값), 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.
seedint아니요재현성을 위한 시드 값: 무작위는 -1 또는 생략, 고정하려면 0–2147483647을 지정합니다.
generateAudioboolean아니요동기화된 오디오 트랙을 합성할지 여부입니다. 기본값은 true이며, 무음 비디오를 원하면 false를 지정합니다.

이미지로 비디오 생성

정적 이미지를 비디오로 애니메이션화합니다. 시작 프레임으로 이미지 URL 1개를 제공합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": ["https://example.com/photo.jpg"],  // or "asset://asset-20260326-abc123"
      "prompt": "The woman slowly turns her head and smiles",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
파라미터타입필수설명
urlsstring[]이미지 URL 1개를 포함하는 배열(원본 프레임). HTTP URL과 에셋 참조(예: "asset://asset-20260326-abc123") 모두 지원합니다.
promptstring아니요원하는 움직임에 대한 텍스트 설명
durationstring아니요동영상 길이: "4s"~"15s"; sd2.5는 최대 "30s"까지 지원(기본값: "5s")
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.
seedint아니요재현성을 위한 시드 값: 무작위는 -1 또는 생략, 고정하려면 0–2147483647을 지정합니다.
generateAudioboolean아니요동기화된 오디오 트랙을 합성할지 여부입니다. 기본값은 true이며, 무음 비디오를 원하면 false를 지정합니다.

시작/종료 프레임

시작 프레임과 종료 프레임을 지정하면 모델이 그 사이의 전환을 생성합니다. videoInputMode: "keyframe"을 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/first-frame.jpg",
        "https://example.com/last-frame.jpg"
      ],
      "prompt": "Smooth camera transition from day to night",
      "duration": "5s",
      "videoInputMode": "keyframe"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
파라미터타입필수설명
urlsstring[]정확히 2개의 이미지 URL을 포함하는 배열: [first_frame, last_frame]. HTTP URL과 에셋 참조(예: "asset://asset-20260326-abc123") 모두 지원합니다.
videoInputModestring"keyframe"이어야 합니다
promptstring아니요전환을 안내하는 텍스트 설명
durationstring아니요동영상 길이: "4s"~"15s"; sd2.5는 최대 "30s"까지 지원(기본값: "5s")
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.
seedint아니요재현성을 위한 시드 값: 무작위는 -1 또는 생략, 고정하려면 0–2147483647을 지정합니다.
generateAudioboolean아니요동기화된 오디오 트랙을 합성할지 여부입니다. 기본값은 true이며, 무음 비디오를 원하면 false를 지정합니다.

멀티 레퍼런스

여러 참조 이미지·비디오·오디오 파일을 사용해 생성을 제어합니다. videoInputMode: "reference"를 사용합니다. sd2.5에서는 이것이 기본 참조 서브태스크입니다. 기존 비디오를 편집하거나 이어서 생성하려면 아래의 '비디오 편집/연장'을 참고하세요.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "inputs": {
      "urls": [
        "https://example.com/ref1.jpg",
        "https://example.com/ref2.jpg"
      ],
      "videoUrls": ["asset://asset-motion-video"],
      "audioUrls": ["https://example.com/audio.mp3"],
      "prompt": "Character walks through a garden",
      "duration": "5s",
      "videoInputMode": "reference",
      "resolution": "1280x720"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
파라미터타입필수설명
urlsstring[]아니요참조 이미지 URL(최대 9개). HTTP URL과 에셋 참조(예: "asset://asset-20260326-abc123") 모두 지원합니다.
videoUrlsstring[]아니요참조 비디오의 asset:// URI — 먼저 /api/v1/assets/upload로 업로드해야 합니다. 외부 URL은 거부됩니다. sd2: 최대 3개, 각 15s 이하. sd2.5: 최대 10개, 각 2–30s이며 200MB 이하, 참조 비디오 총 길이 30s 이하, 480p–4K 입력을 지원합니다.
audioUrlsstring[]아니요참조 오디오 입력. sd2 / sd2-fast / sd2-mini: 최대 3개 파일, 각 2–15s, 총 15s 이하 — 이 모델들에서는 오디오만 단독 참조로 사용할 수 없습니다(이미지 또는 비디오를 최소 1개 추가하세요). sd2.5: 최대 10개 파일, 각 15MB 이하 및 2–30s, 총 30s 이하이며 오디오 단독 입력도 지원합니다.
videoInputModestring"reference"이어야 합니다
promptstring아니요텍스트 설명
durationstring아니요동영상 길이: "4s"~"15s"; sd2.5는 최대 "30s"까지 지원(기본값: "5s")
resolutionstring참조 모드에서는 필수입니다. 옵션: 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.
seedint아니요재현성을 위한 시드 값: 무작위는 -1 또는 생략, 고정하려면 0–2147483647을 지정합니다.
generateAudioboolean아니요동기화된 오디오 트랙을 합성할지 여부입니다. 기본값은 true이며, 무음 비디오를 원하면 false를 지정합니다.

참조 제약 조건

  • 이미지 최대 9개, 비디오 최대 3개, 오디오 최대 3개
  • 전체 유형 합산 최대 12개 파일
  • 비디오/오디오는 각각 15초 이하여야 합니다
  • 이미지는 짧은 변이 400px 이상이어야 합니다
  • sd2.5: 이미지 최대 30개, 비디오 최대 10개, 오디오 최대 10개, 총 최대 50개; 비디오와 오디오는 각각 총 30초 이하입니다

비디오 편집/연장

sd2.5는 참조 기반 생성을 세 가지 서브태스크로 나눕니다. 일반 참조 생성에서는 mode를 생략하고, 기존 비디오를 편집하려면 mode: "edit", 이어서 생성하려면 mode: "extend"를 지정합니다. 둘 다 videoUrls에 최소 1개의 비디오가 필요하며, 항상 원본 비디오의 화면 비율로 출력됩니다.

조작하려는 비디오는 videoUrls첫 번째에 배치하고, 프롬프트에서는 이를 'Video 1'로 지칭하세요. edit은 출력 길이를 첫 번째(원본) 비디오에 강제로 맞추며, 이 비디오는 4–30s여야 하므로 전송한 duration은 무시됩니다. 과금은 원본 비디오 길이를 출력 길이로 사용하고, 모든 참조 비디오를 입력으로 포함합니다. extend는 순서대로 이어붙일 1~3개의 클립을 허용하며, 요청한 duration이 이번 생성의 출력 길이가 됩니다(원본 길이와 무관) — 일반 참조 생성과 동일하게 과금됩니다.

2.0 계열 모델(sd2 / sd2-fast / sd2-mini)도 mode: "edit"mode: "extend"를 지원합니다. 이들은 프롬프트에서 작업을 추론하므로(편집이나 연장 내용을 명확히 설명하세요), 화면 비율은 원본 비디오를 따르고 duration은 계속 직접 제어할 수 있으며 과금도 일반적인 방식입니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2.5",
    "inputs": {
      "mode": "edit",
      "videoInputMode": "reference",
      "videoUrls": ["asset://asset-source-video"],
      "urls": ["https://example.com/annotation-at-1.2s.png"],
      "source_frame_timestamps_ms": [1200],
      "prompt": "Replace the marked object with a red umbrella",
      "outputResolution": "720p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask
파라미터타입필수설명
modestring아니요"edit" 또는 "extend". 일반 참조 생성에서는 생략합니다.
videoUrlsstring[]최소 1개의 비디오가 필요합니다. 첫 번째가 소스('Video 1')이며, 편집 출력 길이와 과금은 이를 따릅니다. 이후 비디오는 추가 참조(edit)이거나 순서대로 이어붙일 추가 클립(extend, 최대 3개)입니다.
urlsstring[]아니요선택적 주석/참조 이미지.
source_frame_timestamps_msnumber[]아니요mode "edit"에서만 사용. urls의 각 이미지마다 원본 비디오 기준 타임스탬프(밀리초, 음수 아님)를 하나씩 지정합니다.
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.

Seedance 파라미터 레퍼런스

sd2 / sd2-fast / sd2-mini / sd2.5 모델의 모든 inputs 파라미터에 대한 전체 레퍼런스입니다.

파라미터타입필수설명
promptstring아니요텍스트 설명(텍스트로 비디오 생성 시 필수, 다른 모드에서는 선택). 최대 20000자.
urlsstring[]아니요이미지 URL. HTTP URL과 에셋 참조(예: "asset://asset-20260326-abc123") 모두 지원합니다. 내부적으로 uploadedUrls에 매핑됩니다.
videoUrlsstring[]아니요참조 비디오 asset:// URI(리퍼런스 모드 전용). 먼저 /api/v1/assets/upload로 업로드해야 합니다 — 외부 URL은 거부됩니다.
audioUrlsstring[]아니요참조 오디오 URL(리퍼런스 모드 전용). sd2.5에서는 오디오 단독 입력을 지원합니다. sd2 / sd2-fast / sd2-mini는 오디오와 함께 이미지 또는 비디오를 최소 1개 지정해야 합니다.
durationstring아니요일반적으로 "4s"~"15s"; sd2.5는 최대 "30s"까지 지원합니다. 기본값: "5s"
resolutionstring아니요화면 비율: auto(기본값) | 720x720 | 720x960 | 960x720 | 1280x720 | 720x1280 | 1280x540
outputResolutionstring아니요출력 해상도 등급: "480p", "720p"(기본값), "1080p", "2k", "4k" 중 하나. 네이티브 해상도는 모델마다 다릅니다: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast·Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. 그보다 높은 등급은 자동으로 업스케일됩니다.
videoInputModestring아니요"keyframe"(기본값) 또는 "reference"
modestring아니요리퍼런스 모드 서브태스크(모든 Seedance 모델 공통): 일반 참조 생성에서는 생략, videoUrls의 첫 번째 비디오를 편집하려면 "edit", 1~3개의 클립을 이어서 생성하려면 "extend". 자세한 내용은 '비디오 편집/연장'을 참고하세요.
source_frame_timestamps_msnumber[]아니요sd2.5 비디오 편집 전용: 주석 이미지마다 음수가 아닌 밀리초 타임스탬프를 하나씩 지정합니다.
seedint아니요재현성을 위한 랜덤 시드입니다. 서버가 무작위로 지정하게 하려면 -1을 지정하거나 생략합니다. 동일한 시드 + 동일한 입력이면 거의 일치하는 결과를 얻을 수 있습니다(GPU의 비결정성으로 인해 비트 단위로 완전히 동일하지는 않습니다). 범위: -1~2147483647.
generateAudioboolean아니요비디오에 동기화된 오디오 트랙(음성, 효과음, 배경 음악)을 합성할지 여부입니다. 기본값은 true입니다. 무음 비디오를 만들려면 false로 설정하세요 — 처리 속도가 약간 빨라지며, 별도로 더빙할 계획이라면 유용합니다.
bitrateModestring아니요동일한 해상도에서의 출력 비트레이트 등급: "standard"(기본값) 또는 "high". "high"는 더 많은 디테일을 유지하고 밴딩/블로킹을 줄이지만 파일 크기가 약 3~5배가 됩니다 — 해상도나 가격은 변하지 않습니다.
upscaleResolutionstring아니요(사용 중단됨) 이전 방식의 분리형 필드이며, 하위 호환성을 위해 계속 허용됩니다. 새로 연동할 때는 outputResolution을 사용하세요. 이제 "2k" / "4k"를 직접 지정할 수 있습니다. 둘 다 전송하면 upscaleResolution이 우선 적용됩니다 — 단, 네이티브 1080p를 지원하는 모델(Seedance2 Pro / Seedance 2.5)에서는 upscaleResolution:"1080p"가 네이티브 1080p로 처리됩니다(네이티브 요율로 과금).

최상위 요청 필드: model(필수), inputs(필수), callBackUrl(선택적 webhook URL).

Seedance 에셋

Seedance 에셋은 Seedance 비디오 생성 작업에서 사용되기 전에 ByteDance Volcano 검토 절차를 거치는 이미지, 비디오 및 오디오 파일입니다. 에셋을 업로드하고 ACTIVE 상태가 될 때까지 기다린 뒤 Seedance 작업에서 해당 asset:// URL을 사용하세요.

참고: 실제 인물이 등장하는 이미지/비디오 에셋은 공식 검토가 필요하며, 보통 몇 초 내에 완료됩니다. 승인되면 바로 참조로 사용할 수 있습니다. 검토를 거치지 않으면 생성이 실패할 수 있습니다.

에셋 업로드

업로드 방법은 두 가지입니다: 로컬 파일을 직접 전송(multipart/form-data)하거나, 공개적으로 접근 가능한 HTTPS URL을 제출합니다. 두 방법 모두 에셋은 자동으로 처리 및 검토됩니다.

방법 A — 파일 직접 업로드(multipart/form-data)

이미지 호스트 없이 로컬 파일을 전송합니다. 미디어 타입은 파일의 바이트에서 감지됩니다(파일명 확장자는 신뢰하지 않습니다). 허용 형식: 이미지(jpg/png/webp/gif/bmp/tiff/heic), 비디오(mp4/mov), 오디오(wav/mp3). 파일당 최대 50MB(이미지 ≤30MB, 비디오 ≤50MB, 오디오 ≤15MB).

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/photo.jpg" \
  -F "name=my-photo" \
  https://seegen.ai/api/v1/assets/upload
파라미터타입필수설명
filefile로컬 파일(multipart 폼 필드). 미디어 타입은 콘텐츠에서 감지됩니다.
namestring아니요에셋 이름(최대 64자)

방법 B — URL로 업로드(application/json)

파일이 이미 공개 HTTPS URL에 호스팅되어 있는 경우.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/photo.jpg",
    "type": "IMAGE",
    "name": "my-photo"
  }' \
  https://seegen.ai/api/v1/assets/upload
파라미터타입필수설명
urlstring업로드할 파일의 공개 접근 가능한 HTTPS URL
typestring"IMAGE", "AUDIO", 또는 "VIDEO"
namestring아니요에셋 이름(최대 64자)

업로드 응답

{
  "assetId": 123,
  "volcAssetId": "asset-20260326-abc123",
  "type": "IMAGE",
  "status": "PROCESSING",
  "failReason": null,
  "url": "https://example.com/photo.jpg",
  "name": "my-photo",
  "createdAt": 1711234567890
}

에셋 상태 조회

에셋의 검토 상태를 폴링합니다. 상태가 PROCESSING이면 이 엔드포인트가 검토 시스템의 업데이트를 자동으로 확인합니다.

# Query by asset ID (numeric)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=123"

# Query by volcAssetId (string)
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/status?assetId=asset-20260326-abc123"

에셋 상태 값

  • PROCESSING검토 중, 아직 사용 불가
  • ACTIVE검토 통과, 작업에서 사용 가능
  • FAILED검토 실패, failReason을 확인하세요

에셋 목록 조회

타입과 상태로 필터링하여 업로드한 에셋을 목록으로 조회합니다. 커서 기반 페이지네이션을 지원합니다.

# List all assets
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list"

# Filter by type and status
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?type=IMAGE&status=ACTIVE&limit=10"

# Paginate with cursor
curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/assets/list?cursor=100&limit=20"
파라미터타입필수설명
typestring아니요타입으로 필터링: "IMAGE", "AUDIO", 또는 "VIDEO"
statusstring아니요상태로 필터링: "NONE", "PROCESSING", "ACTIVE", 또는 "FAILED"
cursornumber아니요페이지네이션용 커서(이전 응답의 nextCursor 사용)
limitnumber아니요페이지당 항목 수, 1-50(기본값: 20)

목록 응답

{
  "items": [
    {
      "assetId": 123,
      "volcAssetId": "asset-20260326-abc123",
      "type": "IMAGE",
      "status": "ACTIVE",
      "failReason": null,
      "url": "https://example.com/photo.jpg",
      "name": "my-photo",
      "width": 1920,
      "height": 1080,
      "size": 245000,
      "duration": null,
      "createdAt": 1711234567890
    }
  ],
  "nextCursor": 122
}

작업에서 에셋 사용하기

에셋이 ACTIVE 상태가 되면, 작업의 URL에서 asset:// 프로토콜과 함께 해당 volcAssetId를 사용하세요:

{
  "model": "sd2",
  "inputs": {
    "urls": ["asset://asset-20260326-abc123"],
    "prompt": "The person slowly looks up and smiles",
    "duration": "5s"
  }
}

Wan 3.0 Video 및 Wan 3.0 Video Prime

Wan 3.0은 텍스트 동영상 생성, 첫 프레임 이미지 동영상 생성, 첫·마지막 프레임 보간, 이미지/동영상/오디오 혼합 참조, 동영상 편집 및 연장을 지원합니다. wan3.0-video-primewan3.0-video와 동일한 입력을 지원하며 생성 속도가 최적화되어 있습니다.

두 별칭 모두 SeeGen의 비동기 API를 사용합니다. POST /api/v1/jobs/createTasktaskId를 반환하며, GET /api/v1/jobs/queryTask?taskId=...를 폴링하거나 callBackUrl을 제공해 최종 결과를 받을 수 있습니다.

지원 출력: 워터마크 없는 네이티브 480p, 720p, 1080p의 고정 2–30초 영상. 자동 길이(duration: -1), 2K/4K 출력, 사용자 지정 watermark 설정은 지원하지 않습니다. 참조 미디어를 먼저 업로드한 뒤 반환된 HTTPS URL을 사용하세요.

텍스트-동영상

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video-prime",
    "inputs": {
      "prompt": "A red paper boat glides across a calm pond at sunrise, locked camera, no text.",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "16:9",
      "generateAudio": true,
      "promptExtend": true,
      "seed": 12345
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지-동영상(첫 프레임)

multipart POST /api/v1/assets/upload?model=wan3.0-video(또는 Prime 별칭)로 Wan 미디어를 업로드하고 생성 입력에는 반환된 본인 소유의 HTTPS url을 사용하세요. 반환된 assetId는 SeeGen 미디어 레코드 ID일 뿐이며 생성 입력으로 보내면 안 됩니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@/path/to/first-frame.webp" \
  "https://seegen.ai/api/v1/assets/upload?model=wan3.0-video"
{
  "assetId": 123,
  "type": "IMAGE",
  "status": "ACTIVE",
  "url": "https://static.seegen.ai/materials/api/.../first-frame.webp"
}
curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "inputs": {
      "urls": ["https://static.seegen.ai/materials/api/.../first-frame.webp"],
      "videoInputMode": "keyframe",
      "prompt": "The subject looks toward the camera as morning mist drifts past.",
      "duration": "5s",
      "outputResolution": "1080p",
      "generateAudio": true
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

첫 프레임 및 마지막 프레임

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "inputs": {
      "urls": [
        "https://static.seegen.ai/materials/api/.../first-frame.webp",
        "https://static.seegen.ai/materials/api/.../last-frame.webp"
      ],
      "videoInputMode": "keyframe",
      "prompt": "A smooth continuous transition from sunrise to night.",
      "duration": "8s",
      "outputResolution": "720p"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

다중 참조(이미지, 동영상 및 오디오)

videoInputMode: "reference"를 설정하고 urls, videoUrls, audioUrls를 통해 지원 미디어를 하나 이상 전달하세요. 프롬프트는 선택 사항입니다. 미디어를 순서대로 Image1, Image2, Video1, Audio1로 참조합니다. 각 참조 미디어를 먼저 Wan multipart 엔드포인트로 업로드한 뒤 반환된 본인 소유 HTTPS URL을 사용하세요.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video-prime",
    "inputs": {
      "videoInputMode": "reference",
      "urls": ["https://static.seegen.ai/materials/api/.../reference-image.webp"],
      "videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
      "audioUrls": ["https://static.seegen.ai/materials/api/.../reference-audio.mp3"],
      "prompt": "Use Image1 for identity, Video1 for motion, and Audio1 for timing.",
      "duration": "10s",
      "outputResolution": "720p",
      "ratio": "16:9",
      "generateAudio": true,
      "promptExtend": true
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

영상 편집

원본 동영상을 업로드한 다음 mode: "edit"videoInputMode: "reference"를 설정하세요. 필수 프롬프트에 videoUrls의 첫 번째 동영상인 Video1을 어떻게 편집할지 설명합니다. 화면 비율은 자동이며 출력 길이는 직접 선택합니다. 편집과 연장 모두 아래의 참조 미디어 제한 및 요금이 적용됩니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video",
    "inputs": {
      "mode": "edit",
      "videoInputMode": "reference",
      "videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
      "prompt": "Transform Video1 into clay animation, keeping the characters and camera movement.",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "adaptive"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

영상 연장

mode: "extend"를 설정하고 원본 동영상과 'Video1을 뒤로 연장' 같은 연장 지시, 이후 내용을 입력하세요. ratio: "adaptive"를 설정합니다. 선택한 duration은 생성되는 출력 길이이며, 원본과 연장 부분을 합친 길이가 아닙니다. 파일 및 웹페이지 기반 동영상 생성은 지원하지 않습니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan3.0-video-prime",
    "inputs": {
      "mode": "extend",
      "videoInputMode": "reference",
      "videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
      "prompt": "Extend Video1 forward, continuing the motion of the character and keeping the scene consistent.",
      "duration": "5s",
      "outputResolution": "720p",
      "ratio": "adaptive"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Wan 3.0 매개변수 참조

두 Wan 3.0 모델은 동일한 inputs 필드를 사용합니다. 출력 길이는 2–30초 범위에서 1초 단위로 선택하세요.

파라미터타입필수설명
promptstring아니요동영상 설명 또는 지시. 최대 20,000자. 텍스트 동영상 생성, 동영상 편집 및 연장에서는 필수이며, 이미지 동영상 생성, 첫·마지막 프레임 및 다중 참조에서는 선택 사항입니다. 편집과 연장에는 동영상도 필요합니다. 참조 순서에 따라 Image1 / Video1 / Audio1 표기를 사용하세요.
modestring아니요일반 생성은 생략하거나 "normal"을 사용합니다. "edit" 또는 "extend"를 사용하려면 동영상과 지시 프롬프트가 필요합니다. 두 모드 모두 참조 모드, 자동 화면 비율 및 2–30초의 고정 출력 길이를 사용합니다.
urlsstring[]아니요Wan 업로드 엔드포인트가 반환한 본인 소유의 HTTPS 이미지 URL입니다. 텍스트-투-비디오에서는 생략하고 첫 프레임 1장, 첫/마지막 프레임 2장 또는 참조 모드에서 최대 10장을 전달합니다. 소유하지 않은 외부 URL과 Seedance 에셋 프로토콜 참조는 거부됩니다.
videoUrlsstring[]아니요Wan 업로드 엔드포인트가 반환한 본인 소유의 HTTPS 참조 동영상 URL을 최대 5개 사용할 수 있습니다. 각 영상은 1–15초, 참조 동영상의 합은 최대 15초이며 참조 동영상과 출력 길이의 합은 최대 30초입니다. 소유하지 않은 외부 URL과 Seedance 에셋 프로토콜 참조는 거부됩니다.
audioUrlsstring[]아니요Wan 업로드 엔드포인트가 반환한 본인 소유의 HTTPS 참조 오디오 URL을 최대 5개 사용할 수 있습니다. WAV 또는 MP3 형식이며 각 오디오는 1–15초, 참조 오디오의 합은 최대 15초입니다. 소유하지 않은 외부 URL과 Seedance 에셋 프로토콜 참조는 거부됩니다.
videoInputModestring아니요텍스트-동영상에서는 생략하세요. 첫 프레임 하나 또는 첫/마지막 프레임 두 개에는 "keyframe"을 사용하고, 이미지/동영상/오디오 혼합 참조에는 "reference"를 사용하세요.
durationstring아니요"2s"부터 "30s"까지의 정수 초 문자열입니다. 기본값: "5s".
outputResolutionstring아니요네이티브 "480p", "720p"(기본값), "1080p". 2K/4K 출력은 지원하지 않습니다.
ratiostring아니요"auto" 또는 "adaptive"(둘 다 자동 화면 비율), "16:9", "9:16", "1:1", "4:3" 또는 "3:4". 텍스트 동영상 생성과 다중 참조에 사용합니다. 편집과 연장은 항상 자동이며, 이미지 동영상 생성과 첫·마지막 프레임의 출력은 키프레임 이미지를 따릅니다.
generateAudioboolean아니요동기화된 음성, 음향 효과 및 음악을 생성합니다. 기본값은 true입니다. 무음 출력을 원하면 false로 설정하세요. 요금은 변경되지 않습니다.
promptExtendboolean아니요생성 전에 모델이 프롬프트를 보강하도록 합니다. 기본값은 true입니다.
seedint아니요0–2147483647입니다. 유사한 재시도를 위해 동일한 시드와 입력을 사용하세요.

참조 미디어 요구 사항

  • 이미지: 최대 10개; JPEG/JPG/PNG(투명도 없음)/BMP/WebP; 각 파일 ≤20MB; 각 변 240~8000px; 가로세로 비율 최대 8:1
  • 동영상: MP4/MOV 클립 최대 5개; 각 파일 ≤100MB; 각 1~15초, 전체 입력 ≤15초, 입력 + 요청된 출력 ≤30초; 각 변 240~4096px; 가로세로 비율 최대 8:1
  • 오디오: Wan 업로드 엔드포인트가 반환한 WAV/MP3 HTTPS URL 최대 5개; 각 파일 ≤15MB; 각 1~15초, 전체 ≤15초
  • 첫/마지막 프레임 모드는 참조 이미지, 동영상 또는 오디오 배열과 함께 사용할 수 없습니다.

모델 선택(이미지)

이미지 모델은 프롬프트(및 선택적으로 참조 이미지)를 받아 작업당 이미지 1장을 반환합니다. 각 요청은 선택한 모델의 등급에 따라 이미지 단위로 과금됩니다(단, Seedream Lite는 고정 요금이 적용됩니다). 실패한 작업은 자동으로 환불됩니다. 배치 파라미터는 없습니다 — 여러 변형을 생성하려면 이미지마다 createTask를 한 번씩 호출하세요.

모델T2II2I(편집)Multi-Ref최대 해상도2k / medium
gpt-image-2.5-flare최대 10장4k요금제 참고
gpt-image-2.5-sunburst최대 10장4k요금제 참고
gpt-image-2최대 10장4k요금제 참고
nano-banana-2최대 10장4k요금제 참고
nano-banana-pro최대 10장4k요금제 참고
seedream-v5.0-lite최대 10장4k정액
seedream-v5.0-pro최대 10장2k요금제 참고

GPT Image 2.5 Flare / Sunburst

GPT Image 2.5 Flare는 빠른 이미지 생성과 편집에, Sunburst는 세밀한 이미지 생성과 정밀한 편집에 중점을 둡니다. 두 모델 모두 텍스트 프롬프트와 참조 이미지를 사용합니다.

워크스페이스, Playground, API에서 사용할 수 있습니다. 두 모델 모두 medium/high/xhigh/max 품질, 1K/2K/4K 프리셋, PNG/JPEG/WebP 출력 매개변수를 지원합니다. 실제 크기는 프리셋과 다를 수 있습니다. JPEG와 WebP는 생성된 PNG에서 크기 변경 없이 변환됩니다. 각 API 작업은 이미지 한 장을 생성합니다.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-flare",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "quality": "medium",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

urls로 1~10장의 참조 이미지를 전달하세요. 모델은 이를 prompt에 설명된 편집을 위한 시각적 맥락으로 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-sunburst",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "quality": "medium",
      "resolution": "1k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

GPT Image 2.5 파라미터 레퍼런스

gpt-image-2.5-flare 모델의 모든 inputs 파라미터에 대한 전체 레퍼런스입니다.

파라미터타입필수설명
promptstring생성할 이미지에 대한 텍스트 설명, 또는 urls가 제공된 경우 적용할 편집 내용.
urlsstring[]아니요이미지로 이미지(편집) 모드용 참조 이미지 URL(1~10장). 텍스트로 이미지 생성 시 생략. 공개 HTTPS URL을 허용합니다.
qualitystring아니요"medium" / "high" / "xhigh" / "max". 기본값: "medium". 크레딧은 등급에 따라 달라집니다(요금제 참고).
resolutionstring아니요"1k" / "2k" / "4k". 기본값: "2k". 크레딧은 등급에 따라 달라집니다(요금제 참고).
aspectRatiostring아니요"1:1" / "16:9" / "9:16" / "4:3" / "3:4". 기본값: "1:1".
outputFormatstring아니요"png" / "jpeg" / "webp". 기본값: "png".

입력 이미지 요구 사항(이미지로 이미지 모드)

  • 작업당 참조 이미지 최대 10장
  • 이미지당 최대 파일 크기 50MB
  • 짧은 변 ≥ 256px
  • 화면 비율은 1:3~3:1 사이
  • 형식: JPEG, JPG, PNG, WEBP

이미지당 크레딧은 해상도와 품질에 따라 달라집니다 — 전체 표는 요금제 섹션을 참고하세요.

GPT Image 2

OpenAI의 GPT Image 2 모델을 사용한 고품질 텍스트로 이미지 생성 및 이미지로 이미지 편집. 하나의 워크플로에서 두 모드를 모두 처리합니다 — urls를 전달하면 자동으로 편집 모드로 전환됩니다. 출력은 요청한 형식(PNG / JPEG / WEBP)으로 R2를 통해 전달됩니다. 모델명: gpt-image-2.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "quality": "medium",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

urls로 1~10장의 참조 이미지를 전달하세요. 모델은 이를 prompt에 설명된 편집을 위한 시각적 맥락으로 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "quality": "medium",
      "resolution": "1k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

GPT Image 2 파라미터 레퍼런스

gpt-image-2 모델의 모든 inputs 파라미터에 대한 전체 레퍼런스입니다.

파라미터타입필수설명
promptstring생성할 이미지에 대한 텍스트 설명, 또는 urls가 제공된 경우 적용할 편집 내용.
urlsstring[]아니요이미지로 이미지(편집) 모드용 참조 이미지 URL(1~10장). 텍스트로 이미지 생성 시 생략. 공개 HTTPS URL을 허용합니다.
qualitystring아니요"medium" / "high". 기본값: "medium". 크레딧은 등급에 따라 달라집니다(요금제 참고).
resolutionstring아니요"1k" / "2k" / "4k". 기본값: "2k". 크레딧은 등급에 따라 달라집니다(요금제 참고).
aspectRatiostring아니요"1:1" / "16:9" / "9:16" / "4:3" / "3:4". 기본값: "1:1".
outputFormatstring아니요"png" / "jpeg" / "webp". 기본값: "png".

입력 이미지 요구 사항(이미지로 이미지 모드)

  • 작업당 참조 이미지 최대 10장
  • 이미지당 최대 파일 크기 50MB
  • 짧은 변 ≥ 256px
  • 화면 비율은 1:3~3:1 사이
  • 형식: JPEG, JPG, PNG, WEBP

이미지당 크레딧은 해상도와 품질에 따라 달라집니다 — 전체 표는 요금제 섹션을 참고하세요.

Nano Banana 2

Nano Banana 2은 gpt-image-2보다 더 폭넓은 화면 비율을 지원하는 고품질 이미지 모델입니다 — 세로/가로 프리셋(3:2, 2:3, 4:5, 5:4)과 시네마틱한 21:9가 추가되었습니다. 하나의 워크플로에서 두 모드를 모두 처리합니다 — urls를 전달하면 자동으로 편집 모드로 전환됩니다. 모델명: nano-banana-2.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

urls로 1~10장의 참조 이미지를 전달하세요. 모델은 이를 prompt에 설명된 편집을 위한 시각적 맥락으로 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Nano Banana 2 파라미터 레퍼런스

nano-banana-2 모델의 모든 inputs 파라미터에 대한 전체 레퍼런스입니다.

파라미터타입필수설명
promptstring생성할 이미지에 대한 텍스트 설명, 또는 urls가 제공된 경우 적용할 편집 내용.
urlsstring[]아니요이미지로 이미지(편집) 모드용 참조 이미지 URL(1~10장). 텍스트로 이미지 생성 시 생략. 공개 HTTPS URL을 허용합니다.
resolutionstring아니요"1k" / "2k" / "4k". 기본값: "2k". 크레딧은 등급에 따라 달라집니다(요금제 참고).
aspectRatiostring아니요"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". 기본값: "1:1".

입력 이미지 요구 사항(이미지로 이미지 모드)

  • 작업당 참조 이미지 최대 10장
  • 이미지당 최대 파일 크기 50MB
  • 짧은 변 ≥ 256px
  • 화면 비율은 1:3~3:1 사이
  • 형식: JPEG, JPG, PNG, WEBP

이미지당 크레딧은 해상도에 따라 달라집니다 — 전체 표는 요금제 섹션을 참고하세요.

Nano Banana Pro

Nano Banana Pro은 gpt-image-2보다 더 폭넓은 화면 비율을 지원하는 고품질 이미지 모델입니다 — 세로/가로 프리셋(3:2, 2:3, 4:5, 5:4)과 시네마틱한 21:9가 추가되었습니다. 하나의 워크플로에서 두 모드를 모두 처리합니다 — urls를 전달하면 자동으로 편집 모드로 전환됩니다. 모델명: nano-banana-pro.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
      "resolution": "2k",
      "aspectRatio": "16:9"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

urls로 1~10장의 참조 이미지를 전달하세요. 모델은 이를 prompt에 설명된 편집을 위한 시각적 맥락으로 사용합니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-pro",
    "inputs": {
      "urls": ["https://example.com/portrait.jpg"],
      "prompt": "Restyle as oil painting",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Nano Banana Pro 파라미터 레퍼런스

nano-banana-pro 모델의 모든 inputs 파라미터에 대한 전체 레퍼런스입니다.

파라미터타입필수설명
promptstring생성할 이미지에 대한 텍스트 설명, 또는 urls가 제공된 경우 적용할 편집 내용.
urlsstring[]아니요이미지로 이미지(편집) 모드용 참조 이미지 URL(1~10장). 텍스트로 이미지 생성 시 생략. 공개 HTTPS URL을 허용합니다.
resolutionstring아니요"1k" / "2k" / "4k". 기본값: "2k". 크레딧은 등급에 따라 달라집니다(요금제 참고).
aspectRatiostring아니요"1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". 기본값: "1:1".

입력 이미지 요구 사항(이미지로 이미지 모드)

  • 작업당 참조 이미지 최대 10장
  • 이미지당 최대 파일 크기 50MB
  • 짧은 변 ≥ 256px
  • 화면 비율은 1:3~3:1 사이
  • 형식: JPEG, JPG, PNG, WEBP

이미지당 크레딧은 해상도에 따라 달라집니다 — 전체 표는 요금제 섹션을 참고하세요.

Seedream 5.0 Lite

2K 또는 4K, 15가지 화면 비율로 빠른 텍스트로 이미지 생성 및 이미지로 이미지 생성을 지원합니다. 모델명: seedream-v5.0-lite.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "A cinematic product photograph, soft studio light",
      "resolution": "2k",
      "aspectRatio": "1:1"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-lite",
    "inputs": {
      "prompt": "Restyle the references as a premium fashion campaign",
      "urls": ["https://example.com/reference.png"],
      "resolution": "4k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Seedream 5.0 Lite 파라미터

파라미터타입필수설명
promptstring이미지 설명 또는 편집 지시사항.
urlsstring[]아니요공개 HTTPS 참조 이미지 URL 1~10장. 텍스트로 이미지 생성 시 생략.
resolutionstring아니요"2k" 또는 "4k". 기본값: "2k".
aspectRatiostring아니요"1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", 또는 "21:9".

Seedream 5.0 Pro

1K 또는 2K로 고화질 생성 및 편집을 지원합니다. 모델명: seedream-v5.0-pro.

텍스트로 이미지 생성

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Editorial portrait with dramatic rim lighting",
      "resolution": "2k",
      "aspectRatio": "3:4"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

이미지로 이미지 생성(편집)

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedream-v5.0-pro",
    "inputs": {
      "prompt": "Turn the reference into a cinematic poster",
      "urls": ["https://example.com/reference.png"],
      "resolution": "2k",
      "aspectRatio": "1:2"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

Seedream 5.0 Pro 파라미터

파라미터타입필수설명
promptstring이미지 설명 또는 편집 지시사항.
urlsstring[]아니요공개 HTTPS 참조 이미지 URL 1~10장. 텍스트로 이미지 생성 시 생략.
resolutionstring아니요"1k" 또는 "2k". 기본값: "1k". 4k는 지원되지 않습니다.
aspectRatiostring아니요"1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", 또는 "21:9".

비디오 업스케일러

작업 생성

POST /api/v1/upscale/create

# source.url accepts ANY https video URL — your own CDN, OR a file you first
# uploaded to us via /api/v1/assets/upload (pass the r2Url it returns). No need
# to declare which: we detect it. External URLs are validated; our own are trusted.
curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source": { "type": "url", "url": "https://your-cdn.com/video.mp4" },
    "targetResolution": "2k",
    "callBackUrl": "https://your-server.com/webhook"
  }' \
  https://seegen.ai/api/v1/upscale/create
파라미터타입필수설명
source.typestring모든 소스에는 "url"을 사용하세요("uploadId"는 하위 호환성을 위해 유지되는 레거시 별칭입니다).
source.urlstring아니요type="url"인 경우. 자체 CDN 또는 /api/v1/assets/upload가 반환하는 r2Url 등 모든 https 비디오 URL. 외부 URL의 경우, http 및 사설/내부 IP는 거부됩니다(SSRF 방지). 자체 에셋 호스트의 URL은 이 검사를 건너뜁니다.
source.r2Urlstring아니요레거시 — type="uploadId"인 경우에만 사용(하위 호환). 새로 연동할 때는 type="url"을 사용하세요.
targetResolutionstring"720p", "1080p", "2k", 또는 "4k". 소스 해상도보다 높아야 합니다.
callBackUrlstring아니요종료 상태(완료 또는 실패)에 도달했을 때 한 번 호출되는 Webhook URL.

생성 응답

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "orderId": "ord_2026...",
  "status": "validating"
}

상태 조회

GET /api/v1/upscale/query?taskId=...

상태는 validatingprocessingcompleted / failed 순으로 진행됩니다.

curl -H "Authorization: Bearer $API_KEY" \
  "https://seegen.ai/api/v1/upscale/query?taskId=n770mo4sh6rpi690ff3gwymx"

완료 응답

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "completed",
  "targetResolution": "2k",
  "creditsConsumed": 900,
  "result": {
    "url": "https://static.seegen.ai/standalone-upscale/results/...mp4",
    "probedDurationSeconds": 30,
    "probedSourceResolution": "1280x720"
  },
  "error": null,
  "createdAt": "2026-04-29T01:23:45.000Z",
  "finishedAt": "2026-04-29T01:35:01.000Z"
}

실패 응답

{
  "taskId": "n770mo4sh6rpi690ff3gwymx",
  "status": "failed",
  "creditsConsumed": null,
  "result": null,
  "error": {
    "code": "SOURCE_RESOLUTION_TOO_HIGH",
    "message": "Source 3840x2160 is not below target 4k"
  }
}

제한 사항

  • 소스: https URL 또는 이전에 업로드한 R2 URL
  • 최대 600초(5초 미만 클립은 5초로 과금)
  • 파일 크기 ≤ 200MB
  • 형식: MP4 / MOV / WebM
  • 소스 해상도는 타깃보다 낮아야 합니다

요금

  • 720P: 초당 17크레딧(5s = 85, 30s = 510)
  • 1080P: 초당 25크레딧(5s = 125, 30s = 750)
  • 2K: 초당 38크레딧(5s = 190, 30s = 1140)
  • 4K: 초당 50크레딧(5s = 250, 30s = 1500)
  • 최소 5초; 실패 시 크레딧이 자동으로 환불됩니다

오류 코드

조치할 수 있는 일반적인 오류입니다. 그 외의 실패는 내용을 바로 알 수 있는 message 필드를 반환합니다 — 코드가 이 중 하나라고 가정하기 전에 먼저 이를 확인하세요.

코드의미
INVALID_URLURL 형식이 잘못되었거나 https가 아닙니다
URL_NOT_REACHABLEURL을 가져올 수 없습니다 — 공개적으로 접근 가능한지 확인하세요
UNSUPPORTED_MEDIA_TYPE파일이 비디오가 아니거나 MP4 / MOV / WebM 형식이 아닙니다
FILE_TOO_LARGE소스가 200MB를 초과합니다
DURATION_EXCEEDS_LIMIT소스가 600초를 초과합니다
SOURCE_RESOLUTION_TOO_HIGH소스가 이미 타깃과 같거나 더 높습니다 — 더 높은 타깃을 선택하세요
INSUFFICIENT_CREDITS크레딧이 부족합니다 — 충전 후 다시 시도하세요
ACCOUNT_FROZEN계정에서 크레딧을 사용할 수 없습니다 — 고객 지원팀에 문의하세요

Webhook 콜백

폴링 대신 callBackUrl을 제공하면 작업이 완료되거나 실패했을 때 결과를 자동으로 받을 수 있습니다.

curl -X POST \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sd2",
    "callBackUrl": "https://your-server.com/webhook/callback",
    "inputs": {
      "prompt": "A cat playing piano",
      "duration": "5s"
    }
  }' \
  https://seegen.ai/api/v1/jobs/createTask

콜백 페이로드

작업이 완료되면 queryTask 응답과 동일한 형식으로 귀하의 URL에 POST 요청을 전송합니다:

// POST to your callBackUrl
{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",
  "creditsUsed": 200,
  "output": [
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

재시도 정책: 엔드포인트가 2xx 이외의 상태를 반환하면, 지연 시간을 늘려가며 최대 3회 재시도합니다(1s, 5s, 30s).

응답 형식

createTask 응답

// 200 OK
{ "taskId": "task_abc123" }

queryTask 응답

{
  "taskId": "task_abc123",
  "model": "sd2",
  "status": "COMPLETED",     // "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED"
  "creditsUsed": 200,
  "output": [                // null when status is not "COMPLETED"
    {
      "url": "https://static.seegen.ai/videos/result.mp4",
      "width": 1280,
      "height": 720
    }
  ],
  "error": null,             // error message when status is "FAILED"
  "createTime": 1711234567890,
  "completeTime": 1711234612345
}

credits 응답

{
  "credits": 5000,
  "availableCredits": 4800
}

오류 처리

상태 코드의미조치
400잘못된 파라미터오류 메시지를 확인하고 요청을 수정하세요
401API 키가 유효하지 않거나 없음Authorization 헤더 형식을 확인하세요
402크레딧 부족Credits를 열어 크레딧을 구매하거나 자동 충전을 활성화한 후 요청을 다시 시도하세요
403접근 거부본인 소유의 작업만 조회할 수 있습니다
404작업을 찾을 수 없음taskId가 올바른지 확인하세요
500내부 서버 오류몇 초 후 다시 시도하세요

제출 전 검증(코드가 포함된 HTTP 400)

Seedance 및 Wan 3.0 요청은 크레딧 차감 전에 SeeGen 제품 규칙에 따라 검사됩니다. 실패하면 createTask가 HTTP 400과 { "message": "...", "code": "..." }를 반환하며 Wan 오류에는 path가 포함될 수도 있습니다. 작업은 생성되거나 과금되지 않습니다.

파라미터타입필수설명
EMPTY_CONTENTcode아니요프롬프트도 없고 참조 이미지/비디오/오디오도 없습니다.
AUDIO_ONLY_NOT_SUPPORTEDcode아니요sd2 / sd2-fast / sd2-mini에서 오디오만 참조로 사용되었습니다. 이미지나 비디오를 추가하거나, sd2.5(오디오 단독 지원)를 사용하세요.
UNSUPPORTED_MODELcode아니요모델 별칭이 지원되지 않습니다. Wan 3.0에는 정확히 "wan3.0-video-prime" 또는 "wan3.0-video"를 사용하세요.
UNSUPPORTED_RESOLUTIONcode아니요선택한 출력 등급을 사용할 수 없습니다. Wan 3.0 출시 버전은 기본 480p / 720p / 1080p만 지원하며, 2K/4K 및 upscaleResolution은 거부됩니다.
DURATION_OUT_OF_RANGEcode아니요duration은 모델 범위 내의 정수가 아닙니다(Wan 3.0 「2s」–「30s」, sd2 제품군 「4s」–「15s」, sd2.5 「4s」–「30s」). Wan 스마트 duration(-1)은 제공되지 않습니다.
INVALID_MEDIA_COMBINATIONcode아니요미디어가 선택한 모드와 일치하지 않습니다(예: 키프레임 수가 잘못되었거나, text-to-video에 미디어가 포함되었거나, multi-reference에 미디어가 없거나, 키프레임과 참조 입력이 혼합됨).
EDIT_SOURCE_VIDEO_REQUIRED / EXTEND_SOURCE_VIDEO_REQUIREDcode아니요videoUrls에 비디오가 없는 상태로 mode "edit" / "extend"가 요청되었습니다.
EDIT_SOURCE_DURATION_INVALIDcode아니요sd2.5 비디오 편집: 요청의 비디오가 4s 미만이거나 30s를 초과합니다(ARK는 편집 작업의 모든 비디오에 4–30s를 적용합니다).
TOO_MANY_REFERENCEScode아니요모델이 허용하는 수보다 많은 참조 이미지 / 동영상 / 오디오 클립이 입력되었습니다(Wan 3.0 10 / 5 / 5, sd2 제품군 9 / 3 / 3, sd2.5 30 / 10 / 10; 동영상은 최대 3개까지 확장 가능).
REFERENCE_VIDEO_DURATION_INVALIDcode아니요참조 동영상이 클립별 제한을 초과했거나, 참조 동영상 입력의 총 길이가 모델 제한을 초과했거나, 입력과 출력의 조합이 유효하지 않습니다. Wan 3.0의 경우 각 클립은 1–15s, 총 입력은 ≤15s이며, 입력 + 요청한 출력은 ≤30s여야 합니다(15+15는 유효하고 15+16은 거부됨).
REFERENCE_AUDIO_DURATION_INVALIDcode아니요확인 가능한 Wan 3.0 참조 오디오 길이가 1~15초 범위를 벗어나거나 전체 참조 오디오 입력이 15초를 초과합니다.
REFERENCE_IMAGE_INVALIDcode아니요Wan 3.0 이미지가 없거나 다른 사용자의 소유이거나 미디어 유형이 잘못되었거나 확인 가능한 크기, 형식, 치수, 종횡비 또는 비투명 요구 사항을 위반합니다.
REFERENCE_VIDEO_INVALIDcode아니요Wan 3.0용으로 업로드한 비디오가 크기, MP4/MOV 형식, 치수 또는 종횡비 요구 사항을 위반합니다.
REFERENCE_AUDIO_INVALIDcode아니요Wan 3.0용으로 업로드한 오디오 파일이 크기 또는 WAV/MP3 형식 요구 사항을 위반합니다.
ASSET_NOT_FOUND / EXTERNAL_URL / READ_TIMEOUT / READ_FAILEDcode아니요videoUrls 항목을 업로드한 에셋 중 하나로 확인할 수 없거나, 길이를 읽을 수 없습니다.

전체 예제

전체 워크플로: 에셋을 업로드하고, 검토를 기다린 뒤, 승인된 에셋으로 작업을 생성하고, 결과를 폴링합니다.

const API_KEY = process.env.API_KEY;
const BASE = "https://seegen.ai/api/v1";
const headers = {
  "Authorization": `Bearer ${API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Upload asset and wait for review
// (To upload a LOCAL file instead of a URL, POST multipart/form-data with a "file"
//  field — no Content-Type header, no "type" — see the Upload Asset section above.)
async function uploadAndWaitForAsset(url, type = "IMAGE") {
  const res = await fetch(`${BASE}/assets/upload`, {
    method: "POST",
    headers,
    body: JSON.stringify({ url, type }),
  });
  if (!res.ok) throw new Error(`Upload failed: ${(await res.json()).message}`);
  const asset = await res.json();
  console.log(`Asset uploaded: ${asset.assetId}, status: ${asset.status}`);

  // Poll until review completes
  while (true) {
    const statusRes = await fetch(
      `${BASE}/assets/status?assetId=${asset.assetId}`,
      { headers }
    );
    const status = await statusRes.json();
    if (status.status === "ACTIVE") {
      console.log(`Asset approved: asset://${status.volcAssetId}`);
      return status.volcAssetId;
    }
    if (status.status === "FAILED") {
      throw new Error(`Asset review failed: ${status.failReason}`);
    }
    await new Promise((r) => setTimeout(r, 3000));
  }
}

// 2. Create a task
async function createTask(inputs, callBackUrl) {
  const res = await fetch(`${BASE}/jobs/createTask`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      model: "sd2",
      inputs,
      ...(callBackUrl && { callBackUrl }),
    }),
  });
  if (!res.ok) throw new Error(`[${res.status}] ${(await res.json()).message}`);
  return res.json();
}

// 3. Poll until done
async function waitForResult(taskId, timeoutMs = 300000) {
  const start = Date.now();
  while (Date.now() - start < timeoutMs) {
    const res = await fetch(
      `${BASE}/jobs/queryTask?taskId=${taskId}`,
      { headers }
    );
    const result = await res.json();
    if (result.status === "COMPLETED") return result;
    if (result.status === "FAILED") throw new Error(result.error);
    await new Promise((r) => setTimeout(r, 5000));
  }
  throw new Error("Timeout waiting for task");
}

// Full workflow: upload → review → generate → result
async function main() {
  // Upload image and wait for review
  const volcAssetId = await uploadAndWaitForAsset(
    "https://example.com/photo.jpg", "IMAGE"
  );

  // Create task with approved asset
  const { taskId } = await createTask({
    urls: [`asset://${volcAssetId}`],
    prompt: "The person slowly looks up and smiles",
    duration: "5s",
  });
  console.log(`Task: ${taskId}`);

  // Wait for video
  const result = await waitForResult(taskId);
  console.log(`Video: ${result.output[0].url}`);
}

main().catch(console.error);

도움이 필요하신가요? Discord에 참여하거나 문의하기