Proyecto: Generador de Historias Visuales: flujo de imágenes GPT-4o + DALL·E basado en la narrativa del prompt
4. Explicación Paso a Paso (Referenciando el Código Anterior)
- Configuración e Inicialización:
- El script importa las bibliotecas necesarias (
openai,os,time,dotenv,datetime). - Carga el
OPENAI_API_KEYdesde tu archivo.env. - Inicializa el objeto
client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí. - Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
- El script importa las bibliotecas necesarias (
Crear/Recuperar Asistente (función create_or_retrieve_assistant):- Esta función primero verifica si ya existe un asistente con el
ASSISTANT_NAMEespecificado para evitar crear duplicados. - Si no se encuentra, llama a
client.beta.assistants.create(...)utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramientaimage_generation. Esta herramienta utiliza DALL·E 3 internamente.
- Esta función primero verifica si ya existe un asistente con el
Iniciar un Hilo (función generate_visual_story):- Se crea un nuevo hilo de conversación usando
client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
- Se crea un nuevo hilo de conversación usando
Enviar Indicación del Usuario (función generate_visual_story):- La idea de la historia del usuario (
user_prompt) se añade al hilo usandoclient.beta.threads.messages.create(...)conrole="user".
- La idea de la historia del usuario (
Ejecutar el Asistente (función generate_visual_story):- Se instruye al asistente para procesar el hilo usando
client.beta.threads.runs.create(...), pasando elassistant_idythread_id.
- Se instruye al asistente para procesar el hilo usando
Esperar la Finalización (función poll_run_status):- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
client.beta.threads.runs.retrieve(...). - Muestra el estado (
queued,in_progress,completed, etc.) para retroalimentación del usuario. - El bucle continúa hasta que el estado sea
completedu otro estado terminal (failed,cancelled,expired), o hasta que se alcance el tiempo límite.
- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):- Una vez que la ejecución está completa,
client.beta.threads.messages.list(...)recupera todos los mensajes del hilo (usandoorder="asc"para obtenerlos cronológicamente). - El código itera a través de los mensajes del asistente.
- Para contenido de
type="text", imprime la descripción de la escena. - Para contenido de
type="image_file",imprime el file_idasociado con la imagen generada. Este ID es la clave para obtener la imagen real.
- Una vez que la ejecución está completa,
Recuperar Contenido de Imagen (función save_image_from_file_id):- Este es el paso crucial añadido. Para cada
file_idobtenido en el paso anterior, se llama a esta función auxiliar. - Utiliza
client.files.retrieve_content(file_id)para obtener los datos binarios de la imagen. - Luego guarda estos datos binarios en un archivo
.pngen un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.
- Este es el paso crucial añadido. Para cada
Extensiones Opcionales
- Agregar números de página o leyendas basadas en el
scene_count. - Modificar las
ASSISTANT_INSTRUCTIONSpara aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela"). - Implementar lógica para cargar un
thread_idanterior para continuar o remezclar historias. - Usar una biblioteca como
ReportLabo generación HTML para crear un PDF formateado o una página web de salida.
Lo Que Has Construido
Al ejecutar este script, habrás implementado un motor completo de narración con IA que:
- Acepta una indicación en lenguaje natural.
- Utiliza GPT-4o para generar escenas secuenciales con descripciones.
- Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
- Recupera tanto las descripciones textuales como los archivos de imagen reales.
- Construye los componentes de una experiencia narrativa visualmente atractiva.
Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.
4. Explicación Paso a Paso (Referenciando el Código Anterior)
- Configuración e Inicialización:
- El script importa las bibliotecas necesarias (
openai,os,time,dotenv,datetime). - Carga el
OPENAI_API_KEYdesde tu archivo.env. - Inicializa el objeto
client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí. - Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
- El script importa las bibliotecas necesarias (
Crear/Recuperar Asistente (función create_or_retrieve_assistant):- Esta función primero verifica si ya existe un asistente con el
ASSISTANT_NAMEespecificado para evitar crear duplicados. - Si no se encuentra, llama a
client.beta.assistants.create(...)utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramientaimage_generation. Esta herramienta utiliza DALL·E 3 internamente.
- Esta función primero verifica si ya existe un asistente con el
Iniciar un Hilo (función generate_visual_story):- Se crea un nuevo hilo de conversación usando
client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
- Se crea un nuevo hilo de conversación usando
Enviar Indicación del Usuario (función generate_visual_story):- La idea de la historia del usuario (
user_prompt) se añade al hilo usandoclient.beta.threads.messages.create(...)conrole="user".
- La idea de la historia del usuario (
Ejecutar el Asistente (función generate_visual_story):- Se instruye al asistente para procesar el hilo usando
client.beta.threads.runs.create(...), pasando elassistant_idythread_id.
- Se instruye al asistente para procesar el hilo usando
Esperar la Finalización (función poll_run_status):- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
client.beta.threads.runs.retrieve(...). - Muestra el estado (
queued,in_progress,completed, etc.) para retroalimentación del usuario. - El bucle continúa hasta que el estado sea
completedu otro estado terminal (failed,cancelled,expired), o hasta que se alcance el tiempo límite.
- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):- Una vez que la ejecución está completa,
client.beta.threads.messages.list(...)recupera todos los mensajes del hilo (usandoorder="asc"para obtenerlos cronológicamente). - El código itera a través de los mensajes del asistente.
- Para contenido de
type="text", imprime la descripción de la escena. - Para contenido de
type="image_file",imprime el file_idasociado con la imagen generada. Este ID es la clave para obtener la imagen real.
- Una vez que la ejecución está completa,
Recuperar Contenido de Imagen (función save_image_from_file_id):- Este es el paso crucial añadido. Para cada
file_idobtenido en el paso anterior, se llama a esta función auxiliar. - Utiliza
client.files.retrieve_content(file_id)para obtener los datos binarios de la imagen. - Luego guarda estos datos binarios en un archivo
.pngen un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.
- Este es el paso crucial añadido. Para cada
Extensiones Opcionales
- Agregar números de página o leyendas basadas en el
scene_count. - Modificar las
ASSISTANT_INSTRUCTIONSpara aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela"). - Implementar lógica para cargar un
thread_idanterior para continuar o remezclar historias. - Usar una biblioteca como
ReportLabo generación HTML para crear un PDF formateado o una página web de salida.
Lo Que Has Construido
Al ejecutar este script, habrás implementado un motor completo de narración con IA que:
- Acepta una indicación en lenguaje natural.
- Utiliza GPT-4o para generar escenas secuenciales con descripciones.
- Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
- Recupera tanto las descripciones textuales como los archivos de imagen reales.
- Construye los componentes de una experiencia narrativa visualmente atractiva.
Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.
4. Explicación Paso a Paso (Referenciando el Código Anterior)
- Configuración e Inicialización:
- El script importa las bibliotecas necesarias (
openai,os,time,dotenv,datetime). - Carga el
OPENAI_API_KEYdesde tu archivo.env. - Inicializa el objeto
client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí. - Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
- El script importa las bibliotecas necesarias (
Crear/Recuperar Asistente (función create_or_retrieve_assistant):- Esta función primero verifica si ya existe un asistente con el
ASSISTANT_NAMEespecificado para evitar crear duplicados. - Si no se encuentra, llama a
client.beta.assistants.create(...)utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramientaimage_generation. Esta herramienta utiliza DALL·E 3 internamente.
- Esta función primero verifica si ya existe un asistente con el
Iniciar un Hilo (función generate_visual_story):- Se crea un nuevo hilo de conversación usando
client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
- Se crea un nuevo hilo de conversación usando
Enviar Indicación del Usuario (función generate_visual_story):- La idea de la historia del usuario (
user_prompt) se añade al hilo usandoclient.beta.threads.messages.create(...)conrole="user".
- La idea de la historia del usuario (
Ejecutar el Asistente (función generate_visual_story):- Se instruye al asistente para procesar el hilo usando
client.beta.threads.runs.create(...), pasando elassistant_idythread_id.
- Se instruye al asistente para procesar el hilo usando
Esperar la Finalización (función poll_run_status):- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
client.beta.threads.runs.retrieve(...). - Muestra el estado (
queued,in_progress,completed, etc.) para retroalimentación del usuario. - El bucle continúa hasta que el estado sea
completedu otro estado terminal (failed,cancelled,expired), o hasta que se alcance el tiempo límite.
- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):- Una vez que la ejecución está completa,
client.beta.threads.messages.list(...)recupera todos los mensajes del hilo (usandoorder="asc"para obtenerlos cronológicamente). - El código itera a través de los mensajes del asistente.
- Para contenido de
type="text", imprime la descripción de la escena. - Para contenido de
type="image_file",imprime el file_idasociado con la imagen generada. Este ID es la clave para obtener la imagen real.
- Una vez que la ejecución está completa,
Recuperar Contenido de Imagen (función save_image_from_file_id):- Este es el paso crucial añadido. Para cada
file_idobtenido en el paso anterior, se llama a esta función auxiliar. - Utiliza
client.files.retrieve_content(file_id)para obtener los datos binarios de la imagen. - Luego guarda estos datos binarios en un archivo
.pngen un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.
- Este es el paso crucial añadido. Para cada
Extensiones Opcionales
- Agregar números de página o leyendas basadas en el
scene_count. - Modificar las
ASSISTANT_INSTRUCTIONSpara aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela"). - Implementar lógica para cargar un
thread_idanterior para continuar o remezclar historias. - Usar una biblioteca como
ReportLabo generación HTML para crear un PDF formateado o una página web de salida.
Lo Que Has Construido
Al ejecutar este script, habrás implementado un motor completo de narración con IA que:
- Acepta una indicación en lenguaje natural.
- Utiliza GPT-4o para generar escenas secuenciales con descripciones.
- Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
- Recupera tanto las descripciones textuales como los archivos de imagen reales.
- Construye los componentes de una experiencia narrativa visualmente atractiva.
Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.
4. Explicación Paso a Paso (Referenciando el Código Anterior)
- Configuración e Inicialización:
- El script importa las bibliotecas necesarias (
openai,os,time,dotenv,datetime). - Carga el
OPENAI_API_KEYdesde tu archivo.env. - Inicializa el objeto
client = OpenAI(...), que se utilizará para todas las interacciones con la API. Se incluye el manejo de errores aquí. - Se definen las constantes para la configuración del asistente, el intervalo de sondeo y el tiempo límite.
- El script importa las bibliotecas necesarias (
Crear/Recuperar Asistente (función create_or_retrieve_assistant):- Esta función primero verifica si ya existe un asistente con el
ASSISTANT_NAMEespecificado para evitar crear duplicados. - Si no se encuentra, llama a
client.beta.assistants.create(...)utilizando el nombre definido, instrucciones, modelo (gpt-4o), y crucialmente habilita la herramientaimage_generation. Esta herramienta utiliza DALL·E 3 internamente.
- Esta función primero verifica si ya existe un asistente con el
Iniciar un Hilo (función generate_visual_story):- Se crea un nuevo hilo de conversación usando
client.beta.threads.create(). Los hilos almacenan el historial de mensajes.
- Se crea un nuevo hilo de conversación usando
Enviar Indicación del Usuario (función generate_visual_story):- La idea de la historia del usuario (
user_prompt) se añade al hilo usandoclient.beta.threads.messages.create(...)conrole="user".
- La idea de la historia del usuario (
Ejecutar el Asistente (función generate_visual_story):- Se instruye al asistente para procesar el hilo usando
client.beta.threads.runs.create(...), pasando elassistant_idythread_id.
- Se instruye al asistente para procesar el hilo usando
Esperar la Finalización (función poll_run_status):- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
client.beta.threads.runs.retrieve(...). - Muestra el estado (
queued,in_progress,completed, etc.) para retroalimentación del usuario. - El bucle continúa hasta que el estado sea
completedu otro estado terminal (failed,cancelled,expired), o hasta que se alcance el tiempo límite.
- Crear la historia y las imágenes lleva tiempo. El script entra en un bucle, verificando periódicamente el estado de la ejecución usando
Recuperar Texto de la Historia e IDs de Archivos de Imagen (función generate_visual_story):- Una vez que la ejecución está completa,
client.beta.threads.messages.list(...)recupera todos los mensajes del hilo (usandoorder="asc"para obtenerlos cronológicamente). - El código itera a través de los mensajes del asistente.
- Para contenido de
type="text", imprime la descripción de la escena. - Para contenido de
type="image_file",imprime el file_idasociado con la imagen generada. Este ID es la clave para obtener la imagen real.
- Una vez que la ejecución está completa,
Recuperar Contenido de Imagen (función save_image_from_file_id):- Este es el paso crucial añadido. Para cada
file_idobtenido en el paso anterior, se llama a esta función auxiliar. - Utiliza
client.files.retrieve_content(file_id)para obtener los datos binarios de la imagen. - Luego guarda estos datos binarios en un archivo
.pngen un directorio de salida especificado (story_images), incluyendo una marca de tiempo y el ID del archivo en el nombre del archivo para garantizar su singularidad.
- Este es el paso crucial añadido. Para cada
Extensiones Opcionales
- Agregar números de página o leyendas basadas en el
scene_count. - Modificar las
ASSISTANT_INSTRUCTIONSpara aceptar un parámetro de estilo visual (por ejemplo, "Generar imágenes en estilo acuarela"). - Implementar lógica para cargar un
thread_idanterior para continuar o remezclar historias. - Usar una biblioteca como
ReportLabo generación HTML para crear un PDF formateado o una página web de salida.
Lo Que Has Construido
Al ejecutar este script, habrás implementado un motor completo de narración con IA que:
- Acepta una indicación en lenguaje natural.
- Utiliza GPT-4o para generar escenas secuenciales con descripciones.
- Invoca la herramienta DALL·E 3 para renderizar ilustraciones correspondientes.
- Recupera tanto las descripciones textuales como los archivos de imagen reales.
- Construye los componentes de una experiencia narrativa visualmente atractiva.
Este proyecto combina efectivamente el manejo multimodal (indicación de texto -> generación de texto + imagen), encadenamiento de herramientas dentro de la API de Asistentes, manejo de operaciones asíncronas y recuperación de archivos en una aplicación práctica y divertida.

