# 그림 — /v1/images

> 만들기와 고치기. 원본을 보내면 결과가 원본에 가까워집니다.

> 원문: https://schoolorder.kr/docs/reference/images

만들기는 /v1/images/generations, 이미 있는 그림을 고치는 건 /v1/images/edits 예요. 고칠 땐 원본 파일을 같이 보내야 해요 — 안 보내면 매번 새로 그려서 화풍이 통째로 바뀌어요.

> **⚠️ 「이 부분만」은 아직 못 해요**
>
> 원본을 보내면 결과가 원본에 훨씬 가까워지지만, 그래도 캔버스는 다시 그려져요. mask 는 아직 안 받아요 — 보내시면 무시하지 않고 400 으로 알려드려요.

**있는 그림 고치기**

```bash
curl https://schoolorder.kr/v1/images/edits \
  -H "Authorization: Bearer $SCHOOLORDER_API_KEY" \
  -F model=gpt-image-1-mini \
  -F image=@./before.png \
  -F prompt="칠판 글씨를 '2학기 시간표'로 바꿔줘"
```

## 요청 파라미터

**만들기 — POST /v1/images/generations (JSON)**

| 파라미터 | 받는 값 | 저희가 하는 일 |
| --- | --- | --- |
| `model` (필수) | 그림 모델 id | 글 모델을 넣으시면 400 으로 /v1/chat/completions 로 가시라고 알려드려요. |
| `prompt` (필수) | 문자열 | 손대지 않고 벤더에 닿아요. 값은 부르기 전에 한 장치를 미리 잡았다가 끝나고 실제 사용량으로 정산해요. |
| `size` | 1024x1024 등 | 벤더에 그대로 넘겨요. 다만 xAI 그림 문은 size 를 아예 안 받아서(실측 400) 그쪽 모델엔 안 실어요. |
| `n` | 정수 | 지금은 한 번에 한 장만 그려드려요. 여러 장은 값을 미리 잡는 규칙이 달라져서 아직 안 열었어요. |

**고치기 — POST /v1/images/edits (multipart/form-data)**

| 파라미터 | 받는 값 | 저희가 하는 일 |
| --- | --- | --- |
| `image` (필수) | 이미지 파일 | 25MB 까지예요. 넘으면 벤더가 아니라 저희가 먼저 413 으로 알려드려요. |
| `prompt` (필수) | 문자열 | 손대지 않고 벤더에 닿아요. 값은 부르기 전에 한 장치를 미리 잡았다가 끝나고 실제 사용량으로 정산해요. |
| `model · size · n` | 만들기와 같아요 | 만들기와 같은 규칙이에요 — 한 번에 한 장, xAI 는 size 를 안 받아요. multipart 라 값은 파일이 아니라 폼 필드로 넣어주세요. |
| `mask` | — | 아직 안 받아요. 보내시면 무시하지 않고 400 으로 말씀드려요 — 조용히 무시하면 「이 부분만 고쳐졌겠지」로 읽히거든요. |

## 응답

OpenAI 그림 응답 그대로예요. 저희는 만들어질 때까지 기다렸다가 돌려드리니 따로 상태를 물어보실 필요가 없어요 — 대신 한 호출을 2분까지 기다려요.

**응답 예시 (줄임)**

```json
{
  "created": 1788000000,
  "data": [
    { "b64_json": "iVBORw0KGgoAAAANSUhEUg..." }
  ]
}
```

## 값은 어떻게 매겨지나요

그림은 부르기 전에 토큰 수를 알 수 없어요. 그래서 저희가 한 장치 금액을 먼저 잡아뒀다가, 벤더가 알려준 실제 사용량으로 끝나고 정산해요. 표의 「한 장 예약」이 그 먼저 잡는 금액이고, 실제로 그보다 적게 나오면 남는 만큼 그대로 돌아와요. 실패하면 예약이 통째로 풀려서 한 푼도 안 나가요.

> **⚠️ 잔액이 남았는데 402 가 날 수 있어요**
>
> 예약 금액보다 잔액이 적으면 벤더로 보내지 않고 막아요. 표의 「한 장 예약」 값과 잔액을 견줘보세요.

## 이 문이 받는 모델

#### 그림 — `POST /v1/images/generations`

| model | 제공사 | 입력 / 1M | 출력 / 1M | 한 장 예약 |
| --- | --- | --- | --- | --- |
| gpt-image-2 | openai | $5 | $30 | $0.28 |
| gpt-image-1.5 | openai | $5 | $32 | $0.29 |
| gpt-image-1 | openai | $5 | $40 | $0.36 |
| gpt-image-1-mini | openai | $2 | $8 | $0.075 |
| grok-imagine-image | xai | $0 | $0 | $0.02 |
| grok-imagine-image-2.0 | xai | $0 | $0 | $0.06 |
| grok-imagine-image-quality | xai | $0 | $0 | $0.05 |

> **고칠 원본은 25MB 까지**
>
> 넘으면 벤더가 아니라 저희가 먼저 413 으로 알려드려요. 값은 크레딧이 아니라 예약으로 먼저 잡히고, 실패하면 그대로 풀려요.

