영상

POST /v1/videos

문장으로 영상을 만들거나, 사진을 움직이거나, 인물·사물 참고 자료로 영상을 만들어요. 있는 영상을 고치거나 사진 속 인물에게 다른 영상의 동작을 시킬 수도 있어요. 몇 분 걸리는 작업이라 먼저 작업 ID를 받고, 결과는 GET /v1/jobs/{id}로 받아요.

모델 고르기

하고 싶은 일모델꼭 보낼 것
문장으로 영상 만들기 (소리 포함 가능)devdive-video-wan30-t2v 기본값prompt
문장으로 영상 만들기devdive-video-happyhorse-t2vprompt
사진을 첫 장면으로 움직이기devdive-video-happyhorse-i2vprompt, image_url
첫 장면과 마지막 장면을 정해서 만들기devdive-video-wan30-r2vimage_url (+ end_image_url)
인물·사물·스타일 참고 자료로 만들기devdive-video-wan30-r2vreference_image_urls, reference_video_urls, reference_audio_urls 중 하나 이상
인물·사물 참고 이미지로 만들기devdive-video-happyhorse-r2vprompt, reference_image_urls (1~9장)
있는 영상을 문장으로 고치기devdive-video-happyhorse-editprompt, video_url
사진 속 인물이 영상 속 동작을 따라 하기devdive-video-wan-actionimage_url, video_url (prompt는 보내면 안 돼요)

요청

공통 설정

필드형식설명
model문자열영상 모델 ID. 기본값 devdive-video-wan30-t2v
prompt문자열만들 영상 설명. 모델에 따라 필수, 선택, 받지 않음이 달라요(위 표)
resolution문자열720P, 1080P. WAN 3.0(wan30-*)은 480P도 돼요
ratio문자열화면 비율. 16:9, 9:16, 1:1, 4:3, 3:4
duration1 이상의 정수길이(초). 데브다이브 영상 스튜디오는 5, 10, 15 중에서 골라요
watermark불리언워터마크를 넣을지
seed0 이상의 정수같은 값과 같은 입력이면 비슷한 결과가 나오게 해요

보내지 않은 설정은 모델 기본값을 써요. 모델이 받지 않는 값을 보내면 422와 함께 이유가 와요.

모델별 입력

필드형식받는 모델설명
image_url링크happyhorse-i2v, wan30-r2v, wan-action첫 장면이 될 사진. wan-action에서는 동작을 따라 할 인물 사진
end_image_url링크wan30-r2v마지막 장면. image_url과 함께 보내야 해요
reference_image_urls링크 배열wan30-r2v, happyhorse-r2v, happyhorse-edit인물·사물·스타일 참고 이미지
reference_video_urls링크 배열wan30-r2v참고 영상
reference_audio_urls링크 배열wan30-r2v참고 오디오
video_url링크happyhorse-edit, wan-action고칠 영상, 또는 따라 할 동작이 담긴 영상
audio불리언wan30-t2v, wan30-r2v소리를 함께 만들지
audio_setting문자열happyhorse-editauto(기본, 새로 만듦) 또는 origin(원본 소리 유지)
mode문자열wan-actionwan-std(기본) 또는 wan-pro(더 높은 품질)

표의 모델 이름은 devdive-video-를 뺀 거예요. 받지 않는 모델에 보내면 조용히 버리지 않고 422로 알려 줘요.

설정이 쓰이는 범위도 모델마다 달라요.

  • WAN 3.0 (wan30-t2v, wan30-r2v): resolution, ratio, duration, audio, watermark, seed
  • HappyHorse 1.1 (happyhorse-t2v, happyhorse-i2v, happyhorse-r2v): resolution, ratio, duration, watermark, seed
  • 영상 편집 (happyhorse-edit): resolution, audio_setting, watermark, seed. 길이와 비율은 원본 영상을 따라요
  • 동작 따라 하기 (wan-action): mode만 써요

