Aller au contenu
Référence API
Référence API

Qwen 2.1 Modifier une image

Modifiez jusqu’à dix images sources ou repeignez une zone masquée, avec des réglages de résolution et de fond transparent.

01

Vue d'ensemble

Utilisez le point de terminaison edit image avec un modèle pris en charge. Utilisez l'ID de Task retourné pour récupérer son état, ou fournissez callback_url pour les livraisons décrites ci-dessous.

Démarrage rapide

  1. Créez une clé API et définissez-la comme RUNAPI_API_KEY.
  2. Choisissez un modèle pris en charge et envoyez une requête POST dont le corps correspond au schéma de ce modèle.
  3. Enregistrez l'identifiant de tâche retourné, puis interrogez l'état jusqu'à atteindre un état terminal ou gérez les callbacks documentés ci-dessous.

Point de terminaison

POST /api/v1/qwen_2_1/edit_image
URL de base
https://runapi.ai
Version de l'API
v1
Authentification
Authorization: Bearer YOUR_API_TOKEN
02

Modèles pris en charge

Ouvrez une page de modèle pour consulter la tarification actuelle, les limites de débit et les conditions d'utilisation commerciale.

03

Schéma de requête

Corps JSON

Les champs et les valeurs autorisées dépendent du modèle sélectionné. Lorsqu'il est fourni, callback_url reçoit les livraisons de tâches documentées ci-dessous.

qwen-2.1-edit-image11 champs
aspect_ratiostring
Optionnel

Format d'image de sortie. auto suit la première image source. Ignoré lorsque mask_url est défini.

Valeurs autorisées: auto, 1:1, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16, 21:9, 9:21 Par défaut: auto
backgroundstring
Optionnel

Type d'arrière-plan. Un arrière-plan transparent nécessite output_format png ou webp et ne peut pas être combiné avec mask_url ; décrivez uniquement le sujet dans le prompt.

Valeurs autorisées: opaque, transparent Par défaut: opaque
callback_urlstring
Optionnel

URL de webhook pour les mises à jour de tâches asynchrones.

enable_prompt_expansionboolean
Optionnel

Indique si RunAPI enrichit le prompt avant la génération. Ignoré lorsque mask_url est défini.

Par défaut: true
mask_urlstring
Optionnel

URL publique de l'image de masque pour une retouche locale : le blanc marque la zone à modifier, le noir est conservé. Nécessite exactement une image source et ne peut pas être combiné avec un arrière-plan transparent ; aspect_ratio et enable_prompt_expansion sont ignorés.

modelstring
Requis

Identifiant de modèle RunAPI.

output_formatstring
Optionnel

Format du fichier image de sortie. jpeg ne peut pas être combiné avec un arrière-plan transparent.

Valeurs autorisées: png, webp, jpeg Par défaut: png
output_resolutionstring
Optionnel

Résolution de l'image de sortie.

Valeurs autorisées: 1k, 2k Par défaut: 1k
promptstring
Requis

Prompt de retouche d'image. Avec mask_url, décrit ce qu'il faut générer dans la zone blanche du masque.

Plage: 1 - 5000
seedinteger
Optionnel

Seed entier pour des résultats reproductibles ; omettez-le pour un seed aléatoire.

source_image_urlsarray
Requis

URL publiques des images sources ; une à dix images, dans l'ordre où le prompt y fait référence.

Plage d'éléments: 1 - 10

Règles conditionnelles

Ces exigences s'appliquent lorsque toutes les conditions listées sont réunies.

  1. Lorsque background = transparent, output_format = jpeg
    Requis
    Non accepté
    output_format
  2. Lorsque background = transparent, mask_url present
    Requis
    Non accepté
    mask_url
04

Créer une acceptation

HTTP 202

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    },
    "task_replayed": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "id": "tsk_reference_demo",
  "status": "processing"
}
05

Interrogation en cours

HTTP 200

GET /api/v1/qwen_2_1/edit_image/:id

Schéma de réponse
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "id": "tsk_reference_demo",
  "status": "processing"
}
06

Interrogation terminée

HTTP 200

GET /api/v1/qwen_2_1/edit_image/:id

