Alternativa à API do FLUX Kontext: edite imagens com o GPT Image 2
Edição por instrução, sem máscara: o código da requisição, uma cadeia de três edições que rodamos em 28 de outubro de 2026 e o que cada passo preservou.
Nesta página
- O que é edição por instrução
- A requisição
- Uma cadeia de três edições
- Uma edição a partir da original
- O que se manteve e o que não
- Instruções que funcionaram
- Qual escolher
- Perguntas frequentes
- O que a API do FLUX Kontext faz?
- O FLUX Kontext ainda é atual?
- Dá para editar uma foto por API usando só texto?
- Dá para encadear edições?
- Quanto tempo duram os links do resultado?
A API do FLUX Kontext edita uma foto a partir de um prompt e uma imagem por requisição. A página da BFL chama o FLUX.1 Kontext de modelo de geração anterior e recomenda o FLUX.2 para projetos novos (verificado em 28 de outubro de 2026). O GPT-Image 2 recebe as mesmas duas entradas. Três edições encadeadas em 28 de outubro de 2026 mantiveram a mesa do café, a xícara, a planta e a janela, além de cada alteração feita antes.
O que é edição por instrução
Você envia uma foto e uma frase como "troque a bicicleta vermelha por uma preta fosca". O modelo devolve uma foto nova com essa mudança aplicada e o resto do quadro intacto. A BFL descreve o Kontext como edição de imagens com prompts de texto simples, sem fluxos de trabalho complexos nem ajuste fino (docs.bfl.ai/kontext/kontext_image_editing, verificado em 28 de outubro de 2026).
Três números da BFL definem como o código é escrito: entrada de até 20 MB ou 20 megapixels, saída de cerca de 1 MP e links assinados do resultado que duram 10 minutos. Baixe o resultado na hora.
A instrução carrega duas partes: a mudança e a lista do que fica.
O GPT-Image 2 na OmniaKey recebe uma tarefa de edição com os mesmos dois ingredientes, e a página do modelo lista texto para imagem e edição de imagem nas qualidades low, medium e high (omniakey.com/gpt-image-2, verificado em 28 de outubro de 2026). Não rodamos nenhum modelo FLUX, então o que vem a seguir são as nossas quatro edições e o código.
A requisição
Uma edição é um POST para https://api.omniakey.com/v1/media/tasks com model igual a gpt-image-2, type image, operation edit, a frase em input.prompt e a foto de origem em input.image como Base64 com o tipo mime (docs.omniakey.com/en/media/image, verificado em 2026-10-28). A chamada responde HTTP 202 com um id de tarefa. Consulte GET /v1/media/tasks/{task_id} enquanto o status for queued ou processing e depois pegue assets[0].url na tarefa concluída.
Dois detalhes custaram uma tentativa extra. Um POST com o User-Agent padrão do Python voltou HTTP 403 até definirmos um (28 de outubro de 2026), e o Base64 embutido conta para o limite de 1 MiB da requisição, então reduza a foto antes de codificar.
O resultado é um PNG opaco atrás de um link assinado que expira em cerca de uma hora; o arquivo fica disponível por 24 horas. Baixe e leia a largura e a altura reais, em vez de confiar no tamanho que você pediu.
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)
Nossas execuções usaram size 1536x1024 e quality medium. A documentação diz que n precisa ser 1 no GPT Image; a função deixa o campo de fora. A chamada de exemplo no fim do arquivo é o passo 1 da cadeia.
Uma cadeia de três edições
Cada passo recebe o resultado anterior como entrada, então a cadeia são três tarefas e três downloads. A foto base é uma mesa de café junto à janela: uma xícara branca de café com pires, uma bicicleta vermelha na calçada, uma planta em vaso no parapeito, 1536x1024 em qualidade medium.
- Passo 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: uma bicicleta preta fosca com cesto de vime na frente; mesa, xícara, planta e janela sem mudança.
- Passo 2, a partir do passo 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: céu de fim de tarde, postes acesos, luz interna amarelada e a bicicleta preta com o cesto preservados.
- Passo 3, a partir do passo 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: chá gelado com uma rodela de limão no lugar do café; a cena do fim de tarde continuou.

Os quatro quadros são cenas sintéticas feitas pelo gpt-image-2. Generated with GPT-Image 2 via the OmniaKey API on October 28, 2026, size 1536x1024, quality medium.
Uma edição a partir da original
Nem toda edição precisa de cadeia. Esta começa da foto base e troca um objeto no parapeito: "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."
Três livros de capa dura ficaram no parapeito, a planta sumiu e a bicicleta vermelha continuou vermelha. Uma frase fez duas mudanças, e as duas apareceram no quadro.

