HiAPI
Blog

Guide d'utilisation

Flux-2-Klein-9b image-to-image : retouche de photos produits e-commerce

Workflow pratique pour éditer des photos produits existantes avec flux-2-klein-9b/image-to-image sur l'API hiapi — prompts réels, sorties réelles et code de traitement par lots.

Aug 14, 2026
Flux-2-Klein-9b image-to-image : retouche de photos produits e-commerce

Pourquoi éditer des photos produits plutôt que d'en générer de nouvelles

Le problème auquel la plupart des catalogues e-commerce font face n'est pas « générer à partir de zéro », mais « une photo, cinq usages ». Le vendeur prend une photo principale, souvent sur un plan de travail encombré ou sous un éclairage médiocre, puis a besoin d'une version propre sur fond blanc pour la grille de la boutique, d'une variante de couleur par SKU, et d'images d'ambiance pour la publicité et les réseaux sociaux. Refaire une séance photo pour chaque variante est lent ; générer chaque image à partir de zéro avec un modèle texte-vers-image ne garantit pas que le résultat corresponde exactement au produit que vous vendez réellement.

flux-2-klein-9b/image-to-image est justement conçu pour résoudre ce second problème : il prend une photo produit existante plus une instruction d'édition, et renvoie une nouvelle image dans laquelle tout ce que vous n'avez pas demandé à changer — forme, proportions, bouchon, logo — reste intact. C'est le palier le plus grand et le plus fidèle de la série FLUX.2 [klein] sur hiapi, au-dessus de flux-2-klein-4b/image-to-image en qualité comme en prix.

Voici un workflow complet en trois étapes à partir d'une seule photo de départ : d'abord nettoyer une photo « avant » encombrée en une image principale utilisable en catalogue, puis étendre cette image principale en variantes de couleur et d'ambiance — trois éditions réelles, trois prompts réels, un script de traitement par lots pour réutiliser le même schéma sur tout le catalogue.

La photo de départ

C'est typiquement la photo « avant » qu'un vendeur téléverse : une bouteille isotherme en acier inoxydable brossé avec un bouchon à visser en plastique noir mat, photographiée sur un plan de cuisine encombré, à côté d'une tasse à café et d'un torchon bleu plié, un éclairage mixte inégal, et une composition décentrée. Elle peut servir de référence, mais pas de photo pour une fiche produit.

Le prompt utilisé pour générer cette photo de départ (via flux-2-klein-9b/text-to-image) :

A slightly imperfect phone photo of a brushed stainless steel insulated water bottle with a matte black plastic screw cap, standing on a cluttered kitchen counter next to a ceramic coffee mug and a folded blue dish towel, mixed warm ceiling light and cool window daylight creating an uneven color cast, faint reflections and fingerprint smudges on the counter, off-center composition, casual amateur snapshot quality, not professional photography

Étape 1 : nettoyage studio — du plan de travail encombré à une image utilisable en catalogue

Prompt utilisé :

Keep the water bottle exactly as it is: same brushed stainless steel body, same matte black screw cap, same proportions and shape. Remove the cluttered counter, coffee mug, and towel completely. Replace the background with a seamless pure white studio background. Correct the lighting to even, shadowless studio lighting from the front, center the bottle in the frame, sharp focus, no reflections, no smudges, clean e-commerce catalog product photography.

C'est l'édition la plus importante du workflow réel : un seul appel transforme une photo prise au téléphone en une image sur fond blanc utilisable en boutique, tandis que la forme de la bouteille et le bouchon restent strictement inchangés. Ce résultat propre devient l'image principale — toutes les variantes en aval de ce guide sont générées à partir de cette image, et non de la photo encombrée d'origine, de sorte que les dérives ne s'accumulent pas au fil des éditions.

Étape 2 : générer une variante de couleur à partir de l'image principale propre

Prompt utilisé :

Keep the bottle's shape, screw cap, proportions, and pure white studio background exactly as they are. Change only the body color and finish from brushed stainless steel to a matte sage green, keep the black cap unchanged, keep the same lighting and shadow, e-commerce catalog product photography.

C'est le scénario multi-SKU : une gamme de produits existe en cinq couleurs, sans avoir besoin de cinq séances photo distinctes. En partant de l'image principale propre et en limitant le prompt à un simple changement de couleur, on garde le bouchon, les proportions, l'éclairage et le fond parfaitement figés — seule la couleur du matériau du corps change.