링크 넣기

  • 사진·영상·오디오는 모두 https 링크로 넘겨요. 데브다이브가 그 링크에서 파일을 직접 가져가요.
  • 누구나 열 수 있는 공개 링크여야 하고, 2083자를 넘으면 안 돼요. data: URI는 받지 않아요.
  • 내 컴퓨터의 파일은 POST /v1/files로 올리고 받은 링크를 넣으세요. 다른 데브다이브 결과 링크(https://api.devdive.ai/media/…)도 내 계정 것이면 그대로 넣을 수 있어요.

WAN 3.0 참고 영상: 장면 고정과 참고 자료

devdive-video-wan30-r2v는 두 방식 중 하나만 써요. 섞어서 보내면 422가 와요.

방식보낼 것결과
장면 고정image_url(첫 장면), end_image_url(마지막 장면, 선택)준 사진에서 시작해서 준 사진으로 끝나요
참고 자료reference_image_urls, reference_video_urls, reference_audio_urls인물·사물·스타일을 참고해서 새로 만들어요

캐릭터를 유지하면서 시작 장면도 정하고 싶다면

캐릭터 시트나 스타일 이미지가 있으면 참고 자료 방식을 쓰세요. 시작·끝 장면으로 쓰고 싶은 이미지도 reference_image_urls에 함께 넣고, prompt에 "1번 이미지는 주인공 캐릭터 시트, 2번 이미지는 첫 장면"처럼 어떤 이미지가 무엇인지 적어 주세요. 장면을 정확히 고정해야 할 때만 image_url·end_image_url을 쓰세요.

응답

요청하면 바로 202 Accepted와 작업이 오고(status: "processing"), 다 만들어지면 GET /v1/jobs/{id}가 결과를 돌려줘요.

{
  "id": "WyJkZXZkaXZlLXZpZGVvLXdhbjMwLXQydiIs….9c1d0e7b2a4f8c3e6d5b4a3f2e1d0c9b",
  "object": "job",
  "type": "video",
  "model": "devdive-video-wan30-t2v",
  "status": "succeeded",
  "credits_used": 1125,
  "result": { "video": { "url": "https://api.devdive.ai/media/…/video.mp4" } },
  "error": null
}

영상 링크는 3일 동안 열려요. 오래 둘 영상은 내려받아 저장하세요.

예시

문장으로 만들기 (curl)

curl https://api.devdive.ai/v1/videos \
  -H "Authorization: Bearer $DEVDIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "비 오는 밤 네온사인 골목을 천천히 걷는 우산 쓴 사람, 카메라는 뒤에서 따라감",
    "resolution": "1080P",
    "ratio": "16:9",
    "duration": 5,
    "audio": true
  }'

모델별 요청 본문

사진을 첫 장면으로 움직이기:

{
  "model": "devdive-video-happyhorse-i2v",
  "prompt": "머리카락이 바람에 날리고, 인물이 천천히 웃는다",
  "image_url": "https://example.com/portrait.jpg",
  "resolution": "1080P",
  "duration": 5
}

첫 장면과 마지막 장면 정하기:

{
  "model": "devdive-video-wan30-r2v",
  "prompt": "꽃봉오리가 천천히 피어난다",
  "image_url": "https://example.com/bud.jpg",
  "end_image_url": "https://example.com/bloom.jpg"
}

캐릭터 참고 자료로 만들기:

{
  "model": "devdive-video-wan30-r2v",
  "prompt": "1번 이미지는 주인공 캐릭터 시트예요. 2번 이미지의 교실에서 주인공이 창밖을 보다가 뒤돌아 손을 흔든다.",
  "reference_image_urls": ["https://example.com/character-sheet.png", "https://example.com/classroom.png"],
  "ratio": "9:16",
  "audio": false
}

영상 고치기:

{
  "model": "devdive-video-happyhorse-edit",
  "prompt": "배경을 눈 내리는 겨울 거리로 바꿔 줘",
  "video_url": "https://example.com/walk.mp4",
  "audio_setting": "origin"
}

사진 속 인물에게 동작 시키기:

{
  "model": "devdive-video-wan-action",
  "image_url": "https://example.com/person.png",
  "video_url": "https://example.com/dance.mp4",
  "mode": "wan-pro"
}

결과 기다리기 (Python)

import os
import time

import requests

API = "https://api.devdive.ai"
HEADERS = {"Authorization": f"Bearer {os.environ['DEVDIVE_API_KEY']}"}

job = requests.post(f"{API}/v1/videos", headers=HEADERS, timeout=120, json={
    "prompt": "해 질 녘 바닷가를 달리는 강아지",
    "duration": 5,
}).json()

while job["status"] == "processing":
    res = requests.get(f"{API}/v1/jobs/{job['id']}", params={"wait": 60},
                       headers=HEADERS, timeout=90)
    if res.status_code in (429, 503):  # 잠깐 막혔으면 기다렸다가 같은 작업을 다시 확인
        time.sleep(int(res.headers.get("Retry-After", "5")))
        continue
    job = res.json()

print(job["result"]["video"]["url"] if job["status"] == "succeeded" else job["error"]["message"])

알아 두기

  • 영상은 보통 몇 분 걸려요. 결과를 기다리다 연결이 끊겨도 작업은 계속돼요. 같은 작업 ID로 다시 확인하세요.
  • 요청을 다시 보내면 영상을 다시 만들고 다시 차감돼요. 제출 요청을 재시도해야 한다면 Idempotency-Key를 쓰세요. → 에러와 한도
  • 크레딧은 작업이 끝났을 때 확정돼요. 영상은 다른 작업보다 크레딧이 훨씬 많이 들어요. 처음에는 짧고 낮은 해상도로 시험해 보세요.
  • 프롬프트는 자르지 않고 그대로 모델에 전달돼요.