Démarrage rapide avec l'API Qwen Image 2512 : Générer des images en quelques minutes (2026)

Démarrage rapide avec l'API Qwen Image 2512 : Générer des images en quelques minutes (2026)

Bonjour, je suis Dora. J’avais l’habitude de passer beaucoup de temps à créer des images pour des produits : trouver des ressources, les redimensionner, renommer les fichiers, organiser les dossiers… chaque étape se répétait sans fin. Rien n’était difficile, mais c’était fastidieux. Plus tard, j’ai essayé l’API Qwen Image 2512 et j’ai découvert que je pouvais automatiser tout cela avec quelques lignes de code.

Ce n’est pas une publicité. Je partage simplement ce qui s’est réellement passé quand j’ai essayé — ce qui s’est bien passé, où j’ai buté, et comment j’en ai fait quelque chose de fiable.

Raccourci WaveSpeed (Si vous voulez juste des résultats)

Si vous voulez générer des images rapidement, sans tout configurer vous-même :

  • WaveSpeed fournit déjà une API REST Qwen Image 2512 prête à l’emploi (pas de démarrages à froid).
  • Utilisez l’endpoint WaveSpeed + clé API → vous êtes prêt.
  • Si vous voulez comprendre le flux officiel DashScope (et les pièges courants), continuez à lire.

Que peut vraiment faire cette API ?

Simplement dit : vous tapez une description en texte, et elle vous donne une image.

Par exemple, si vous écrivez :

« Un bureau bien rangé avec un cahier et une plante sous une lumière douce »

quelques secondes plus tard, vous obtenez une image qui correspond à votre description — et vous pouvez l’enregistrer automatiquement sur votre ordinateur.

Les choses pour lesquelles c’est bon :

  • Créer des tableaux d’inspiration
  • Générer rapidement des vignettes
  • Ajouter des images temporaires à des documents
  • Créer des visuels de prototype pour des produits

Ce que j’ai remarqué :

La première fois que je l’ai utilisé, cela ne semblait pas beaucoup plus rapide que de trouver manuellement des images. Mais après deux ou trois essais, j’ai réalisé que je n’avais plus à me demander « quelle taille devrait-ce être ? » ou « comment devrais-je nommer le fichier ? ». Ce qu’elle m’a économisé, ce n’était pas juste du temps, c’était de l’effort mental.


Format d’image et stockage

  • Format : PNG, généré automatiquement par défaut
  • Où l’image est stockée :
    • L’API retourne un lien (URL) vers l’image
    • Le lien pointe vers un serveur Alibaba Cloud
    • Important : le lien n’est valable que pendant 24 heures ; après, il expire
    • Vous devez donc le télécharger sur votre ordinateur rapidement

Note : L’API ne vous donne pas directement le fichier image. Si vous voulez l’enregistrer localement, vous devez ajouter une étape de téléchargement dans votre code (expliqué plus tard).


Avant de commencer : ce dont vous avez besoin

Étape 1 : Obtenir un compte et une clé API

  1. S’inscrire à un compte Alibaba Cloud
  2. Allez à la Console Model Studio
  3. Générez une clé API (comme une clé qui prouve que c’est vous)
  4. Enregistrez la clé en tant que variable d’environnement nommée DASHSCOPE_API_KEY
    Variable d’environnement :
    Pensez-y comme un endroit spécial sur votre ordinateur où votre clé réside, afin que votre code puisse la trouver automatiquement sans la copier-coller à chaque fois.

Conseils :

  • Pour les tests, vous pouvez la stocker dans un fichier .env
  • Pour une utilisation réelle, un outil de gestion des clés sécurisé est plus sûr
  • Les régions de Pékin et de Singapour ont des clés différentes — ne les mélangez pas

Étape 2 : Choisir un outil

