import gradio as gr import torch from diffusers import StableDiffusionXLPipeline import time import os # Отключаем autocast для CPU os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" # 1. Настройка модели model_id = "Kolyadual/MicroMacro-GenImage-v1-base" # Определяем устройство device = "cpu" print("🔄 Loading MicroMacro-GenImage-v1-base (SDXL)...") print("⚡ Optimized for CPU. Generation may take 2-5 minutes.") # Загружаем модель с правильными настройками для CPU pipe = StableDiffusionXLPipeline.from_pretrained( model_id, torch_dtype=torch.float32, # Используем float32 для CPU use_safetensors=True, low_cpu_mem_usage=True, safety_checker=None, # Отключаем safety checker для экономии памяти requires_safety_checker=False ) # Перемещаем на CPU pipe.to(device) # Оптимизации для CPU pipe.enable_attention_slicing() # Уменьшает использование памяти pipe.enable_vae_slicing() # Дополнительная экономия памяти для VAE # Отключаем autocast для CPU pipe.to = lambda device: None # Заглушка для предотвращения autocast print("✅ Model loaded successfully!") # Функция генерации def generate(prompt, negative_prompt, steps, guidance, seed): # Устанавливаем seed для воспроизводимости if seed >= 0: generator = torch.Generator(device="cpu").manual_seed(seed) else: generator = None start_time = time.time() try: # Прогресс-сообщение yield None, f"🔄 Генерация... (шаг 0/{steps})" # Создаем callback для отслеживания прогресса def progress_callback(step, timestep, latents): if step % 5 == 0 or step == steps - 1: print(f"Step {step + 1}/{steps}") # Генерация с параметрами SDXL result = pipe( prompt=prompt, negative_prompt=negative_prompt, num_inference_steps=int(steps), guidance_scale=float(guidance), generator=generator, width=1024, height=1024, callback=progress_callback, callback_steps=1 ) image = result.images[0] generation_time = time.time() - start_time yield image, f"✅ Готово! Время генерации: {generation_time:.1f} сек." except Exception as e: yield None, f"❌ Ошибка: {str(e)}" print(f"Error details: {e}") # 2. Интерфейс Gradio with gr.Blocks(theme=gr.themes.Soft(), title="MicroMacro GenImage v1 Base") as demo: gr.HTML("""
SDXL-based модель для генерации изображений в стиле MicroMacro
⚡ Оптимизировано для CPU | ⏱️ Время генерации: 2-5 минут