DEV Community

LeoJulieta
LeoJulieta

Posted on

ChatGPT Images 2.5: crea y edita imágenes al instante

ChatGPT Images 2.5: La nueva herramienta de OpenAI que genera y edita imágenes al instante

Introducción

¿Te imaginas crear una ilustración, cambiar su estilo y ajustarla a la resolución que necesitas sin salir del chat? Con ChatGPT Images 2.5 eso ya es una realidad. En menos de 48 horas la versión beta ha superado los 120 000 usuarios y se ha convertido en la conversación más candente de Hacker News y Twitter. En este artículo te explico, paso a paso, cómo funciona, cómo se compara con la competencia y, lo más importante, cómo integrarla en tus proyectos con código listo para Python y Node.js.


Preguntas frecuentes

Pregunta Respuesta
¿Necesito una cuenta de pago? Sí. La generación de imágenes está incluida en los planes ChatGPT Plus y Enterprise. Existe un nivel gratuito limitado a 10 imágenes/mes, pero para uso profesional se recomienda Plus (1 000 imágenes/mes).
¿Puedo controlar estilo y resolución? Sí. En el prompt puedes añadir parámetros como --style cyberpunk --resolution 2048x2048. También puedes enviar un JSON con los campos style, width, height y seed.
¿Cómo se gestionan derechos de autor y filtrado? OpenAI aplica un filtro de contenido que bloquea imágenes explícitas o que infrinjan derechos. Por defecto la imagen se licencia bajo CC‑0, aunque puedes añadir metadatos con una licencia personalizada.

¿Por qué es relevante ahora?

  1. Adopción explosiva – Más de 120 000 usuarios en la primera semana y una comunidad que ya crea plugins para Shopify, WordPress y Discord.
  2. Ventaja competitiva – DALL‑E 3, Stable Diffusion 2.1 y Midjourney V6 generan imágenes, pero solo ChatGPT Images 2.5 permite edición in‑chat y una integración directa con los flujos de marketing.
  3. Coste bajo y facturación por uso – Precio basado en tokens y por‑imagen, más barato que los créditos de DALL‑E 3 y perfecto para SaaS.
  4. Seguridad y cumplimiento – Filtros de contenido y trazabilidad de prompts, imprescindibles para marcas que deben cumplir GDPR y políticas internas.

Arquitectura práctica

ChatGPT Images 2.5 se organiza en tres bloques que puedes visualizar como una cadena de montaje:

Bloque Qué hace Tecnologías
Encoder de texto Convierte el prompt en un vector semántico. CLIP‑text, modelo transformer de 1.5 B parámetros.
Diffusion core Genera la imagen a partir del vector y los parámetros de estilo/resolución. Modelo latente de difusión (Stable‑Diffusion‑XL‑v2) fine‑tuned por OpenAI.
Editor in‑chat Permite modificar la salida (añadir objetos, cambiar colores, up‑scale). LoRA + ControlNet, ejecutado en tiempo real dentro del mismo chat.

Los bloques se comunican mediante API REST y WebSocket para la edición interactiva.


Comparativa rápida con los principales competidores

Característica ChatGPT Images 2.5 DALL‑E 3 Stable Diffusion 2.1 Midjourney V6
Edición in‑chat ❌ (requiere img2img)
Control de estilo vía prompt ✅ (--style) ✅ (pero limitado) ✅ (con LoRA) ✅ (con parámetros)
Resolución máxima 4096 × 4096 1024 × 1024 2048 × 2048 (custom) 2048 × 2048
Facturación por uso Tokens / imagen Créditos Créditos Suscripción
Filtros de contenido Sí (multinivel) Opcional (open‑source)
Licencia por defecto CC‑0 CC‑0 Depende del modelo Licencia propia Midjourney

Guía práctica: usar la API en Python

import requests, json, base64

API_KEY = "sk‑tu‑clave‑de‑api"
ENDPOINT = "https://api.openai.com/v1/images/generations"

