Tutoriel
Générer des visuels produits e-commerce avec qwen-image-2.0 via l'API hiapi
Un guide curl + Python directement exécutable, couvrant les packshots catalogue, les scènes, les variantes et les bannières bilingues, à 0,025 $ par image — y compris les règles spéciales du mode paramètre size que les autres modèles d'image de hiapi n'ont pas.
qwen-image-2.0 est le modèle texte-vers-image de deuxième génération d'Alibaba, servi via l'API /v1/tasks de hiapi au prix de 0,025 $ par image, avec une sortie 2K par défaut. Deux choses le rendent particulièrement intéressant pour l'e-commerce : dans cette gamme de prix, son rendu de texte chinois est le plus propre de tous les modèles texte-vers-image actuels ; et sa fidélité aux prompts longs et détaillés de briefs produits est très stable — exactement ce dont les listings transfrontaliers ont besoin.
Ce guide est la version exécutable de ce flux de travail. Chaque appel API est un contenu que vous pouvez coller directement dans un terminal, les modèles de prompt ont été testés et rendus sur des points de terminaison en production, et le prix par image correspond aux chiffres actuels de la tarification HiAPI. Aucune théorie ici : les chiffres de coût supposent les valeurs size réellement acceptées par qwen-image-2.0, pas des chiffres marketing.
Pourquoi choisir qwen-image-2.0 pour les visuels produits transfrontaliers
Lorsque vous devez mettre en ligne 200 SKU sur des listings de marché en une seule fois, trois choses comptent.
- Rendu de texte chinois. La plupart des listings e-commerce vendus en Chine continentale, à Hong Kong, à Taïwan ou en Asie du Sud-Est nécessitent du chinois lisible sur l'emballage, la bannière ou l'étiquette. qwen-image-2.0 est le seul modèle sur hiapi avec lequel vous pouvez écrire un prompt comme « l'étiquette sur le flacon indique 玫瑰精华水 en chinois serif gras » et où le modèle rend exactement ces glyphes à l'endroit exact que vous décrivez.
- Fidélité aux briefs produits longs. Les briefs e-commerce sont longs : matière, codes hexadécimaux de couleur, finition, direction de la lumière, forme de l'ombre, couleur de fond, angle de caméra. qwen-image-2.0 maintient la cohérence globale quand le brief s'allonge — le mode d'échec est généralement un accessoire manquant, pas un produit inventé.
- Une fourchette de coût qui absorbe l'explosion des variantes. Une page SKU typique veut 4 à 6 images (packshot, scène, vue de dessus, comparaison d'échelle, deux variantes). À 0,025 $ par image, cela représente 0,10 à 0,15 $ par SKU. Un lancement de 200 SKU coûte 20 à 30 $. C'est précisément cette fourchette de coût qui rend « tout générer de zéro » moins cher que de commander une partie des prises de vue et de compléter avec une banque d'images.
Pour des expérimentations de réglage de prompt détaillées et six recettes orientées style plutôt qu'e-commerce, consultez l'article complémentaire recettes de prompts qwen-image-2.0. Le présent article se concentre sur les cas d'usage catalogue.
Schéma d'entrée de qwen-image-2.0 sur hiapi
qwen-image-2.0 fonctionne sur l'API unifiée /v1/tasks, qui est aussi le seul point de terminaison d'image actuellement proposé par hiapi. Avant d'écrire la moindre ligne de code, une règle spéciale mérite d'être comprise :
- Le paramètre de taille s'appelle
size— pasaspect_ratio, pasresolution, pasimage_size. Les autres modèles de hiapi (nano-banana, la série flux) acceptentaspect_ratio; qwen-image-2.0 ne l'accepte pas. - Le séparateur dans
sizeest*, pasx."size": "2688x1536"renvoie une erreur 400 ;"size": "2688*1536"fonctionne correctement. - Seules cinq valeurs de
sizesont acceptées. Toutes sont en 2K :
| Format d'image | Valeur size | Usage |
|---|---|---|
| 16:9 (environ 1,75:1) | 2688*1536 |
Visuel principal, bannières, couverture de listing |
| 4:3 (environ 1,37:1) | 2368*1728 |
Double page magazine, emplacement publicitaire sur deux colonnes |
| 1:1 | 2048*2048 |
Packshot carré, vignette de marché |
| 3:4 (environ 0,73:1) | 1728*2368 |
Page produit mobile-first |
| 9:16 (environ 0,57:1) | 1536*2688 |
Couverture vidéo verticale, image fixe TikTok/Reels |
Si vous soumettez une autre valeur, l'API renvoie dans l'erreur la liste littérale des valeurs autorisées :
{"code": 400, "message": "invalid input: size: value must be one of '2688*1536', '2368*1728', '2048*2048', '1728*2368', '1536*2688'"}
Considérez ce message d'erreur comme la source de vérité faisant autorité — si de nouvelles valeurs y apparaissent à l'avenir, c'est que la plateforme a étendu ce schéma.
Une requête directement exécutable
L'ensemble de l'API ne compte que deux points de terminaison : POST /v1/tasks pour mettre en file et GET /v1/tasks/{taskId} pour interroger l'état. Voici la requête minimale qui produit le packshot ci-dessous.
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-2.0",
"input": {
"prompt": "A clear glass cosmetic dropper bottle on a clean off-white seamless paper background, soft daylight from camera left, gentle elliptical shadow, the label reads 玫瑰精华水 in bold serif Chinese with a small line of English Rose Essence Water below, the liquid inside has a faint pink tint, studio product photography, sharp focus on the label, no other props, square 1:1 composition",
"size": "2048*2048"
}
}'
Réponse :
{"code": 200, "data": {"taskId": "tk-hiapi-01KW8R..."}, "message": "success"}
Pour interroger l'état :
curl -s https://api.hiapi.ai/v1/tasks/tk-hiapi-01KW8R... \
-H "Authorization: Bearer $HIAPI_TOKEN"
Le champ status passe par handling → archiving → success. Lors de nos tests, le temps réel total par image en 2K était de 25 à 45 secondes. Lorsque le status est success, output[0].url contient l'image — mais elle pointe vers temp.hiapi.ai avec un horodatage Unix expireAt, alors téléchargez-la immédiatement. Ne l'intégrez pas dans une page et ne l'épinglez pas dans une base de données ; elle renverra une 404 en quelques heures.
Ce prompt de packshot, exécuté sur le point de terminaison en production, génère un flacon compte-gouttes en verre dont l'étiquette rend proprement les caractères chinois 玫瑰精华水, avec juste en dessous l'anglais Rose Essence Water dans un corps plus petit. Le modèle place les deux lignes de texte dans la zone d'étiquette canonique, sans qu'aucun indice de mise en page ne soit nécessaire dans le prompt — la formulation « the label reads X » suffit.
Une boucle Python qui transforme une table SKU en packshots téléversés
Voici la boucle que nous avons exécutée pour générer les images de cette page. Elle prend un ensemble de tuples (slug, prompt, size), soumet les tâches en concurrence avec une limite basse, interroge chaque tâche jusqu'à completion, télécharge le résultat et le téléverse en webp vers votre propre stockage. Ce schéma est volontairement très banal — requests plus concurrent.futures — car la partie intéressante, c'est le modèle.
import os, time, io, requests, concurrent.futures as cf
from PIL import Image
TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
def submit(prompt, size):
r = requests.post(BASE, headers=H, json={
"model": "qwen-image-2.0",
"input": {"prompt": prompt, "size": size},
}, timeout=60)
r.raise_for_status()
return r.json()["data"]["taskId"]
def wait(task_id, deadline_s=240):
deadline = time.time() + deadline_s
while time.time() < deadline:
r = requests.get(f"{BASE}/{task_id}", headers=H, timeout=30)
d = r.json()["data"]
if d["status"] == "success":
return d["output"][0]["url"]
if d["status"] == "fail":
raise RuntimeError(f"task {task_id} failed: {d.get('error')}")
time.sleep(4)
raise TimeoutError(f"task {task_id} not done in {deadline_s}s")
def render_one(item):
slug, prompt, size = item
task_id = submit(prompt, size)
url = wait(task_id)
png = requests.get(url, timeout=60).content
buf = io.BytesIO()
Image.open(io.BytesIO(png)).convert("RGB").save(buf, "WEBP", quality=88, method=6)
return slug, buf.getvalue()
JOBS = [
("packshot-rose-water", "A clear dropper bottle, label 玫瑰精华水…", "2048*2048"),
("packshot-tea-canister","A pale grey ceramic tea canister, label 龙井…", "2048*2048"),
# … 200 more rows from your sheet …
]
with cf.ThreadPoolExecutor(max_workers=6) as pool:
for slug, webp in pool.map(render_one, JOBS):
with open(f"out/{slug}.webp", "wb") as f:
f.write(webp)
print(f"saved {slug}.webp ({len(webp)} bytes)")
Quelques notes sur ce code qui ne sont pas visibles dans le code lui-même.
max_workers=6est la valeur idéale que nous avons observée. À 8–10, la profondeur de file commence à se traduire par une latence supplémentaire plutôt que par du débit. Le côté modèle semble répartir la concurrence équitablement par compte.- Nous convertissons en webp à qualité 88 avant stockage. Les png 2K produits par ce point de terminaison font environ 3 à 4 Mo ; le webp tombe à 200–400 Ko, visuellement identique à la taille d'une page produit. Le transfert est moins cher, et le modèle a déjà encodé beaucoup de textures que le JPEG gère mal.
- L'URL temporaire ne peut être téléchargée qu'une seule fois. Si votre étape de téléversement échoue (panne S3, hoquet réseau), vous devez re-rendre — il n'y a pas de seconde chance pour récupérer la sortie d'une même tâche.
Six schémas de prompts adaptés à l'e-commerce
Ce sont les formes de prompts qui ont survécu à nos tests A/B internes contre des alternatives plus verbeuses. Elles sont écrites pour des utilisateurs anglophones travaillant avec des étiquettes produits en chinois — le scénario transfrontalier le plus courant.
Schéma 1 — Packshot produit seul avec étiquette chinoise
L'image produit par défaut. Spécifiez la couleur de fond en anglais simple, le texte de l'étiquette en chinois littéral avec la famille de police en anglais, et une source de lumière.
A pale grey ceramic tea canister on a clean off-white seamless paper background. The label reads 龙井 in bold black serif Chinese with the small English subtitle Longjing Green Tea below. Soft daylight from camera right, gentle elliptical shadow, no other props. Sharp focus on the label, studio product photography, square 1:1 composition.
Deux éléments font le travail : « reads X in bold serif Chinese » (qwen-image-2.0 le place à l'endroit attendu de l'étiquette) et « sharp focus on the label » (qui fait traiter le texte par le modèle comme le point focal, et non comme une décoration).
Schéma 2 — Image de scène construite autour d'une assiette vide
Pour la photographie de scène, décrivez d'abord le décor, puis insérez le produit à la fin, et non l'inverse. Le modèle est plus susceptible de dériver sur la scène que sur le produit, donc ancrez d'abord la scène.
A wooden Japanese-style table near a wide window in late-morning daylight. The window casts a soft rectangle of light onto the table. In the center of the table is the pale grey ceramic tea canister from the previous shot, with a small wisp of steam rising from a cup beside it. Loose tea leaves are scattered to the right. Wabi-sabi aesthetic, soft shadows, shallow depth of field with focus on the canister. 16:9 widescreen composition.
Dans nos rendus de test, la boîte porte les caractères 龙井, avec juste en dessous l'anglais Longjing Green Tea — la même discipline d'étiquette que le packshot — et la vapeur, les feuilles de thé éparpillées et la lumière de la fenêtre sont rendues comme décrit.
Schéma 3 — Grille de variantes de couleur en un seul rendu
Lorsque les variantes partagent la même géométrie produit, vous pouvez rendre toute la grille en un seul appel au lieu de trois. Moins cher, et l'éclairage des cellules est cohérent par construction.
Three pairs of low-top canvas sneakers shot from a slight top-down angle, arranged in one horizontal row on a clean light-grey seamless background. From left to right: dusty rose, sage green, ivory cream. Identical sneaker silhouette, identical lighting, identical shadow. Each pair faces the camera with toes pointing forward. Studio product photography, 1:1 composition, evenly spaced.
Ce schéma vous évite de rendre chaque variante séparément puis d'essayer d'harmoniser l'éclairage en post-production. La contrainte « identical sneaker silhouette, identical lighting, identical shadow » est la clé qui maintient l'ensemble de la rangée cohérent.
Schéma 4 — Bannière promotionnelle bilingue
Pour les campagnes co-brandées sur Shopee, Lazada et Taobao, vous avez généralement besoin d'un titre chinois et d'un sous-titre anglais dans la même image. qwen-image-2.0 est le seul modèle sur hiapi qui réussit les deux dans un même rendu.
A horizontal ecommerce promotional banner on a soft pink gradient background. The main headline reads 双十一大促 in large bold black sans-serif Chinese in the center-left. Below the Chinese headline in smaller dark grey English serif: Double 11 Sale — Up to 50% Off. To the right is a clear glass dropper bottle of pink serum with a small white label. Subtle confetti texture in the background, clean and modern, 16:9 widescreen.
L'astuce pour que cela fonctionne de manière fiable est de placer le chinois en premier dans le prompt avec le qualificatif « large bold », puis l'anglais avec le qualificatif « smaller ». Si vous inversez l'ordre, le modèle met souvent l'anglais à la taille du titre aussi. L'étiquette produit à l'intérieur de la bannière est l'endroit où vous pouvez relâcher la contrainte — dans nos rendus de test, qwen a choisi une étiquette générique « Vitamin C Serum » pour le flacon parce que nous n'avions pas épelé les caractères ; pour une campagne de marque, incluez le texte littéral de l'étiquette dans le prompt ou compositez la vraie étiquette en post-production.
Schéma 5 — Carte de listing pour marché transfrontalier
Pour un asset composite qui ressemble à une tuile de listing Amazon ou Tmall — produit, titre, prix, badge — le prompt doit se lire comme un brief de mise en page, pas comme un brief photo.
A square ecommerce listing card on a white background. In the top two-thirds, a clear glass dropper bottle of pink rose-essence water labeled 玫瑰精华水 / Rose Essence Water. In the bottom third, on the left, the price 99 元 in large bold black Chinese characters with a small English subtitle Rose Essence 30ml below. On the right, a small green badge that reads 新品 in white. Clean modern layout, soft drop shadow under the product, 4:3 composition.
Pour les listings, rendez en 4:3 (2368*1728) plutôt qu'en 1:1 — l'emplacement visuel principal de la plupart des composants de listing de marché est en 4:3, et le carré produira un recadrage maladroit.
Schéma 6 — Génération à la demande pour la personnalisation
Le dernier schéma change l'économie unitaire. Dès qu'un rendu coûte moins de trois centimes, vous pouvez cesser de pré-rendre les bannières de campagne et plutôt les rendre à la demande par client — « Bonjour Madame Wang, votre coffret mensuel est prêt », avec le vrai nom du client intégré dans la bannière. Mettez en cache par hachage du nom, définissez un TTL, et vous obtenez des images de bannière personnalisées pour une facture CDN minime.
La contrainte est la latence. 25 à 45 secondes par rendu est trop lent pour un flux de requête synchrone, mais parfaitement acceptable pour un envoi d'e-mail ou une notification push — générez à la mise en file, intégrez à l'envoi du message.
Ce que qwen-image-2.0 ne fait pas bien
Par souci d'équilibre, voici quatre tâches que nous confions toujours à d'autres modèles sur le même point de terminaison /v1/tasks.
- Prise de vue à la main avec flou de mouvement. Le packshot est sa zone de confort. Si vous avez besoin de quelque chose qui semble non posé — style UGC, léger mouvement, composition imparfaite — essayez
nano-banana-pro, qui comprend mieux les compositions « décontractées ». - Variantes produit identiques au pixel près. qwen-image-2.0 rend des variantes similaires entre les appels, mais si vous avez besoin du même flacon compte-gouttes exactement identique sous cinq configurations d'éclairage différentes, il vous faut un modèle conditionné par image de référence. Aucun modèle purement texte-vers-image sur hiapi ne garantit la cohérence pixel entre les appels.
- Visages photoréalistes en pied. Les visages en gros plan passent ; les plans en pied ou de groupe ont tendance à adoucir les détails du visage. Pour l'e-commerce centré sur les personnes — essayage de vêtements, démonstrations beauté — associez qwen-image-2.0 à un modèle vidéo conditionné par référence pour les plans d'action.
- Délai inférieur à la seconde. Si vous devez générer des images dans la boucle interne d'une requête synchrone (un utilisateur attend devant son écran), 25 à 45 secondes est trop long.
flux-schnellrépond en environ 5 secondes à 0,005 $ par image, mais ne rend pas le texte chinois. Choisissez d'abord en fonction du budget de latence.
Coût réel d'un lancement de 200 SKU
Prenons un cas représentatif et calculons les chiffres du flux de travail de bout en bout.
| Étape | Quantité | Prix unitaire | Total |
|---|---|---|---|
| Visuel principal/packshot par SKU | 200 × 1 | 0,025 $ | 5,00 $ |
| Image de scène par SKU | 200 × 1 | 0,025 $ | 5,00 $ |
| Grille de variantes par SKU (environ 3 variantes par rendu) | 200 × 1 | 0,025 $ | 5,00 $ |
| Bannière bilingue par catégorie (10 catégories) | 10 × 1 | 0,025 $ | 0,25 $ |
| Carte de listing par SKU | 200 × 1 | 0,025 $ | 5,00 $ |
| Coût total de génération d'images | 810 rendus | — | 20,25 $ |
Selon la tarification hiapi actuelle, le budget total d'images pour un lancement transfrontalier de 200 SKU est d'environ 20 $. Le même travail avec des modèles premium (à partir de 0,04 $ par image) coûte entre 30 et 140 $, avec des temps d'exécution plus longs par image. C'est exactement l'écart que qwen-image-2.0 vise à combler : un travail e-commerce conscient du chinois, dans une fourchette de coût si basse que vous ne comptez plus les rendus.
Où aller ensuite
- Lisez recettes de prompts qwen-image-2.0 pour découvrir six recettes orientées style, non spécifiques à l'e-commerce.
- Consultez la page de tarification hiapi comme source de vérité pour tout chiffre de coût — qwen-image-2.0 est actuellement à 0,025 $ par image, mais c'est cette page qui fait foi.
- Pour les flux sensibles à la latence qui n'ont pas besoin de texte chinois, passez à
flux-schnellen conservant la même forme/v1/tasks— voir la comparaison dans Générer des visuels produits e-commerce avec FLUX.1 schnell.
Tout l'intérêt du point de terminaison unifié /v1/tasks est là : changer de modèle revient à changer une chaîne de caractères. Une fois votre boucle construite pour qwen-image-2.0, le même script Python peut rendre avec n'importe quel modèle d'image de hiapi en modifiant simplement le champ "model" et en adaptant le schéma size de ce modèle.
Articles similaires
Voir tous les articles →-
Tutoriel
Comment appeler hailuo-2.3-fast/image-to-video via l'API HiAPI : curl et Python en pratique
La première requête exploitable du palier image-vers-vidéo rapide et économique — de l'ID du modèle au téléchargement du MP4
-
Tutoriel
Comment appeler hailuo-2.3/text-to-video via l'API HiAPI : curl, Python et exemples de requêtes exécutables
-
Tutoriel
Utiliser Kandinsky 6.0 Pro texte-vers-vidéo sur HiAPI : tutoriel curl et Python
Démonstration pratique axée sur la requête : construire l'appel du prompt au clip vidéo, soumettre la requête, interroger l'état d'achèvement et télécharger le résultat