GPT-6 Sol et Claude Opus 5.5 disponiblesGPT-6 Sol à moitié prix par rapport à 5.6 Sol

Alternative à l'API FLUX Kontext : retoucher des images avec GPT Image 2

Retouche par consigne, sans masque : le code de la requête, une chaîne de trois retouches exécutée le 28 octobre 2026 et ce que chaque étape a conservé.

Kiki, OmniaKey COO7 minutes de lecture
Sur cette page

L'API FLUX Kontext modifie une photo à partir d'un prompt et d'une image par requête. La page de BFL qualifie FLUX.1 Kontext de modèle de la génération précédente et recommande FLUX.2 pour les nouveaux projets (vérifié le 28 octobre 2026). GPT-Image 2 reçoit les deux mêmes entrées. Trois retouches enchaînées le 28 octobre 2026 ont conservé la table du café, la tasse, la plante et la fenêtre, ainsi que chaque modification précédente.

Ce qu'est la retouche par consigne

Vous envoyez une photo et une phrase comme « transformez le vélo rouge en noir mat ». Le modèle renvoie une photo nouvelle avec cette modification faite et le reste du cadre intact. BFL décrit Kontext comme de la retouche d'images avec de simples prompts texte, sans workflows complexes ni affinage (docs.bfl.ai/kontext/kontext_image_editing, vérifié le 28 octobre 2026).

Trois chiffres de BFL dictent le code : entrée jusqu'à 20 MB ou 20 mégapixels, sortie d'environ 1 MP, liens signés du résultat valables 10 minutes. Téléchargez le résultat tout de suite.

La consigne comporte deux parties : la modification, puis la liste de ce qui reste.

GPT-Image 2 sur OmniaKey accepte une tâche de retouche avec ces deux mêmes ingrédients, et sa page modèle liste texte vers image et retouche d'image en qualité low, medium et high (omniakey.com/gpt-image-2, vérifié le 28 octobre 2026). Nous n'avons exécuté aucun modèle FLUX, donc la suite, ce sont nos quatre retouches et le code.

La requête

Une retouche est un POST vers https://api.omniakey.com/v1/media/tasks avec model à gpt-image-2, type image, operation edit, la phrase dans input.prompt et la photo source dans input.image en Base64 avec son type MIME (docs.omniakey.com/en/media/image, vérifié le 2026-10-28). L'appel répond HTTP 202 avec un id de tâche. Interrogez GET /v1/media/tasks/{task_id} tant que le statut vaut queued ou processing, puis prenez assets[0].url dans la tâche terminée.

Deux détails nous ont coûté une nouvelle tentative. Un POST avec le User-Agent par défaut de Python renvoyait HTTP 403 jusqu'à ce que nous en définissions un (28 octobre 2026), et le Base64 en ligne compte dans la limite de 1 MiB de la requête, alors réduisez la photo avant de l'encoder.

Le résultat est un PNG opaque derrière un lien signé qui expire au bout d'une heure environ ; le fichier est conservé 24 heures. Téléchargez-le, puis lisez la largeur et la hauteur réelles au lieu de vous fier à la taille demandée.

python
import base64
import json
import os
import time
import urllib.request
import uuid

API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]


def request(method, url, body=None, extra_headers=None):
    headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
    data = None
    if body is not None:
        headers["Content-Type"] = "application/json"
        data = json.dumps(body).encode()
    headers.update(extra_headers or {})
    req = urllib.request.Request(url, data=data, headers=headers, method=method)
    with urllib.request.urlopen(req, timeout=120) as resp:
        return json.load(resp)