payload = {
    "prompt": "un dragón cyberpunk sobre una ciudad neón --style cyberpunk --resolution 2048x2048",
    "n": 1,
    "size": "2048x2048",
    "response_format": "b64_json"
}

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

resp = requests.post(ENDPOINT, headers=headers, json=payload)
data = resp.json()
img_b64 = data["data"][0]["b64_json"]
with open("dragon.png", "wb") as f:
    f.write(base64.b64decode(img_b64))
print("Imagen guardada: dragon.png")
Enter fullscreen mode Exit fullscreen mode

Editar la imagen sin salir del chat

edit_payload = {
    "image_id": data["data"][0]["id"],
    "edit_prompt": "añade una lluvia de meteoritos en el fondo",
    "strength": 0.6          # 0‑1, controla cuánto se altera la imagen original
}
edit_resp = requests.post(
    "https://api.openai.com/v1/images/edits",
    headers=headers,
    json=edit_payload
)
# Guardar la versión editada
edit_b64 = edit_resp.json()["data"][0]["b64_json"]
with open("dragon_edit.png", "wb") as f:
    f.write(base64.b64decode(edit_b64))
Enter fullscreen mode Exit fullscreen mode

Guía práctica: usar la API en Node.js

const fetch = require("node-fetch");
const fs = require("fs");

const API_KEY = "sk‑tu‑clave‑de‑api";
const ENDPOINT = "https://api.openai.com/v1/images/generations";

async function generarImagen() {
  const body = {
    prompt: "un castillo medieval bajo la aurora boreal --style fantasy --resolution 2048x2048",
    n: 1,
    size: "2048x2048",
    response_format: "b64_json"
  };

  const res = await fetch(ENDPOINT, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify(body)
  });

  const json = await res.json();
  const imgB64 = json.data[0].b64_json;
  fs.writeFileSync("castillo.png", Buffer.from(imgB64, "base64"));
  console.log("Imagen guardada: castillo.png");
  return json.data[0].id; // id para posteriores ediciones
}

// Ejemplo de edición
async function editarImagen(imageId) {
  const editBody = {
    image_id: imageId,
    edit_prompt: "añade una aurora verde brillante en el cielo",
    strength: 0.5
  };

  const editRes = await fetch("https://api.openai.com/v1/images/edits", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify(editBody)
  });

  const editJson = await editRes.json();
  const editB64 = editJson.data[0].b64_json;
  fs.writeFileSync("castillo_edit.png", Buffer.from(editB64, "base64"));
  console.log("Imagen editada guardada: castillo_edit.png");
}

// Ejecutar
generarImagen().then(id => editarImagen(id));
Enter fullscreen mode Exit fullscreen mode

Automatizando publicaciones masivas en un CMS (ejemplo con WordPress)


bash
#!/usr/bin/env bash
# Requiere: curl, jq, wp-cli

API_KEY="sk‑tu‑clave‑de‑api"
WP_URL="https://mi-sitio.com"
WP_USER="admin"
WP_PASS="contraseña"

PROMPT_LIST=("paisaje futurista" "retrato estilo barroco" "logo minimalista")

for prompt in "${PROMPT_LIST[@]}"; do
  # 1️⃣ Generar imagen
  resp=$(curl -s -X POST https://api.openai.com/v1/images/generations \
    -H "Authorization: Bearer $API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"prompt\":\"$prompt --style artistic --resolution 1024x1024\",\"n\":1,\"size\":\"1024x1024\",\"response_format\":\"b64_json\"}")

  img_b64=$(echo $resp | jq -r '.data[0].b64_json')
  img_file="${prompt// /_}.png"
  echo $img_b64 | base

---
*Herramienta mencionada: [Cloudflare](https://www.cloudflare.com/affiliates/)*
Enter fullscreen mode Exit fullscreen mode

Top comments (0)