Schéma de réponse
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "images": {
      "items": {
        "properties": {
          "url": {
            "type": "string",
            "x-runapi-generated-media": true
          }
        },
        "required": [
          "url"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    },
    "usage": {
      "properties": {
        "cost": {
          "type": "number"
        }
      },
      "required": [
        "cost"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  },
  "required": [
    "id",
    "status",
    "images",
    "usage"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "id": "tsk_reference_demo",
  "images": [
    {
      "url": "https://cdn.runapi.ai/public/samples/image.jpg"
    }
  ],
  "status": "completed",
  "usage": {
    "cost": 0.05
  }
}
07

Échec de l'interrogation

HTTP 200

GET /api/v1/qwen_2_1/edit_image/:id

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Task processing failed.",
  "id": "tsk_reference_demo",
  "status": "failed"
}
08

Rappel client : terminé

HTTP 200

POST callback_url

Schéma de réponse
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "images": {
      "items": {
        "properties": {
          "url": {
            "type": "string",
            "x-runapi-generated-media": true
          }
        },
        "required": [
          "url"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    },
    "usage": {
      "properties": {
        "cost": {
          "type": "number"
        }
      },
      "required": [
        "cost"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  },
  "required": [
    "id",
    "status",
    "images",
    "usage"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "id": "tsk_reference_demo",
  "images": [
    {
      "url": "https://cdn.runapi.ai/public/samples/image.jpg"
    }
  ],
  "status": "completed",
  "usage": {
    "cost": 0.05
  }
}
09

Rappel client : échoué

HTTP 200

POST callback_url

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "properties": {
            "code": {
              "type": "string"
            },
            "limit_cents": {
              "type": "integer"
            },
            "message": {
              "type": "string"
            },
            "reset_at": {
              "format": "date-time",
              "type": [
                "string",
                "null"
              ]
            },
            "used_cents": {
              "type": "integer"
            },
            "window": {
              "enum": [
                "1h",
                "1d",
                "7d",
                "daily",
                "weekly",
                "monthly",
                "lifetime"
              ],
              "type": "string"
            }
          },
          "required": [
            "code",
            "message"
          ],
          "type": "object",
          "unevaluatedProperties": false
        }
      ]
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": {
    "code": "generation_failed",
    "message": "Task processing failed."
  },
  "id": "tsk_reference_demo",
  "status": "failed"
}
10

Erreurs

HTTP 401

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Authentication required"
}
11

Erreurs

HTTP 401

GET /api/v1/qwen_2_1/edit_image/:id

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Authentication required"
}
12

Erreurs

HTTP 400

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "Message d'erreur lisible par l'humain.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "Résumé de validation lisible par l'humain.",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Messages de validation indexés par champ de requête public, avec un tableau de chaînes lisibles par l'humain pour chaque champ.",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

Exemple de réponse

JSON
{
  "error": "model must be one of: qwen-2.1-edit-image"
}
13

Erreurs

HTTP 402

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Insufficient balance"
}
14

Erreurs

HTTP 429

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "API key credit limit exceeded"
}
15

Erreurs

HTTP 409

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "The request uses features that are not supported for the selected model"
}
16

Erreurs

HTTP 429

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Rate limit reached. Please retry later."
}
17

Erreurs

HTTP 503

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Service under maintenance, please try again later"
}
18

Erreurs

HTTP 504

POST /api/v1/qwen_2_1/edit_image

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "The request timed out"
}
19

Erreurs

HTTP 404

GET /api/v1/qwen_2_1/edit_image/:id

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

JSON
{
  "error": "Task with id 'tsk_reference_demo' not found"
}
20

Exemples de code générés

Utilisez directement cURL, ou installez un SDK pour votre langage. Chaque exemple soumet la requête validée indiquée dans cette référence.

Installer

Shell
pip install runapi-qwen-2-1
PYTHON
import os
from runapi.qwen_2_1 import Qwen21Client

client = Qwen21Client(api_key=os.environ["RUNAPI_API_KEY"])
task = client.edit_image.create(
  model="qwen-2.1-edit-image",
  prompt="Change the vase to cobalt blue.",
  source_image_urls=["https://cdn.runapi.ai/public/samples/image.jpg"],
  output_resolution="2k"
)