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.
En esta página
- Qué es la edición por instrucción
- La petición
- Una cadena de tres ediciones
- Una edición desde la original
- Qué se mantuvo y qué no
- Instrucciones que funcionaron
- Cuál elegir
- Preguntas frecuentes
- ¿Qué hace la API de FLUX Kontext?
- ¿FLUX Kontext sigue vigente?
- ¿Puedo editar una foto por API solo con texto?
- ¿Se pueden encadenar ediciones?
- ¿Cuánto duran los enlaces del resultado?
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.
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.

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.

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 Kontext | Edición con GPT-Image 2 | |
|---|---|---|
| Entrada por petición | Un prompt, una imagen | Un prompt, una imagen |
| Límite del origen | 20 MB o 20 megapíxeles | Petición de 1 MiB, Base64 incluido |
| Tamaño del resultado | Unos 1 MP | El tamaño que pidas, en PNG |
| Enlace del resultado | 10 minutos | Aproximadamente una hora |
| Estado del modelo | Generación anterior, según BFL | Disponible 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
Artículos relacionados
Guía de prompts de GPT Image 2: estructura, ejemplos e imágenes reales
Ocho prompts y nueve imágenes reales: qué acertó GPT Image 2 al detalle, qué añadió y cómo corregirlo.
API de probador virtual: cambia la ropa con GPT Image 2
Una foto y un prompt bastan para cambiar la ropa. Aquí están el código de la petición, tres cambios que ejecutamos el 28 de octubre de 2026 y dónde se desvía la edición.
API de eliminación de objetos: quita objetos de tus fotos con GPT Image 2
Una frase por objeto bastó para estas tres eliminaciones. Aquí están el código de la petición, los resultados a tamaño completo y los puntos donde todavía no conviene fiarse.
Artículos recientes
- Clapping Cat Meme AI: haz que tu mascota aplauda con imagen a vídeo
- Guía de prompts de Kling 3.0: estructura, ejemplos y clips reales
- Guía de prompts de MiniMax H3: estructura, ejemplos y clips reales
- Claude Haiku 5.5 vs Sonnet 5.5: programación, precio y velocidad
- Guía de prompts de Wan 3.0: estructura, ejemplos y clips reales
