Generación de imágenes mediante el CLI de codex
codex exec no tiene una opción "escribe la imagen en esta ruta": guarda lo que genera en
$CODEX_HOME/generated_images/<session id>/. scripts/codex_image.py ejecuta una vuelta no interactiva,
recoge solo las imágenes de esa sesión exacta y las escribe donde se le pida. Si no vuelve ninguna imagen, no escribe nada.
Usa siempre el script. Un codex exec "dibuja un gato" hecho a mano a menudo devuelve texto o un dibujo de ImageMagick
y te deja buscando la salida.
Nunca recurras a una API medida. No uses el SDK de OpenAI ni OPENAI_API_KEY, incluso si codex falla o está
sin cuota. Reporta el error y detente. Para la API medida de Google, solo usa google-image-gen, y solo cuando
el usuario lo haya solicitado.
Uso
Ejecuta desde el directorio de la habilidad o da la ruta absoluta del script. Una ejecución tarda entre 30 y 60 segundos.
python3 scripts/codex_image.py -p "una bicicleta roja solitaria contra un muro de piedra mojado al atardecer, fotografía cinematográfica" -o bici.png
| Objetivo | Comando |
|---|---|
| Relación de aspecto (una pista para el modelo) | -p "..." -o salida.png --aspect 9:16 |
| Imagen(es) de referencia | -p "..." -o salida.png -r ref.png [-r ref2.png] |
| Editar una imagen | --edit v1.png -p "haz el cielo púrpura" -o v2.png |
| Varias tomas | -p "..." -o opt.png -n 3 (guarda opt.png, opt-2.png, opt-3.png) |
| Tamaño exacto en píxeles | -p "..." -o portada.png --aspect 9:16 --fit 1080x1920 |
| Prompt largo | --prompt-file prompt.md -o salida.png |
| Ver el prompt, sin gastar nada | añade --print-prompt |
- La extensión de salida sigue el formato real: los bytes PNG solicitados como
bici.jpgacaban enbici.png. El script imprime cada ruta que escribió. --aspectsolo da forma al resultado.--fit WxHgarantiza el tamaño después: rellena con barras negras (--fit-mode pad, por defecto) o recorta centrando (--fit-mode crop), y siempre guarda PNG. Ajusta--aspectal destino para que haya poco que rellenar o recortar.--fitnecesita Pillow, que se comprueba antes de que codex se ejecute.-nsolicita N tomas en una sola ejecución; el modelo puede devolver menos, y el script guarda las que obtuvo.--editadjunta la imagen como destino y le dice al modelo que cambie solo lo que pide el prompt.
Escribiendo el prompt
El script añade la redacción que fuerza una llamada real a la herramienta de imagen, así que --prompt es solo sobre la imagen.
Una especificación breve y etiquetada funciona bien:
Sujeto: una bicicleta roja solitaria, pintura desgastada hasta el metal en los bordes
Escena: apoyada en un muro de piedra mojado de un puerto, luces del pueblo más allá
Estilo: fotografía cinematográfica, profundidad de campo reducida
Iluminación: atardecer, sol cálido y bajo, reflejos en la piedra mojada
Texto (literal): "NO HAY REPUESTOS"
Evitar: personas, marcas de agua, bicicletas adicionales
- Pon entre comillas el texto que debe aparecer y mantenlo corto; las cadenas largas salen mal escritas.
- Indica lo que no debe aparecer. Para un recorte transparente, pide un fondo transparente y guarda como
.png. - Para
--edit, escribe el cambio ("quita la farola") y nombra lo que debe permanecer ("mantén la bicicleta, el encuadre y la iluminación"). Cambia una cosa por pasada. - Una edición es una regeneración, no un parche de píxeles: el encuadre y los detalles varían, y cada pasada lo agrava. Mantén las cadenas cortas y vuelve a componer cualquier cosa que deba sobrevivir intacta.
Después de generar
Revisa el resultado antes de entregarlo, usando cualquier medio que tengas para ver una imagen: el modelo a veces se equivoca
en texto, conteos o un detalle solicitado. Si falla, vuelve a ejecutar con un prompt más preciso o refina con --edit.
Fallos
El script termina con código distinto de cero y un mensaje claro, y no escribe nada.
- CLI de codex no encontrado / no ha iniciado sesión: instala codex y ejecuta
codex login;CODEX_BINapunta a otro binario. - Sin cuota: espera el reinicio que codex informa o usa otra cuenta. No reintentes en un bucle.
- No se produjo ninguna imagen: el modelo respondió en texto. Se muestra su respuesta; vuelve a ejecutar con una petición de imagen más simple.
- Tiempo de espera agotado: aumenta
--timeout(por defecto 900 s) solo si la ejecución fue simplemente lenta. - Falta Pillow con
--fit:pip install Pillow, o quita--fit.