GPT-6 Sol y Claude Opus 5.5 ya disponiblesGPT-6 Sol por la mitad del precio de 5.6 Sol

Alternativa a la API de FLUX Kontext: editar fotos con GPT Image 2

Edición por instrucción sin máscara: el código de la petición, una cadena de tres ediciones que ejecutamos el 28 de octubre de 2026 y lo que conservó cada paso.

Kiki, OmniaKey COO7 min de lectura
En esta página

La API de FLUX Kontext edita una foto con un prompt y una imagen por petición. La página de BFL llama a FLUX.1 Kontext un modelo de la generación anterior y recomienda FLUX.2 para proyectos nuevos (comprobado el 28 de octubre de 2026). GPT-Image 2 recibe las mismas dos entradas. Tres ediciones encadenadas el 28 de octubre de 2026 conservaron la mesa del café, la taza, la planta y la ventana, además de cada cambio anterior.

Qué es la edición por instrucción

Envías una foto y una frase como «cambia la bicicleta roja a negro mate». El modelo devuelve una foto nueva con ese cambio hecho y el resto del encuadre intacto. BFL describe Kontext como edición de imágenes con prompts de texto simples, sin flujos de trabajo complejos ni ajuste fino (docs.bfl.ai/kontext/kontext_image_editing, comprobado el 28 de octubre de 2026).

Tres cifras de BFL marcan cómo se escribe el código: entrada de hasta 20 MB o 20 megapíxeles, salida de unos 1 MP y enlaces firmados del resultado que duran 10 minutos. Descarga el resultado en cuanto llegue.

La instrucción tiene dos partes: el cambio y la lista de lo que se queda.

GPT-Image 2 en OmniaKey acepta una tarea de edición con esos mismos dos ingredientes, y su página de modelo lista texto a imagen y edición de imagen en calidad low, medium y high (omniakey.com/gpt-image-2, comprobado el 28 de octubre de 2026). No ejecutamos ningún modelo FLUX, así que lo que sigue son nuestras cuatro ediciones y el código.

La petición

Una edición es un POST a https://api.omniakey.com/v1/media/tasks con model en gpt-image-2, type image, operation edit, la frase en input.prompt y la foto de origen en input.image como Base64 con su tipo MIME (docs.omniakey.com/en/media/image, comprobado el 2026-10-28). La llamada responde HTTP 202 con un id de tarea. Consulta GET /v1/media/tasks/{task_id} mientras el estado sea queued o processing y después toma assets[0].url de la tarea terminada.

Dos detalles nos costaron un reintento. Un POST con el User-Agent por defecto de Python devolvía HTTP 403 hasta que definimos uno (28 de octubre de 2026), y el Base64 en línea cuenta para el límite de 1 MiB de la petición, así que reduce la foto antes de codificarla.

El resultado es un PNG opaco detrás de un enlace firmado que caduca en aproximadamente una hora; el archivo se conserva 24 horas. Descárgalo y lee el ancho y el alto reales en lugar de fiarte del tamaño que pediste.

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)

En nuestras pruebas usamos size 1536x1024 y quality medium. La documentación dice que n debe ser 1 para GPT Image; la función lo omite. La llamada de ejemplo al final del archivo es el paso 1 de la cadena.

Una cadena de tres ediciones

Cada paso toma el resultado anterior como entrada, así que la cadena son tres tareas y tres descargas. La foto base es una mesa de café junto a una ventana: una taza blanca de café con plato, una bicicleta roja en la acera, una planta en maceta en el alféizar, 1536x1024 con calidad medium.

  • Paso 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." Resultado: una bicicleta negra mate con cesta de mimbre; la mesa, la taza, la planta y la ventana sin cambios.
  • Paso 2, desde el paso 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." Resultado: cielo de tarde, farolas encendidas, luz cálida dentro y la bicicleta negra con su cesta intactas.
  • Paso 3, desde el paso 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." Resultado: té helado con una rodaja de limón donde estaba el café; la escena de la tarde se mantuvo.
Cuadrícula de 2x2 con la misma mesa de café: la original, una bicicleta negra, una versión de tarde y té helado en lugar del café
La misma foto de café después de tres instrucciones, paso a paso. Cada paso conservó la mesa, la taza, la planta y la ventana.

Los cuatro encuadres son escenas sintéticas creadas por gpt-image-2. Generated with GPT-Image 2 via the OmniaKey API on October 28, 2026, size 1536x1024, quality medium.

Una edición desde la original

No todas las ediciones necesitan una cadena. Esta parte de la foto base y cambia un solo objeto del alféizar: "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."