def edit_image(source_path, prompt, out_path, size="1024x1536", quality="medium"):
    with open(source_path, "rb") as f:
        image = base64.b64encode(f.read()).decode()
    body = {
        "model": "gpt-image-2",
        "type": "image",
        "operation": "edit",
        "input": {"prompt": prompt, "image": {"data": image, "mime_type": "image/jpeg"}},
        "parameters": {"size": size, "quality": quality},
    }
    task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
    for _ in range(150):
        time.sleep(4)
        state = request("GET", f"{API}/{task}")
        if state["status"] not in ("queued", "processing"):
            break
    if state["status"] != "succeeded":
        raise RuntimeError(state.get("error") or state["status"])
    asset_url = state["assets"][0]["url"]  # signed link: valid for about an hour, so download now
    req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
    with urllib.request.urlopen(req, timeout=120) as resp, open(out_path, "wb") as f:
        f.write(resp.read())
    return task
if __name__ == "__main__":
    task = edit_image(
        "cafe-base.jpg",
        "Change the red bicycle to a matte black bicycle with a brown wicker basket on the front. Keep everything else exactly the same: the wooden table, the coffee cup, the plant, the window frame and the bright daylight. Photorealistic, no text, no logos.",
        "cafe-step1.png",
        size="1536x1024",
    )
    print("task", task)

Nos exécutions ont utilisé size 1536x1024 et quality medium. La documentation indique que n doit valoir 1 pour GPT Image ; la fonction l'omet. L'appel d'exemple en bas du fichier est l'étape 1 de la chaîne.

Une chaîne de trois retouches

Chaque étape prend le résultat précédent en entrée : la chaîne, c'est donc trois tâches et trois téléchargements. La photo de départ est une table de café près d'une fenêtre : une tasse blanche sur sa soucoupe, un vélo rouge sur le trottoir, une plante en pot sur le rebord, 1536x1024 en qualité medium.

  • Étape 1 : "Change the red bicycle to a matte black bicycle with a brown wicker basket on the front. Keep everything else exactly the same: the wooden table, the coffee cup, the plant, the window frame and the bright daylight. Photorealistic, no text, no logos." Résultat : un vélo noir mat avec un panier en osier ; table, tasse, plante et fenêtre inchangées.
  • Étape 2, à partir de l'étape 1 : "Make it evening outside: the sky is dark blue and the street lamps are on. The cafe interior lights are warm yellow. Keep the table, the cup, the plant, the black bicycle and the window frame exactly the same. Photorealistic, no text, no logos." Résultat : ciel du soir, lampadaires allumés, lumière chaude à l'intérieur, et le vélo noir avec son panier conservés.
  • Étape 3, à partir de l'étape 2 : "Replace the coffee in the white cup with a clear glass of iced tea with a lemon slice on the rim. Keep everything else exactly the same. Photorealistic, no text, no logos." Résultat : un thé glacé avec une rondelle de citron à la place du café ; la scène du soir a tenu.
Une grille 2x2 de la même table de café : l'original, un vélo noir, une version du soir et du thé glacé à la place du café
La même photo de café après trois consignes, étape par étape. Chaque étape a conservé la table, la tasse, la plante et la fenêtre.

Les quatre images sont des scènes synthétiques créées par gpt-image-2. Generated with GPT-Image 2 via the OmniaKey API on October 28, 2026, size 1536x1024, quality medium.

Une retouche depuis l'original

Toutes les retouches n'ont pas besoin d'une chaîne. Celle-ci repart de la photo de base et échange un seul objet sur le rebord : "Remove the potted plant from the windowsill and place a stack of three old hardcover books there. Keep everything else exactly the same: the table, the cup, the red bicycle and the daylight. Photorealistic, no text, no logos."

Trois livres anciens à couverture rigide se sont retrouvés sur le rebord, la plante avait disparu et le vélo rouge restait rouge. Une phrase a produit deux changements, et les deux sont apparus dans le cadre.

La table de café avec trois livres anciens à couverture rigide sur le rebord, à la place de la plante en pot
Une retouche séparée depuis la photo d'origine : des livres à la place de la plante. Le vélo rouge n'a pas changé.

Ce qui a tenu et ce qui n'a pas tenu

La table, la tasse, la plante et le cadre de la fenêtre ont traversé les trois étapes, le vélo noir et son panier ont survécu à l'éclairage du soir, et chaque retouche précédente était encore là dans l'image suivante. La lumière n'a bougé qu'une fois, à l'étape 2, là où la phrase le demandait.

