🎨 InstructPix2Pix Image Editor
Edit images with natural language instructions | CPU Optimized
import gradio as gr import torch from diffusers import StableDiffusionInstructPix2PixPipeline, EulerAncestralDiscreteScheduler from PIL import Image import numpy as np MODEL_ID = "timbrooks/instruct-pix2pix" device = "cpu" dtype = torch.float32 pipe = None def load_model(): global pipe if pipe is None: print("Loading InstructPix2Pix model...") try: pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained( MODEL_ID, torch_dtype=dtype, safety_checker=None ) pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) pipe = pipe.to(device) # Optimasi untuk CPU pipe.enable_attention_slicing() print("✅ Model loaded successfully!") except Exception as e: print(f"❌ Error loading model: {e}") return None return pipe def generate_image( input_image, prompt, image_guidance_scale, guidance_scale, num_inference_steps, seed ): if input_image is None: return None, "❌ Please upload an image first!" if not prompt or prompt.strip() == "": return None, "❌ Please enter editing instructions!" pipeline = load_model() if pipeline is None: return None, "❌ Failed to load model." try: generator = torch.Generator(device=device) if seed != -1: generator = generator.manual_seed(seed) if isinstance(input_image, np.ndarray): input_image = Image.fromarray(input_image) input_image = input_image.resize((512, 512), Image.Resampling.LANCZOS) print(f"🎨 Editing with: {prompt}") result = pipeline( prompt=prompt, image=input_image, num_inference_steps=num_inference_steps, image_guidance_scale=image_guidance_scale, guidance_scale=guidance_scale, generator=generator ) output_image = result.images[0] success_msg = f"✅ Edit complete!\n📝 Instruction: {prompt}" return output_image, success_msg except Exception as e: error_msg = f"❌ Error: {str(e)}" print(error_msg) return None, error_msg custom_css = """ .main-header { text-align: left; text-size: 20px; color: white; margin-top: 1rem; margin-bottom: 2rem; } """ with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo: gr.Markdown("""
Edit images with natural language instructions | CPU Optimized