En el alféizar quedaron tres libros de tapa dura, la planta desapareció y la bicicleta roja siguió roja. Una frase hizo dos cambios y los dos aparecieron en el encuadre.

La mesa de café con tres libros antiguos de tapa dura en el alféizar donde estaba la planta en maceta
Una edición aparte desde la foto original: libros en lugar de la planta. La bicicleta roja no cambió.

Qué se mantuvo y qué no

La mesa, la taza, la planta y el marco de la ventana pasaron los tres pasos, la bicicleta negra y su cesta sobrevivieron al cambio de luz de la tarde, y cada edición anterior seguía en el encuadre siguiente. La luz se movió una vez, en el paso 2, donde la frase lo pedía.

La rodaja de limón quedó en el borde del vaso, como pedía la frase, y el té helado siguió sobre el plato. Cada instrucción se ejecutó una vez, así que cada encuadre es una muestra.

Instrucciones que funcionaron

Cuatro instrucciones dieron cuatro ediciones utilizables con un patrón común.

  • Un cambio por frase y después la lista de lo que se queda. El paso 1 cambió la bicicleta y nombró la mesa, la taza, la planta y la ventana como intactas.
  • Repite la lista de lo que se queda en cada ronda, incluido el último cambio: el paso 2 escribe "the black bicycle" y el paso 3 conserva la tarde.
  • Di dónde va lo nuevo en la misma frase que lo viejo: "place a stack of three old hardcover books there".
  • Usa materiales y colores concretos: «negro mate», «cesta de mimbre marrón», «amarillo cálido», «vaso transparente».
  • Cierra con "Photorealistic, no text, no logos". Todas las instrucciones de la cadena acabaron así.

Para el orden de las frases y la redacción de la edición, nuestra guía de prompts de GPT Image 2 explica la estructura. La guía de probador virtual cubre el cambio de ropa, y la guía de eliminación de objetos cubre los borrados.

Cuál elegir

FLUX.1 KontextEdición con GPT-Image 2
Entrada por peticiónUn prompt, una imagenUn prompt, una imagen
Límite del origen20 MB o 20 megapíxelesPetición de 1 MiB, Base64 incluido
Tamaño del resultadoUnos 1 MPEl tamaño que pidas, en PNG
Enlace del resultado10 minutosAproximadamente una hora
Estado del modeloGeneración anterior, según BFLDisponible en OmniaKey

Elige Kontext si ya tienes un flujo de FLUX en producción y quieres mantener esa forma de llamada por ahora. Elige GPT-Image 2 si quieres el tamaño que decidas y una hora para recoger el enlace. BFL orienta los trabajos nuevos hacia FLUX.2, así que un proyecto nuevo es un buen momento para volver a mirar.

Sobre el coste, la página de precios de OpenAI (comprobada el 2026-10-28) factura gpt-image-2 por millón de tokens: $8.00 de entrada de imagen, $30.00 de salida de imagen, $2.00 de entrada de imagen en caché y el lote a la mitad de la tarifa estándar. No tiene una fila por imagen; la guía de generación de imágenes tiene una calculadora para una imagen.

Preguntas frecuentes

¿Qué hace la API de FLUX Kontext?

Edita una foto a partir de una instrucción de texto, con un prompt y una imagen de entrada por petición (BFL, comprobado el 2026-10-28). La página de BFL dice que "edits images using simple text prompts".

¿FLUX Kontext sigue vigente?

BFL llama a FLUX.1 Kontext un modelo de la generación anterior y recomienda FLUX.2 para proyectos nuevos (comprobado el 2026-10-28).

¿Puedo editar una foto por API solo con texto?

Sí. Envía una foto y una instrucción al endpoint de edición de GPT-Image 2 y vuelve una foto nueva. Hicimos cuatro ediciones así el 28 de octubre de 2026.

¿Se pueden encadenar ediciones?

Sí, con una tarea por paso: cada resultado entra como la foto de origen del siguiente. Nuestra cadena de tres pasos mantuvo los cambios anteriores a través del cambio de luz de la tarde y del cambio de bebida.

¿Cuánto duran los enlaces del resultado?

Aproximadamente una hora en OmniaKey, mientras el archivo se conserva 24 horas (docs.omniakey.com, comprobado el 2026-10-28). Descarga el PNG en cuanto la tarea termine y lee sus dimensiones reales.

OmniaKey ofrece ediciones de GPT-Image 2 mediante el flujo de tareas de arriba; las tarifas actuales están en la página de precios.

Modelos de este artículo

FLUX KontextGPT Image 2edición de imágenesedición por instrucciónAPI

Artículos relacionados

Artículos recientes