La rondelle de citron s'est posée sur le bord du verre, comme demandé, et le thé glacé est resté sur la soucoupe. Chaque consigne n'a tourné qu'une fois : chaque image est donc un échantillon.

Des consignes qui ont marché

Quatre consignes ont donné quatre retouches utilisables, avec un schéma commun.

  • Un changement par phrase, puis la liste de ce qui reste. L'étape 1 a changé le vélo et a nommé la table, la tasse, la plante et la fenêtre comme inchangées.
  • Répétez la liste à chaque tour, y compris la dernière modification : l'étape 2 écrit "the black bicycle", l'étape 3 conserve le soir.
  • Dites où va le nouvel élément dans la même phrase que l'ancien : "place a stack of three old hardcover books there".
  • Employez des matières et des couleurs concrètes : « noir mat », « panier en osier marron », « jaune chaud », « verre transparent ».
  • Terminez par "Photorealistic, no text, no logos". Toutes les consignes de la chaîne se terminaient ainsi.

Pour l'ordre des phrases et le choix des mots, notre guide des prompts GPT Image 2 détaille la structure. Le guide de l'essayage virtuel couvre le changement de tenue, et le guide de la suppression d'objets couvre les effacements.

Laquelle choisir

FLUX.1 KontextRetouche avec GPT-Image 2
Entrée par requêteUn prompt, une imageUn prompt, une image
Limite de la source20 MB ou 20 mégapixelsRequête de 1 MiB, Base64 inclus
Taille du résultatEnviron 1 MPLa taille demandée, en PNG
Lien du résultat10 minutesEnviron une heure
Statut du modèleGénération précédente, selon BFLDisponible sur OmniaKey

Choisissez Kontext si une chaîne FLUX tourne déjà en production et que vous voulez garder cette forme d'appel pour l'instant. Choisissez GPT-Image 2 si vous voulez la taille que vous décidez et une heure pour récupérer le lien. BFL oriente les nouveaux travaux vers FLUX.2 : un nouveau projet est donc le bon moment pour revoir le choix.

Côté coût, la page de tarifs d'OpenAI (vérifiée le 2026-10-28) facture gpt-image-2 au million de tokens : $8.00 d'entrée d'image, $30.00 de sortie d'image, $2.00 d'entrée d'image en cache, et le lot à la moitié du tarif standard. Il n'y a pas de ligne par image ; le guide de génération d'images propose un calculateur pour une image.

Questions fréquentes

Que fait l'API FLUX Kontext ?

Elle retouche une photo à partir d'une consigne texte, avec un prompt et une image d'entrée par requête (BFL, vérifié le 2026-10-28). La page de BFL dit qu'elle "edits images using simple text prompts".

FLUX Kontext est-il toujours d'actualité ?

BFL qualifie FLUX.1 Kontext de modèle de la génération précédente et recommande FLUX.2 pour les nouveaux projets (vérifié le 2026-10-28).

Peut-on retoucher une photo par API avec du texte seul ?

Oui. Envoyez une photo et une consigne au point d'accès de retouche de GPT-Image 2, et une photo nouvelle revient. Nous avons fait quatre retouches ainsi le 28 octobre 2026.

Peut-on enchaîner les retouches ?

Oui, avec une tâche par étape : chaque résultat entre comme photo source de la suivante. Notre chaîne de trois étapes a conservé les modifications précédentes à travers l'éclairage du soir et le changement de boisson.

Combien de temps les liens du résultat durent-ils ?

Environ une heure sur OmniaKey, le fichier étant conservé 24 heures (docs.omniakey.com, vérifié le 2026-10-28). Téléchargez le PNG dès que la tâche réussit, puis lisez ses dimensions réelles.

OmniaKey fournit les retouches GPT-Image 2 via le flux de tâches ci-dessus ; les tarifs actuels sont sur la page des tarifs.

Modèles cités dans cet article

FLUX KontextGPT Image 2édition d'imagesédition par consigneAPI

Articles similaires

Articles récents