> ## 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.

# إنشاء تنويع صورة

> إنشاء تنويع من صورة معينة

## نظرة عامة

يبقى هذا endpoint لعملاء variation القدامى المتوافقين مع OpenAI. ليس المسار الموصى به لتدفقات image-to-image الحالية؛ استخدم `/v1/images/edits` مع `gpt-image-2` أو `/v1/images/generations` مع نموذج image-to-image مثل `nano-banana-pro` عندما يكون ذلك ممكنًا. يتطلب `multipart/form-data`.

## جسم الطلب

**مهلة الطلبات المتزامنة:** قد يعيد بعض مزودي الصور الذين يتم التوجيه إليهم الصورة النهائية inline وينتظرون اكتمال التوليد. قد تستغرق طلبات الدقة العالية أو الجودة العالية ما يقارب دقيقة أو أكثر، لذا اضبط مهلة عميل 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. لا توجد قيمة افتراضية ضمنية؛ لتدفقات 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): رابط صورة التنويع (إذا كان 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>
  هذا endpoint توافق قديم. لا يظهر في كتالوج نماذج الصور الموصى بها حاليًا. للتكاملات الجديدة استخدم `/v1/images/edits` مع `gpt-image-2`، أو `/v1/images/generations` مع `operation: "image-to-image"` ونموذج image-to-image حالي.
</Note>