Il y a trois façons principales, en commençant par la plus simple :

  1. cURL (le plus simple)

    • Bon pour les tests rapides pour voir si l’API fonctionne
    • Aucune programmation requise, il suffit de coller la commande
    • Recommandé pour le premier essai
  2. Python (le plus courant)

    • Bon pour créer un petit outil à utiliser de façon répétée
    • J’utilise le SDK DashScope officiel pour gérer automatiquement de nombreux détails
    • Des connaissances Python de base aident
  3. Node.js (convivial pour les développeurs frontend)

    • Si vous êtes développeur frontend, cela fonctionne aussi
    • Les principes sont les mêmes, bien que je ne le couvre pas ici

Essayez d’abord le Playground :
Si vous voulez juste tester les résultats rapidement, Wavespeed Playground vous permet de générer des images dans le navigateur. Parfait pour un usage occasionnel. Pour la génération par lots ou l’automatisation, continuez à lire pour apprendre à utiliser l’API.


Démarrage rapide : tester avec cURL

Ouvrez votre terminal (Mac) ou votre invite de commande (Windows) et collez ceci :

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
  --header 'Content-Type: application/json' \
  --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
  --data '{
    "model": "qwen-image-max",
    "input": {
      "messages": [
        {
          "role": "user",
          "content": [
            {"text": "A tidy desk with a notebook and a plant under soft light"}
          ]
        }
      ]
    },
    "parameters": {
      "size": "1024*1024"
    }
  }'

Appuyez sur Entrée, attendez quelques secondes, et vous verrez une réponse JSON avec un lien vers votre image.

Les pièges dans lesquels je suis tombé

  1. Le nom du modèle doit être qwen-image-max, pas qwen-image-2512 ou autre.
  2. Le format de taille utilise un astérisque 1024*1024, pas 1024x1024.
  3. Pour la région de Singapour, changez l’URL en : https://dashscope-intl.aliyuncs.com/api/v1/...

Si vous construisez quelque chose en production, le flux DashScope officiel est tout à fait viable — mais il s’accompagne de détails opérationnels (régions, durées de vie des URL, tentatives). C’est exactement pourquoi j’aime utiliser WaveSpeed pour le travail quotidien : cela me donne Qwen Image 2512 derrière une API REST prête à l’emploi, afin que je puisse me concentrer sur les prompts et la gestion de la sortie au lieu de la plomberie.

Paramètres expliqués

Obligatoires

  1. model

    • "qwen-image-max" est le nom officiel pour Qwen-Image-2512
    • Il y a aussi "qwen-image-plus", similaire mais moins cher
  2. input.messages

    • Un tableau avec un élément
    • text est votre description
    • Maximum 800 caractères (environ 400 caractères chinois)

Optionnels (valeurs par défaut utilisées si omis)

  1. parameters.size

    • 1664*928 (paysage 16:9)
    • 1472*1104 (4:3)
    • 1328*1328 (carré 1:1, par défaut)
    • 1104*1472 (portrait 3:4)
    • 928*1664 (portrait 9:16)
  2. parameters.negative_prompt

    • Les choses que vous ne voulez pas : par ex., "basse-résolution, flou, distordu, surexposé"
    • Jusqu’à 500 caractères
  3. parameters.prompt_extend

    • La valeur par défaut est true
    • Enrichit automatiquement votre description
    • Désactivez si vous voulez un contrôle strict
  4. parameters.watermark

    • La valeur par défaut est false
    • Ajoute un filigrane « Qwen-Image » si true
  5. parameters.seed

    • Plage 0–2147483647
    • Même graine + même description = même image
    • Utile pour tester et comparer les résultats

Exemple de réponse API

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxxx"
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "width": 1328,
    "image_count": 1,
    "height": 1328
  },
  "request_id": "xxx"
}

Points clés

  • URL de l’image : output.choices[0].message.content[0].image
  • Vérifiez que finish_reason est "stop" pour confirmer le succès
  • Les liens durent 24 heures — téléchargez rapidement

Automatisation avec Python

Si vous voulez une génération par lots ou un petit outil :

import os
import time
import requests
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath

API_KEY = os.getenv("DASHSCOPE_API_KEY")
ENDPOINT = "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"

HEADERS = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}",
}

