-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathapp.py
More file actions
113 lines (93 loc) · 4.07 KB
/
Copy pathapp.py
File metadata and controls
113 lines (93 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""
Si solo necesitas generar o editar una única imagen usando un único prompt, esta API es la más sencilla de usar.
Esta a día de hoy soporta gpt-image-1, dall-e-2 y dall-e-3.
"""
import os
from openai import OpenAI
from dotenv import load_dotenv
import base64
import time
from PIL import Image
from rich.console import Console
from rich.panel import Panel
from rich.progress import Progress, SpinnerColumn, TextColumn, TimeElapsedColumn
output_file = "/workspaces/hoy-empiezo-con-ia-generativa/images/generation/images-api/example_output/image_generated_with_images-api.png"
# Crear y configurar console de Rich
console = Console()
# Cargar variables de entorno desde un archivo .env
load_dotenv()
# Crear cliente de OpenAI
client = OpenAI(
base_url=os.getenv("ENDPOINT_URL"),
api_key=os.getenv("API_KEY")
)
# Prompt de ejemplo
prompt = """
Una escena realista, con estilo cinematográfico, que muestra a una inteligencia artificial generando arte.
La IA está representada por un brazo robótico futurista que utiliza Microsoft Paint en una computadora clásica,
en lugar de un lienzo físico. En la pantalla del monitor se ve la interfaz característica de Microsoft Paint,
con herramientas y paletas de colores visibles, mientras la IA dibuja una imagen vibrante: mitad digital, mitad pintada a mano,
simbolizando la fusión entre tecnología y creatividad. Alrededor hay monitores que muestran prompts de generación de imágenes
y referencias coloridas. La iluminación es cálida y suave, con un leve resplandor que emana de la pantalla.
La IA está rodeada de bocetos, fotos de inspiración y moodboards digitales. El entorno es original, inspirador y con un espacio
vacío en uno de los lados de la pantalla para insertar la imagen o el logo del canal de YouTube.
"""
console.print(
Panel.fit(
f"⏳🖼️ [bold cyan]Generando imagen con el endpoint[/bold cyan] [bold magenta]/v1/images/generations[/bold magenta]."
f"[bold yellow]Prompt:[/bold yellow]\n{prompt.strip()}",
title="[bold green]OpenAI Images API[/bold green]"
)
)
# Guardar el tiempo de inicio
start_time = time.time()
# Mostrar un spinner mientras se genera la imagen, mostrando también el tiempo transcurrido
with Progress(
SpinnerColumn(),
TextColumn("[progress.description]{task.description}"),
TimeElapsedColumn(),
transient=True
) as progress:
progress.add_task(description="Generando imagen...", total=None)
# Llamada a la API para generar la imagen
response = client.images.generate(
model=os.getenv("IMAGE_GENERATION_MODEL"),
# model="gpt-image-1", # Puedes usar "dall-e-2" o "dall-e-3" si lo prefieres
prompt=prompt,
size="auto", # También puedes usar "1024x1024", "1024x1792" o "1792x1024"
)
# Guardar el tiempo de finalización
end_time = time.time()
# Decodificar la imagen generada desde base64
image_base64 = response.data[0].b64_json
image_bytes = base64.b64decode(image_base64)
# Guardar la imagen en un archivo
with open(f"{output_file}", "wb") as f:
f.write(image_bytes)
# Obtener la resolución de la imagen guardada y mostrarla con Rich
with Image.open(f"{output_file}") as img:
image_size = img.size
console.print(
Panel.fit(
f"📏 [bold cyan]Resolución de la imagen:[/bold cyan] [yellow]{image_size[0]} x {image_size[1]}[/yellow] píxeles",
border_style="cyan",
title="[bold green]Detalles de la Imagen[/bold green]"
)
)
# Imprimir el tiempo de ejecución
execution_time = end_time - start_time
console.print(
Panel.fit(
f"✅🖼️ [bold green]Imagen generada y guardada como[/bold green] [yellow]{output_file}[/yellow]\n"
f"⏱️ [bold]Tiempo de ejecución:[/bold] [cyan]{execution_time:.2f} segundos[/cyan]",
border_style="green"
)
)
# Mostrar la imagen generada
console.print(
Panel.fit(
f"[bold blue]Puedes encontrarla la imagen generada en el archivo[/bold blue] [yellow]{output_file}[/yellow]",
border_style="blue",
title="[bold green]Imagen Generada[/bold green]"
)
)