Étape 3 : générer une variante d'ambiance à partir de la même image principale

Prompt utilisé :

Keep the water bottle exactly as it is: brushed stainless steel body, matte black cap, proportions unchanged. Replace the plain white studio background with an outdoor lifestyle scene: the bottle resting on a moss-covered granite rock beside a hiking trail, soft early-morning sunlight filtering through pine trees, shallow depth of field, warm natural color grade, outdoor lifestyle product photography.

Même image principale, autre destination : c'est l'image destinée à une publicité, à un post sur les réseaux sociaux ou au visuel principal d'une page d'atterrissage — un cadre d'ambiance extérieur plutôt qu'un fond de catalogue, l'identité du produit étant fermement ancrée par la même formule d'ancrage « conserver tel quel » dans chaque prompt ci-dessus.

Pourquoi ces éditions sont fiables

  • Ancrez d'abord les éléments inchangés, puis décrivez les modifications. Chaque prompt ci-dessus commence par énoncer ce qui ne doit pas bouger — la forme, le bouchon, les proportions — avant de mentionner le nouveau fond ou la nouvelle couleur. Cet ordre est ce qui maintient l'identité du produit verrouillée à travers les trois éditions successives, au lieu de dériver un peu plus à chaque fois.
  • Enchaînez les éditions depuis l'image principale propre, pas depuis la photo d'origine. Les étapes 2 et 3 partent toutes deux de la sortie de l'étape 1, et non de la photo encombrée d'origine. Éditer à partir d'une base propre et correcte est bien plus fiable que de tenter de corriger le désordre et de remplacer le fond dans un seul et même prompt.
  • Limitez chaque prompt à une seule modification. La variante de couleur ne change que la couleur ; la variante d'ambiance ne change que le fond. Aucun des deux prompts ne demande deux modifications sans rapport à la fois.
  • flux-2-klein-9b/image-to-image n'accepte qu'une seule image de référence par appel. Contrairement à certains modèles d'édition qui acceptent plusieurs images de référence, le schéma de ce modèle reste volontairement minimal : une chaîne prompt et un tableau image_urls limité à une seule image. Le point de terminaison image-vers-image n'expose pas de paramètre resolution ni aspect_ratio — la sortie reprend les dimensions de la photo d'entrée, donc rien d'autre que le prompt et l'image source n'est à configurer.

Éditer le catalogue par lots

Les trois éditions ci-dessus partagent la même forme de requête : une URL d'image de référence plus un prompt d'édition, soumis au point de terminaison de tâches asynchrones de hiapi. L'extrait de code ci-dessous fait tourner ce schéma sur une liste de tuples (base_image_url, prompt, output_name) — c'est exactement la structure à utiliser pour traiter d'un coup tout un catalogue : nettoyage, variantes de couleur et variantes d'ambiance.

import os
import time
import requests

API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
MODEL = "flux-2-klein-9b/image-to-image"


