Necesitas un icono para tu app y la imagen PNG generada se ve bien en la portada, pero al reducirla a 24 píxeles pierde forma. Images 2.6 permite pedir SVG desde Image API: un archivo con trazos y formas editables que escala sin la misma pérdida de resolución. La utilidad real no es «hacer un logo automático», sino crear un punto de partida que puedas inspeccionar y corregir antes de incorporarlo a un producto.
Qué ofrece el formato nuevo
La guía oficial de OpenAI indica usar output_format="svg" con POST /v1/images/generations y n=1. La respuesta entrega bytes XML codificados en base64. No se admite SVG en el endpoint de edición de imágenes ni como entrada raster para ese flujo. Tampoco se combinan SVG con streaming, imágenes parciales, compresión de salida o prompt_rewriter. El modelo crea primero una imagen de referencia y después el documento vectorial; por eso se factura la imagen y el trabajo de autoría del SVG, no un precio plano de «un icono».
La documentación afirma que el SVG resultante contiene contenido vectorial estático, sin scripts, recursos externos ni imágenes raster incrustadas. Aun así, trátalo como un archivo generado que debes revisar. Un SVG válido puede verse confuso a tamaño pequeño, usar demasiados nodos o parecerse sin querer a una marca existente.

Genera un boceto vectorial
Instala el SDK openai y configura OPENAI_API_KEY fuera del código. Este ejemplo pide un icono geométrico abstracto para una app de notas. Indica colores y simplicidad; evita pedir un logotipo que imite otra marca. La solicitud usa parámetros documentados, pero no fue ejecutada aquí contra la API pagada.
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI()
result = client.images.generate(
model="gpt-image-2.6-sunburst",
output_format="svg",
n=1,
quality="medium",
prompt=(
"Create a simple abstract app icon for a private notes tool. "
"Use two rounded geometric shapes, teal and cream. "
"Clear silhouette at 24 pixels, no text, no letters, no gradients, "
"no resemblance to a known brand. Center the shape on a square canvas."
),
)
Path("notes-icon.svg").write_bytes(
base64.b64decode(result.data[0].b64_json)
)
Comprueba el archivo antes de usarlo
Con Python estándar puedes verificar que el XML abre, que la raíz es svg y que no aparecen unas clases obvias de elementos que no quieres. Este chequeo es deliberadamente parcial; no sustituye un sanitizador SVG si aceptarás archivos de terceros en una web pública.
from pathlib import Path
from xml.etree import ElementTree as ET
path = Path("notes-icon.svg")
root = ET.parse(path).getroot()
name = lambda tag: tag.rsplit("}", 1)[-1].lower()
assert name(root.tag) == "svg", "The file is not an SVG"
blocked = {"script", "foreignobject", "image"}
found = {name(node.tag) for node in root.iter()} & blocked
assert not found, f"Review unsupported elements: {sorted(found)}"
print("XML valid; elements:", sum(1 for _ in root.iter()))
Después ábrelo en un editor vectorial y revisa trazos, colores y dimensiones. Míralo a 24 px, 120 px y 512 px, en fondo claro y oscuro. Si el detalle desaparece o un contorno se rompe, simplifica rutas y formas. No marques «listo» solo porque el XML pase el test. También comprueba derechos de referencias visuales y búsqueda de similitud con marcas antes de usarlo comercialmente.
Cuándo elegir SVG y cuándo no
SVG encaja en iconos, ilustraciones de formas claras y elementos que necesitan variaciones de color o escala. Una escena fotográfica, una textura compleja o una portada con iluminación suele funcionar mejor como imagen raster. Si quieres editar una zona de una foto, usa el flujo de edición con markup; ese endpoint no entrega SVG. Para marca final, un diseñador aún debe decidir proporciones, accesibilidad, originalidad y sistemas de uso.
Estado de la prueba: verificamos la sintaxis del ejemplo y ejecutamos el validador XML con un SVG de muestra local. No generamos un SVG de pago mediante la API ni afirmamos que el modelo produzca siempre rutas fáciles de editar. Revisa costos actuales antes de automatizar variantes.
