> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 이미지 변형 생성

> 주어진 이미지의 변형을 생성합니다

## 개요

이 엔드포인트는 기존 OpenAI 호환 variation 클라이언트를 위해 유지됩니다. 현재 image-to-image 워크플로에는 권장 경로가 아닙니다. 가능하면 `/v1/images/edits`와 `gpt-image-2`를 사용하거나 `/v1/images/generations`에서 `nano-banana-pro` 같은 image-to-image 모델을 사용하세요. `multipart/form-data`가 필요합니다.

## 요청 본문

**동기 요청 타임아웃:** 일부 라우팅된 이미지 제공자는 생성이 완료될 때까지 기다린 뒤 최종 이미지를 inline 으로 반환합니다. 고해상도 또는 고품질 요청은 1분 안팎이거나 그 이상 걸릴 수 있으므로 HTTP 클라이언트 타임아웃을 최소 `120s` 로 설정하세요. 생성 응답에 `status: "pending"`, `task_id`, 또는 `poll_url` 이 포함되어 있으면 반환된 `poll_url` 을 따라 폴링하세요.

<ParamField body="image" type="file" required>
  변형의 기반으로 사용할 이미지. 유효한 PNG 파일이어야 하며, 50MB 미만이고 정사각형이어야 합니다.
</ParamField>

<ParamField body="model" type="string" required>
  기존 variation 호환 라우트용 필수 모델 ID입니다. 암시적 기본값은 없습니다. 현재 image-to-image 워크플로에서는 현재 모델과 함께 `/v1/images/edits` 또는 `/v1/images/generations`를 우선 사용하세요.
</ParamField>

<ParamField body="n" type="integer" default="1">
  생성할 이미지 수. 1에서 10 사이여야 합니다.
</ParamField>

<ParamField body="size" type="string">
  기존 variation 호환 라우트에서 생성되는 이미지 크기입니다. 지원 값은 선택한 모델에 따라 달라집니다.
</ParamField>

<ParamField body="response_format" type="string" default="url">
  생성된 이미지가 반환되는 형식. `url` 또는 `b64_json`이어야 합니다.
</ParamField>

<ParamField body="user" type="string">
  남용 모니터링을 위한 최종 사용자의 고유 식별자.
</ParamField>

## 응답

<ResponseField name="created" type="integer">
  이미지가 생성된 시점의 Unix 타임스탬프.
</ResponseField>

<ResponseField name="data" type="array">
  생성된 이미지 변형 배열.

  각 객체에 포함된 항목:

  * `url` (string): 변형 이미지의 URL (response\_format이 `url`인 경우)
  * `b64_json` (string): Base64로 인코딩된 이미지 (response\_format이 `b64_json`인 경우)
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/images/variations" \
    -H "Authorization: Bearer sk-your-api-key" \
    -F "model=your-legacy-variation-model" \
    -F "image=@cat.png" \
    -F "n=2" \
    -F "size=1024x1024"
  ```

  ```python Python theme={null}
  from openai import OpenAI

  client = OpenAI(
      api_key="sk-your-api-key",
      base_url="https://api.tokenlab.sh/v1"
  )

  response = client.images.create_variation(
      model="your-legacy-variation-model",
      image=open("cat.png", "rb"),
      n=2,
      size="1024x1024"
  )

  for image in response.data:
      print(image.url)
  ```

  ```javascript JavaScript theme={null}
  import OpenAI from 'openai';
  import fs from 'fs';

  const client = new OpenAI({
    apiKey: 'sk-your-api-key',
    baseURL: 'https://api.tokenlab.sh/v1'
  });

  const response = await client.images.createVariation({
    model: 'your-legacy-variation-model',
    image: fs.createReadStream('cat.png'),
    n: 2,
    size: '1024x1024'
  });

  response.data.forEach(image => console.log(image.url));
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "fmt"
      "io"
      "mime/multipart"
      "net/http"
      "os"
  )

  func main() {
      body := &bytes.Buffer{}
      writer := multipart.NewWriter(body)

      writer.WriteField("model", "your-legacy-variation-model")

      file, _ := os.Open("cat.png")
      defer file.Close()
      part, _ := writer.CreateFormFile("image", "cat.png")
      io.Copy(part, file)

      writer.WriteField("n", "2")
      writer.WriteField("size", "1024x1024")
      writer.Close()

      req, _ := http.NewRequest("POST", "https://api.tokenlab.sh/v1/images/variations", body)
      req.Header.Set("Authorization", "Bearer sk-your-api-key")
      req.Header.Set("Content-Type", writer.FormDataContentType())

      client := &http.Client{}
      resp, _ := client.Do(req)
      defer resp.Body.Close()

      result, _ := io.ReadAll(resp.Body)
      fmt.Println(string(result))
  }
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.tokenlab.sh/v1/images/variations');

  $image = new CURLFile('cat.png', 'image/png', 'cat.png');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Authorization: Bearer sk-your-api-key'
      ],
      CURLOPT_POSTFIELDS => [
          'model' => 'your-legacy-variation-model',
          'image' => $image,
          'n' => 2,
          'size' => '1024x1024'
      ]
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  foreach ($data['data'] as $image) {
      echo $image['url'] . "\n";
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 응답 theme={null}
  {
    "created": 1706000000,
    "data": [
      {
        "url": "https://..."
      },
      {
        "url": "https://..."
      }
    ]
  }
  ```
</ResponseExample>

## 참고 사항

<Note>
  이 엔드포인트는 기존 호환용이며 현재 추천 이미지 모델 카탈로그에 포함되지 않습니다. 새 연동에서는 `/v1/images/edits`와 `gpt-image-2`를 사용하거나 `/v1/images/generations`에서 `operation: "image-to-image"` 및 현재 image-to-image 모델을 사용하세요.
</Note>
