API 사용법이미지 생성
이미지 생성
POST /v1/images/generations — 프롬프트로 이미지를 만듭니다.
호출하기
프롬프트로 이미지를 만듭니다. OpenAI 이미지 엔드포인트와 같은 형식입니다. size 와 quality 는 선택이라, 안 보내면 모델 기본값으로 만들어집니다.
curl https://ai.cubion.kr/v1/images/generations \
-H "Authorization: Bearer $GATEWAY_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-image-1","prompt":"노을 지는 바다, 수채화","size":"1024x1024"}'import base64, os
from openai import OpenAI
ai = OpenAI(base_url="https://ai.cubion.kr/v1", api_key=os.environ["GATEWAY_KEY"])
r = ai.images.generate(
model="gpt-image-1",
prompt="노을 지는 바다, 수채화",
size="1024x1024", # 선택 — 안 보내면 모델 기본값
)
# 응답은 URL 이 아니라 base64 다
with open("out.png", "wb") as f:
f.write(base64.b64decode(r.data[0].b64_json))import OpenAI from "openai";
import { writeFile } from "node:fs/promises";
const ai = new OpenAI({ baseURL: "https://ai.cubion.kr/v1", apiKey: process.env.GATEWAY_KEY });
const r = await ai.images.generate({
model: "gpt-image-1",
prompt: "노을 지는 바다, 수채화",
size: "1024x1024", // 선택 — 안 보내면 모델 기본값
});
// 응답은 URL 이 아니라 base64 다
const png = Buffer.from(r.data[0].b64_json, "base64");
await writeFile("out.png", png);응답은 URL 이 아니라 base64
data[0].url 은 없습니다
응답은 { data: [{ b64_json }] } 입니다. b64_json 은 base64 로 인코딩된 이미지 바이트라서, <img src> 에 그대로 넣거나 디코딩해 파일로 저장해야 합니다. URL 이 올 거라 생각하고 data[0].url 을 읽으면 undefined 가 나옵니다.
응답
{
"data": [
{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." }
]
}브라우저에서 바로 보여 줄 때는 데이터 URL 로 감싸면 됩니다.
브라우저에 표시
img.src = "data:image/png;base64," + data[0].b64_json;Gemini 이미지 모델도 같은 형태로 변환돼 옵니다 — 모델을 바꿔도 응답을 읽는 코드는 그대로 둘 수 있습니다.
크기와 품질
쓸 수 있는 사이즈·종횡비는 모델마다 다릅니다. 손으로 적어 두지 말고 모델 목록 에서 받아 선택 버튼을 만드세요 — mode 가 image_generation 인 항목에 image.sizes 가 함께 옵니다.
curl https://ai.cubion.kr/v1/models -H "Authorization: Bearer $GATEWAY_KEY"
# → data[] 중 mode:"image_generation" 인 항목에 image.sizes 가 들어 있습니다models = ai.models.list()
image_models = [m for m in models.data if getattr(m, "mode", None) == "image_generation"]
# 각 항목의 image.sizes 로 사이즈 선택 버튼을 만듭니다const models = await ai.models.list();
const imageModels = models.data.filter(
(m) => (m as { mode?: string }).mode === "image_generation"
);
// 각 항목의 image.sizes 로 사이즈 선택 버튼을 만듭니다