def submit_edit(base_image_url: str, prompt: str) -> str:
    resp = requests.post(
        API_BASE,
        headers={"Authorization": f"Bearer {TOKEN}"},
        json={
            "model": MODEL,
            "input": {
                "prompt": prompt,
                "image_urls": [base_image_url],
            },
        },
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["data"]["taskId"]


def wait_and_download(task_id: str, out_path: str, poll_s: int = 5, timeout_s: int = 300) -> None:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(
            f"{API_BASE}/{task_id}",
            headers={"Authorization": f"Bearer {TOKEN}"},
            timeout=30,
        )
        task = r.json().get("data", {})
        if task.get("status") == "success":
            url = task["output"][0]["url"]
            img = requests.get(url, timeout=120)
            with open(out_path, "wb") as f:
                f.write(img.content)
            return
        if task.get("status") == "fail":
            raise RuntimeError(task.get("error"))
        time.sleep(poll_s)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


# One entry per product / variant. Chain color and lifestyle edits from a
# clean master, not the raw source photo, for best consistency.
batch = [
    ("https://cdn.example.com/products/bottle-raw.jpg",
     "Keep the bottle exactly as it is: same body, same cap, same "
     "proportions. Remove the cluttered background completely. Replace it "
     "with a seamless pure white studio background and even, shadowless "
     "lighting, clean e-commerce catalog product photography.",
     "bottle-clean-master.jpg"),
    ("https://cdn.example.com/products/bottle-clean-master.jpg",
     "Keep the bottle's shape, cap, proportions, and white studio "
     "background exactly as they are. Change only the body color to matte "
     "sage green, keep the cap unchanged.",
     "bottle-sage-green.jpg"),
    ("https://cdn.example.com/products/bottle-clean-master.jpg",
     "Keep the bottle exactly as it is: body, cap, proportions unchanged. "
     "Replace the white studio background with an outdoor lifestyle scene "
     "on a mossy rock beside a hiking trail, soft morning sunlight.",
     "bottle-lifestyle-hiking.jpg"),
]

for base_url, prompt, out_name in batch:
    task_id = submit_edit(base_url, prompt)
    wait_and_download(task_id, out_name)
    print(f"saved {out_name}")

Chaque appel de tâche est indépendant, donc pour un catalogue complet, on fera généralement tourner un petit pool en concurrence plutôt qu'une boucle strictement séquentielle — le temps de traitement de l'API de tâches est le goulot d'étranglement, pas votre client. À noter : les étapes 2 et 3 pointent toutes deux vers bottle-clean-master.jpg, c'est-à-dire la sortie de l'étape 1 : enchaîner depuis le résultat nettoyé plutôt que depuis le téléversement d'origine, c'est ce qui permet aux variantes de couleur et d'ambiance de rester cohérentes entre elles.

Tarification

flux-2-klein-9b/image-to-image est facturé à l'image, à prix fixe quelle que soit la taille de sortie. En date d'août 2026, chaque édition image-vers-image coûte 0,03143 $ US par image ; le point de terminaison texte-vers-image associé (utilisé dans ce guide pour générer la photo de départ) coûte 0,00858 $ US par image. Les deux sont nettement plus chers que le palier plus petit flux-2-klein-4b/image-to-image à 0,00715 $ US par édition — le 9B échange ce surcoût contre une fidélité de sortie supérieure, notamment sur les éditions riches en détails comme les changements de matière et de couleur. Consultez la page de tarification pour connaître les tarifs actuels de tous les modèles, car les prix peuvent évoluer.

Questions fréquentes

flux-2-klein-9b/image-to-image prend-il en charge plusieurs images de référence par appel ? Non. Le schéma n'accepte qu'une seule image dans image_urls (maxItems: 1). Pour les éditions qui nécessitent de fusionner deux images sources distinctes, ce n'est pas le bon modèle — il est conçu pour l'édition à référence unique, comme le remplacement de fond, le changement de couleur et le nettoyage.

Puis-je contrôler la résolution de sortie ? Non — le point de terminaison image-vers-image n'a pas de paramètre resolution ni aspect_ratio. La sortie reprend les dimensions de la photo d'entrée. Si vous avez besoin d'une taille de sortie spécifique, redimensionnez l'image source avant la soumission, ou redimensionnez le résultat ensuite.

Quelle est la différence avec flux-2-klein-4b/image-to-image ? Même forme de requête, même schéma à référence unique, mais le 9B coûte plus cher par édition (0,03143 $ US contre 0,00715 $ US) en échange d'une fidélité supérieure — c'est le meilleur choix lorsque les éditions de catalogue impliquent des détails fins (textures de matière, exactitude des couleurs) plutôt qu'un simple remplacement de fond.

Pourquoi enchaîner les éditions depuis « l'image principale propre » plutôt que depuis la photo d'origine à chaque fois ? Éditer à partir de l'image brute encombrée oblige le modèle à corriger le désordre et à appliquer la nouvelle modification dans un seul et même passage, ce qui augmente le risque de dérive inutile. Nettoyer une fois, puis faire dériver chaque variante depuis ce résultat propre unique, permet à chaque image en aval de rester cohérente avec les autres.

Puis-je traiter tout un catalogue d'un coup ? Oui — le script de traitement par lots ci-dessus illustre ce schéma : boucler sur des tuples (image, prompt, output name), soumettre chacun comme une tâche indépendante, et exécuter un petit nombre de requêtes en concurrence plutôt qu'une longue boucle séquentielle.

Essayez par vous-même

Chaque édition de ce guide — nettoyage, variante de couleur, variante d'ambiance — tient en un seul appel API, enchaînée depuis une seule photo de départ. Si vous avez des photos produits existantes et souhaitez obtenir des variantes utilisables en catalogue sans refaire de séance photo, le guide de démarrage rapide de la documentation hiapi couvre l'authentification et la première requête, en quelques minutes seulement.

Articles similaires

Voir tous les articles →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API