영상
POST /v1/videos
문장으로 영상을 만들거나, 사진을 움직이거나, 인물·사물 참고 자료로 영상을 만들어요. 있는 영상을 고치거나
사진 속 인물에게 다른 영상의 동작을 시킬 수도 있어요. 몇 분 걸리는 작업이라 먼저 작업 ID를 받고, 결과는
GET /v1/jobs/{id}로 받아요.
모델 고르기
| 하고 싶은 일 | 모델 | 꼭 보낼 것 |
|---|---|---|
| 문장으로 영상 만들기 (소리 포함 가능) | devdive-video-wan30-t2v 기본값 | prompt |
| 문장으로 영상 만들기 | devdive-video-happyhorse-t2v | prompt |
| 사진을 첫 장면으로 움직이기 | devdive-video-happyhorse-i2v | prompt, image_url |
| 첫 장면과 마지막 장면을 정해서 만들기 | devdive-video-wan30-r2v | image_url (+ end_image_url) |
| 인물·사물·스타일 참고 자료로 만들기 | devdive-video-wan30-r2v | reference_image_urls, reference_video_urls, reference_audio_urls 중 하나 이상 |
| 인물·사물 참고 이미지로 만들기 | devdive-video-happyhorse-r2v | prompt, reference_image_urls (1~9장) |
| 있는 영상을 문장으로 고치기 | devdive-video-happyhorse-edit | prompt, video_url |
| 사진 속 인물이 영상 속 동작을 따라 하기 | devdive-video-wan-action | image_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 |
duration | 1 이상의 정수 | 길이(초). 데브다이브 영상 스튜디오는 5, 10, 15 중에서 골라요 |
watermark | 불리언 | 워터마크를 넣을지 |
seed | 0 이상의 정수 | 같은 값과 같은 입력이면 비슷한 결과가 나오게 해요 |
보내지 않은 설정은 모델 기본값을 써요. 모델이 받지 않는 값을 보내면 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-edit | auto(기본, 새로 만듦) 또는 origin(원본 소리 유지) |
mode | 문자열 | wan-action | wan-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를 쓰세요. → 에러와 한도 - 크레딧은 작업이 끝났을 때 확정돼요. 영상은 다른 작업보다 크레딧이 훨씬 많이 들어요. 처음에는 짧고 낮은 해상도로 시험해 보세요.
- 프롬프트는 자르지 않고 그대로 모델에 전달돼요.