이미지

POST /v1/images

문장으로 이미지를 만들거나(생성), 내 사진을 바탕으로 바꿔요(편집). 몇십 초 걸리는 작업이라 먼저 작업 ID를 받고, 결과는 GET /v1/jobs/{id}로 받아요.

요청

필드형식기본값설명
prompt문자열필수만들 이미지 설명, 편집이면 바꿀 내용
model문자열devdive-image-gpt-2-5-flare이미지 모델 ID. → 모델
size문자열모델 기본값auto, 1024x1024(정사각), 1536x1024(가로), 1024x1536(세로)
n1~101한 번에 만들 장수
quality문자열autoauto, low, medium, high
image_urls링크 배열(1~3개)없음편집 모델의 참고 이미지. 편집 모델에는 필수, 생성 모델에는 보내면 안 돼요
  • 생성은 devdive-image-gpt-2-5-flare(빠름)나 devdive-image-gpt-2-5-sunburst(정밀)를 써요.
  • 편집은 이름이 -edit로 끝나는 모델과 image_urls를 함께 보내요. 생성 모델에 image_urls를 보내거나, 편집 모델에 빼면 422가 와요.
  • image_urls에는 공개 https 링크나 파일에서 올려 받은 링크를 넣어요.

응답

요청하면 바로 202 Accepted와 작업이 와요. Location 헤더에도 결과를 받을 주소가 있어요.

{
  "id": "WyJkZXZkaXZlLWltYWdlLWdwdC0yLTUtZmxhcmUi….f54806a7b0d2618ff1b0db55180904da",
  "object": "job",
  "type": "image",
  "model": "devdive-image-gpt-2-5-flare",
  "status": "processing",
  "credits_used": 0,
  "result": null,
  "error": null
}

다 만들어지면 GET /v1/jobs/{id}가 결과를 돌려줘요. 이미지는 result.images에 장수만큼 들어 있어요.

{
  "id": "WyJkZXZkaXZlLWltYWdlLWdwdC0yLTUtZmxhcmUi….f54806a7b0d2618ff1b0db55180904da",
  "object": "job",
  "type": "image",
  "model": "devdive-image-gpt-2-5-flare",
  "status": "succeeded",
  "credits_used": 11.88,
  "result": { "images": [{ "url": "https://api.devdive.ai/media/…/image.png" }] },
  "error": null
}

이미지 링크는 3일 동안 열려요. 오래 둘 이미지는 내려받아 저장하세요.

예시: 만들기

curl https://api.devdive.ai/v1/images \
  -H "Authorization: Bearer $DEVDIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "햇살이 드는 카페 창가에 놓인 라떼, 따뜻한 필름 사진 느낌",
    "size": "1536x1024",
    "n": 2
  }'

# 받은 id로 결과 기다리기 (끝날 때까지 되풀이)
curl "https://api.devdive.ai/v1/jobs/<id>?wait=60" \
  -H "Authorization: Bearer $DEVDIVE_API_KEY"

예시: 고치기

제품 사진의 제품은 그대로 두고 배경만 바꿔 볼게요.

import os

import requests

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

job = requests.post(f"{API}/v1/images", headers=HEADERS, timeout=120, json={
    "model": "devdive-image-gpt-2-5-flare-edit",
    "prompt": "제품은 그대로 두고, 배경을 흰 대리석 테이블과 부드러운 아침 햇살로 바꿔 줘",
    "image_urls": ["https://example.com/product.jpg"],
    "quality": "high",
}).json()

while job["status"] == "processing":
    job = requests.get(f"{API}/v1/jobs/{job['id']}", params={"wait": 60},
                       headers=HEADERS, timeout=90).json()

for image in job["result"]["images"]:
    print(image["url"])

알아 두기

  • 한 장에 보통 몇십 초 걸려요. quality가 높을수록, sunburst 모델일수록 오래 걸려요.
  • 크레딧은 작업이 끝났을 때 확정돼요. 처음 받는 작업의 credits_used는 0이에요.
  • 이미지 모델은 모델마다 계정당 분당 5번까지 부를 수 있어요. 넘으면 429가 와요. 여러 장이 필요하면 호출을 여러 번 하기보다 n을 늘리세요.
  • 같은 요청을 다시 보내면 다시 만들고 다시 차감돼요. 네트워크 오류로 다시 보내야 한다면 Idempotency-Key 헤더를 쓰세요. → 에러와 한도