O que se manteve e o que não
A mesa, a xícara, a planta e o batente da janela passaram pelos três passos, a bicicleta preta e o cesto sobreviveram à troca de luz do fim de tarde, e cada edição anterior continuava no quadro seguinte. A luz mudou uma vez, no passo 2, onde a frase pedia isso.
A rodela de limão ficou na borda do copo, como a frase pedia, e o chá gelado continuou sobre o pires. Cada instrução rodou uma vez, então cada quadro é uma amostra.
Instruções que funcionaram
Quatro instruções deram quatro edições utilizáveis, com um padrão em comum.
- Uma mudança por frase e depois a lista do que fica. O passo 1 trocou a bicicleta e nomeou mesa, xícara, planta e janela como inalteradas.
- Repita a lista do que fica a cada rodada, incluindo a mudança anterior: o passo 2 escreve "the black bicycle" e o passo 3 preserva o fim de tarde.
- Diga onde a coisa nova entra na mesma frase que a coisa antiga: "place a stack of three old hardcover books there".
- Use materiais e cores concretos: "matte black", "brown wicker basket", "warm yellow", "clear glass".
- Feche com "Photorealistic, no text, no logos". Toda instrução da nossa cadeia terminou assim.
Para a ordem das frases e a escolha das palavras na edição, o nosso guia de prompts do GPT Image 2 mostra a estrutura. O guia de provador virtual cobre troca de roupa, e o guia de remoção de objetos cobre apagamentos.
Qual escolher
| FLUX.1 Kontext | Edição no GPT-Image 2 | |
|---|---|---|
| Entrada por requisição | Um prompt, uma imagem | Um prompt, uma imagem |
| Limite da origem | 20 MB ou 20 megapixels | Requisição de 1 MiB, Base64 incluído |
| Tamanho do resultado | Cerca de 1 MP | O tamanho que você pedir, em PNG |
| Link do resultado | 10 minutos | Cerca de uma hora |
| Situação do modelo | Geração anterior, segundo a BFL | Disponível na OmniaKey |
Escolha o Kontext quando um pipeline FLUX já roda em produção e você quer manter esse formato de chamada por enquanto. Escolha o GPT-Image 2 quando quiser o tamanho que você define e uma hora para buscar o link. A BFL aponta trabalhos novos para o FLUX.2, então um projeto novo é um bom momento para rever a escolha.
Sobre custo, a página de preços da OpenAI (verificada em 2026-10-28) cobra o gpt-image-2 por milhão de tokens: $8.00 de entrada de imagem, $30.00 de saída de imagem, $2.00 de entrada de imagem em cache, e lote pela metade da tarifa padrão. Não há linha por imagem; o guia de geração de imagens tem uma calculadora para uma imagem.
Perguntas frequentes
O que a API do FLUX Kontext faz?
Edita uma foto a partir de uma instrução de texto, com um prompt e uma imagem de entrada por requisição (BFL, verificado em 2026-10-28). A página da BFL diz que ela "edits images using simple text prompts".
O FLUX Kontext ainda é atual?
A BFL chama o FLUX.1 Kontext de modelo de geração anterior e recomenda o FLUX.2 para projetos novos (verificado em 2026-10-28).
Dá para editar uma foto por API usando só texto?
Dá. Envie uma foto e uma instrução para o endpoint de edição do GPT-Image 2 e uma foto nova volta. Rodamos quatro edições assim em 28 de outubro de 2026.
Dá para encadear edições?
Dá, com uma tarefa por passo: cada resultado entra como a foto de origem do passo seguinte. Nossa cadeia de três passos manteve as mudanças anteriores durante a troca de luz do fim de tarde e a troca da bebida.
Quanto tempo duram os links do resultado?
Cerca de uma hora na OmniaKey, com o arquivo guardado por 24 horas (docs.omniakey.com, verificado em 2026-10-28). Baixe o PNG assim que a tarefa terminar e leia as dimensões reais.
A OmniaKey entrega edições do GPT-Image 2 pelo fluxo de tarefas acima; os preços atuais estão na página de preços.
Modelos deste artigo
Artigos relacionados
Guia de prompts do GPT Image 2: estrutura, exemplos e imagens reais
Oito prompts e nove imagens reais: o que o GPT Image 2 acertou no detalhe, o que ele acrescentou e como corrigir.
API de provador virtual: troque o look da modelo com o GPT Image 2
Uma foto e um prompt mudam o look. Aqui estão o código do pedido, três trocas que rodamos em 28 de outubro de 2026 e onde a edição desvia.
API de remoção de objetos: apague o que sobra na foto com o GPT Image 2
Uma instrução por objeto bastou para estas três remoções. Veja o código da requisição, os resultados em tamanho real e onde a edição ainda não dá para confiar.
Artigos recentes
- Clapping Cat Meme AI: faça seu pet bater palmas com imagem para vídeo
- Guia de prompts do Kling 3.0: estrutura, exemplos e clipes reais
- Guia de prompts do MiniMax H3: estrutura, exemplos e clipes reais
- Claude Haiku 5.5 vs Sonnet 5.5: programação, custo e velocidade
- Guia de prompts do Wan 3.0: estrutura, exemplos e clipes reais
