void_gryph / modules /image_gen.py
Gryphus314's picture
feat: prototipo funcional multi-módulo con arquitectura optimizada
f6174cf
import streamlit as st
import os
@st.cache_resource
def load_pipeline():
import torch
from diffusers import StableDiffusionPipeline
# Usamos float32 para CPU
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float32, use_safetensors=True)
# Optimizaciones para CPU
pipe.enable_attention_slicing()
return pipe
def render():
st.header("Generador de Imágenes")
st.markdown("Generación de imágenes usando Stable Diffusion v1.5 optimizado para CPU.")
prompt = st.text_input("Prompt positivo", "A futuristic city with flying cars, cyberpunk style, high detail")
negative_prompt = st.text_input("Prompt negativo", "low quality, blurry, bad anatomy")
col1, col2 = st.columns(2)
with col1:
num_steps = st.slider("Pasos de inferencia", 1, 50, 20)
with col2:
guidance_scale = st.slider("Escala de guía (CFG)", 1.0, 20.0, 7.5)
if st.button("Generar Imagen"):
with st.spinner("Cargando modelo y generando... (esto puede tardar varios minutos en CPU)"):
try:
pipe = load_pipeline()
# En CPU no usamos autocast o movemos a cuda
image = pipe(
prompt,
negative_prompt=negative_prompt,
num_inference_steps=num_steps,
guidance_scale=guidance_scale
).images[0]
st.image(image, caption=f"Resultado: {prompt}", use_column_width=True)
# Opción de descarga
import io
buf = io.BytesIO()
image.save(buf, format="PNG")
byte_im = buf.getvalue()
st.download_button(
label="Descargar Imagen",
data=byte_im,
file_name="generated_image.png",
mime="image/png"
)
except Exception as e:
st.error(f"Error al generar la imagen: {e}")
st.info("Asegurate de tener suficiente RAM (mínimo 8GB-12GB libres para SD v1.5 en CPU).")