Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from PIL import Image | |
| from io import BytesIO | |
| import requests | |
| import sys | |
| # Verificar e instalar dependencias faltantes | |
| try: | |
| from diffusers import StableDiffusionPipeline | |
| import torch | |
| except ImportError as e: | |
| print(f"Error: {e}") | |
| print("Por favor, instala las dependencias necesarias:") | |
| print("pip install torch diffusers transformers accelerate") | |
| sys.exit(1) | |
| def load_models(): | |
| """Carga los modelos con manejo de errores""" | |
| try: | |
| # Carga el modelo Stable Diffusion | |
| pipe_sd = StableDiffusionPipeline.from_pretrained( | |
| "runwayml/stable-diffusion-v1-5", | |
| torch_dtype=torch.float32 | |
| ) | |
| pipe_sd = pipe_sd.to("cpu") | |
| # URLs de ejemplo para los otros modelos | |
| url_dalle_mini = "https://picsum.photos/432/768" # Imagen placeholder | |
| url_free_img_gen = "https://picsum.photos/432/768" # Imagen placeholder | |
| return pipe_sd, url_dalle_mini, url_free_img_gen | |
| except Exception as e: | |
| print(f"Error cargando modelos: {e}") | |
| return None, None, None | |
| # Cargar modelos | |
| pipe_sd, url_dalle_mini, url_free_img_gen = load_models() | |
| def generate_image_stable_diffusion(prompt): | |
| """Genera imagen con Stable Diffusion""" | |
| if pipe_sd is None: | |
| # Crear imagen placeholder si el modelo no está disponible | |
| return Image.new('RGB', (432, 768), color='red') | |
| try: | |
| image = pipe_sd( | |
| prompt, | |
| height=768, | |
| width=432, | |
| num_inference_steps=20 | |
| ).images[0] | |
| return image | |
| except Exception as e: | |
| print(f"Error generando con Stable Diffusion: {e}") | |
| return Image.new('RGB', (432, 768), color='red') | |
| def generate_image_dalle_mini(prompt): | |
| """Genera/simula imagen con DALL·E mini""" | |
| try: | |
| response = requests.get(url_dalle_mini, timeout=30) | |
| response.raise_for_status() | |
| image = Image.open(BytesIO(response.content)) | |
| return image.resize((432, 768)) | |
| except Exception as e: | |
| print(f"Error con DALL·E mini: {e}") | |
| return Image.new('RGB', (432, 768), color='blue') | |
| def generate_image_free_img_gen(prompt): | |
| """Genera/simula imagen con Free Image Generation""" | |
| try: | |
| response = requests.get(url_free_img_gen, timeout=30) | |
| response.raise_for_status() | |
| image = Image.open(BytesIO(response.content)) | |
| return image.resize((432, 768)) | |
| except Exception as e: | |
| print(f"Error con Free Image Generation: {e}") | |
| return Image.new('RGB', (432, 768), color='green') | |
| def generate_all_images(prompt): | |
| """Genera imágenes con todos los modelos""" | |
| if not prompt.strip(): | |
| # Si el prompt está vacío, retornar imágenes placeholder | |
| placeholder = Image.new('RGB', (432, 768), color='gray') | |
| return placeholder, placeholder, placeholder | |
| img_sd = generate_image_stable_diffusion(prompt) | |
| img_dalle = generate_image_dalle_mini(prompt) | |
| img_free = generate_image_free_img_gen(prompt) | |
| return img_sd, img_dalle, img_free | |
| # Crear la interfaz | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🎨 BATUTO-art | |
| ### Generador de imágenes con múltiples modelos | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| prompt = gr.Textbox( | |
| label="Describe la imagen que quieres generar", | |
| placeholder="Ej: un paisaje montañoso al atardecer...", | |
| lines=2 | |
| ) | |
| btn = gr.Button("✨ Generar imágenes", variant="primary") | |
| with gr.Row(): | |
| img_sd = gr.Image( | |
| label="Stable Diffusion", | |
| height=400, | |
| show_download_button=True | |
| ) | |
| img_dalle = gr.Image( | |
| label="DALL·E mini", | |
| height=400, | |
| show_download_button=True | |
| ) | |
| img_free = gr.Image( | |
| label="Free Image Generation", | |
| height=400, | |
| show_download_button=True | |
| ) | |
| # Ejemplos | |
| gr.Examples( | |
| examples=[ | |
| ["un gato astronauta en el espacio, estilo digital art"], | |
| ["un castillo medieval en una nube, estilo anime"], | |
| ["un paisaje futurista con rascacielos brillantes"] | |
| ], | |
| inputs=prompt | |
| ) | |
| btn.click( | |
| fn=generate_all_images, | |
| inputs=prompt, | |
| outputs=[img_sd, img_dalle, img_free] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False | |
| ) | |