def generate_image(prompt: str, size="1328*1328"):
    payload = {
        "model": "qwen-image-max",
        "input": {
            "messages": [{"role": "user", "content": [{"text": prompt}]}]
        },
        "parameters": {"size": size, "prompt_extend": True, "watermark": False}
    }
    r = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=120)
    r.raise_for_status()
    data = r.json()
    choices = data.get("output", {}).get("choices", [])
    if not choices:
        raise ValueError(f"No image generated:\n{data}")
    content = choices[0].get("message", {}).get("content", [])
    if not content:
        raise ValueError(f"Empty content:\n{data}")
    image_url = content[0].get("image")
    if not image_url:
        raise ValueError(f"No image URL:\n{data}")

    img_response = requests.get(image_url)
    img_response.raise_for_status()

    file_name = PurePosixPath(unquote(urlparse(image_url).path)).parts[-1]
    ts = int(time.time())
    path = f"qwen_image_{ts}_{file_name}"
    with open(path, "wb") as f:
        f.write(img_response.content)
    return path

if __name__ == "__main__":
    output_path = generate_image("A tidy desk with a notebook and a plant under soft light")
    print("Image saved at:", output_path)

Ce que j’ai appris en testant

  • Un nom de modèle incorrecte le casse (qwen-image-plusqwen-image-max)
  • Un format de taille incorrect (1328x1328 au lieu de 1328*1328)
  • La structure de réponse diffère légèrement de la documentation ; vérifiez l’URL de l’image
  • Oublier de télécharger l’image fait expirer le lien après 24 heures

Utilisation du SDK officiel

import os
import json
from dashscope import MultiModalConversation

api_key = os.getenv("DASHSCOPE_API_KEY")
messages = [{"role": "user", "content": [{"text": "A tidy desk with a notebook and a plant under soft light"}]}]

response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-max",
    messages=messages,
    result_format='message',
    stream=False,
    watermark=False,
    prompt_extend=True,
    size='1328*1328'
)

if response.status_code == 200:
    print(json.dumps(response, ensure_ascii=False))
    image_url = response.output.choices[0].message.content[0]['image']
    print(f"Image URL: {image_url}")
else:
    print(f"Error: {response.code} - {response.message}")

Référence rapide des paramètres

ParamètreValeur suggéréeNotes
size1328*1328Carré, équilibre vitesse et qualité
prompt_extendTRUELaisser l’IA enrichir votre description
seedNombre fixeUtiliser pour tester et comparer les résultats
negative_promptSelon les besoinspar ex., « flou, basse qualité, distordu »

Quand changer la graine

  • Graine fixe → comparer les variations de prompt
  • Graines différentes → générer plusieurs images distinctes

Erreurs courantes et correctifs

  • 401 Unauthorized → clé API incorrecte, région incorrecte, ou permission d’image manquante
  • 429 Rate limit → trop de demandes ; ajoutez un délai ou augmentez le quota
  • Timeout / problèmes réseau → augmentez le timeout, téléchargez immédiatement

Petites améliorations que j’ai apportées

  1. Graine fixe pour tester les prompts → plus facile de comparer les résultats
  2. Nommage cohérent des fichiers : {keyword}-{size}-{seed}.png
  3. Gestion des fichiers de configuration : YAML pour éviter le codage en dur des paramètres

Pour qui cela fonctionne

Playground

  • Génération d’images occasionnelle
  • Test rapide de prompt
  • Aucune automatisation requise

API

  • Génération par lots
  • Intégration d’outils ou de produits
  • Utilisation programmée ou basée sur le système

Chemins finaux (choisissez ce qui vous convient)

Chemin A — Rapide et pratique

Chemin B — Contrôle total

  • Utilisez DashScope directement si vous avez besoin d’une intégration approfondie d’Alibaba Cloud

J’aime les outils qui fonctionnent tranquillement en arrière-plan. Pour apprendre et comprendre, le flux officiel est excellent. Pour le travail quotidien et livrer plus vite, WaveSpeed m’épargne beaucoup de friction.